@sisense/sdk-ui-angular 2.3.0 → 2.4.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.
Files changed (55) hide show
  1. package/dist/esm2020/lib/component-wrapper-helpers/context-connectors.mjs +21 -13
  2. package/dist/esm2020/lib/components/dashboard/dashboard-by-id.component.mjs +9 -9
  3. package/dist/esm2020/lib/components/dashboard/dashboard.component.mjs +9 -9
  4. package/dist/esm2020/lib/components/filters/filters-panel.component.mjs +129 -0
  5. package/dist/esm2020/lib/components/filters/index.mjs +2 -1
  6. package/dist/esm2020/lib/components/widgets/widget.component.mjs +4 -4
  7. package/dist/esm2020/lib/helpers/widget-props-preact-translator.mjs +5 -2
  8. package/dist/esm2020/lib/sdk-ui-core-exports.mjs +2 -2
  9. package/dist/esm2020/lib/sdk-ui.module.mjs +6 -2
  10. package/dist/esm2020/lib/services/custom-widgets.service.mjs +53 -0
  11. package/dist/esm2020/lib/services/dashboard.service.mjs +2 -2
  12. package/dist/esm2020/lib/services/dynamic-renderer.service.mjs +45 -0
  13. package/dist/esm2020/lib/services/filter.service.mjs +75 -0
  14. package/dist/esm2020/lib/services/index.mjs +3 -2
  15. package/dist/esm2020/lib/services/query.service.mjs +37 -3
  16. package/dist/esm2020/lib/types/chart-event-props.mjs +1 -1
  17. package/dist/esm2020/lib/types/data-point.mjs +1 -1
  18. package/dist/esm2020/lib/types/filter-event-props.mjs +1 -1
  19. package/dist/esm2020/lib/types/index.mjs +2 -2
  20. package/dist/esm2020/lib/types/widget-event-props.mjs +2 -0
  21. package/dist/esm2020/lib/utilities/widget-model-translator.mjs +1 -1
  22. package/dist/esm2020/public-api.mjs +2 -2
  23. package/dist/esm2020/version.mjs +2 -2
  24. package/dist/fesm2015/sisense-sdk-ui-angular.mjs +368 -86
  25. package/dist/fesm2015/sisense-sdk-ui-angular.mjs.map +1 -1
  26. package/dist/fesm2020/sisense-sdk-ui-angular.mjs +364 -86
  27. package/dist/fesm2020/sisense-sdk-ui-angular.mjs.map +1 -1
  28. package/dist/lib/component-wrapper-helpers/context-connectors.d.ts +5 -5
  29. package/dist/lib/components/dashboard/dashboard-by-id.component.d.ts +7 -11
  30. package/dist/lib/components/dashboard/dashboard.component.d.ts +7 -11
  31. package/dist/lib/components/filters/filters-panel.component.d.ts +134 -0
  32. package/dist/lib/components/filters/index.d.ts +1 -0
  33. package/dist/lib/components/widgets/widget.component.d.ts +11 -5
  34. package/dist/lib/sdk-ui-core-exports.d.ts +2 -2
  35. package/dist/lib/sdk-ui.module.d.ts +5 -4
  36. package/dist/lib/services/custom-widgets.service.d.ts +41 -0
  37. package/dist/lib/services/dashboard.service.d.ts +1 -1
  38. package/dist/lib/services/dynamic-renderer.service.d.ts +27 -0
  39. package/dist/lib/services/filter.service.d.ts +46 -0
  40. package/dist/lib/services/index.d.ts +2 -1
  41. package/dist/lib/services/query.service.d.ts +21 -3
  42. package/dist/lib/types/chart-event-props.d.ts +8 -1
  43. package/dist/lib/types/data-point.d.ts +21 -2
  44. package/dist/lib/types/filter-event-props.d.ts +9 -1
  45. package/dist/lib/types/index.d.ts +1 -1
  46. package/dist/lib/types/widget-event-props.d.ts +13 -0
  47. package/dist/lib/utilities/widget-model-translator.d.ts +2 -2
  48. package/dist/package.json +1 -1
  49. package/dist/public-api.d.ts +2 -2
  50. package/dist/version.d.ts +1 -1
  51. package/package.json +4 -4
  52. package/dist/esm2020/lib/services/plugins.service.mjs +0 -55
  53. package/dist/esm2020/lib/types/dashboard-config.mjs +0 -2
  54. package/dist/lib/services/plugins.service.d.ts +0 -37
  55. package/dist/lib/types/dashboard-config.d.ts +0 -24
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Injectable, Inject, NgModule, Optional, EventEmitter, Component, ViewChild, Input, Output } from '@angular/core';
3
- import { DataObserver, CustomThemeProvider, CustomSisenseContextProvider, CustomPluginsProvider, createClientApplication, getDashboardModel, getDashboardModels, HookAdapter, useComposedDashboardInternal, createHookApiFacade, getHierarchyModels, executeQuery, executeQueryByWidgetId, executePivotQuery, useExecuteCsvQueryInternal, getWidgetModel, getDefaultThemeSettings, getThemeSettingsByOid, ComponentAdapter, Chart, PivotTable, Table, ContextMenu, createWrapperElement, Dashboard, DashboardById, DrilldownBreadcrumbs, CriteriaFilterTile, DateRangeFilterTile, FilterTile, MemberFilterTile, RelativeDateFilterTile, ChartWidget, DrilldownWidget, createWrapperElementHandler, createComponentRenderer, PivotTableWidget, TableWidget, Widget, WidgetById, dashboardModelTranslator as dashboardModelTranslator$1, dashboardHelpers as dashboardHelpers$1, widgetModelTranslator as widgetModelTranslator$1 } from '@sisense/sdk-ui-preact';
4
- export { boxWhiskerProcessResult } from '@sisense/sdk-ui-preact';
2
+ import { InjectionToken, Injectable, Inject, createComponent, NgModule, Optional, EventEmitter, Component, ViewChild, Input, Output } from '@angular/core';
3
+ import { DataObserver, CustomThemeProvider, CustomSisenseContextProvider, CustomWidgetsProviderAdapter, createClientApplication, createWrapperElement, getDashboardModel, getDashboardModels, HookAdapter, useComposedDashboardInternal, createHookApiFacade, useGetFilterMembers, getHierarchyModels, executeQuery, executeQueryByWidgetId, executePivotQuery, useExecuteCsvQueryInternal, useExecuteCustomWidgetQueryInternal, getWidgetModel, getDefaultThemeSettings, getThemeSettingsByOid, ComponentAdapter, Chart, PivotTable, Table, ContextMenu, Dashboard, DashboardById, DrilldownBreadcrumbs, CriteriaFilterTile, DateRangeFilterTile, FilterTile, FiltersPanel, MemberFilterTile, RelativeDateFilterTile, ChartWidget, DrilldownWidget, createWrapperElementHandler, createComponentRenderer, PivotTableWidget, TableWidget, Widget, WidgetById, dashboardModelTranslator as dashboardModelTranslator$1, dashboardHelpers as dashboardHelpers$1, widgetModelTranslator as widgetModelTranslator$1 } from '@sisense/sdk-ui-preact';
4
+ export { boxWhiskerProcessResult, extractDimensionsAndMeasures } from '@sisense/sdk-ui-preact';
5
5
  import { __decorate } from 'tslib';
