@provoly/dashboard 0.21.11 → 0.22.2

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 (46) hide show
  1. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +1 -1
  2. package/esm2022/lib/core/components/select/select-a11y.service.mjs +10 -3
  3. package/esm2022/lib/core/model/automatic-grid-layout-definition.interface.mjs +2 -0
  4. package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
  5. package/esm2022/lib/core/model/public-api.mjs +2 -1
  6. package/esm2022/lib/dashboard/components/dashboard.component.mjs +17 -11
  7. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +2 -4
  8. package/esm2022/lib/dashboard/components/widgets/widget-placement/widget-placement.utils.mjs +79 -125
  9. package/esm2022/lib/dashboard/dashboard.module.mjs +5 -8
  10. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +1 -1
  11. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +3 -3
  12. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +7 -5
  13. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +3 -4
  14. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +4 -4
  15. package/esm2022/presentation/components/presentation.component.mjs +5 -6
  16. package/esm2022/search/search-home/search-home.component.mjs +1 -1
  17. package/esm2022/toolbox/components/select-grid-layout/select-grid-layout.component.mjs +6 -12
  18. package/esm2022/toolbox/style/css.component.mjs +2 -2
  19. package/fesm2022/provoly-dashboard-dataset.mjs +1 -1
  20. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  21. package/fesm2022/provoly-dashboard-presentation.mjs +7 -8
  22. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  23. package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
  24. package/fesm2022/provoly-dashboard-toolbox.mjs +7 -13
  25. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  26. package/fesm2022/provoly-dashboard.mjs +187 -290
  27. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  28. package/lib/core/model/automatic-grid-layout-definition.interface.d.ts +9 -0
  29. package/lib/core/model/manifest.interface.d.ts +2 -2
  30. package/lib/core/model/public-api.d.ts +1 -0
  31. package/lib/dashboard/components/dashboard.component.d.ts +4 -3
  32. package/lib/dashboard/components/widgets/header/widget-header.component.d.ts +2 -2
  33. package/lib/dashboard/components/widgets/widget-placement/widget-placement.utils.d.ts +14 -30
  34. package/lib/dashboard/dashboard.module.d.ts +2 -7
  35. package/lib/dashboard/store/dashboard.actions.d.ts +3 -3
  36. package/lib/dashboard/store/dashboard.selectors.d.ts +2 -2
  37. package/package.json +7 -7
  38. package/presentation/components/add-edit-presentation/add-edit-presentation.component.d.ts +2 -2
  39. package/search/search-home/search-home.component.d.ts +1 -1
  40. package/styles/components/_a-page-loader.scss +2 -4
  41. package/styles-theme/components-theme/_a-page-loader.theme.scss +9 -0
  42. package/styles-theme/main-theme.scss +1 -0
  43. package/toolbox/components/select-grid-layout/select-grid-layout.component.d.ts +4 -8
  44. package/toolbox/style/_o-select-grid-layout.scss +6 -1
  45. package/esm2022/lib/dashboard/store/proxy.utils.mjs +0 -72
  46. package/lib/dashboard/store/proxy.utils.d.ts +0 -26
