@firestitch/report 18.10.0 → 18.10.1

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.
Files changed (44) hide show
  1. package/app/reports/data/report.data.d.ts +3 -5
  2. package/app/reports/dialogs/report-settings/report-settings.component.d.ts +30 -2
  3. package/app/reports/filter-settings-rules.d.ts +4 -0
  4. package/app/reports/interfaces/report-filter-group-changes.interface.d.ts +7 -0
  5. package/app/reports/interfaces/report.interface.d.ts +1 -14
  6. package/app/reports/report-filter-items.d.ts +2 -8
  7. package/app/reports/report-view-config.d.ts +1 -3
  8. package/app/reports/services/report-filter-state.service.d.ts +5 -14
  9. package/app/reports/services/report-view.service.d.ts +1 -13
  10. package/app/reports/views/report/fs-ai-report.component.d.ts +2 -8
  11. package/esm2022/app/reports/canvas-landing-page.mjs +7 -6
  12. package/esm2022/app/reports/components/component-list/component-list.component.mjs +5 -5
  13. package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +13 -12
  14. package/esm2022/app/reports/components/report-component/report-component.component.mjs +9 -9
  15. package/esm2022/app/reports/data/report.data.mjs +8 -5
  16. package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +169 -21
  17. package/esm2022/app/reports/filter-settings-rules.mjs +8 -1
  18. package/esm2022/app/reports/interfaces/canvas-landing-input.interface.mjs +1 -1
  19. package/esm2022/app/reports/interfaces/report-filter-group-changes.interface.mjs +2 -0
  20. package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +1 -1
  21. package/esm2022/app/reports/interfaces/report-view-config.interface.mjs +1 -1
  22. package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
  23. package/esm2022/app/reports/report-date-presets.mjs +2 -2
  24. package/esm2022/app/reports/report-filter-items.mjs +25 -105
  25. package/esm2022/app/reports/report-view-config.mjs +6 -116
  26. package/esm2022/app/reports/services/report-filter-state.service.mjs +92 -269
  27. package/esm2022/app/reports/services/report-view.service.mjs +25 -165
  28. package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +56 -120
  29. package/esm2022/app/reports/views/report/report.component.mjs +11 -8
  30. package/fesm2022/{firestitch-report-echarts-UBg8Wlhd.mjs → firestitch-report-echarts-DHEH_K_q.mjs} +2 -2
  31. package/fesm2022/{firestitch-report-echarts-UBg8Wlhd.mjs.map → firestitch-report-echarts-DHEH_K_q.mjs.map} +1 -1
  32. package/fesm2022/{firestitch-report-firestitch-report-B1keNrcK.mjs → firestitch-report-firestitch-report-ZcHTnNKq.mjs} +454 -1470
  33. package/fesm2022/firestitch-report-firestitch-report-ZcHTnNKq.mjs.map +1 -0
  34. package/fesm2022/firestitch-report.mjs +1 -1
  35. package/package.json +1 -1
  36. package/app/reports/interfaces/report-url-link.interface.d.ts +0 -4
  37. package/app/reports/interfaces/report-url-value-name.type.d.ts +0 -1
  38. package/app/reports/interfaces/report-url-write.interface.d.ts +0 -4
  39. package/app/reports/report-url-state.d.ts +0 -36
  40. package/esm2022/app/reports/interfaces/report-url-link.interface.mjs +0 -2
  41. package/esm2022/app/reports/interfaces/report-url-value-name.type.mjs +0 -2
  42. package/esm2022/app/reports/interfaces/report-url-write.interface.mjs +0 -2
  43. package/esm2022/app/reports/report-url-state.mjs +0 -677
  44. package/fesm2022/firestitch-report-firestitch-report-B1keNrcK.mjs.map +0 -1
@@ -1,13 +1,14 @@
1
1
  import { RequestConfig } from '@firestitch/api';
2
2
  import { Observable } from 'rxjs';
3
3
  import { ReportExportLine } from '../interfaces/report-export-line.interface';
4
+ import { ReportFilterGroupChanges } from '../interfaces/report-filter-group-changes.interface';
4
5
  import { ReportFilterOptionsRequest } from '../interfaces/report-filter-options-request.interface';
5
6
  import { ReportFilterOptions } from '../interfaces/report-filter-options.interface';
6
7
  import { ReportViewCreate } from '../interfaces/report-view-create.interface';
7
8
  import { ReportViewDeleted } from '../interfaces/report-view-deleted.interface';
8
9
  import { ReportView } from '../interfaces/report-view.interface';