6
6
  import { BehaviorSubject } from 'rxjs';
7
7
  import merge from 'ts-deepmerge';
@@ -78,23 +78,31 @@ const createSisenseContextConnector = (sisenseContextService) => {
78
78
  };
79
79
  };
80
80
  /**
81
- * Creates plugins context connector
81
+ * Creates custom widgets context connector
82
82
  *
83
- * @param pluginsService - The plugin service
83
+ * @param customWidgetsService - The custom widgets service
84
84
  * @internal
85
85
  */
86
- const createPluginsContextConnector = (pluginsService) => {
87
- const pluginsContext = {
88
- pluginMap: pluginsService.getPlugins().value,
89
- registerPlugin: pluginsService.registerPlugin.bind(pluginsService),
90
- getPlugin: pluginsService.getPlugin.bind(pluginsService),
91
- };
92
- const propsObserver = new DataObserver({
93
- context: pluginsContext,
86
+ const createCustomWidgetsContextConnector = (customWidgetsService) => {
87
+ const { customWidgetsMap$ } = customWidgetsService;
88
+ const propsObserver = new DataObserver();
89
+ customWidgetsMap$.subscribe({
90
+ next: (customWidgetsMap) => {
91
+ propsObserver.setValue({
92
+ context: {
93
+ customWidgetsMap: customWidgetsMap,
94
+ },
95
+ });
96
+ },
97
+ error: (error) => {
98
+ propsObserver.setValue({
99
+ error,
100
+ });
101
+ },
94
102
  });
95
103
  return {
96
104
  propsObserver,
97
- providerComponent: CustomPluginsProvider,
105
+ providerComponent: CustomWidgetsProviderAdapter,
98
106
  };
99
107
  };
100
108
 
@@ -179,7 +187,98 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
179
187
  args: [SISENSE_CONTEXT_CONFIG_TOKEN]
180
188
  }] }]; } });
181
189
 