@@ -0,0 +1,9 @@
1
+ import { WidgetLayout } from './manifest.interface';
2
+ export interface AutomaticGridLayoutDefinition {
3
+ type: string;
4
+ places: WidgetLayout[];
5
+ label?: string;
6
+ description?: string;
7
+ rows: number;
8
+ columns: number;
9
+ }
@@ -14,7 +14,7 @@ import { VegaWidgetOptions } from './widget-vega-manifest.interface';
14
14
  export interface ManifestDescription {
15
15
  id: string;
16
16
  name: string;
17
- description: string;
17
+ description?: string;
18
18
  manifestUrl: string;
19
19
  image: string;
20
20
  cover: boolean;
@@ -35,7 +35,7 @@ export interface GridLayout {
35
35
  columns?: number;
36
36
  gap?: number;
37
37
  rows?: number;
38
- layout?: DashboardGridLayout;
38
+ layout?: string;
39
39
  }
40
40
  export declare enum DashboardGridLayout {
41
41
  FULL = "1",
@@ -24,3 +24,4 @@ export * from './dataset.interface';
24
24
  export * from './filter.interface';
25
25
  export * from './admin-api.model';
26
26
  export * from './display-options.interface';
27
+ export * from './automatic-grid-layout-definition.interface';
@@ -34,11 +34,12 @@ export declare class DashboardComponent extends SubscriptionnerDirective impleme
34
34
  set staticDashboard(window: DashboardManifest);
35
35
  CloseOnDragOut: boolean;
36
36
  displayOptions?: DisplayOptions;
37
+ noBackground: boolean;
37
38
  gridRef: ElementRef;
38
39
  private canCalculateView;
39
40
  targetIndexes$: Observable<number[]>;
40
41
  dashboardParams: DashboardCellParams;
41
- private breakpoint;
42
+ breakpoint: number;
42
43
  rowHeight: EventEmitter<number>;
43
44
  rows: EventEmitter<number>;
44
45
  currentlyModifiedManifest: WidgetManifest | null;
@@ -52,7 +53,7 @@ export declare class DashboardComponent extends SubscriptionnerDirective impleme
52
53
  gridTemplateRows$: Observable<string>;
53
54
  gridTemplateColumns$: Observable<string>;
54
55
  DashboardGridLayout: typeof DashboardGridLayout;
55
- layout: DashboardGridLayout;
56
+ layout: string;
56
57
  backgroundArea$: Observable<string>;
57
58
  private confirmRemoveRef?;
58
59
  Array: any;
@@ -101,5 +102,5 @@ export declare class DashboardComponent extends SubscriptionnerDirective impleme
101
102
  cancelRemoveConfirm(): void;
102
103
  trackWidgets(index: number, widgetManifest: WidgetManifest): string;
103
104
  static ɵfac: i0.ɵɵFactoryDeclaration<DashboardComponent, never>;
104
- static ɵcmp: i0.ɵɵComponentDeclaration<DashboardComponent, "pry-dashboard", never, { "staticDashboard": { "alias": "staticDashboard"; "required": false; }; "CloseOnDragOut": { "alias": "CloseOnDragOut"; "required": false; }; "displayOptions": { "alias": "displayOptions"; "required": false; }; }, { "rowHeight": "rowHeight"; "rows": "rows"; }, never, never, false, never>;
105
+ static ɵcmp: i0.ɵɵComponentDeclaration<DashboardComponent, "pry-dashboard", never, { "staticDashboard": { "alias": "staticDashboard"; "required": false; }; "CloseOnDragOut": { "alias": "CloseOnDragOut"; "required": false; }; "displayOptions": { "alias": "displayOptions"; "required": false; }; "noBackground": { "alias": "noBackground"; "required": false; }; "breakpoint": { "alias": "breakpoint"; "required": false; }; }, { "rowHeight": "rowHeight"; "rows": "rows"; }, never, never, false, never>;
105
106
  }
@@ -2,7 +2,7 @@ import { Overlay } from '@angular/cdk/overlay';
2
2
  import { ElementRef, EventEmitter, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';
3
3
  import { Store } from '@ngrx/store';
4
4
  import { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';
5
- import { DashboardGridLayout, DashboardManifest, WidgetManifest } from '../../../../core/model/manifest.interface';
5
+ import { DashboardManifest, WidgetManifest } from '../../../../core/model/manifest.interface';
6
6
  import { Widget } from '../../../../core/model/widget.interface';
7
7
  import { Dataset, DataSource, NamedQuery } from '../../../../core/store/data-source/data-source.model';
8
8
  import { LibraryTypes } from '../../../../core/store/image/image.service';
@@ -75,7 +75,7 @@ export declare class PryWidgetHeaderComponent extends SubscriptionnerDirective i
75
75
  constructor(store: Store, overlay: Overlay, viewContainerRef: ViewContainerRef, toolboxMenuService: ToolboxMenuService);
76
76
  onArrowUp(): void;
77
77
  onArrowDown(): void;
78
- get currentLayout(): DashboardGridLayout;
78
+ get currentLayout(): string;
79
79
  get hasGrid(): boolean;
80
80
  get currentPlacementIndex(): number;
81
81
  menuOpen($event?: MouseEvent, forceOpen?: boolean): void;
@@ -1,39 +1,23 @@
1
1
  import { WidgetLayout, WidgetManifest } from '../../../../core/model/manifest.interface';
2
- import { DashboardCellParams } from '../../../store/dashboard.actions';
2
+ import { AutomaticGridLayoutDefinition } from '../../../../core/model/automatic-grid-layout-definition.interface';
3
3
  export declare const createPlacedWidgetCopy: (widget: WidgetManifest, position: WidgetLayout) => WidgetManifest;
4
- export type LayoutSizeImplementationFn = (outLayout: {
5
- x: number;
6
- y: number;
7
- height: number;
8
- width: number;
9
- }, params: Partial<DashboardCellParams>) => {
10
- x: number;
11
- y: number;
12
- height: number;
13
- width: number;
14
- }[];
15
- export type LayoutPlacementOptionImplementationFn = (widgetToPlace: WidgetManifest, sizes: WidgetLayout[], params: Partial<DashboardCellParams>) => WidgetManifest[];
16
4
  export declare const WidgetPlacementUtils: {
17
- layoutSizeImplementations: {
18
- [layout: string]: LayoutSizeImplementationFn;
19
- };
20
- placementOptionsImplementations: {
21
- [layout: string]: LayoutPlacementOptionImplementationFn;
22
- };
23
- layoutImages: {
24
- [layout: string]: string;
25
- };
26
- addLayoutImplementation: (type: string, fnSizeImplementation: LayoutSizeImplementationFn, fnPlacementOptionImplementation: LayoutPlacementOptionImplementationFn, image?: string) => void;
27
- getLayouts: () => {
28
- key: string;
29
- image: string;
30
- }[];
5
+ layouts: AutomaticGridLayoutDefinition[];
6
+ addGridLayout(layout: AutomaticGridLayoutDefinition): void;
31
7
  isLeft: (w1: WidgetManifest, w2: WidgetManifest) => boolean;
32
8
  isBelow: (w1: WidgetManifest, w2: WidgetManifest) => boolean;
33
9
  areDisjoint: (w1: WidgetManifest, w2: WidgetManifest) => boolean;
34
- placementOptions: (widgetToPlace: WidgetManifest, layout: string, params: Partial<DashboardCellParams>) => WidgetManifest[];
35
- getLayoutSize(layout: string, params: Partial<DashboardCellParams>): WidgetLayout[];
10
+ placementOptions: (widgetToPlace: WidgetManifest, layout: string) => {
11
+ layout: WidgetLayout;
12
+ title?: string | undefined;
13
+ type: string;
14
+ options?: import("../../../../core/model/manifest.interface").WidgetOptions | undefined;
15
+ datasource?: string | string[] | undefined;
16
+ header?: boolean | undefined;
17
+ cover?: boolean | undefined;
18
+ contextMenu?: boolean | undefined;
19
+ }[];
36
20
  swapArrayElements: (arr: any[], x: number, y: number) => any[];
37
21
  getOverlaps: (widgets: WidgetManifest[]) => WidgetManifest[][];
38
- placesForLayout(layout: string): number;
22
+ getLayout(layout: string): AutomaticGridLayoutDefinition | undefined;
39
23
  };
@@ -1,9 +1,9 @@
1
1
  import { ModuleWithProviders } from '@angular/core';
2
2
  import { Store } from '@ngrx/store';
3
3
  import { WidgetDefinition } from './components/widgets/widget-instanciator/widgets-definition.model';
4
- import { LayoutPlacementOptionImplementationFn, LayoutSizeImplementationFn } from './components/widgets/widget-placement/widget-placement.utils';
5
4
  import { FilterDefinition } from './filter/filter-factory.service';
6
5
  import { TooltipDefinition } from './tooltip/tooltip-factory.service';
6
+ import { AutomaticGridLayoutDefinition } from '../core/model/automatic-grid-layout-definition.interface';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "./components/dashboard.component";
9
9
  import * as i2 from "./components/widgets/widget-instanciator/widget-instanciator.component";
@@ -51,12 +51,7 @@ export declare class PryDashboardModule {
51
51
  [key: string]: TooltipDefinition;
52
52
  }, filterReference: {
53
53
  [key: string]: FilterDefinition;
54
- }, additionalGridImplementations?: {
55
- type: string;
56
- sizeImpl: LayoutSizeImplementationFn;
57
- placementImpl: LayoutPlacementOptionImplementationFn;
58
- image?: string;
59
- }[]): ModuleWithProviders<PryDashboardModule>;
54
+ }, additionalGridLayouts?: AutomaticGridLayoutDefinition[]): ModuleWithProviders<PryDashboardModule>;
60
55
  constructor(store: Store);
