@firestitch/report 18.9.0 → 18.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/anchor-at-point.d.ts +14 -0
- package/app/reports/canvas-landing-page.d.ts +2 -0
- package/app/reports/components/component-chart/component-chart.component.d.ts +18 -2
- package/app/reports/components/component-kpi/component-kpi.component.d.ts +4 -1
- package/app/reports/components/report-canvas/report-canvas.component.d.ts +3 -0
- package/app/reports/components/report-component/report-component.component.d.ts +35 -1
- package/app/reports/components/report-view-picker/report-view-picker.component.d.ts +21 -0
- package/app/reports/data/report.data.d.ts +17 -2
- package/app/reports/dialogs/component-settings/component-settings.component.d.ts +18 -3
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +15 -6
- package/app/reports/dialogs/report-view/report-view-dialog.component.d.ts +13 -0
- package/app/reports/drill-crumbs.d.ts +12 -0
- package/app/reports/export/report-export-collector.service.d.ts +13 -4
- package/app/reports/export/report-filter-lines.d.ts +18 -0
- package/app/reports/filter-settings-rules.d.ts +33 -0
- package/app/reports/format.d.ts +0 -1
- package/app/reports/interfaces/canvas-landing-input.interface.d.ts +8 -0
- package/app/reports/interfaces/component-data-applied.interface.d.ts +13 -0
- package/app/reports/interfaces/component-data-drill.interface.d.ts +22 -0
- package/app/reports/interfaces/filter-bar-placement.type.d.ts +1 -0
- package/app/reports/interfaces/filter-component-toggle-state.interface.d.ts +4 -0
- package/app/reports/interfaces/filter-settings-option.interface.d.ts +4 -0
- package/app/reports/interfaces/filter-type-select-state.interface.d.ts +5 -0
- package/app/reports/interfaces/report-chart-hit.interface.d.ts +5 -0
- package/app/reports/interfaces/report-chat-viewer-cross-filter-field.interface.d.ts +4 -0
- package/app/reports/interfaces/report-chat-viewer-cross-filter.interface.d.ts +7 -0
- package/app/reports/interfaces/report-chat-viewer-detail.interface.d.ts +4 -0
- package/app/reports/interfaces/report-chat-viewer-drill-step.interface.d.ts +5 -0
- package/app/reports/interfaces/report-chat-viewer-drill.interface.d.ts +5 -0
- package/app/reports/interfaces/report-chat-viewer-filter.interface.d.ts +3 -0
- package/app/reports/interfaces/report-chat-viewer-selection.interface.d.ts +5 -0
- package/app/reports/interfaces/report-chat-viewer-state.interface.d.ts +12 -0
- package/app/reports/interfaces/report-drill-crumb.interface.d.ts +6 -0
- package/app/reports/interfaces/report-drill-refusal.type.d.ts +1 -0
- package/app/reports/interfaces/report-drill-step.interface.d.ts +5 -0
- package/app/reports/interfaces/report-export-line-kind.type.d.ts +1 -0
- package/app/reports/interfaces/report-export-line.interface.d.ts +8 -0
- package/app/reports/interfaces/report-export-lines-input.interface.d.ts +9 -0
- package/app/reports/interfaces/report-export-snapshot.interface.d.ts +15 -0
- package/app/reports/interfaces/report-filter-line-context.interface.d.ts +8 -0
- package/app/reports/interfaces/report-filter-line-form.type.d.ts +1 -0
- package/app/reports/interfaces/report-filter-match.type.d.ts +1 -0
- package/app/reports/interfaces/report-filter-option-pair.interface.d.ts +4 -0
- package/app/reports/interfaces/report-filter-options-ask.interface.d.ts +6 -0
- package/app/reports/interfaces/report-filter-options-list.interface.d.ts +7 -0
- package/app/reports/interfaces/report-filter-options-request.interface.d.ts +6 -0
- package/app/reports/interfaces/report-filter-options-stream.interface.d.ts +11 -0
- package/app/reports/interfaces/report-filter-options.interface.d.ts +7 -0
- package/app/reports/interfaces/report-filter-skip.type.d.ts +1 -0
- package/app/reports/interfaces/report-mark-action.type.d.ts +1 -0
- package/app/reports/interfaces/report-mark-click.interface.d.ts +13 -0
- package/app/reports/interfaces/report-mark-context.interface.d.ts +6 -0
- package/app/reports/interfaces/report-mark-decision.interface.d.ts +6 -0
- package/app/reports/interfaces/report-mark-event.interface.d.ts +11 -0
- package/app/reports/interfaces/report-mark-point.interface.d.ts +8 -0
- package/app/reports/interfaces/report-temporary-state.interface.d.ts +4 -0
- package/app/reports/interfaces/report-tile-state.interface.d.ts +8 -0
- package/app/reports/interfaces/report-url-link.interface.d.ts +4 -0
- package/app/reports/interfaces/report-url-value-name.type.d.ts +1 -0
- package/app/reports/interfaces/report-url-write.interface.d.ts +4 -0
- package/app/reports/interfaces/report-view-config.interface.d.ts +11 -0
- package/app/reports/interfaces/report-view-create.interface.d.ts +7 -0
- package/app/reports/interfaces/report-view-deleted.interface.d.ts +4 -0
- package/app/reports/interfaces/report-view-dialog-data.interface.d.ts +7 -0
- package/app/reports/interfaces/report-view-dropped.interface.d.ts +5 -0
- package/app/reports/interfaces/report-view-menu-item.interface.d.ts +10 -0
- package/app/reports/interfaces/report-view-summary.interface.d.ts +11 -0
- package/app/reports/interfaces/report-view.interface.d.ts +7 -0
- package/app/reports/interfaces/report-viewer-feature.type.d.ts +1 -0
- package/app/reports/interfaces/report-views.interface.d.ts +7 -0
- package/app/reports/interfaces/report.interface.d.ts +27 -3
- package/app/reports/interfaces/tile-load-result.interface.d.ts +4 -0
- package/app/reports/mark-click.d.ts +20 -0
- package/app/reports/option-builder.d.ts +12 -1
- package/app/reports/report-chat-viewer-state.d.ts +8 -0
- package/app/reports/report-date-presets.d.ts +2 -0
- package/app/reports/report-filter-items.d.ts +27 -22
- package/app/reports/report-tile.d.ts +2 -0
- package/app/reports/report-url-state.d.ts +27 -10
- package/app/reports/report-view-config.d.ts +36 -0
- package/app/reports/report-view-menu.d.ts +15 -0
- package/app/reports/report-viewer-features.d.ts +5 -0
- package/app/reports/services/report-filter-options.service.d.ts +26 -0
- package/app/reports/services/report-filter-state.service.d.ts +64 -1
- package/app/reports/services/report-view.service.d.ts +51 -0
- package/app/reports/tile-data-state.d.ts +7 -0
- package/app/reports/tile-loads.d.ts +4 -0
- package/app/reports/views/report/fs-ai-report.component.d.ts +9 -1
- package/app/reports/views/report/report.component.d.ts +6 -0
- package/esm2022/app/reports/anchor-at-point.mjs +49 -0
- package/esm2022/app/reports/canvas-landing-page.mjs +25 -0
- package/esm2022/app/reports/components/component-chart/component-chart.component.mjs +97 -5
- package/esm2022/app/reports/components/component-kpi/component-kpi.component.mjs +11 -4
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +7 -1
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +47 -32
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +257 -61
- package/esm2022/app/reports/components/report-view-picker/report-view-picker.component.mjs +115 -0
- package/esm2022/app/reports/data/report.data.mjs +87 -10
- package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +106 -51
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +86 -90
- package/esm2022/app/reports/dialogs/report-view/report-view-dialog.component.mjs +52 -0
- package/esm2022/app/reports/drill-crumbs.mjs +73 -0
- package/esm2022/app/reports/export/report-export-collector.service.mjs +187 -117
- package/esm2022/app/reports/export/report-filter-lines.mjs +235 -0
- package/esm2022/app/reports/export/report-pdf.service.mjs +12 -7
- package/esm2022/app/reports/export/report-pptx.service.mjs +18 -14
- package/esm2022/app/reports/filter-settings-rules.mjs +283 -0
- package/esm2022/app/reports/format.mjs +2 -22
- package/esm2022/app/reports/interfaces/canvas-landing-input.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/component-data-applied.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/component-data-drill.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/filter-bar-placement.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/filter-component-toggle-state.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/filter-settings-option.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/filter-type-select-state.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chart-hit.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-cross-filter-field.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-cross-filter.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-detail.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-drill-step.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-drill.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-filter.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-chat-viewer-selection.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-drill-crumb.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-drill-refusal.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-drill-step.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-export-line-kind.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-export-line.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-export-lines-input.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-export-snapshot.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-line-context.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-line-form.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-match.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-option-pair.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-options-ask.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-options-list.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-options-request.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-options-stream.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-options.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-skip.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-action.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-click.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-context.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-decision.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-event.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-point.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-tile-state.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-url-link.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-url-value-name.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-url-write.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-config.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-create.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-deleted.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-dialog-data.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-dropped.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-menu-item.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-summary.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-viewer-feature.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-views.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/tile-load-result.interface.mjs +2 -0
- package/esm2022/app/reports/mark-click.mjs +193 -0
- package/esm2022/app/reports/option-builder.mjs +159 -15
- package/esm2022/app/reports/report-chat-viewer-state.mjs +34 -0
- package/esm2022/app/reports/report-date-presets.mjs +18 -0
- package/esm2022/app/reports/report-filter-items.mjs +343 -72
- package/esm2022/app/reports/report-tile.mjs +12 -0
- package/esm2022/app/reports/report-url-state.mjs +596 -108
- package/esm2022/app/reports/report-view-config.mjs +697 -0
- package/esm2022/app/reports/report-view-menu.mjs +119 -0
- package/esm2022/app/reports/report-viewer-features.mjs +42 -0
- package/esm2022/app/reports/services/report-filter-options.service.mjs +238 -0
- package/esm2022/app/reports/services/report-filter-state.service.mjs +697 -62
- package/esm2022/app/reports/services/report-view.service.mjs +358 -0
- package/esm2022/app/reports/tile-data-state.mjs +127 -0
- package/esm2022/app/reports/tile-loads.mjs +38 -0
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +177 -46
- package/esm2022/app/reports/views/report/report.component.mjs +103 -23
- package/esm2022/public_api.mjs +23 -1
- package/fesm2022/{firestitch-report-echarts-DBMOHmBF.mjs → firestitch-report-echarts-UBg8Wlhd.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-DBMOHmBF.mjs.map → firestitch-report-echarts-UBg8Wlhd.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-CqbXT1gh.mjs → firestitch-report-firestitch-report-B1keNrcK.mjs} +9063 -4272
- package/fesm2022/firestitch-report-firestitch-report-B1keNrcK.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +22 -0
- package/fesm2022/firestitch-report-firestitch-report-CqbXT1gh.mjs.map +0 -1
|
@@ -1,19 +1,36 @@
|
|
|
1
1
|
import { ParamMap, Params } from '@angular/router';
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { ReportDrillStep } from './interfaces/report-drill-step.interface';
|
|
3
|
+
import { ReportUrlLink } from './interfaces/report-url-link.interface';
|
|
4
|
+
import { ReportUrlValueName } from './interfaces/report-url-value-name.type';
|
|
5
|
+
import { ReportUrlWrite } from './interfaces/report-url-write.interface';
|
|
6
|
+
import { ReportViewConfig } from './interfaces/report-view-config.interface';
|
|
7
|
+
import { FilterGroupDefault, ReportFilterGroup, ReportFilterType, ReportSort, ReportUrlParams, ReportUrlSnapshot } from './interfaces/report.interface';
|
|
8
|
+
export { FORMAT_PARAM, PERSONAL_VIEW_PARAM, VIEW_PARAM } from './report-filter-items';
|
|
4
9
|
export declare const LIST_SORT_PARAM_PREFIX = "s";
|
|
5
|
-
export declare const DATE_RANGE_SEPARATOR = "..";
|
|
6
10
|
export declare const LIST_SEARCH_PARAM_PREFIX = "q";
|
|
7
11
|
export declare const LIST_HIDDEN_PARAM_PREFIX = "h";
|
|
12
|
+
export declare const DRILL_PARAM_PREFIX = "d";
|
|
13
|
+
export declare const MATCH_PARAM = "match";
|
|
14
|
+
export declare const URL_FORMAT = 2;
|
|
15
|
+
export declare const DRILL_STEP_SEPARATOR = ":";
|
|
16
|
+
export declare const PICK_SEPARATOR = ",";
|
|
17
|
+
export declare const PICK_NAME_SEPARATOR = ":";
|
|
18
|
+
export declare const REPORT_URL_MAX_LENGTH = 2000;
|
|
19
|
+
export declare const URL_TOO_LONG_MESSAGE = "This filter is too long for a link; save a view to share it.";
|
|
8
20
|
export declare const OWNED_PARAM: RegExp;
|
|
9
|
-
|
|
21
|
+
type UrlGroup = Pick<ReportFilterGroup, 'id' | 'type' | 'label' | 'filters'>;
|
|
22
|
+
export declare function readReportUrlParams(params: ParamMap, groups: readonly UrlGroup[]): ReportUrlParams;
|
|
23
|
+
export declare function paramsToViewConfig(params: Params, groups: readonly UrlGroup[]): ReportViewConfig;
|
|
24
|
+
export declare function viewConfigToParams(config: ReportViewConfig, groups: readonly UrlGroup[], link?: ReportUrlLink, name?: ReportUrlValueName): ReportUrlWrite;
|
|
25
|
+
export declare function readReportUrlLink(params: Params): ReportUrlLink;
|
|
26
|
+
export declare function hasReportUrlState(params: Params, groups: readonly UrlGroup[]): boolean;
|
|
27
|
+
export declare function reportParamsToClear(current: ParamMap, groups: readonly UrlGroup[]): Params;
|
|
28
|
+
export declare function urlValueNames(current: ParamMap, groups: readonly UrlGroup[]): ReportUrlValueName;
|
|
10
29
|
export declare function encodeColumnList(names: readonly string[]): string;
|
|
11
30
|
export declare function decodeColumnList(raw: string): string[];
|
|
12
|
-
export declare function
|
|
13
|
-
start: Date;
|
|
14
|
-
end: Date;
|
|
15
|
-
} | null): FilterGroupValue | null | undefined;
|
|
16
|
-
export declare function encodeFilterValue(value: FilterGroupValue | null): string;
|
|
31
|
+
export declare function groupValueParams(type: ReportFilterType | undefined, key: string, value: FilterGroupDefault | null, name?: (value: unknown) => string | null): Record<string, string>;
|
|
17
32
|
export declare function encodeSort(sort: ReportSort): string;
|
|
18
33
|
export declare function decodeSort(raw: string): ReportSort | null;
|
|
19
|
-
export declare function
|
|
34
|
+
export declare function encodeDrillPath(path: readonly ReportDrillStep[]): string;
|
|
35
|
+
export declare function decodeDrillPath(raw: string): ReportDrillStep[];
|
|
36
|
+
export declare function buildReportUrlParams(snapshot: ReportUrlSnapshot, current: ParamMap, groups: readonly UrlGroup[], name?: ReportUrlValueName): Params;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ReportChatViewerState } from './interfaces/report-chat-viewer-state.interface';
|
|
2
|
+
import { ReportDrillStep } from './interfaces/report-drill-step.interface';
|
|
3
|
+
import { ReportViewConfig } from './interfaces/report-view-config.interface';
|
|
4
|
+
import { ReportViewSummary } from './interfaces/report-view-summary.interface';
|
|
5
|
+
import { ReportView } from './interfaces/report-view.interface';
|
|
6
|
+
import { ChartGranularity, FilterGroupDefault, FilterGroupValue, ReportFilterType, ReportRelativeRange, ReportSort } from './interfaces/report.interface';
|
|
7
|
+
export declare const REPORT_VIEW_CONFIG_VERSION = 1;
|
|
8
|
+
export declare const VIEW_CONFIG_MAX_BYTES: number;
|
|
9
|
+
export declare const VIEW_CONFIG_MAX_GROUPS = 100;
|
|
10
|
+
export declare const VIEW_CONFIG_MAX_TILES = 200;
|
|
11
|
+
export declare const GROUP_VALUE_MAX_PICKS = 500;
|
|
12
|
+
export declare const DRILL_MAX_DEPTH = 5;
|
|
13
|
+
export declare const RELATIVE_RANGE_NAMES: ReportRelativeRange[];
|
|
14
|
+
export declare function isRelativeRange(name: unknown): name is ReportRelativeRange;
|
|
15
|
+
export declare function isChartGranularity(value: unknown): value is ChartGranularity;
|
|
16
|
+
export declare function isCalendarDay(text: string): boolean;
|
|
17
|
+
export declare function numberFromText(text: string): number | null;
|
|
18
|
+
export declare function groupValueFromArray(value: Record<string, unknown>, type: ReportFilterType): FilterGroupDefault;
|
|
19
|
+
export declare function groupValueFromStored(value: unknown, type: ReportFilterType): FilterGroupDefault | null;
|
|
20
|
+
export declare function viewConfigFromArray(input: unknown): ReportViewConfig;
|
|
21
|
+
export declare function toStoredGroupValue(type: ReportFilterType, value: FilterGroupValue | null | undefined): FilterGroupDefault | null;
|
|
22
|
+
export declare function toLiveGroupValue(type: ReportFilterType, stored: FilterGroupDefault | null | undefined, resolveRelative: (name: string) => {
|
|
23
|
+
start: Date;
|
|
24
|
+
end: Date;
|
|
25
|
+
} | null): FilterGroupValue | null;
|
|
26
|
+
export declare function viewDiffers(base: ReportViewConfig, current: ReportViewConfig, authored?: ReportViewConfig | null): boolean;
|
|
27
|
+
export declare function sameStoredGroupValue(a: FilterGroupDefault | null | undefined, b: FilterGroupDefault | null | undefined): boolean;
|
|
28
|
+
export declare function cleanDrillPath(path: readonly unknown[] | null | undefined): ReportDrillStep[];
|
|
29
|
+
export declare function sameDrillPath(a: readonly ReportDrillStep[] | null | undefined, b: readonly ReportDrillStep[] | null | undefined): boolean;
|
|
30
|
+
export declare function viewConfigDiff(base: ReportViewConfig, current: ReportViewConfig, authored: ReportViewConfig | null, authoredSort: (componentId: number) => ReportSort | null): ReportViewConfig | null;
|
|
31
|
+
export declare function withStoredKeys(stored: ReportViewConfig | null | undefined, screen: ReportViewConfig): ReportViewConfig;
|
|
32
|
+
export declare function viewDroppedCount(view: Pick<ReportView, 'config' | 'dropped'>, applied: ReportViewConfig): number;
|
|
33
|
+
export declare function viewDroppedMessage(count: number, canChange?: boolean): string | null;
|
|
34
|
+
export declare const VIEW_NOT_AVAILABLE_MESSAGE = "The view in this link is not available.";
|
|
35
|
+
export declare function chatViewFields(openView: Pick<ReportViewSummary, 'id'> | null, viewChanged: boolean): Pick<ReportChatViewerState, 'viewId' | 'viewChanged'>;
|
|
36
|
+
export declare function finiteNumber(value: unknown): number | undefined;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ReportViewMenuItem } from './interfaces/report-view-menu-item.interface';
|
|
2
|
+
import { ReportViewSummary } from './interfaces/report-view-summary.interface';
|
|
3
|
+
export declare const VIEWS_LABEL = "Views";
|
|
4
|
+
export declare const EDITED_TOOLTIP = "The screen differs from this view";
|
|
5
|
+
export declare const SAVE_AS_TITLE = "Save as new view";
|
|
6
|
+
export declare const RENAME_TITLE = "Rename view";
|
|
7
|
+
export declare const CROSS_FILTER_NOTE = "Cross-filters are temporary and are not saved.";
|
|
8
|
+
export declare const VIEW_NAME_BLANK = "Enter a name";
|
|
9
|
+
export declare const VIEW_NAME_MAX_LENGTH = 100;
|
|
10
|
+
export declare function viewMenuItems(open: ReportViewSummary | null, views: readonly ReportViewSummary[], edited: boolean, canShare: boolean): ReportViewMenuItem[];
|
|
11
|
+
export declare function pickerLabel(open: Pick<ReportViewSummary, 'name'> | null, edited: boolean): string;
|
|
12
|
+
export declare function pickerTooltip(open: Pick<ReportViewSummary, 'name'> | null, edited: boolean): string | null;
|
|
13
|
+
export declare function deletePromptText(view: Pick<ReportViewSummary, 'name' | 'shared'>): string;
|
|
14
|
+
export declare function saveDialogNote(hasCrossFilter: boolean): string | null;
|
|
15
|
+
export declare function viewNameError(name: string | null | undefined): string | null;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ReportViewerFeature } from './interfaces/report-viewer-feature.type';
|
|
2
|
+
import { ReportFilterGroup } from './interfaces/report.interface';
|
|
3
|
+
export declare const VIEWER_FEATURES: readonly ReportViewerFeature[];
|
|
4
|
+
export declare function offeredViewerFeatures(served: readonly ReportViewerFeature[] | null | undefined): ReportViewerFeature[];
|
|
5
|
+
export declare function offersExclude(group: Pick<ReportFilterGroup, 'type' | 'multiColumn'>, features: readonly ReportViewerFeature[] | null | undefined): boolean;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { ReportFilterOptionPair } from '../interfaces/report-filter-option-pair.interface';
|
|
3
|
+
import { Report, ReportFilterGroup } from '../interfaces/report.interface';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class ReportFilterOptionsService {
|
|
6
|
+
private _reportData;
|
|
7
|
+
private _filterState;
|
|
8
|
+
private _destroyRef;
|
|
9
|
+
private _streams;
|
|
10
|
+
private _labels;
|
|
11
|
+
private _asked;
|
|
12
|
+
private _loaded;
|
|
13
|
+
options(group: ReportFilterGroup, report: Report | null): Observable<ReportFilterOptionPair[]>;
|
|
14
|
+
label(groupId: number, value: unknown): string | null;
|
|
15
|
+
truncated(groupId: number): boolean;
|
|
16
|
+
failed(groupId: number): boolean;
|
|
17
|
+
private _ask;
|
|
18
|
+
private _request;
|
|
19
|
+
private _fetch;
|
|
20
|
+
private _stream;
|
|
21
|
+
private _syncLoad;
|
|
22
|
+
private _remember;
|
|
23
|
+
private _askedFor;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ReportFilterOptionsService, never>;
|
|
25
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ReportFilterOptionsService>;
|
|
26
|
+
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
2
|
import { ReportChatViewerFilter } from '../interfaces/report-chat-viewer-filter.interface';
|
|
3
|
-
import {
|
|
3
|
+
import { ReportDrillStep } from '../interfaces/report-drill-step.interface';
|
|
4
|
+
import { ReportFilterMatch } from '../interfaces/report-filter-match.type';
|
|
5
|
+
import { ReportViewConfig } from '../interfaces/report-view-config.interface';
|
|
6
|
+
import { ChartGranularity, FilterGroupDefault, FilterGroupValue, Report, ReportComponent, ReportFilterGroup, ReportFormatContext, ReportRelativeRange, ReportSort, ReportUrlParams, ReportUrlSnapshot, ResolvedFilterValue } from '../interfaces/report.interface';
|
|
7
|
+
import { ComponentDataState } from '../interfaces/report.interface';
|
|
4
8
|
import * as i0 from "@angular/core";
|
|
5
9
|
export declare function sameDefault(a: FilterGroupDefault | null, b: FilterGroupDefault | null): boolean;
|
|
6
10
|
export declare function sameFilterValue(a: FilterGroupValue | null | undefined, b: FilterGroupValue | null | undefined): boolean;
|
|
@@ -17,6 +21,15 @@ export declare class ReportFilterStateService {
|
|
|
17
21
|
readonly timezone: import("@angular/core").WritableSignal<string>;
|
|
18
22
|
readonly formatContext: import("@angular/core").WritableSignal<ReportFormatContext>;
|
|
19
23
|
readonly listHidden: import("@angular/core").WritableSignal<ReadonlyMap<number, readonly string[]>>;
|
|
24
|
+
readonly stateVersion: import("@angular/core").Signal<number>;
|
|
25
|
+
readonly appliedVersion: import("@angular/core").Signal<number>;
|
|
26
|
+
readonly listSortResets: import("@angular/core").Signal<ReadonlyMap<number, number>>;
|
|
27
|
+
readonly page: import("@angular/core").Signal<number>;
|
|
28
|
+
readonly match: import("@angular/core").Signal<ReportFilterMatch>;
|
|
29
|
+
readonly viewerFeatures: import("@angular/core").Signal<import("@firestitch/report").ReportViewerFeature[]>;
|
|
30
|
+
readonly report: import("@angular/core").Signal<Report>;
|
|
31
|
+
readonly base: import("@angular/core").Signal<ReportViewConfig>;
|
|
32
|
+
readonly viewChanged: import("@angular/core").Signal<boolean>;
|
|
20
33
|
private _values;
|
|
21
34
|
private _groups;
|
|
22
35
|
private _sessionDisabled;
|
|
@@ -30,6 +43,17 @@ export declare class ReportFilterStateService {
|
|
|
30
43
|
private _listSearchChanged$;
|
|
31
44
|
private _changed$;
|
|
32
45
|
private _urlChanged$;
|
|
46
|
+
private _revision;
|
|
47
|
+
private _stateVersion;
|
|
48
|
+
private _appliedVersion;
|
|
49
|
+
private _listSortResets;
|
|
50
|
+
private _report;
|
|
51
|
+
private _pageId;
|
|
52
|
+
private _match;
|
|
53
|
+
private _drills;
|
|
54
|
+
private _drillChanged$;
|
|
55
|
+
private _baseConfig;
|
|
56
|
+
private _temporary;
|
|
33
57
|
init(report: Report, restore?: ReportUrlParams | null): void;
|
|
34
58
|
value(groupId: number): FilterGroupValue | undefined;
|
|
35
59
|
setValue(groupId: number, value: FilterGroupValue | null): void;
|
|
@@ -57,6 +81,23 @@ export declare class ReportFilterStateService {
|
|
|
57
81
|
resolveForComponent(component: ReportComponent): ResolvedFilterValue[];
|
|
58
82
|
viewerFilters(): ReportChatViewerFilter[];
|
|
59
83
|
resolveForReport(report: Report, pageId?: number | null): ResolvedFilterValue[];
|
|
84
|
+
setPage(pageId: number | null): void;
|
|
85
|
+
setMatch(match: ReportFilterMatch): void;
|
|
86
|
+
drill(componentId: number): readonly ReportDrillStep[];
|
|
87
|
+
setDrill(componentId: number, path: readonly ReportDrillStep[]): void;
|
|
88
|
+
drillChanges(componentId: number): Observable<void>;
|
|
89
|
+
adoptDrill(componentId: number, path: readonly ReportDrillStep[]): boolean;
|
|
90
|
+
snapshot(): ReportViewConfig;
|
|
91
|
+
authoredConfig(): ReportViewConfig;
|
|
92
|
+
apply(config: ReportViewConfig | null, urlDiff?: ReportViewConfig | null, base?: ReportViewConfig | null): void;
|
|
93
|
+
resetToBase(): void;
|
|
94
|
+
setBaseToScreen(): void;
|
|
95
|
+
clearBase(): void;
|
|
96
|
+
resetGroupsToBase(groupIds: readonly number[]): void;
|
|
97
|
+
groupsDifferFromBase(groupIds: readonly number[]): boolean;
|
|
98
|
+
rewriteUrl(): void;
|
|
99
|
+
tileState(component: ReportComponent): ComponentDataState;
|
|
100
|
+
livePreset(groupId: number): ReportRelativeRange | null;
|
|
60
101
|
private _resolvedFields;
|
|
61
102
|
private _livePreset;
|
|
62
103
|
private _seed;
|
|
@@ -73,6 +114,28 @@ export declare class ReportFilterStateService {
|
|
|
73
114
|
private _sortableColumns;
|
|
74
115
|
private _defaultValue;
|
|
75
116
|
private _relativeRange;
|
|
117
|
+
private _snapshotGroups;
|
|
118
|
+
private _snapshotTiles;
|
|
119
|
+
private _setBase;
|
|
120
|
+
private _applyLayer;
|
|
121
|
+
private _applyGroups;
|
|
122
|
+
private _applyGroup;
|
|
123
|
+
private _rollingValue;
|
|
124
|
+
private _seedAuthored;
|
|
125
|
+
private _clearTiles;
|
|
126
|
+
private _applyTile;
|
|
127
|
+
private _applyListTile;
|
|
128
|
+
private _setDrillPath;
|
|
129
|
+
private _applyPage;
|
|
130
|
+
private _notifyApplied;
|
|
131
|
+
private _tiles;
|
|
132
|
+
private _isChart;
|
|
133
|
+
private _pruneViewState;
|
|
134
|
+
private _pruneBase;
|
|
135
|
+
private _baseTile;
|
|
136
|
+
private _resolveExcludeAndRange;
|
|
137
|
+
private _excludeOrRangeDefault;
|
|
138
|
+
private _countSortResets;
|
|
76
139
|
static ɵfac: i0.ɵɵFactoryDeclaration<ReportFilterStateService, never>;
|
|
77
140
|
static ɵprov: i0.ɵɵInjectableDeclaration<ReportFilterStateService>;
|
|
78
141
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ParamMap, Params } from '@angular/router';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { ReportUrlValueName } from '../interfaces/report-url-value-name.type';
|
|
4
|
+
import { ReportViewCreate } from '../interfaces/report-view-create.interface';
|
|
5
|
+
import { ReportViewDeleted } from '../interfaces/report-view-deleted.interface';
|
|
6
|
+
import { ReportViewSummary } from '../interfaces/report-view-summary.interface';
|
|
7
|
+
import { ReportView } from '../interfaces/report-view.interface';
|
|
8
|
+
import { Report } from '../interfaces/report.interface';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export declare class ReportViewService {
|
|
11
|
+
readonly views: import("@angular/core").Signal<ReportViewSummary[]>;
|
|
12
|
+
readonly canShare: import("@angular/core").Signal<boolean>;
|
|
13
|
+
readonly openView: import("@angular/core").Signal<ReportView>;
|
|
14
|
+
readonly viewChanged: import("@angular/core").Signal<boolean>;
|
|
15
|
+
private _reportData;
|
|
16
|
+
private _filterState;
|
|
17
|
+
private _message;
|
|
18
|
+
private _destroyRef;
|
|
19
|
+
private _views;
|
|
20
|
+
private _canShare;
|
|
21
|
+
private _openView;
|
|
22
|
+
private _reportId;
|
|
23
|
+
private _tooLongShown;
|
|
24
|
+
serves(report: Report | null): boolean;
|
|
25
|
+
open(report: Report, params: Params, pageId: number | null): Observable<void>;
|
|
26
|
+
refresh(report: Report): void;
|
|
27
|
+
pick(reportViewId: number): Observable<ReportView>;
|
|
28
|
+
openDefaults(): void;
|
|
29
|
+
saveAsNew(view: Omit<ReportViewCreate, 'config'>): Observable<ReportView>;
|
|
30
|
+
saveChanges(): Observable<ReportView>;
|
|
31
|
+
rename(name: string): Observable<ReportView>;
|
|
32
|
+
share(shared: boolean): Observable<ReportView>;
|
|
33
|
+
setDefault(personalDefault: boolean): Observable<ReportView>;
|
|
34
|
+
deleteOpen(): Observable<ReportViewDeleted>;
|
|
35
|
+
urlParams(current: ParamMap, name?: ReportUrlValueName): Params;
|
|
36
|
+
private _start;
|
|
37
|
+
private _openDefault;
|
|
38
|
+
private _openLink;
|
|
39
|
+
private _openOn;
|
|
40
|
+
private _changeOpen;
|
|
41
|
+
private _putRow;
|
|
42
|
+
private _readViews;
|
|
43
|
+
private _readView;
|
|
44
|
+
private _linkWrite;
|
|
45
|
+
private _linkDays;
|
|
46
|
+
private _groupDays;
|
|
47
|
+
private _reportGroups;
|
|
48
|
+
private _authoredSort;
|
|
49
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ReportViewService, never>;
|
|
50
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ReportViewService>;
|
|
51
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ReportViewConfig } from './interfaces/report-view-config.interface';
|
|
2
|
+
import { ComponentDataState, Report, ReportComponent } from './interfaces/report.interface';
|
|
3
|
+
export declare function isTimeSeriesChart(component: ReportComponent): boolean;
|
|
4
|
+
export declare function tileDataState(report: Report | null, component: ReportComponent, snapshot: ReportViewConfig): ComponentDataState;
|
|
5
|
+
export declare function zipExportStates(report: Report, snapshot: ReportViewConfig, pageId?: number | null): Record<number, ComponentDataState>;
|
|
6
|
+
export declare function valuesMatchAnyGroupIds(report: Report | null, layerId: number | null, snapshot: ReportViewConfig): number[];
|
|
7
|
+
export declare function tilePageId(report: Report, component: ReportComponent, snapshot: ReportViewConfig): number | null;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { TileLoadResult } from './interfaces/tile-load-result.interface';
|
|
3
|
+
export declare const TILE_REFRESH_DEBOUNCE_MS = 300;
|
|
4
|
+
export declare function tileLoads<T>(refresh$: Observable<unknown>, load: () => Observable<T>, version: () => number): Observable<TileLoadResult<T>>;
|
|
@@ -12,13 +12,13 @@ export declare class FsAiReportComponent {
|
|
|
12
12
|
readonly pageChanged: import("@angular/core").OutputEmitterRef<number>;
|
|
13
13
|
readonly report: import("@angular/core").WritableSignal<Report>;
|
|
14
14
|
readonly editMode: import("@angular/core").WritableSignal<boolean>;
|
|
15
|
-
readonly timezoneLabel: import("@angular/core").Signal<string>;
|
|
16
15
|
readonly pageId: import("@angular/core").WritableSignal<number>;
|
|
17
16
|
readonly chatPageId: import("@angular/core").WritableSignal<number>;
|
|
18
17
|
readonly chatRequestData: import("@angular/core").Signal<Record<string, unknown>>;
|
|
19
18
|
readonly reportFilterConfig: import("@angular/core").WritableSignal<FilterConfig>;
|
|
20
19
|
readonly reportHasFilters: import("@angular/core").Signal<boolean>;
|
|
21
20
|
readonly reportFilterKey: import("@angular/core").Signal<string>;
|
|
21
|
+
readonly viewsServed: import("@angular/core").Signal<boolean>;
|
|
22
22
|
private _split;
|
|
23
23
|
private _chatPanel;
|
|
24
24
|
private _canvas?;
|
|
@@ -27,6 +27,8 @@ export declare class FsAiReportComponent {
|
|
|
27
27
|
private _router;
|
|
28
28
|
private _route;
|
|
29
29
|
private _filterState;
|
|
30
|
+
private _filterOptions;
|
|
31
|
+
private _views;
|
|
30
32
|
private _exportService;
|
|
31
33
|
private _collector;
|
|
32
34
|
private _process;
|
|
@@ -36,6 +38,7 @@ export declare class FsAiReportComponent {
|
|
|
36
38
|
private _restoredReportId;
|
|
37
39
|
private _pageReported;
|
|
38
40
|
private _pageWrite$;
|
|
41
|
+
private readonly _barVersion;
|
|
39
42
|
constructor();
|
|
40
43
|
toggleEditMode(): void;
|
|
41
44
|
get isMasterMode(): boolean;
|
|
@@ -55,9 +58,14 @@ export declare class FsAiReportComponent {
|
|
|
55
58
|
private _pageIdFromUrl;
|
|
56
59
|
private _writeUrl;
|
|
57
60
|
private _loadReport;
|
|
61
|
+
private _openReport;
|
|
62
|
+
private _urlParams;
|
|
63
|
+
private _openAppliedPage;
|
|
58
64
|
private _reportGroups;
|
|
59
65
|
private _buildReportConfig;
|
|
66
|
+
private _barChanged;
|
|
60
67
|
private _groupByItem;
|
|
68
|
+
private _matchItem;
|
|
61
69
|
static ɵfac: i0.ɵɵFactoryDeclaration<FsAiReportComponent, never>;
|
|
62
70
|
static ɵcmp: i0.ɵɵComponentDeclaration<FsAiReportComponent, "fs-ai-report", never, { "reportId": { "alias": "reportId"; "required": false; "isSignal": true; }; "basePath": { "alias": "basePath"; "required": false; "isSignal": true; }; "pageQueryParam": { "alias": "pageQueryParam"; "required": false; "isSignal": true; }; "urlState": { "alias": "urlState"; "required": false; "isSignal": true; }; }, { "deleted": "deleted"; "renamed": "renamed"; "pageChanged": "pageChanged"; }, never, never, true, never>;
|
|
63
71
|
}
|
|
@@ -17,6 +17,7 @@ export declare class ReportComponent {
|
|
|
17
17
|
private _reportData;
|
|
18
18
|
private _reportService;
|
|
19
19
|
private _filterState;
|
|
20
|
+
private _filterOptions;
|
|
20
21
|
private _exportService;
|
|
21
22
|
private _collector;
|
|
22
23
|
private _process;
|
|
@@ -24,6 +25,8 @@ export declare class ReportComponent {
|
|
|
24
25
|
private _dialog;
|
|
25
26
|
private _destroyRef;
|
|
26
27
|
private _zone;
|
|
28
|
+
private readonly _barVersion;
|
|
29
|
+
private readonly _pageId;
|
|
27
30
|
constructor();
|
|
28
31
|
fetchReports: (keyword: string) => import("rxjs").Observable<ReportListItem[]>;
|
|
29
32
|
reportChange(report: ReportListItem | null): void;
|
|
@@ -34,6 +37,7 @@ export declare class ReportComponent {
|
|
|
34
37
|
toggleMasterMode(): void;
|
|
35
38
|
reportSettings(): void;
|
|
36
39
|
componentSettings(component: ReportComponentModel): void;
|
|
40
|
+
onCanvasPageChanged(pageId: number | null): void;
|
|
37
41
|
onCanvasReportChanged(): void;
|
|
38
42
|
exportPowerpoint(): void;
|
|
39
43
|
exportPdf(): void;
|
|
@@ -46,7 +50,9 @@ export declare class ReportComponent {
|
|
|
46
50
|
get reportHasFilters(): boolean;
|
|
47
51
|
get reportFilterKey(): string;
|
|
48
52
|
private _buildReportConfig;
|
|
53
|
+
private _barChanged;
|
|
49
54
|
private _groupByItem;
|
|
55
|
+
private _matchItem;
|
|
50
56
|
private _refreshReportName;
|
|
51
57
|
static ɵfac: i0.ɵɵFactoryDeclaration<ReportComponent, never>;
|
|
52
58
|
static ɵcmp: i0.ɵɵComponentDeclaration<ReportComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// A menu or popover that opens at a point, not at a control. fs-menu opens
|
|
2
|
+
// at its trigger element, never at an event, so the caller keeps one
|
|
3
|
+
// invisible trigger: a zero-size span inside a positioned container (a tile,
|
|
4
|
+
// a text block), moved to the point just before the menu opens. On a phone
|
|
5
|
+
// fs-menu opens as a bottom sheet and the point does not matter.
|
|
6
|
+
//
|
|
7
|
+
// The page may be zoomed (the canvas scales it, --canvas-zoom): a point in
|
|
8
|
+
// page pixels is converted to the container's own unscaled pixels.
|
|
9
|
+
// Where the anchor goes inside its container, in the container's unscaled
|
|
10
|
+
// pixels: the point's distance from the container's top left corner (both in
|
|
11
|
+
// page pixels), divided by the zoom.
|
|
12
|
+
export function anchorOffset(point, corner, zoom) {
|
|
13
|
+
const scale = usableZoom(zoom);
|
|
14
|
+
return {
|
|
15
|
+
left: (point.x - corner.x) / scale,
|
|
16
|
+
top: (point.y - corner.y) / scale,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// Moves the anchor to the point (in page pixels) inside the element it is
|
|
20
|
+
// positioned against, then opens what it triggers on the next turn: once the
|
|
21
|
+
// move is laid out, and once the click that asked for it is over, so that
|
|
22
|
+
// click does not close it again.
|
|
23
|
+
export function openAtPoint(anchor, point, zoom, open) {
|
|
24
|
+
const container = anchor.offsetParent ?? anchor.parentElement;
|
|
25
|
+
const rect = container?.getBoundingClientRect();
|
|
26
|
+
// An absolute child is placed from inside its container's border, which
|
|
27
|
+
// the zoom scales too.
|
|
28
|
+
const corner = rect
|
|
29
|
+
? {
|
|
30
|
+
x: rect.left + window.scrollX + container.clientLeft * usableZoom(zoom),
|
|
31
|
+
y: rect.top + window.scrollY + container.clientTop * usableZoom(zoom),
|
|
32
|
+
}
|
|
33
|
+
: point;
|
|
34
|
+
const offset = anchorOffset(point, corner, zoom);
|
|
35
|
+
Object.assign(anchor.style, {
|
|
36
|
+
position: 'absolute',
|
|
37
|
+
width: '0',
|
|
38
|
+
height: '0',
|
|
39
|
+
pointerEvents: 'none',
|
|
40
|
+
left: `${offset.left}px`,
|
|
41
|
+
top: `${offset.top}px`,
|
|
42
|
+
});
|
|
43
|
+
setTimeout(open);
|
|
44
|
+
}
|
|
45
|
+
// The zoom, or 1 when it is not a positive number.
|
|
46
|
+
function usableZoom(zoom) {
|
|
47
|
+
return Number.isFinite(zoom) && zoom > 0 ? zoom : 1;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yLWF0LXBvaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2FuY2hvci1hdC1wb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyRUFBMkU7QUFDM0UscUVBQXFFO0FBQ3JFLDZFQUE2RTtBQUM3RSwyRUFBMkU7QUFDM0UsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRiwyRUFBMkU7QUFDM0UsbUVBQW1FO0FBRW5FLDBFQUEwRTtBQUMxRSw2RUFBNkU7QUFDN0UscUNBQXFDO0FBQ3JDLE1BQU0sVUFBVSxZQUFZLENBQzFCLEtBQStCLEVBQy9CLE1BQWdDLEVBQ2hDLElBQVk7SUFFWixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFL0IsT0FBTztRQUNMLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbEMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztLQUNsQyxDQUFDO0FBQ0osQ0FBQztBQUVELDBFQUEwRTtBQUMxRSw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLGlDQUFpQztBQUNqQyxNQUFNLFVBQVUsV0FBVyxDQUN6QixNQUFtQixFQUNuQixLQUErQixFQUMvQixJQUFZLEVBQ1osSUFBZ0I7SUFFaEIsTUFBTSxTQUFTLEdBQUksTUFBTSxDQUFDLFlBQW1DLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUN0RixNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztJQUNoRCx3RUFBd0U7SUFDeEUsdUJBQXVCO0lBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUk7UUFDakIsQ0FBQyxDQUFDO1lBQ0EsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDdkUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7U0FDdEU7UUFDRCxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ1YsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFakQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1FBQzFCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLEtBQUssRUFBRSxHQUFHO1FBQ1YsTUFBTSxFQUFFLEdBQUc7UUFDWCxhQUFhLEVBQUUsTUFBTTtRQUNyQixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJO1FBQ3hCLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUk7S0FDdkIsQ0FBQyxDQUFDO0lBRUgsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRCxtREFBbUQ7QUFDbkQsU0FBUyxVQUFVLENBQUMsSUFBWTtJQUM5QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEEgbWVudSBvciBwb3BvdmVyIHRoYXQgb3BlbnMgYXQgYSBwb2ludCwgbm90IGF0IGEgY29udHJvbC4gZnMtbWVudSBvcGVuc1xuLy8gYXQgaXRzIHRyaWdnZXIgZWxlbWVudCwgbmV2ZXIgYXQgYW4gZXZlbnQsIHNvIHRoZSBjYWxsZXIga2VlcHMgb25lXG4vLyBpbnZpc2libGUgdHJpZ2dlcjogYSB6ZXJvLXNpemUgc3BhbiBpbnNpZGUgYSBwb3NpdGlvbmVkIGNvbnRhaW5lciAoYSB0aWxlLFxuLy8gYSB0ZXh0IGJsb2NrKSwgbW92ZWQgdG8gdGhlIHBvaW50IGp1c3QgYmVmb3JlIHRoZSBtZW51IG9wZW5zLiBPbiBhIHBob25lXG4vLyBmcy1tZW51IG9wZW5zIGFzIGEgYm90dG9tIHNoZWV0IGFuZCB0aGUgcG9pbnQgZG9lcyBub3QgbWF0dGVyLlxuLy9cbi8vIFRoZSBwYWdlIG1heSBiZSB6b29tZWQgKHRoZSBjYW52YXMgc2NhbGVzIGl0LCAtLWNhbnZhcy16b29tKTogYSBwb2ludCBpblxuLy8gcGFnZSBwaXhlbHMgaXMgY29udmVydGVkIHRvIHRoZSBjb250YWluZXIncyBvd24gdW5zY2FsZWQgcGl4ZWxzLlxuXG4vLyBXaGVyZSB0aGUgYW5jaG9yIGdvZXMgaW5zaWRlIGl0cyBjb250YWluZXIsIGluIHRoZSBjb250YWluZXIncyB1bnNjYWxlZFxuLy8gcGl4ZWxzOiB0aGUgcG9pbnQncyBkaXN0YW5jZSBmcm9tIHRoZSBjb250YWluZXIncyB0b3AgbGVmdCBjb3JuZXIgKGJvdGggaW5cbi8vIHBhZ2UgcGl4ZWxzKSwgZGl2aWRlZCBieSB0aGUgem9vbS5cbmV4cG9ydCBmdW5jdGlvbiBhbmNob3JPZmZzZXQoXG4gIHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXG4gIGNvcm5lcjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LFxuICB6b29tOiBudW1iZXIsXG4pOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXIgfSB7XG4gIGNvbnN0IHNjYWxlID0gdXNhYmxlWm9vbSh6b29tKTtcblxuICByZXR1cm4ge1xuICAgIGxlZnQ6IChwb2ludC54IC0gY29ybmVyLngpIC8gc2NhbGUsXG4gICAgdG9wOiAocG9pbnQueSAtIGNvcm5lci55KSAvIHNjYWxlLFxuICB9O1xufVxuXG4vLyBNb3ZlcyB0aGUgYW5jaG9yIHRvIHRoZSBwb2ludCAoaW4gcGFnZSBwaXhlbHMpIGluc2lkZSB0aGUgZWxlbWVudCBpdCBpc1xuLy8gcG9zaXRpb25lZCBhZ2FpbnN0LCB0aGVuIG9wZW5zIHdoYXQgaXQgdHJpZ2dlcnMgb24gdGhlIG5leHQgdHVybjogb25jZSB0aGVcbi8vIG1vdmUgaXMgbGFpZCBvdXQsIGFuZCBvbmNlIHRoZSBjbGljayB0aGF0IGFza2VkIGZvciBpdCBpcyBvdmVyLCBzbyB0aGF0XG4vLyBjbGljayBkb2VzIG5vdCBjbG9zZSBpdCBhZ2Fpbi5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuQXRQb2ludChcbiAgYW5jaG9yOiBIVE1MRWxlbWVudCxcbiAgcG9pbnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSxcbiAgem9vbTogbnVtYmVyLFxuICBvcGVuOiAoKSA9PiB2b2lkLFxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IChhbmNob3Iub2Zmc2V0UGFyZW50IGFzIEhUTUxFbGVtZW50IHwgbnVsbCkgPz8gYW5jaG9yLnBhcmVudEVsZW1lbnQ7XG4gIGNvbnN0IHJlY3QgPSBjb250YWluZXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAvLyBBbiBhYnNvbHV0ZSBjaGlsZCBpcyBwbGFjZWQgZnJvbSBpbnNpZGUgaXRzIGNvbnRhaW5lcidzIGJvcmRlciwgd2hpY2hcbiAgLy8gdGhlIHpvb20gc2NhbGVzIHRvby5cbiAgY29uc3QgY29ybmVyID0gcmVjdFxuICAgID8ge1xuICAgICAgeDogcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFggKyBjb250YWluZXIuY2xpZW50TGVmdCAqIHVzYWJsZVpvb20oem9vbSksXG4gICAgICB5OiByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZICsgY29udGFpbmVyLmNsaWVudFRvcCAqIHVzYWJsZVpvb20oem9vbSksXG4gICAgfVxuICAgIDogcG9pbnQ7XG4gIGNvbnN0IG9mZnNldCA9IGFuY2hvck9mZnNldChwb2ludCwgY29ybmVyLCB6b29tKTtcblxuICBPYmplY3QuYXNzaWduKGFuY2hvci5zdHlsZSwge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHdpZHRoOiAnMCcsXG4gICAgaGVpZ2h0OiAnMCcsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIGxlZnQ6IGAke29mZnNldC5sZWZ0fXB4YCxcbiAgICB0b3A6IGAke29mZnNldC50b3B9cHhgLFxuICB9KTtcblxuICBzZXRUaW1lb3V0KG9wZW4pO1xufVxuXG4vLyBUaGUgem9vbSwgb3IgMSB3aGVuIGl0IGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlci5cbmZ1bmN0aW9uIHVzYWJsZVpvb20oem9vbTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh6b29tKSAmJiB6b29tID4gMCA/IHpvb20gOiAxO1xufVxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Which page the canvas opens when its report input changes.
|
|
2
|
+
//
|
|
3
|
+
// - The same report with more pages than before: a page was just added in
|
|
4
|
+
// this tab, so the canvas lands on the last page. The link's page does not
|
|
5
|
+
// beat it: that is the stale value the host still holds from the URL.
|
|
6
|
+
// - Otherwise the link's (or the open view's) page, when the report has it.
|
|
7
|
+
// - Another report whose link names no page it has opens on its first page:
|
|
8
|
+
// the old report's page number means nothing there.
|
|
9
|
+
// - The same report keeps the page it shows when the link's page does not
|
|
10
|
+
// resolve (it may still be loading); an index past the last page falls
|
|
11
|
+
// back to the first.
|
|
12
|
+
export function canvasLandingPage(input) {
|
|
13
|
+
const pageCount = input.pageIds.length;
|
|
14
|
+
const sameReport = input.reportId === input.previousReportId;
|
|
15
|
+
if (sameReport && input.previousPageCount > 0 && pageCount > input.previousPageCount) {
|
|
16
|
+
return pageCount - 1;
|
|
17
|
+
}
|
|
18
|
+
const linked = input.pageId == null ? -1 : input.pageIds.indexOf(input.pageId);
|
|
19
|
+
if (linked > -1) {
|
|
20
|
+
return linked;
|
|
21
|
+
}
|
|
22
|
+
const index = sameReport ? input.activePageIndex : 0;
|
|
23
|
+
return index < pageCount ? index : 0;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLWxhbmRpbmctcGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9jYW52YXMtbGFuZGluZy1wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLDZEQUE2RDtBQUM3RCxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDZFQUE2RTtBQUM3RSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLDRFQUE0RTtBQUM1RSxzREFBc0Q7QUFDdEQsMEVBQTBFO0FBQzFFLHlFQUF5RTtBQUN6RSx1QkFBdUI7QUFDdkIsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQXlCO0lBQ3pELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLGdCQUFnQixDQUFDO0lBRTdELElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JGLE9BQU8sU0FBUyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0UsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckQsT0FBTyxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FudmFzTGFuZGluZ0lucHV0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NhbnZhcy1sYW5kaW5nLWlucHV0LmludGVyZmFjZSc7XG5cblxuLy8gV2hpY2ggcGFnZSB0aGUgY2FudmFzIG9wZW5zIHdoZW4gaXRzIHJlcG9ydCBpbnB1dCBjaGFuZ2VzLlxuLy9cbi8vIC0gVGhlIHNhbWUgcmVwb3J0IHdpdGggbW9yZSBwYWdlcyB0aGFuIGJlZm9yZTogYSBwYWdlIHdhcyBqdXN0IGFkZGVkIGluXG4vLyAgIHRoaXMgdGFiLCBzbyB0aGUgY2FudmFzIGxhbmRzIG9uIHRoZSBsYXN0IHBhZ2UuIFRoZSBsaW5rJ3MgcGFnZSBkb2VzIG5vdFxuLy8gICBiZWF0IGl0OiB0aGF0IGlzIHRoZSBzdGFsZSB2YWx1ZSB0aGUgaG9zdCBzdGlsbCBob2xkcyBmcm9tIHRoZSBVUkwuXG4vLyAtIE90aGVyd2lzZSB0aGUgbGluaydzIChvciB0aGUgb3BlbiB2aWV3J3MpIHBhZ2UsIHdoZW4gdGhlIHJlcG9ydCBoYXMgaXQuXG4vLyAtIEFub3RoZXIgcmVwb3J0IHdob3NlIGxpbmsgbmFtZXMgbm8gcGFnZSBpdCBoYXMgb3BlbnMgb24gaXRzIGZpcnN0IHBhZ2U6XG4vLyAgIHRoZSBvbGQgcmVwb3J0J3MgcGFnZSBudW1iZXIgbWVhbnMgbm90aGluZyB0aGVyZS5cbi8vIC0gVGhlIHNhbWUgcmVwb3J0IGtlZXBzIHRoZSBwYWdlIGl0IHNob3dzIHdoZW4gdGhlIGxpbmsncyBwYWdlIGRvZXMgbm90XG4vLyAgIHJlc29sdmUgKGl0IG1heSBzdGlsbCBiZSBsb2FkaW5nKTsgYW4gaW5kZXggcGFzdCB0aGUgbGFzdCBwYWdlIGZhbGxzXG4vLyAgIGJhY2sgdG8gdGhlIGZpcnN0LlxuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc0xhbmRpbmdQYWdlKGlucHV0OiBDYW52YXNMYW5kaW5nSW5wdXQpOiBudW1iZXIge1xuICBjb25zdCBwYWdlQ291bnQgPSBpbnB1dC5wYWdlSWRzLmxlbmd0aDtcbiAgY29uc3Qgc2FtZVJlcG9ydCA9IGlucHV0LnJlcG9ydElkID09PSBpbnB1dC5wcmV2aW91c1JlcG9ydElkO1xuXG4gIGlmIChzYW1lUmVwb3J0ICYmIGlucHV0LnByZXZpb3VzUGFnZUNvdW50ID4gMCAmJiBwYWdlQ291bnQgPiBpbnB1dC5wcmV2aW91c1BhZ2VDb3VudCkge1xuICAgIHJldHVybiBwYWdlQ291bnQgLSAxO1xuICB9XG5cbiAgY29uc3QgbGlua2VkID0gaW5wdXQucGFnZUlkID09IG51bGwgPyAtMSA6IGlucHV0LnBhZ2VJZHMuaW5kZXhPZihpbnB1dC5wYWdlSWQpO1xuICBpZiAobGlua2VkID4gLTEpIHtcbiAgICByZXR1cm4gbGlua2VkO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBzYW1lUmVwb3J0ID8gaW5wdXQuYWN0aXZlUGFnZUluZGV4IDogMDtcblxuICByZXR1cm4gaW5kZXggPCBwYWdlQ291bnQgPyBpbmRleCA6IDA7XG59XG4iXX0=
|