182
- var packageVersion = '2.3.0';
190
+ var packageVersion = '2.4.0';
191
+
192
+ /**
193
+ * Service for rendering components dynamically.
194
+ *
195
+ * @internal
196
+ */
197
+ class DynamicRenderer {
198
+ constructor(appRef, injector, envInjector) {
199
+ this.appRef = appRef;
200
+ this.injector = injector;
201
+ this.envInjector = envInjector;
202
+ }
203
+ renderComponent(component, props) {
204
+ const componentRef = createComponent(component, {
205
+ environmentInjector: this.envInjector,
206
+ elementInjector: this.injector,
207
+ });
208
+ // Apply props to the component instance
209
+ Object.assign(componentRef.instance, props);
210
+ // Attach the component to the application
211
+ this.appRef.attachView(componentRef.hostView);
212
+ // Get the DOM element
213
+ const domElem = componentRef.hostView.rootNodes[0];
214
+ // Create destroy function
215
+ const destroy = () => {
216
+ // Detach from application
217
+ this.appRef.detachView(componentRef.hostView);
218
+ // Destroy the component
219
+ componentRef.destroy();
220
+ };
221
+ return {
222
+ element: domElem,
223
+ componentRef,
224
+ destroy,
225
+ };
226
+ }
227
+ }
228
+ DynamicRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicRenderer, deps: [{ token: i0.ApplicationRef }, { token: i0.Injector }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable });
229
+ DynamicRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicRenderer, providedIn: 'root' });
230
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicRenderer, decorators: [{
231
+ type: Injectable,
232
+ args: [{ providedIn: 'root' }]
233
+ }], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: i0.Injector }, { type: i0.EnvironmentInjector }]; } });
234
+
235
+ /**
236
+ * Service for working with custom widgets.
237
+ *
238
+ * @group Dashboards
239
+ */
240
+ class CustomWidgetsService {
241
+ constructor(
242
+ /** @internal */
243
+ dynamicRenderer) {
244
+ this.dynamicRenderer = dynamicRenderer;
245
+ this.customWidgetsMap$ = new BehaviorSubject(new Map());
246
+ }
247
+ /**
248
+ * Registers a new custom widget.
249
+ *
250
+ * @param customWidgetType - The unique identifier for the custom widget type.
251
+ * @param customWidget - The custom widget component class to register.
252
+ */
253
+ registerCustomWidget(customWidgetType, customWidget) {
254
+ const customWidgetPreactComponent = (props) => {
255
+ const renderedComponent = this.dynamicRenderer.renderComponent(customWidget, props);
256
+ return createWrapperElement(renderedComponent.element, () => renderedComponent.destroy());
257
+ };
258
+ const customWidgetsMap = this.customWidgetsMap$.value;
259
+ if (!customWidgetsMap.has(customWidgetType)) {
260
+ customWidgetsMap.set(customWidgetType, customWidgetPreactComponent);
261
+ this.customWidgetsMap$.next(customWidgetsMap);
262
+ }
263
+ }
264
+ /**
265
+ * Checks if a custom widget is registered.
266
+ *
267
+ * @param customWidgetType - The type of the custom widget.
268
+ * @returns True if the custom widget is registered, false otherwise.
269
+ */
270
+ hasCustomWidget(customWidgetType) {
271
+ return this.customWidgetsMap$.value.has(customWidgetType);
272
+ }
273
+ }
274
+ CustomWidgetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomWidgetsService, deps: [{ token: DynamicRenderer }], target: i0.ɵɵFactoryTarget.Injectable });
275
+ CustomWidgetsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomWidgetsService, providedIn: 'root' });
276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomWidgetsService, decorators: [{
277
+ type: Injectable,
278
+ args: [{
279
+ providedIn: 'root',
280
+ }]
281
+ }], ctorParameters: function () { return [{ type: DynamicRenderer }]; } });
183
282
 
184
283
  function translateToPreactWidgetProps(widgetProps) {
185
284
  const { beforeRender, dataReady, beforeMenuOpen, dataPointClick, dataPointContextMenu, dataPointsSelect, ...commonWidgetProps } = widgetProps;
@@ -189,7 +288,10 @@ function translateToPreactWidgetProps(widgetProps) {
189
288
  onDataReady: dataReady,
190
289
  onBeforeMenuOpen: beforeMenuOpen,
191
290
  onDataPointClick: dataPointClick
192
- ? (...[point, nativeEvent]) => dataPointClick({ point, nativeEvent })
291
+ ? (...[point, nativeEvent]) => dataPointClick({
292
+ point,
293
+ nativeEvent,
294
+ })
193
295
  : undefined,
194
296
  onDataPointContextMenu: dataPointContextMenu
195
297
  ? (...[point, nativeEvent]) => dataPointContextMenu({ point, nativeEvent })
@@ -282,7 +384,7 @@ let DashboardService = class DashboardService {
282
384
  [id]="widget.id"
283
385
  [widgetType]="widget.widgetType"
284
386
  [chartType]="widget.chartType"
285
- [pluginType]="widget.pluginType"
387
+ [customWidgetType]="widget.customWidgetType"
286
388
  [dataSource]="widget.dataSource"
287
389
  [dataOptions]="widget.dataOptions"
288
390
  [filters]="widget.filters"
@@ -358,6 +460,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
358
460
  }]
359
461
  }], ctorParameters: function () { return [{ type: SisenseContextService }]; } });
360
462
 