61
56
  static ɵfac: i0.ɵɵFactoryDeclaration<PryDashboardModule, never>;
62
57
  static ɵmod: i0.ɵɵNgModuleDeclaration<PryDashboardModule, [typeof i1.DashboardComponent, typeof i2.WidgetInstanciatorComponent, typeof i3.WidgetPlaceholderComponent, typeof i4.SettingsComponent, typeof i5.ManifestsComponent, typeof i6.MetadataComponent, typeof i7.ContextMenuComponent, typeof i8.DataWidgetComponent, typeof i9.BaseWidgetComponent, typeof i10.PryWidgetHeaderComponent, typeof i11.PryObjectEditionComponent, typeof i12.VizualizeRawComponent, typeof i13.ResultSetSizePipe, typeof i14.DefaultTooltipComponent, typeof i15.BaseTooltipComponent, typeof i16.BaseFilterComponent, typeof i17.FilterInstanciatorComponent, typeof i18.FilterGroupComponent, typeof i19.DatasourceSelectorComponent, typeof i20.PryFilterGroupCssComponent], [typeof i21.CommonModule, typeof i22.FormsModule, typeof i23.PrySelectModule, typeof i24.PryIconModule, typeof i25.OverlayModule, typeof i26.PryCoreModule, typeof i27.PryCheckboxModule, typeof i28.PryToggleModule, typeof i29.PryOverlayModule, typeof i30.StoreFeatureModule, typeof i31.EffectsFeatureModule, typeof i32.PryDatePickerModule, typeof i33.PryI18nModule], [typeof i1.DashboardComponent, typeof i2.WidgetInstanciatorComponent, typeof i3.WidgetPlaceholderComponent, typeof i4.SettingsComponent, typeof i5.ManifestsComponent, typeof i6.MetadataComponent, typeof i7.ContextMenuComponent, typeof i8.DataWidgetComponent, typeof i9.BaseWidgetComponent, typeof i10.PryWidgetHeaderComponent, typeof i11.PryObjectEditionComponent, typeof i12.VizualizeRawComponent, typeof i13.ResultSetSizePipe, typeof i14.DefaultTooltipComponent, typeof i15.BaseTooltipComponent, typeof i16.BaseFilterComponent, typeof i17.FilterInstanciatorComponent, typeof i18.FilterGroupComponent, typeof i19.DatasourceSelectorComponent]>;