9
10
  import { ReportViews } from '../interfaces/report-views.interface';
10
- import { ChartGranularity, ComponentDataState, ComponentExportResponse, FilterGroupDefault, ReportComponentSql, ReportFilterLevel, ReportLocales, ReportPageValue, ReportTree, ResolvedFilterValue } from '../interfaces/report.interface';
11
+ import { ChartGranularity, ComponentDataState, ComponentExportResponse, ReportComponentSql, ReportLocales, ReportPageValue, ReportTree, ResolvedFilterValue } from '../interfaces/report.interface';
11
12
  import * as i0 from "@angular/core";
12
13
  export declare class ReportData<T = any> {
13
14
  private _api;
@@ -87,10 +88,7 @@ export declare class ReportData<T = any> {
87
88
  saveSettings(settings: {
88
89
  semanticBuildConcurrency: number;
89
90
  }, config?: RequestConfig): Observable<T>;
90
- updateFilterGroup(reportId: number, groupId: number, changes: {
91
- level?: ReportFilterLevel;
92
- default?: FilterGroupDefault | null;
93
- }, config?: RequestConfig): Observable<T>;
91
+ updateFilterGroup(reportId: number, groupId: number, changes: ReportFilterGroupChanges, config?: RequestConfig): Observable<T>;
94
92
  filterOptionsNarrowed(reportId: number, filterId: number, body: ReportFilterOptionsRequest, config?: RequestConfig): Observable<ReportFilterOptions>;
95
93
  views(reportId: number, config?: RequestConfig): Observable<ReportViews>;
96
94
  view(reportId: number, reportViewId: number, config?: RequestConfig): Observable<ReportView>;
@@ -7,9 +7,18 @@ import * as i0 from "@angular/core";
7
7
  export interface ReportSettingsResult {
8
8
  action: 'saved' | 'deleted';
9
9
  }
10
+ interface FilterFieldRefusal {
11
+ value: string;
12
+ message: string;
13
+ }
10
14
  interface FilterDefaultRow {
11
15
  group: ReportFilterGroup;
16
+ heading: string;
12
17
  label: string;
18
+ name: string;
19
+ showName: boolean;
20
+ labelRefusal: FilterFieldRefusal | null;
21
+ nameRefusal: FilterFieldRefusal | null;
13
22
  period: string;
14
23
  periodOptions: FilterSettingsOption[];
15
24
  start: Date | null;
@@ -33,7 +42,8 @@ interface LocaleSelectOption {
33
42
  label: string;
34
43
  }
35
44
  export declare class ReportSettingsComponent implements OnInit {
36
- selectedTab: string;
45
+ readonly selectedTab: import("@angular/core").WritableSignal<string>;
46
+ readonly wrote: import("@angular/core").WritableSignal<boolean>;
37
47
  name: string;
38
48
  pageWidth: number | string;
39
49
  pageHeight: number | string;
@@ -54,14 +64,24 @@ export declare class ReportSettingsComponent implements OnInit {
54
64
  readonly filterRows: import("@angular/core").WritableSignal<FilterDefaultRow[]>;
55
65
  readonly fixedDatesPeriod = "fixed";
56
66
  readonly boundScale = 6;
67
+ readonly namePattern: RegExp;
68
+ readonly namePatternMessage = "A name starts with a letter and holds only letters and digits.";
69
+ readonly nameMaxLength = 50;
70
+ readonly labelMaxLength = 200;
71
+ readonly labelInputId: typeof labelInputId;
72
+ readonly nameInputId: typeof nameInputId;
57
73
  readonly minBoundValidator: (control: AbstractControl, max: unknown) => void;
58
74
  readonly maxBoundValidator: (control: AbstractControl, min: unknown) => void;
75
+ readonly refusalValidator: (control: AbstractControl, refusal: FilterFieldRefusal | null) => void;
59
76
  private readonly _data;
60
77
  private readonly _dialogRef;
61
78
  private readonly _reportData;
62
79
  private readonly _message;
63
80
  private readonly _prompt;
64
81
  private readonly _destroyRef;
82
+ private readonly _injector;
83
+ private readonly _document;
84
+ private _refusedInputId;
65
85
  private readonly _serverHasLocale;
66
86
  private readonly _localesSettled;
67
87
  private readonly _filtersReady;
@@ -70,11 +90,17 @@ export declare class ReportSettingsComponent implements OnInit {
70
90
  private readonly _appliedCurrency;
71
91
  ngOnInit(): void;
72
92
  patchRow(row: FilterDefaultRow, patch: Partial<FilterDefaultRow>): void;
93
+ focusRefusal(): void;
73
94
  delete(): void;
74
- save: () => Observable<[any, ...any[]]>;
95
+ save: () => Observable<any[]>;
75
96
  private _pageDimension;
76
97
  private _timezoneSetting;
77
98
  private _storedOption;
99
+ private _groupChanges;
100
+ private _namesOrLabels;
101
+ private _renameOrder;
102
+ private _saveNamed;
103
+ private _showRefusal;
78
104
  private _throwBoundsError;
79
105
  private _buildFilterRows;
80
106
  private _filterRow;
@@ -83,4 +109,6 @@ export declare class ReportSettingsComponent implements OnInit {
83
109
  static ɵfac: i0.ɵɵFactoryDeclaration<ReportSettingsComponent, never>;
84
110
  static ɵcmp: i0.ɵɵComponentDeclaration<ReportSettingsComponent, "ng-component", never, {}, {}, never, never, true, never>;
85
111
  }
112
+ declare function labelInputId(groupId: number): string;
113
+ declare function nameInputId(groupId: number): string;
86
114
  export {};
@@ -10,6 +10,10 @@ export declare const PAGE_FILTER_TOOLTIP = "A page filter shows in the page bar
10
10
  export declare const COMPONENT_TOGGLE_TOOLTIP = "Show on this component";
11
11
  export declare const FIXED_DATES_PERIOD = "fixed";
12
12
  export declare const DEFAULT_BOUND_SCALE = 6;
13
+ export declare const FILTER_NAME_PATTERN: RegExp;
14
+ export declare const FILTER_NAME_PATTERN_MESSAGE = "A name starts with a letter and holds only letters and digits.";
15
+ export declare const FILTER_NAME_MAX_LENGTH = 50;
16
+ export declare const FILTER_LABEL_MAX_LENGTH = 200;
13
17
  export declare function parseDefaultBound(raw: unknown): number | null;
14
18
  export declare function boundsError(min: number | null, max: number | null): string | null;
15
19
  export declare function typeSelectState(types: ReportFilterType[] | null | undefined, hasFilterOnThisComponent: boolean, features: ReportViewerFeature[] | null | undefined): FilterTypeSelectState;
@@ -0,0 +1,7 @@
1
+ import { FilterGroupDefault, ReportFilterLevel } from './report.interface';
2
+ export interface ReportFilterGroupChanges {
3
+ name?: string;
4
+ label?: string;
5
+ level?: ReportFilterLevel;
6
+ default?: FilterGroupDefault | null;
7
+ }
@@ -268,6 +268,7 @@ export interface ReportFilterOption {
268
268
  }
269
269
  export interface ReportFilterGroup {
270
270
  id: number;
271
+ name?: string;
271
272
  label: string | null;
272
273
  type: ReportFilterType;
273
274
  level: ReportFilterLevel;
@@ -302,20 +303,6 @@ export interface FilterGroupValue {
302
303
  max?: number | null;
303
304
  }
304
305
  export type ReportRelativeRange = 'thisWeek' | 'lastWeek' | 'last7Days' | 'last30Days' | 'last3Months' | 'last6Months' | 'last12Months' | 'thisMonth' | 'thisQuarter' | 'thisYear' | 'yearToDate';
305
- export interface ReportUrlParams {
306
- groups: Map<number, FilterGroupDefault | null>;
307
- listSorts: Map<number, string>;
308
- listSearches: Map<number, string>;
309
- listHidden: Map<number, string>;
310
- groupBy: string | null;
311
- }
312
- export interface ReportUrlSnapshot {
313
- groups: Map<number, FilterGroupValue | null>;
314
- listSorts: Map<number, ReportSort>;
315
- listSearches: Map<number, string>;
316
- listHidden: Map<number, string[]>;
317
- frequency: ChartGranularity | null;
318
- }
319
306
  export interface ResolvedFilterValue {
320
307
  filterId: number;
321
308
  start?: string;
@@ -12,15 +12,9 @@ export declare function dateFromBound(value: string | null | undefined): Date |
12
12
  export declare function dateToBound(value: Date | null | undefined): string | null;
13
13
  export declare function relativeLabel(relative: string): string;
14
14
  export declare const GROUP_BY_ITEM = "groupBy";
15
- export declare const VIEW_PARAM = "rv";
16
- export declare const PERSONAL_VIEW_PARAM = "rpv";
17
- export declare const FORMAT_PARAM = "rf";
18
- export declare const PAGE_PARAM = "page";
19
15
  export type ItemRangeEnd = 'min' | 'max' | 'from' | 'to';
20
16
  export declare function itemRangeName(name: string, end: ItemRangeEnd): string;
21
- export declare function groupParamKeys(groups: readonly Pick<ReportFilterGroup, 'id' | 'label' | 'filters'>[]): Map<number, string>;
22
- export declare function groupParamKey(group: Pick<ReportFilterGroup, 'id' | 'label' | 'filters'>, groups: readonly Pick<ReportFilterGroup, 'id' | 'label' | 'filters'>[]): string;
23
- export declare function groupItemName(group: ReportFilterGroup, report: Report | null): string;
17
+ export declare function groupItemName(group: Pick<ReportFilterGroup, 'id'>): string;
24
18
  export declare function loadGroupOptions(group: ReportFilterGroup, reportData: ReportData, reportId: number): Observable<ReportFilterOptionPair[]>;
25
19
  export declare function resolveOptionValues(options$: Observable<ReportFilterOptionPair[]>, values: unknown[], label?: (value: unknown) => string | null): Observable<ReportFilterOptionPair[]>;
26
20
  export declare function matchOptions(options$: Observable<ReportFilterOptionPair[]>, keyword?: string): Observable<ReportFilterOptionPair[]>;
@@ -40,7 +34,7 @@ export declare function hasTimeSeriesChart(report: Report | null): boolean;
40
34
  export declare function isGranularityOffered(report: Report, granularity: ChartGranularity | null): boolean;
41
35
  export declare function groupByFilterItem(report: Report, initial?: ChartGranularity | null): IFilterConfigItem | null;
42
36
  export declare function groupBySignature(report: Report | null): string;
43
- export declare function groupValuesFromQuery(query: Record<string, any>, groups: ReportFilterGroup[], report: Report | null): {
37
+ export declare function groupValuesFromQuery(query: Record<string, any>, groups: ReportFilterGroup[]): {
44
38
  groupId: number;
45
39
  value: FilterGroupValue | null;
46
40
  }[];
@@ -3,7 +3,7 @@ import { ReportDrillStep } from './interfaces/report-drill-step.interface';
3
3
  import { ReportViewConfig } from './interfaces/report-view-config.interface';
4
4
  import { ReportViewSummary } from './interfaces/report-view-summary.interface';
5
5
  import { ReportView } from './interfaces/report-view.interface';
6
- import { ChartGranularity, FilterGroupDefault, FilterGroupValue, ReportFilterType, ReportRelativeRange, ReportSort } from './interfaces/report.interface';
6
+ import { ChartGranularity, FilterGroupDefault, FilterGroupValue, ReportFilterType, ReportRelativeRange } from './interfaces/report.interface';
7
7
  export declare const REPORT_VIEW_CONFIG_VERSION = 1;
8
8
  export declare const VIEW_CONFIG_MAX_BYTES: number;
9
9
  export declare const VIEW_CONFIG_MAX_GROUPS = 100;
@@ -27,10 +27,8 @@ export declare function viewDiffers(base: ReportViewConfig, current: ReportViewC
27
27
  export declare function sameStoredGroupValue(a: FilterGroupDefault | null | undefined, b: FilterGroupDefault | null | undefined): boolean;
28
28
  export declare function cleanDrillPath(path: readonly unknown[] | null | undefined): ReportDrillStep[];
29
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
30
  export declare function withStoredKeys(stored: ReportViewConfig | null | undefined, screen: ReportViewConfig): ReportViewConfig;
32
31
  export declare function viewDroppedCount(view: Pick<ReportView, 'config' | 'dropped'>, applied: ReportViewConfig): number;
33
32
  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
33
  export declare function chatViewFields(openView: Pick<ReportViewSummary, 'id'> | null, viewChanged: boolean): Pick<ReportChatViewerState, 'viewId' | 'viewChanged'>;
36
34
  export declare function finiteNumber(value: unknown): number | undefined;
@@ -3,7 +3,7 @@ import { ReportChatViewerFilter } from '../interfaces/report-chat-viewer-filter.
3
3
  import { ReportDrillStep } from '../interfaces/report-drill-step.interface';
4
4
  import { ReportFilterMatch } from '../interfaces/report-filter-match.type';
5
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';
6
+ import { ChartGranularity, FilterGroupDefault, FilterGroupValue, Report, ReportComponent, ReportFilterGroup, ReportFormatContext, ReportRelativeRange, ReportSort, ResolvedFilterValue } from '../interfaces/report.interface';
7
7
  import { ComponentDataState } from '../interfaces/report.interface';
8
8
  import * as i0 from "@angular/core";
9
9
  export declare function sameDefault(a: FilterGroupDefault | null, b: FilterGroupDefault | null): boolean;
@@ -42,7 +42,7 @@ export declare class ReportFilterStateService {
42
42
  private _serverSearches;
43
43
  private _listSearchChanged$;
44
44
  private _changed$;
45
- private _urlChanged$;
45
+ private _stateChanged$;
46
46
  private _revision;
47
47
  private _stateVersion;
48
48
  private _appliedVersion;
@@ -54,7 +54,7 @@ export declare class ReportFilterStateService {
54
54
  private _drillChanged$;
55
55
  private _baseConfig;
56
56
  private _temporary;
57
- init(report: Report, restore?: ReportUrlParams | null): void;
57
+ init(report: Report): void;
58
58
  value(groupId: number): FilterGroupValue | undefined;
59
59
  setValue(groupId: number, value: FilterGroupValue | null): void;
60
60
  resolveRelative(name: string): {
@@ -72,8 +72,7 @@ export declare class ReportFilterStateService {
72
72
  hiddenColumns(componentId: number): readonly string[];
73
73
  setHiddenColumns(componentId: number, names: readonly string[]): void;
74
74
  listSearchChanges(componentId: number): Observable<void>;
75
- urlChanges(): Observable<void>;
76
- urlSnapshot(report: Report): ReportUrlSnapshot;
75
+ changes(): Observable<void>;
77
76
  isFilterDisabled(filterId: number): boolean;
78
77
  toggleFilter(filterId: number, groupId: number): void;
79
78
  changesFor(component: ReportComponent): Observable<number | null>;
@@ -89,27 +88,20 @@ export declare class ReportFilterStateService {
89
88
  adoptDrill(componentId: number, path: readonly ReportDrillStep[]): boolean;
90
89
  snapshot(): ReportViewConfig;
91
90
  authoredConfig(): ReportViewConfig;
92
- apply(config: ReportViewConfig | null, urlDiff?: ReportViewConfig | null, base?: ReportViewConfig | null): void;
91
+ apply(config: ReportViewConfig | null, pageId?: number | null): void;
93
92
  resetToBase(): void;
94
93
  setBaseToScreen(): void;
95
94
  clearBase(): void;
96
95
  resetGroupsToBase(groupIds: readonly number[]): void;
97
96
  groupsDifferFromBase(groupIds: readonly number[]): boolean;
98
- rewriteUrl(): void;
99
97
  tileState(component: ReportComponent): ComponentDataState;
100
98
  livePreset(groupId: number): ReportRelativeRange | null;
101
99
  private _resolvedFields;
102
100
  private _livePreset;
103
101
  private _seed;
104
- private _restore;
105
- private _restoreGroups;
106
- private _restoreListSorts;
107
- private _restoreListSearches;
108
- private _restoreListHidden;
109
102
  private _dropUnsearchable;
110
103
  private _prune;
111
104
  private _withPreset;
112
- private _isDefault;
113
105
  private _listComponents;
114
106
  private _sortableColumns;
115
107
  private _defaultValue;
@@ -120,7 +112,6 @@ export declare class ReportFilterStateService {
120
112
  private _applyLayer;
121
113
  private _applyGroups;
122
114
  private _applyGroup;
123
- private _rollingValue;
124
115
  private _seedAuthored;
125
116
  private _clearTiles;
126
117
  private _applyTile;
@@ -1,6 +1,4 @@
1
- import { ParamMap, Params } from '@angular/router';
2
1
  import { Observable } from 'rxjs';
3
- import { ReportUrlValueName } from '../interfaces/report-url-value-name.type';
4
2
  import { ReportViewCreate } from '../interfaces/report-view-create.interface';
5
3
  import { ReportViewDeleted } from '../interfaces/report-view-deleted.interface';
6
4
  import { ReportViewSummary } from '../interfaces/report-view-summary.interface';
@@ -20,9 +18,8 @@ export declare class ReportViewService {
20
18
  private _canShare;
21
19
  private _openView;
22
20
  private _reportId;
23
- private _tooLongShown;
24
21
  serves(report: Report | null): boolean;
25
- open(report: Report, params: Params, pageId: number | null): Observable<void>;
22
+ open(report: Report, pageId: number | null): Observable<void>;
26
23
  refresh(report: Report): void;
27
24
  pick(reportViewId: number): Observable<ReportView>;
28
25
  openDefaults(): void;
@@ -32,20 +29,11 @@ export declare class ReportViewService {
32
29
  share(shared: boolean): Observable<ReportView>;
33
30
  setDefault(personalDefault: boolean): Observable<ReportView>;
34
31
  deleteOpen(): Observable<ReportViewDeleted>;
35
- urlParams(current: ParamMap, name?: ReportUrlValueName): Params;
36
32
  private _start;
37
- private _openDefault;
38
- private _openLink;
39
33
  private _openOn;
40
34
  private _changeOpen;
41
35
  private _putRow;
42
36
  private _readViews;
43
- private _readView;
44
- private _linkWrite;
45
- private _linkDays;
46
- private _groupDays;
47
- private _reportGroups;
48
- private _authoredSort;
49
37
  static ɵfac: i0.ɵɵFactoryDeclaration<ReportViewService, never>;
50
38
  static ɵprov: i0.ɵɵInjectableDeclaration<ReportViewService>;
51
39
  }
@@ -6,7 +6,6 @@ export declare class FsAiReportComponent {
6
6
  readonly reportId: import("@angular/core").InputSignal<number>;
7
7
  readonly basePath: import("@angular/core").InputSignal<string>;
8
8
  readonly pageQueryParam: import("@angular/core").InputSignal<string>;
9
- readonly urlState: import("@angular/core").InputSignal<boolean>;
10
9
  readonly deleted: import("@angular/core").OutputEmitterRef<number>;
11
10
  readonly renamed: import("@angular/core").OutputEmitterRef<Report>;
12
11
  readonly pageChanged: import("@angular/core").OutputEmitterRef<number>;
@@ -24,7 +23,6 @@ export declare class FsAiReportComponent {
24
23
  private _canvas?;
25
24
  private _reportData;
26
25
  private _reportAiChatData;
27
- private _router;
28
26
  private _route;
29
27
  private _filterState;
30
28
  private _filterOptions;
@@ -35,9 +33,7 @@ export declare class FsAiReportComponent {
35
33
  private _dialog;
36
34
  private _destroyRef;
37
35
  private _zone;
38
- private _restoredReportId;
39
- private _pageReported;
40
- private _pageWrite$;
36
+ private _openedReportId;
41
37
  private readonly _barVersion;
42
38
  constructor();
43
39
  toggleEditMode(): void;
@@ -56,10 +52,8 @@ export declare class FsAiReportComponent {
56
52
  private _chatViewerState;
57
53
  private _resizeTo;
58
54
  private _pageIdFromUrl;
59
- private _writeUrl;
60
55
  private _loadReport;
61
56
  private _openReport;
62
- private _urlParams;
63
57
  private _openAppliedPage;
64
58
  private _reportGroups;
65
59
  private _buildReportConfig;
@@ -67,5 +61,5 @@ export declare class FsAiReportComponent {
67
61
  private _groupByItem;
68
62
  private _matchItem;
69
63
  static ɵfac: i0.ɵɵFactoryDeclaration<FsAiReportComponent, never>;
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>;
64
+ 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; }; }, { "deleted": "deleted"; "renamed": "renamed"; "pageChanged": "pageChanged"; }, never, never, true, never>;
71
65
  }
@@ -1,12 +1,13 @@
1
1
  // Which page the canvas opens when its report input changes.
2
2
  //
3
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:
4
+ // this tab, so the canvas lands on the last page. The asked-for page does
5
+ // not beat it: that is a stale value the host still holds.
6
+ // - Otherwise the asked-for page (a ?page= the report opened with, or the
7
+ // open view's), when the report has it.
8
+ // - Another report that asks for no page it has opens on its first page:
8
9
  // 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
+ // - The same report keeps the page it shows when the asked-for page does not
10
11
  // resolve (it may still be loading); an index past the last page falls
11
12
  // back to the first.
12
13
  export function canvasLandingPage(input) {
@@ -22,4 +23,4 @@ export function canvasLandingPage(input) {
22
23
  const index = sameReport ? input.activePageIndex : 0;
23
24
  return index < pageCount ? index : 0;
24
25
  }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLWxhbmRpbmctcGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9jYW52YXMtbGFuZGluZy1wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLDZEQUE2RDtBQUM3RCxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDZFQUE2RTtBQUM3RSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLDRFQUE0RTtBQUM1RSxzREFBc0Q7QUFDdEQsMEVBQTBFO0FBQzFFLHlFQUF5RTtBQUN6RSx1QkFBdUI7QUFDdkIsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQXlCO0lBQ3pELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLGdCQUFnQixDQUFDO0lBRTdELElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JGLE9BQU8sU0FBUyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0UsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckQsT0FBTyxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FudmFzTGFuZGluZ0lucHV0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NhbnZhcy1sYW5kaW5nLWlucHV0LmludGVyZmFjZSc7XG5cblxuLy8gV2hpY2ggcGFnZSB0aGUgY2FudmFzIG9wZW5zIHdoZW4gaXRzIHJlcG9ydCBpbnB1dCBjaGFuZ2VzLlxuLy9cbi8vIC0gVGhlIHNhbWUgcmVwb3J0IHdpdGggbW9yZSBwYWdlcyB0aGFuIGJlZm9yZTogYSBwYWdlIHdhcyBqdXN0IGFkZGVkIGluXG4vLyAgIHRoaXMgdGFiLCBzbyB0aGUgY2FudmFzIGxhbmRzIG9uIHRoZSBsYXN0IHBhZ2UuIFRoZSBsaW5rJ3MgcGFnZSBkb2VzIG5vdFxuLy8gICBiZWF0IGl0OiB0aGF0IGlzIHRoZSBzdGFsZSB2YWx1ZSB0aGUgaG9zdCBzdGlsbCBob2xkcyBmcm9tIHRoZSBVUkwuXG4vLyAtIE90aGVyd2lzZSB0aGUgbGluaydzIChvciB0aGUgb3BlbiB2aWV3J3MpIHBhZ2UsIHdoZW4gdGhlIHJlcG9ydCBoYXMgaXQuXG4vLyAtIEFub3RoZXIgcmVwb3J0IHdob3NlIGxpbmsgbmFtZXMgbm8gcGFnZSBpdCBoYXMgb3BlbnMgb24gaXRzIGZpcnN0IHBhZ2U6XG4vLyAgIHRoZSBvbGQgcmVwb3J0J3MgcGFnZSBudW1iZXIgbWVhbnMgbm90aGluZyB0aGVyZS5cbi8vIC0gVGhlIHNhbWUgcmVwb3J0IGtlZXBzIHRoZSBwYWdlIGl0IHNob3dzIHdoZW4gdGhlIGxpbmsncyBwYWdlIGRvZXMgbm90XG4vLyAgIHJlc29sdmUgKGl0IG1heSBzdGlsbCBiZSBsb2FkaW5nKTsgYW4gaW5kZXggcGFzdCB0aGUgbGFzdCBwYWdlIGZhbGxzXG4vLyAgIGJhY2sgdG8gdGhlIGZpcnN0LlxuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc0xhbmRpbmdQYWdlKGlucHV0OiBDYW52YXNMYW5kaW5nSW5wdXQpOiBudW1iZXIge1xuICBjb25zdCBwYWdlQ291bnQgPSBpbnB1dC5wYWdlSWRzLmxlbmd0aDtcbiAgY29uc3Qgc2FtZVJlcG9ydCA9IGlucHV0LnJlcG9ydElkID09PSBpbnB1dC5wcmV2aW91c1JlcG9ydElkO1xuXG4gIGlmIChzYW1lUmVwb3J0ICYmIGlucHV0LnByZXZpb3VzUGFnZUNvdW50ID4gMCAmJiBwYWdlQ291bnQgPiBpbnB1dC5wcmV2aW91c1BhZ2VDb3VudCkge1xuICAgIHJldHVybiBwYWdlQ291bnQgLSAxO1xuICB9XG5cbiAgY29uc3QgbGlua2VkID0gaW5wdXQucGFnZUlkID09IG51bGwgPyAtMSA6IGlucHV0LnBhZ2VJZHMuaW5kZXhPZihpbnB1dC5wYWdlSWQpO1xuICBpZiAobGlua2VkID4gLTEpIHtcbiAgICByZXR1cm4gbGlua2VkO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSBzYW1lUmVwb3J0ID8gaW5wdXQuYWN0aXZlUGFnZUluZGV4IDogMDtcblxuICByZXR1cm4gaW5kZXggPCBwYWdlQ291bnQgPyBpbmRleCA6IDA7XG59XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLWxhbmRpbmctcGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9jYW52YXMtbGFuZGluZy1wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLDZEQUE2RDtBQUM3RCxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDRFQUE0RTtBQUM1RSw2REFBNkQ7QUFDN0QsMEVBQTBFO0FBQzFFLDBDQUEwQztBQUMxQyx5RUFBeUU7QUFDekUsc0RBQXNEO0FBQ3RELDZFQUE2RTtBQUM3RSx5RUFBeUU7QUFDekUsdUJBQXVCO0FBQ3ZCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUF5QjtJQUN6RCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUN2QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztJQUU3RCxJQUFJLFVBQVUsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyRixPQUFPLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXJELE9BQU8sS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbnZhc0xhbmRpbmdJbnB1dCB9IGZyb20gJy4vaW50ZXJmYWNlcy9jYW52YXMtbGFuZGluZy1pbnB1dC5pbnRlcmZhY2UnO1xuXG5cbi8vIFdoaWNoIHBhZ2UgdGhlIGNhbnZhcyBvcGVucyB3aGVuIGl0cyByZXBvcnQgaW5wdXQgY2hhbmdlcy5cbi8vXG4vLyAtIFRoZSBzYW1lIHJlcG9ydCB3aXRoIG1vcmUgcGFnZXMgdGhhbiBiZWZvcmU6IGEgcGFnZSB3YXMganVzdCBhZGRlZCBpblxuLy8gICB0aGlzIHRhYiwgc28gdGhlIGNhbnZhcyBsYW5kcyBvbiB0aGUgbGFzdCBwYWdlLiBUaGUgYXNrZWQtZm9yIHBhZ2UgZG9lc1xuLy8gICBub3QgYmVhdCBpdDogdGhhdCBpcyBhIHN0YWxlIHZhbHVlIHRoZSBob3N0IHN0aWxsIGhvbGRzLlxuLy8gLSBPdGhlcndpc2UgdGhlIGFza2VkLWZvciBwYWdlIChhID9wYWdlPSB0aGUgcmVwb3J0IG9wZW5lZCB3aXRoLCBvciB0aGVcbi8vICAgb3BlbiB2aWV3J3MpLCB3aGVuIHRoZSByZXBvcnQgaGFzIGl0LlxuLy8gLSBBbm90aGVyIHJlcG9ydCB0aGF0IGFza3MgZm9yIG5vIHBhZ2UgaXQgaGFzIG9wZW5zIG9uIGl0cyBmaXJzdCBwYWdlOlxuLy8gICB0aGUgb2xkIHJlcG9ydCdzIHBhZ2UgbnVtYmVyIG1lYW5zIG5vdGhpbmcgdGhlcmUuXG4vLyAtIFRoZSBzYW1lIHJlcG9ydCBrZWVwcyB0aGUgcGFnZSBpdCBzaG93cyB3aGVuIHRoZSBhc2tlZC1mb3IgcGFnZSBkb2VzIG5vdFxuLy8gICByZXNvbHZlIChpdCBtYXkgc3RpbGwgYmUgbG9hZGluZyk7IGFuIGluZGV4IHBhc3QgdGhlIGxhc3QgcGFnZSBmYWxsc1xuLy8gICBiYWNrIHRvIHRoZSBmaXJzdC5cbmV4cG9ydCBmdW5jdGlvbiBjYW52YXNMYW5kaW5nUGFnZShpbnB1dDogQ2FudmFzTGFuZGluZ0lucHV0KTogbnVtYmVyIHtcbiAgY29uc3QgcGFnZUNvdW50ID0gaW5wdXQucGFnZUlkcy5sZW5ndGg7XG4gIGNvbnN0IHNhbWVSZXBvcnQgPSBpbnB1dC5yZXBvcnRJZCA9PT0gaW5wdXQucHJldmlvdXNSZXBvcnRJZDtcblxuICBpZiAoc2FtZVJlcG9ydCAmJiBpbnB1dC5wcmV2aW91c1BhZ2VDb3VudCA+IDAgJiYgcGFnZUNvdW50ID4gaW5wdXQucHJldmlvdXNQYWdlQ291bnQpIHtcbiAgICByZXR1cm4gcGFnZUNvdW50IC0gMTtcbiAgfVxuXG4gIGNvbnN0IGxpbmtlZCA9IGlucHV0LnBhZ2VJZCA9PSBudWxsID8gLTEgOiBpbnB1dC5wYWdlSWRzLmluZGV4T2YoaW5wdXQucGFnZUlkKTtcbiAgaWYgKGxpbmtlZCA+IC0xKSB7XG4gICAgcmV0dXJuIGxpbmtlZDtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gc2FtZVJlcG9ydCA/IGlucHV0LmFjdGl2ZVBhZ2VJbmRleCA6IDA7XG5cbiAgcmV0dXJuIGluZGV4IDwgcGFnZUNvdW50ID8gaW5kZXggOiAwO1xufVxuIl19