463
+ /**
464
+ * Service for working with filter.
465
+ *
466
+ * @group Filters
467
+ */
468
+ let FilterService = class FilterService {
469
+ constructor(sisenseContextService) {
470
+ this.sisenseContextService = sisenseContextService;
471
+ }
472
+ /**
473
+ * Retrieves members of the provided filter.
474
+ *
475
+ * Those members can be used to display a list of members in a third-party filter component such as Material UI Select.
476
+ *
477
+ * ## Example
478
+ *
479
+ * Retrieve selected members from a Filter on Country of the Sample ECommerce data model.
480
+ *
481
+ * ```ts
482
+ * try {
483
+ * const data = await filterService.getFilterMembers({
484
+ * filter: filterFactory.members(DM.Country.Country, ['United States', 'Canada'])
485
+ * });
486
+ *
487
+ * const { selectedMembers, allMembers, excludeMembers, enableMultiSelection } = data;
488
+ * console.log('selectedMembers', selectedMembers);
489
+ * } catch (error) {
490
+ * console.error('Error:', error);
491
+ * }
492
+ * ```
493
+ *
494
+ * @param params - Parameters for retrieving filter members
495
+ * @returns Promise that resolves to the filter members data
496
+ */
497
+ async getFilterMembers(params) {
498
+ const hookAdapter = new HookAdapter(useGetFilterMembers, [
499
+ createSisenseContextConnector(this.sisenseContextService),
500
+ ]);
501
+ const resultPromise = new Promise((resolve, reject) => {
502
+ hookAdapter.subscribe((res) => {
503
+ const { isError, isSuccess, error } = res;
504
+ if (isError) {
505
+ reject(error);
506
+ }
507
+ else if (isSuccess) {
508
+ resolve(res.data);
509
+ }
510
+ });
511
+ });
512
+ hookAdapter.run(params);
513
+ return resultPromise.finally(() => {
514
+ hookAdapter.destroy();
515
+ });
516
+ }
517
+ };
518
+ FilterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterService, deps: [{ token: SisenseContextService }], target: i0.ɵɵFactoryTarget.Injectable });
519
+ FilterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterService, providedIn: 'root' });
520
+ FilterService = __decorate([
521
+ TrackableService(['getFilterMembers'])
522
+ ], FilterService);
523
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterService, decorators: [{
524
+ type: Injectable,
525
+ args: [{
526
+ providedIn: 'root',
527
+ }]
528
+ }], ctorParameters: function () { return [{ type: SisenseContextService }]; } });
529
+
361
530
  /**
362
531
  * Service for working with Sisense Fusion hierarchies.
363
532
  *
@@ -391,58 +560,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
391
560
  }]
392
561
  }], ctorParameters: function () { return [{ type: SisenseContextService }]; } });
393
562
 
394
- /**
395
- * Service for working with plugins fetched from an external environment.
396
- *
397
- * Provides methods for registering, retrieving, and interacting with plugins.
398
- *
399
- * @internal
400
- * @group Contexts
401
- */
402
- class PluginsService {
403
- constructor() {
404
- this.pluginMap$ = new BehaviorSubject(new Map());
405
- }
406
- /**
407
- * Registers a new plugin into the plugin map.
408
- *
409
- * @param pluginType - The unique identifier for the plugin type.
410
- * @param plugin - The plugin instance to register.
411
- */
412
- registerPlugin(pluginType, plugin) {
413
- const pluginMap = this.pluginMap$.value;
414
- if (!pluginMap.has(pluginType)) {
415
- pluginMap.set(pluginType, plugin);
416
- this.pluginMap$.next(pluginMap);
417
- }
418
- }
419
- /**
420
- * Retrieves a plugin by its type.
421
- *
422
- * @param pluginType - The unique identifier for the plugin type.
423
- * @returns The plugin instance if found, otherwise undefined.
424
- */
425
- getPlugin(pluginType) {
426
- return this.pluginMap$.value.get(pluginType);
427
- }
428
- /**
429
- * Retrieves a complete plugin map.
430
- *
431
- * @returns A plugin map.
432
- */
433
- getPlugins() {
434
- return this.pluginMap$;
435
- }
436
- }
437
- PluginsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PluginsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
438
- PluginsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PluginsService, providedIn: 'root' });
439
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PluginsService, decorators: [{
440
- type: Injectable,
441
- args: [{
442
- providedIn: 'root',
443
- }]
444
- }], ctorParameters: function () { return []; } });
445
-
446
563
  /**
447
564
  * Service for executing data queries.
448
565
  *
@@ -545,11 +662,45 @@ let QueryService = class QueryService {
545
662
  hookAdapter.destroy();
546
663
  });
547
664
  }
665
+ /**
666
+ * Executes a data query from custom widget component props.
667
+ *
668
+ * This method takes custom widget props (dataSource, dataOptions, filters, etc.)
669
+ * and executes the appropriate data query
670
+ *
671
+ * @param params - Custom widget component props containing data source, data options, filters, etc.
672
+ * @returns Promise resolving to query result with formatted data
673
+ */
674
+ async executeCustomWidgetQuery(params) {
675
+ const hookAdapter = new HookAdapter(useExecuteCustomWidgetQueryInternal, [
676
+ createSisenseContextConnector(this.sisenseContextService),
677
+ ]);
678
+ const resultPromise = new Promise((resolve, reject) => {
679
+ hookAdapter.subscribe((res) => {
680
+ const { data, isSuccess, isError, error } = res;
681
+ if (isSuccess) {
682
+ resolve({ data });
683
+ }
684
+ else if (isError) {
685
+ reject(error);
686
+ }
687
+ });
688
+ });
689
+ hookAdapter.run(params);
690
+ return resultPromise.finally(() => {
691
+ hookAdapter.destroy();
692
+ });
693
+ }
548
694
  };