@@ -2,7 +2,7 @@ import { PrySnackMessage } from '../../core/components/snackbar/snack.interface'
2
2
  import { DisplayOptions } from '../../core/model/display-options.interface';
3
3
  import { Filter } from '../../core/model/filter.interface';
4
4
  import { Item } from '../../core/model/item.interface';
5
- import { DashboardGridLayout, DashboardManifest, GlobalManifest, ManifestDescription, WidgetManifest } from '../../core/model/manifest.interface';
5
+ import { DashboardManifest, GlobalManifest, ManifestDescription, WidgetManifest } from '../../core/model/manifest.interface';
6
6
  import { Relation } from '../../core/model/relation.interface';
7
7
  import { OrderValue } from '../../core/model/result-order.interface';
8
8
  import { ResultSet, ResultSets } from '../../core/model/result-set.interface';
@@ -384,9 +384,9 @@ export declare const DashboardActions: {
384
384
  asc: OrderValue;
385
385
  } & import("@ngrx/store/src/models").TypedAction<"[Dashboard] (bus) quick order">>;
386
386
  setGridLayout: import("@ngrx/store").ActionCreator<"[Dashboard] set grid layout", (props: {
387
- layout: DashboardGridLayout;
387
+ layout: string;
388
388
  }) => {
389
- layout: DashboardGridLayout;
389
+ layout: string;
390
390
  } & import("@ngrx/store/src/models").TypedAction<"[Dashboard] set grid layout">>;
391
391
  propagateGridLayout: import("@ngrx/store").ActionCreator<"[Dashboard] (bus) change grid layout", (props: {
392
392
  manifest: DashboardManifest;
@@ -1,7 +1,7 @@
1
1
  import { MemoizedSelector } from '@ngrx/store';
2
2
  import { Filter, FilterContext } from '../../core/model/filter.interface';
3
3
  import { Item } from '../../core/model/item.interface';
4
- import { DashboardGridLayout, DashboardManifest, GlobalManifest, WidgetLayout, WidgetManifest } from '../../core/model/manifest.interface';
4
+ import { DashboardManifest, GlobalManifest, WidgetLayout, WidgetManifest } from '../../core/model/manifest.interface';
5
5
  import { ResultOrder } from '../../core/model/result-order.interface';
6
6
  import { ResultSets } from '../../core/model/result-set.interface';
7
7
  import { DashboardCellParams } from './dashboard.actions';
@@ -88,7 +88,7 @@ export declare const DashboardSelectors: {
88
88
  staticManifest: GlobalManifest;
89
89
  loading: boolean;
90
90
  }) => import("../../core/model/manifest.interface").ManifestDescription[]>;
91
- gridLayout: MemoizedSelector<object, DashboardGridLayout, (s1: DashboardManifest) => DashboardGridLayout>;
91
+ gridLayout: MemoizedSelector<object, string, (s1: DashboardManifest) => string>;
92
92
  tenants: MemoizedSelector<object, string[], (s1: {
93
93
  sender: string;
94
94
  tenants: string[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@provoly/dashboard",
3
- "version": "0.21.11",
3
+ "version": "0.22.2",
4
4
  "type": "commonjs",
5
5
  "peerDependencies": {
6
6
  "@angular/cdk": "14.x || 15.x || 16.x",
@@ -234,18 +234,18 @@
234
234
  "esm": "./esm2022/pipeline-components/noop/provoly-dashboard-pipeline-components-noop.mjs",
235
235
  "default": "./fesm2022/provoly-dashboard-pipeline-components-noop.mjs"
236
236
  },
237
- "./pipeline-components/output-dataset": {
238
- "types": "./pipeline-components/output-dataset/index.d.ts",
239
- "esm2022": "./esm2022/pipeline-components/output-dataset/provoly-dashboard-pipeline-components-output-dataset.mjs",
240
- "esm": "./esm2022/pipeline-components/output-dataset/provoly-dashboard-pipeline-components-output-dataset.mjs",
241
- "default": "./fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs"
242
- },
243
237
  "./pipeline-components/subgraph": {
244
238
  "types": "./pipeline-components/subgraph/index.d.ts",
245
239
  "esm2022": "./esm2022/pipeline-components/subgraph/provoly-dashboard-pipeline-components-subgraph.mjs",
246
240
  "esm": "./esm2022/pipeline-components/subgraph/provoly-dashboard-pipeline-components-subgraph.mjs",
247
241
  "default": "./fesm2022/provoly-dashboard-pipeline-components-subgraph.mjs"
248
242
  },
243
+ "./pipeline-components/output-dataset": {
244
+ "types": "./pipeline-components/output-dataset/index.d.ts",
245
+ "esm2022": "./esm2022/pipeline-components/output-dataset/provoly-dashboard-pipeline-components-output-dataset.mjs",
246
+ "esm": "./esm2022/pipeline-components/output-dataset/provoly-dashboard-pipeline-components-output-dataset.mjs",
247
+ "default": "./fesm2022/provoly-dashboard-pipeline-components-output-dataset.mjs"
248
+ },
249
249
  "./tooltips/attribute": {
250
250
  "types": "./tooltips/attribute/index.d.ts",
251
251
  "esm2022": "./esm2022/tooltips/attribute/provoly-dashboard-tooltips-attribute.mjs",
@@ -2,7 +2,7 @@ import { AfterViewInit, EventEmitter, OnInit } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
3
  import { Router } from '@angular/router';
4
4
  import { Store } from '@ngrx/store';
5
- import { DashboardGridLayout, GlobalManifest, IMetadata, LibraryTypes, ManifestDescription, SubscriptionnerDirective } from '@provoly/dashboard';
5
+ import { GlobalManifest, IMetadata, LibraryTypes, ManifestDescription, SubscriptionnerDirective } from '@provoly/dashboard';
6
6
  import { BehaviorSubject, Observable } from 'rxjs';
7
7
  import { MetaEventType } from '@provoly/dashboard/components/metadata-editor';
8
8
  import * as i0 from "@angular/core";
@@ -17,7 +17,7 @@ export declare class PryAddEditPresentationComponent extends SubscriptionnerDire
17
17
  image: string;
18
18
  goBack: EventEmitter<void>;
19
19
  type: LibraryTypes;
20
- chosenLayout: DashboardGridLayout;
20
+ chosenLayout: string;
21
21
  possibleThemes: string[];
22
22
  metadataDefs: IMetadata[] | undefined;
23
23
  metadataThemeId: string;
@@ -48,7 +48,7 @@ export declare class PrySearchHomeComponent implements OnInit, OnDestroy {
48
48
  }>;
49
49
  refreshId: string;
50
50
  deleteError$?: Observable<any>;
51
- layout$: Observable<DashboardGridLayout>;
51
+ layout$: Observable<string>;
52
52
  DashboardGridLayout: typeof DashboardGridLayout;
53
53
  constructor(store: Store, overlay: Overlay, viewContainerRef: ViewContainerRef, pryDialog: PryDialogService);
54
54
  ngOnInit(): void;
@@ -3,12 +3,10 @@
3
3
  flex-direction: column;
4
4
  align-items: center;
5
5
  justify-content: center;
6
+ width: 100%;
7
+ height: 100%;
6
8
 
7
9
  position: absolute;
8
10
 
9
11
  z-index: 999; // 1 smaller than the .cdk-overlay-container
10
-
11
- &.backdrop {
12
- background-color: rgba(0, 0, 0, 0.5);
13
- }
14
12
  }
@@ -0,0 +1,9 @@
1
+ @use '../../styles/abstracts' as *;
2
+ @use '../abstracts-theme/variables.theme' as *;
3
+
4
+ .a-page-loader {
5
+ &.backdrop {
6
+ color: themed($theme-map, 'color', 'accent', 50);
7
+ background-color: rgba(0, 0, 0, 0.5);
8
+ }
9
+ }
@@ -8,6 +8,7 @@
8
8
  @use 'components-theme/a-form-field.theme' as *;
9
9
  @use 'components-theme/a-label.theme' as *;
10
10
  @use 'components-theme/a-link.theme' as *;
11
+ @use 'components-theme/a-page-loader.theme' as *;
11
12
  @use 'components-theme/a-pastille.theme' as *;
12
13
  @use 'components-theme/a-range-slider.theme' as *;
13
14
  @use 'components-theme/a-table.theme' as *;
@@ -1,19 +1,15 @@
1
1
  import { Overlay, OverlayRef } from '@angular/cdk/overlay';
2
2
  import { ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';
3
3
  import { Store } from '@ngrx/store';
4
- import { DashboardGridLayout } from '@provoly/dashboard';
4
+ import { AutomaticGridLayoutDefinition } from '@provoly/dashboard';
5
5
  import { Observable } from 'rxjs';
6
6
  import { ToolboxActionComponent } from '../toolbox-action/toolbox-action.component';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class SelectGridLayoutComponent extends ToolboxActionComponent {
9
9
  private overlay;
10
10
  private viewContainerRef;
11
- availableLayouts$: Observable<{
12
- translation: any;
13
- value: any;
14
- image: string;
15
- }[]>;
16
- chosenLayout: DashboardGridLayout;
11
+ availableLayouts$: Observable<AutomaticGridLayoutDefinition[]>;
12
+ chosenLayout: string;
17
13
  canDispatch: boolean;
18
14
  template: TemplateRef<any>;
19
15
  firstButton: ElementRef<HTMLButtonElement>;
@@ -21,7 +17,7 @@ export declare class SelectGridLayoutComponent extends ToolboxActionComponent {
21
17
  modalOpened: boolean;
22
18
  overlayRef?: OverlayRef;
23
19
  constructor(store: Store, overlay: Overlay, viewContainerRef: ViewContainerRef);
24
- changeLayout(layout: DashboardGridLayout): void;
20
+ changeLayout(layout: string): void;
25
21
  toggleGridChoiceModal(): void;
26
22
  openWithTemplate(): void;
27
23
  validate(): void;
@@ -25,7 +25,7 @@
25
25
  align-items: center;
26
26
  justify-content: space-around;
27
27
  width: 100%;
28
- height: 100%;
28
+ height: toRem(300);
29
29
  padding: toRem(15);
30
30
  border-radius: 0;
31
31
  text-align: left;
@@ -39,5 +39,10 @@
39
39
  font-size: 13px;
40
40
  }
41
41
  }
42
+
43
+ &__preview {
44
+ height: toRem(100);
45
+ width: 100%;
46
+ }
42
47
  }
43
48
  }
@@ -1,72 +0,0 @@
1
- import { SearchActions } from '../../core/store/search/search.actions';
2
- import { SearchSelectors } from '../../core/store/search/search.selectors';
3
- import { ClassSelectors } from '../../core/store/class/class.selectors';
4
- export class ProxyUtils {
5
- static { this.requested = {}; }
6
- static init(store) {
7
- this.store = store;
8
- store.select(SearchSelectors.searchLoading).subscribe((searchLoading) => {
9
- this.currentlyLoading = searchLoading;
10
- });
11
- store.select(ClassSelectors.classes).subscribe((classes) => {
12
- this.classes = classes;
13
- });
14
- }
15
- static ResultSets(rss) {
16
- return Object.entries(rss)
17
- .map(([key, value]) => ({ key, proxy: ProxyUtils.ResultSet(value, key) }))
18
- .reduce((p, c) => ({ ...p, [c.key]: c.proxy }), {});
19
- }
20
- static ResultSet(rs, rsId) {
21
- return {
22
- relations: rs.relations ?? [],
23
- autoRefreshInterval: rs.autoRefreshInterval,
24
- merged: rs.merged,
25
- count: rs.count,
26
- items: Object.keys(rs.items ?? {})
27
- .map((classId) => ({
28
- classId: classId,
29
- items: rs.items[classId].map((item) => ProxyUtils.Item(item, rsId))
30
- }))
31
- .reduce((p, c) => ({ ...p, [c.classId]: c.items }), {})
32
- };
33
- }
34
- static Item(item, rsId) {
35
- return {
36
- id: item.id,
37
- oClass: item.oClass,
38
- metadata: item.metadata,
39
- attributes: new Proxy(JSON.parse(JSON.stringify(item.attributes)), {
40
- get: (original, prop, proxy) => {
41
- if (prop === 'toJSON') {
42
- return () => original;
43
- }
44
- else {
45
- if (original[prop]) {
46
- return original[prop];
47
- }
48
- else {
49
- const clazz = this.classes.find((cl) => cl.id === item.oClass);
50
- const attr = clazz?.attributes.find((attr) => attr.technicalName === prop);
51
- if (!!attr) {
52
- if (!this.currentlyLoading.includes(rsId) && this.requested[prop] !== false) {
53
- this.requested[prop] = false;
54
- this.store.dispatch(SearchActions.getDatasourceItems({ id: rsId, excludeGeo: false, from: 'ProxyUtils.Item()' }));
55
- }
56
- }
57
- else {
58
- console.warn(`Trying to access property ${prop} from class ${clazz?.name} but does not exist in model`);
59
- }
60
- }
61
- }
62
- return {
63
- type: 'VALUE',
64
- value: '',
65
- visible: false
66
- };
67
- }
68
- })
69
- };
70
- }
71
- }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL3N0b3JlL3Byb3h5LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBR3hFLE1BQU0sT0FBTyxVQUFVO2FBR2QsY0FBUyxHQUFHLEVBQWlDLENBQUM7SUFHckQsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFZO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN6RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQWU7UUFDL0IsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQzthQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxD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VSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUM3RixDQUFDO2lDQUNIOzZCQUNGO2lDQUFNO2dDQUNMLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNkJBQTZCLElBQWMsZUFBZSxLQUFLLEVBQUUsSUFBSSw4QkFBOEIsQ0FDcEcsQ0FBQzs2QkFDSDt5QkFDRjtxQkFDRjtvQkFDRCxPQUFPO3dCQUNMLElBQUksRUFBRSxPQUFPO3dCQUNiLEtBQUssRUFBRSxFQUFFO3dCQUNULE9BQU8sRUFBRSxLQUFLO3FCQUNmLENBQUM7Z0JBQ0osQ0FBQzthQUNGLENBQUM7U0FDSyxDQUFDO0lBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQXR0cmlidXRlTXVsdGlwbGVWYWx1ZSwgQXR0cmlidXRlU2ltcGxlVmFsdWUsIEl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL2l0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlc3VsdFNldCwgUmVzdWx0U2V0cyB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvcmVzdWx0LXNldC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VhcmNoQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvc2VhcmNoL3NlYXJjaC5hY3Rpb25zJztcbmltcG9ydCB7IFNlYXJjaFNlbGVjdG9ycyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvc2VhcmNoL3NlYXJjaC5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgQ2xhc3NTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NsYXNzL2NsYXNzLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBDbGFzcyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvY2xhc3MvY2xhc3MuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIFByb3h5VXRpbHMge1xuICBzdGF0aWMgc3RvcmU6IFN0b3JlO1xuICBzdGF0aWMgY3VycmVudGx5TG9hZGluZzogc3RyaW5nW107XG4gIHN0YXRpYyByZXF1ZXN0ZWQgPSB7fSBhcyB7IFtyc0lkOiBzdHJpbmddOiBib29sZWFuIH07XG4gIHN0YXRpYyBjbGFzc2VzOiBDbGFzc1tdO1xuXG4gIHN0YXRpYyBpbml0KHN0b3JlOiBTdG9yZSkge1xuICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICBzdG9yZS5zZWxlY3QoU2VhcmNoU2VsZWN0b3JzLnNlYXJjaExvYWRpbmcpLnN1YnNjcmliZSgoc2VhcmNoTG9hZGluZykgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50bHlMb2FkaW5nID0gc2VhcmNoTG9hZGluZztcbiAgICB9KTtcbiAgICBzdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3Nlcykuc3Vic2NyaWJlKChjbGFzc2VzKSA9PiB7XG4gICAgICB0aGlzLmNsYXNzZXMgPSBjbGFzc2VzO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIFJlc3VsdFNldHMocnNzOiBSZXN1bHRTZXRzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJzcylcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCBwcm94eTogUHJveHlVdGlscy5SZXN1bHRTZXQodmFsdWUsIGtleSkgfSkpXG4gICAgICAucmVkdWNlKChwLCBjKSA9PiAoeyAuLi5wLCBbYy5rZXldOiBjLnByb3h5IH0pLCB7fSk7XG4gIH1cblxuICBzdGF0aWMgUmVzdWx0U2V0KHJzOiBSZXN1bHRTZXQsIHJzSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICByZWxhdGlvbnM6IHJzLnJlbGF0aW9ucyA/PyBbXSxcbiAgICAgIGF1dG9SZWZyZXNoSW50ZXJ2YWw6IHJzLmF1dG9SZWZyZXNoSW50ZXJ2YWwsXG4gICAgICBtZXJnZWQ6IHJzLm1lcmdlZCxcbiAgICAgIGNvdW50OiBycy5jb3VudCxcbiAgICAgIGl0ZW1zOiBPYmplY3Qua2V5cyhycy5pdGVtcyA/PyB7fSlcbiAgICAgICAgLm1hcCgoY2xhc3NJZCkgPT4gKHtcbiAgICAgICAgICBjbGFzc0lkOiBjbGFzc0lkLFxuICAgICAgICAgIGl0ZW1zOiBycy5pdGVtc1tjbGFzc0lkXS5tYXAoKGl0ZW0pID0+IFByb3h5VXRpbHMuSXRlbShpdGVtLCByc0lkKSlcbiAgICAgICAgfSkpXG4gICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+ICh7IC4uLnAsIFtjLmNsYXNzSWRdOiBjLml0ZW1zIH0pLCB7fSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgSXRlbShpdGVtOiBJdGVtLCByc0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICBvQ2xhc3M6IGl0ZW0ub0NsYXNzLFxuICAgICAgbWV0YWRhdGE6IGl0ZW0ubWV0YWRhdGEsXG4gICAgICBhdHRyaWJ1dGVzOiBuZXcgUHJveHk8e1xuICAgICAgICBba2V5OiBzdHJpbmddOiBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSB8IEF0dHJpYnV0ZU11bHRpcGxlVmFsdWU7XG4gICAgICB9PihKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGl0ZW0uYXR0cmlidXRlcykpLCB7XG4gICAgICAgIGdldDogKG9yaWdpbmFsLCBwcm9wLCBwcm94eSkgPT4ge1xuICAgICAgICAgIGlmIChwcm9wID09PSAndG9KU09OJykge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IG9yaWdpbmFsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAob3JpZ2luYWxbcHJvcCBhcyBzdHJpbmddKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFtwcm9wIGFzIHN0cmluZ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBjbGF6eiA9IHRoaXMuY2xhc3Nlcy5maW5kKChjbCkgPT4gY2wuaWQgPT09IGl0ZW0ub0NsYXNzKTtcbiAgICAgICAgICAgICAgY29uc3QgYXR0ciA9IGNsYXp6Py5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSA9PT0gcHJvcCk7XG4gICAgICAgICAgICAgIGlmICghIWF0dHIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudGx5TG9hZGluZy5pbmNsdWRlcyhyc0lkKSAmJiB0aGlzLnJlcXVlc3RlZFtwcm9wIGFzIHN0cmluZ10gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RlZFtwcm9wIGFzIHN0cmluZ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICAgIFNlYXJjaEFjdGlvbnMuZ2V0RGF0YXNvdXJjZUl0ZW1zKHsgaWQ6IHJzSWQsIGV4Y2x1ZGVHZW86IGZhbHNlLCBmcm9tOiAnUHJveHlVdGlscy5JdGVtKCknIH0pXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICBgVHJ5aW5nIHRvIGFjY2VzcyBwcm9wZXJ0eSAke3Byb3AgYXMgc3RyaW5nfSBmcm9tIGNsYXNzICR7Y2xheno/Lm5hbWV9IGJ1dCBkb2VzIG5vdCBleGlzdCBpbiBtb2RlbGBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnVkFMVUUnLFxuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gYXMgSXRlbTtcbiAgfVxufVxuIl19
@@ -1,26 +0,0 @@
1
- import { Store } from '@ngrx/store';
2
- import { ResultSet, ResultSets } from '../../core/model/result-set.interface';
3
- import { Class } from '../../core/store/class/class.interface';
4
- export declare class ProxyUtils {
5
- static store: Store;
6
- static currentlyLoading: string[];
7
- static requested: {
8
- [rsId: string]: boolean;
9
- };
10
- static classes: Class[];
11
- static init(store: Store): void;
12
- static ResultSets(rss: ResultSets): {};
13
- static ResultSet(rs: ResultSet, rsId: string): {
14
- relations: import("@provoly/dashboard").Relation[];
15
- autoRefreshInterval: number | undefined;
16
- merged: number | undefined;
17
- count: {
18
- [classId: string]: {
19
- count: number;
20
- accurate: boolean;
21
- };
22
- } | undefined;
23
- items: {};
24
- };
25
- private static Item;
26
- }