549
695
  QueryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: QueryService, deps: [{ token: SisenseContextService }], target: i0.ɵɵFactoryTarget.Injectable });
550
696
  QueryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: QueryService, providedIn: 'root' });
551
697
  QueryService = __decorate([
552
- TrackableService(['executeQuery', 'executeQueryByWidgetId', 'executePivotQuery'])
698
+ TrackableService([
699
+ 'executeQuery',
700
+ 'executeQueryByWidgetId',
701
+ 'executePivotQuery',
702
+ 'executeCustomWidgetQuery',
703
+ ])
553
704
  ], QueryService);
554
705
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: QueryService, decorators: [{
555
706
  type: Injectable,
@@ -3211,19 +3362,19 @@ class DashboardComponent {
3211
3362
  */
3212
3363
  themeService,
3213
3364
  /**
3214
- * Plugin service
3365
+ * Custom widgets service
3215
3366
  *
3216
3367
  * @internal
3217
3368
  * @category Constructor
3218
3369
  */
3219
- pluginService) {
3370
+ customWidgetsService) {
3220
3371
  this.sisenseContextService = sisenseContextService;
3221
3372
  this.themeService = themeService;
3222
- this.pluginService = pluginService;
3373
+ this.customWidgetsService = customWidgetsService;
3223
3374
  this.componentAdapter = new ComponentAdapter(Dashboard, [
3224
3375
  createSisenseContextConnector(this.sisenseContextService),
3225
3376
  createThemeContextConnector(this.themeService),
3226
- createPluginsContextConnector(this.pluginService),
3377
+ createCustomWidgetsContextConnector(this.customWidgetsService),
3227
3378
  ]);
3228
3379
  }
3229
3380
  /**
@@ -3260,12 +3411,12 @@ class DashboardComponent {
3260
3411
  this.componentAdapter.destroy();
3261
3412
  }
3262
3413
  }
3263
- DashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardComponent, deps: [{ token: SisenseContextService }, { token: ThemeService }, { token: PluginsService }], target: i0.ɵɵFactoryTarget.Component });
3414
+ DashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardComponent, deps: [{ token: SisenseContextService }, { token: ThemeService }, { token: CustomWidgetsService }], target: i0.ɵɵFactoryTarget.Component });
3264
3415
  DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DashboardComponent, selector: "csdk-dashboard", inputs: { title: "title", layoutOptions: "layoutOptions", config: "config", widgets: "widgets", filters: "filters", defaultDataSource: "defaultDataSource", widgetsOptions: "widgetsOptions", styleOptions: "styleOptions", tabbersOptions: "tabbersOptions" }, viewQueries: [{ propertyName: "preactRef", first: true, predicate: ["preact"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n <div #preact class=\"csdk-full-size-container\"></div>\n", isInline: true, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] });
3265
3416
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardComponent, decorators: [{
3266
3417
  type: Component,
3267
3418
  args: [{ selector: 'csdk-dashboard', template: template, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] }]
3268
- }], ctorParameters: function () { return [{ type: SisenseContextService }, { type: ThemeService }, { type: PluginsService }]; }, propDecorators: { preactRef: [{
3419
+ }], ctorParameters: function () { return [{ type: SisenseContextService }, { type: ThemeService }, { type: CustomWidgetsService }]; }, propDecorators: { preactRef: [{
3269
3420
  type: ViewChild,
3270
3421
  args: [rootId]
3271
3422
  }], title: [{
@@ -3335,19 +3486,19 @@ class DashboardByIdComponent {
3335
3486
  */
3336
3487
  themeService,
3337
3488
  /**
3338
- * Plugin service
3489
+ * Custom widgets service
3339
3490
  *
3340
3491
  * @internal
3341
3492
  * @category Constructor
3342
3493
  */
3343
- pluginService) {
3494
+ customWidgetsService) {
3344
3495
  this.sisenseContextService = sisenseContextService;
3345
3496
  this.themeService = themeService;
3346
- this.pluginService = pluginService;
3497
+ this.customWidgetsService = customWidgetsService;
3347
3498
  this.componentAdapter = new ComponentAdapter(DashboardById, [
3348
3499
  createSisenseContextConnector(this.sisenseContextService),
3349
3500
  createThemeContextConnector(this.themeService),
3350
- createPluginsContextConnector(this.pluginService),
3501
+ createCustomWidgetsContextConnector(this.customWidgetsService),
3351
3502
  ]);
3352
3503
  }
3353
3504
  /**
@@ -3377,12 +3528,12 @@ class DashboardByIdComponent {
3377
3528
  this.componentAdapter.destroy();
3378
3529
  }
3379
3530
  }
3380
- DashboardByIdComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardByIdComponent, deps: [{ token: SisenseContextService }, { token: ThemeService }, { token: PluginsService }], target: i0.ɵɵFactoryTarget.Component });
3531
+ DashboardByIdComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardByIdComponent, deps: [{ token: SisenseContextService }, { token: ThemeService }, { token: CustomWidgetsService }], target: i0.ɵɵFactoryTarget.Component });
3381
3532
  DashboardByIdComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DashboardByIdComponent, selector: "csdk-dashboard-by-id", inputs: { dashboardOid: "dashboardOid", config: "config" }, viewQueries: [{ propertyName: "preactRef", first: true, predicate: ["preact"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n <div #preact class=\"csdk-full-size-container\"></div>\n", isInline: true, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] });
3382
3533
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardByIdComponent, decorators: [{
3383
3534
  type: Component,
3384
3535
  args: [{ selector: 'csdk-dashboard-by-id', template: template, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] }]
3385
- }], ctorParameters: function () { return [{ type: SisenseContextService }, { type: ThemeService }, { type: PluginsService }]; }, propDecorators: { preactRef: [{
3536
+ }], ctorParameters: function () { return [{ type: SisenseContextService }, { type: ThemeService }, { type: CustomWidgetsService }]; }, propDecorators: { preactRef: [{
3386
3537
  type: ViewChild,
3387
3538
  args: [rootId]
3388
3539
  }], dashboardOid: [{
@@ -3896,6 +4047,129 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3896
4047
  type: Output
3897
4048
  }] } });
3898
4049
 
4050
+ /**
4051
+ * Filters panel component that renders a list of filter tiles
4052
+ *
4053
+ * @example
4054
+ * Here's how to render a filters panel with a set of filters.
4055
+ *
4056
+ * ```html
4057
+ <!--Component HTML template in example.component.html-->
4058
+ <csdk-filters-panel
4059
+ [filters]="filtersPanelProps.filters"
4060
+ [defaultDataSource]="filtersPanelProps.defaultDataSource"
4061
+ (filtersChange)="filtersPanelProps.filtersChange($event)"
4062
+ />
4063
+ * ```
4064
+ *
4065
+ * ```ts
4066
+ // Component behavior in example.component.ts
4067
+ import { Component } from '@angular/core';
4068
+ import { type FiltersPanelProps } from '@sisense/sdk-ui-angular';
4069
+ import { filterFactory } from '@sisense/sdk-data';
4070
+ import * as DM from '../../assets/sample-healthcare-model';
4071
+
4072
+ @Component({
4073
+ selector: 'example',
4074
+ templateUrl: './example.component.html',
4075
+ styleUrls: ['./example.component.scss'],
4076
+ })
4077
+ export class ExampleComponent {
4078
+ filtersPanelProps: FiltersPanelProps = {
4079
+ filters: [
4080
+ filterFactory.members(DM.ER.Date.Years, ['2013-01-01T00:00:00']),
4081
+ filterFactory.members(DM.ER.Departments.Department, ['Cardiology']),
4082
+ ],
4083
+ defaultDataSource: DM.DataSource,
4084
+ filtersChange({ filters }) {
4085
+ this.filtersPanelProps.filters = filters;
4086
+ },
4087
+ };
4088
+ }
4089
+ * ```
4090
+ * @group Filter Tiles
4091
+ */
4092
+ class FiltersPanelComponent {
4093
+ /**
4094
+ * Constructor for the `FiltersPanelComponent`.
4095
+ *
4096
+ * @param sisenseContextService - Sisense context service
4097
+ * @param themeService - Theme service
4098
+ */
4099
+ constructor(
4100
+ /**
4101
+ * Sisense context service
4102
+ *
4103
+ * @category Constructor
4104
+ */
4105
+ sisenseContextService,
4106
+ /**
4107
+ * Theme service
4108
+ *
4109
+ * @category Constructor
4110
+ */
4111
+ themeService) {
4112
+ this.sisenseContextService = sisenseContextService;
4113
+ this.themeService = themeService;
4114
+ /**
4115
+ * {@inheritDoc FiltersPanelProps.filtersChange}
4116
+ */
4117
+ this.filtersChange = new EventEmitter();
4118
+ this.componentAdapter = new ComponentAdapter(FiltersPanel, [
4119
+ createSisenseContextConnector(this.sisenseContextService),
4120
+ createThemeContextConnector(this.themeService),
4121
+ ]);
4122
+ }
4123
+ /**
4124
+ * @internal
4125
+ */
4126
+ ngAfterViewInit() {
4127
+ this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());
4128
+ }
4129
+ /**
4130
+ * @internal
4131
+ */
4132
+ ngOnChanges() {
4133
+ if (this.preactRef) {
4134
+ this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());
4135
+ }
4136
+ }
4137
+ getPreactComponentProps() {
4138
+ return {
4139
+ filters: this.filters,
4140
+ defaultDataSource: this.defaultDataSource,
4141
+ dataSources: this.dataSources,
4142
+ config: this.config,
4143
+ onFiltersChange: (...[filters]) => this.filtersChange.emit({ filters }),
4144
+ };
4145
+ }
4146
+ /**
4147
+ * @internal
4148
+ */
4149
+ ngOnDestroy() {
4150
+ this.componentAdapter.destroy();
4151
+ }
4152
+ }
4153
+ FiltersPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersPanelComponent, deps: [{ token: SisenseContextService }, { token: ThemeService }], target: i0.ɵɵFactoryTarget.Component });
4154
+ FiltersPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FiltersPanelComponent, selector: "csdk-filters-panel", inputs: { filters: "filters", defaultDataSource: "defaultDataSource", dataSources: "dataSources", config: "config" }, outputs: { filtersChange: "filtersChange" }, viewQueries: [{ propertyName: "preactRef", first: true, predicate: ["preact"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n <div #preact class=\"csdk-full-size-container\"></div>\n", isInline: true, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] });
4155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersPanelComponent, decorators: [{
4156
+ type: Component,
4157
+ args: [{ selector: 'csdk-filters-panel', template: template, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] }]
4158
+ }], ctorParameters: function () { return [{ type: SisenseContextService }, { type: ThemeService }]; }, propDecorators: { preactRef: [{
4159
+ type: ViewChild,
4160
+ args: [rootId]
4161
+ }], filters: [{
4162
+ type: Input
4163
+ }], defaultDataSource: [{
4164
+ type: Input
4165
+ }], dataSources: [{
4166
+ type: Input
4167
+ }], config: [{
4168
+ type: Input
4169
+ }], filtersChange: [{
4170
+ type: Output
4171
+ }] } });
4172
+
3899
4173
  /**
3900
4174
  * Member Filter Tile Component
3901
4175
  *
@@ -4758,7 +5032,7 @@ class WidgetComponent {
4758
5032
  id: this.id,
4759
5033
  widgetType: this.widgetType,
4760
5034
  chartType: this.chartType,
4761
- pluginType: this.pluginType,
5035
+ customWidgetType: this.customWidgetType,
4762
5036
  dataSource: this.dataSource,
4763
5037
  dataOptions: this.dataOptions,
4764
5038
  filters: this.filters,
@@ -4782,7 +5056,7 @@ class WidgetComponent {
4782
5056
  }
4783
5057
  }
4784
5058
  WidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WidgetComponent, deps: [{ token: SisenseContextService }, { token: ThemeService }], target: i0.ɵɵFactoryTarget.Component });
4785
- WidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WidgetComponent, selector: "csdk-widget", inputs: { id: "id", widgetType: "widgetType", chartType: "chartType", pluginType: "pluginType", dataSource: "dataSource", dataOptions: "dataOptions", filters: "filters", highlights: "highlights", styleOptions: "styleOptions", drilldownOptions: "drilldownOptions", title: "title", description: "description", highlightSelectionDisabled: "highlightSelectionDisabled", beforeRender: "beforeRender", dataReady: "dataReady", beforeMenuOpen: "beforeMenuOpen" }, outputs: { dataPointClick: "dataPointClick", dataPointContextMenu: "dataPointContextMenu", dataPointsSelect: "dataPointsSelect" }, viewQueries: [{ propertyName: "preactRef", first: true, predicate: ["preact"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n <div #preact class=\"csdk-full-size-container\"></div>\n", isInline: true, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] });
5059
+ WidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WidgetComponent, selector: "csdk-widget", inputs: { id: "id", widgetType: "widgetType", chartType: "chartType", customWidgetType: "customWidgetType", dataSource: "dataSource", dataOptions: "dataOptions", filters: "filters", highlights: "highlights", styleOptions: "styleOptions", drilldownOptions: "drilldownOptions", title: "title", description: "description", highlightSelectionDisabled: "highlightSelectionDisabled", beforeRender: "beforeRender", dataReady: "dataReady", beforeMenuOpen: "beforeMenuOpen" }, outputs: { dataPointClick: "dataPointClick", dataPointContextMenu: "dataPointContextMenu", dataPointsSelect: "dataPointsSelect" }, viewQueries: [{ propertyName: "preactRef", first: true, predicate: ["preact"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n <div #preact class=\"csdk-full-size-container\"></div>\n", isInline: true, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] });
4786
5060
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WidgetComponent, decorators: [{
4787
5061
  type: Component,
4788
5062
  args: [{ selector: 'csdk-widget', template: template, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] }]
@@ -4795,7 +5069,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
4795
5069
  type: Input
4796
5070
  }], chartType: [{
4797
5071
  type: Input
4798
- }], pluginType: [{
5072
+ }], customWidgetType: [{
4799
5073
  type: Input
4800
5074
  }], dataSource: [{
4801
5075
  type: Input
@@ -4997,6 +5271,7 @@ SdkUiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "1
4997
5271
  DashboardComponent,
4998
5272
  PivotTableWidgetComponent,
4999
5273
  FilterTileComponent,
5274
+ FiltersPanelComponent,
5000
5275
  WidgetComponent], imports: [CommonModule, DecoratorsModule], exports: [ChartComponent,
5001
5276
  TableComponent,
5002
5277
  ChartWidgetComponent,
@@ -5029,6 +5304,7 @@ SdkUiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "1
5029
5304
  DashboardComponent,
5030
5305
  PivotTableWidgetComponent,
5031
5306
  FilterTileComponent,
5307
+ FiltersPanelComponent,
5032
5308
  WidgetComponent] });
5033
5309
  SdkUiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdkUiModule, imports: [CommonModule, DecoratorsModule] });
5034
5310
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdkUiModule, decorators: [{
@@ -5067,6 +5343,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5067
5343
  DashboardComponent,
5068
5344
  PivotTableWidgetComponent,
5069
5345
  FilterTileComponent,
5346
+ FiltersPanelComponent,
5070
5347
  WidgetComponent,
5071
5348
  ],
5072
5349
  imports: [CommonModule, DecoratorsModule],
@@ -5103,6 +5380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5103
5380
  DashboardComponent,
5104
5381
  PivotTableWidgetComponent,
5105
5382
  FilterTileComponent,
5383
+ FiltersPanelComponent,
5106
5384
  WidgetComponent,
5107
5385
  ],
5108
5386
  providers: [],
@@ -5603,5 +5881,5 @@ var widgetModelTranslator = /*#__PURE__*/Object.freeze({
5603
5881
  * Generated bundle index. Do not edit.
5604
5882
  */
5605
5883
 
5606
- export { AreaChartComponent, AreaRangeChartComponent, AreamapChartComponent, BarChartComponent, BoxplotChartComponent, ChartComponent, ChartWidgetComponent, ColumnChartComponent, ContextMenuComponent, CriteriaFilterTileComponent, DashboardByIdComponent, DashboardComponent, DashboardService, DateRangeFilterTileComponent, DrilldownBreadcrumbsComponent, DrilldownWidgetComponent, FilterTileComponent, FunnelChartComponent, HierarchyService, IndicatorChartComponent, LineChartComponent, MemberFilterTileComponent, PieChartComponent, PivotTableComponent, PivotTableWidgetComponent, PluginsService, PolarChartComponent, QueryService, RelativeDateFilterTileComponent, SISENSE_CONTEXT_CONFIG_TOKEN, ScatterChartComponent, ScattermapChartComponent, SdkUiModule, SisenseContextService, SunburstChartComponent, THEME_CONFIG_TOKEN, TableComponent, TableWidgetComponent, ThemeService, TrackableService, TreemapChartComponent, WidgetByIdComponent, WidgetComponent, WidgetService, createPluginsContextConnector, createSisenseContextConnector, createThemeContextConnector, dashboardHelpers, dashboardModelTranslator, widgetModelTranslator };
5884
+ export { AreaChartComponent, AreaRangeChartComponent, AreamapChartComponent, BarChartComponent, BoxplotChartComponent, ChartComponent, ChartWidgetComponent, ColumnChartComponent, ContextMenuComponent, CriteriaFilterTileComponent, CustomWidgetsService, DashboardByIdComponent, DashboardComponent, DashboardService, DateRangeFilterTileComponent, DrilldownBreadcrumbsComponent, DrilldownWidgetComponent, FilterService, FilterTileComponent, FiltersPanelComponent, FunnelChartComponent, HierarchyService, IndicatorChartComponent, LineChartComponent, MemberFilterTileComponent, PieChartComponent, PivotTableComponent, PivotTableWidgetComponent, PolarChartComponent, QueryService, RelativeDateFilterTileComponent, SISENSE_CONTEXT_CONFIG_TOKEN, ScatterChartComponent, ScattermapChartComponent, SdkUiModule, SisenseContextService, SunburstChartComponent, THEME_CONFIG_TOKEN, TableComponent, TableWidgetComponent, ThemeService, TrackableService, TreemapChartComponent, WidgetByIdComponent, WidgetComponent, WidgetService, createCustomWidgetsContextConnector, createSisenseContextConnector, createThemeContextConnector, dashboardHelpers, dashboardModelTranslator, widgetModelTranslator };
5607
5885
  //# sourceMappingURL=sisense-sdk-ui-angular.mjs.map