@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 { __rest, __awaiter, __decorate } from 'tslib';
6
6
  import { BehaviorSubject } from 'rxjs';
7
7
  import merge from 'ts-deepmerge';
@@ -76,23 +76,31 @@ const createSisenseContextConnector = (sisenseContextService) => {
76
76
  };
77
77
  };
78
78
  /**
79
- * Creates plugins context connector
79
+ * Creates custom widgets context connector
80
80
  *
81
- * @param pluginsService - The plugin service
81
+ * @param customWidgetsService - The custom widgets service
82
82
  * @internal
83
83
  */
84
- const createPluginsContextConnector = (pluginsService) => {
85
- const pluginsContext = {
86
- pluginMap: pluginsService.getPlugins().value,
87
- registerPlugin: pluginsService.registerPlugin.bind(pluginsService),
88
- getPlugin: pluginsService.getPlugin.bind(pluginsService),
89
- };
90
- const propsObserver = new DataObserver({
91
- context: pluginsContext,
84
+ const createCustomWidgetsContextConnector = (customWidgetsService) => {
85
+ const { customWidgetsMap$ } = customWidgetsService;
86
+ const propsObserver = new DataObserver();
87
+ customWidgetsMap$.subscribe({
88
+ next: (customWidgetsMap) => {
89
+ propsObserver.setValue({
90
+ context: {
91
+ customWidgetsMap: customWidgetsMap,
92
+ },
93
+ });
94
+ },
95
+ error: (error) => {
96
+ propsObserver.setValue({
97
+ error,
98
+ });
99
+ },
92
100
  });
93
101
  return {
94
102
  propsObserver,
95
- providerComponent: CustomPluginsProvider,
103
+ providerComponent: CustomWidgetsProviderAdapter,
96
104
  };
97
105
  };
98
106
 
@@ -176,12 +184,106 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
176
184
  }] }];
177
185
  } });
178
186
 
179
- var packageVersion = '2.3.0';
187
+ var packageVersion = '2.4.0';
188
+
189
+ /**
190
+ * Service for rendering components dynamically.
191
+ *
192
+ * @internal
193
+ */
194
+ class DynamicRenderer {
195
+ constructor(appRef, injector, envInjector) {
196
+ this.appRef = appRef;
197
+ this.injector = injector;
198
+ this.envInjector = envInjector;
199
+ }
200
+ renderComponent(component, props) {
201
+ const componentRef = createComponent(component, {
202
+ environmentInjector: this.envInjector,
203
+ elementInjector: this.injector,
204
+ });
205
+ // Apply props to the component instance
206
+ Object.assign(componentRef.instance, props);
207
+ // Attach the component to the application
208
+ this.appRef.attachView(componentRef.hostView);
209
+ // Get the DOM element
210
+ const domElem = componentRef.hostView.rootNodes[0];
211
+ // Create destroy function
212
+ const destroy = () => {
213
+ // Detach from application
214
+ this.appRef.detachView(componentRef.hostView);
215
+ // Destroy the component
216
+ componentRef.destroy();
217
+ };
218
+ return {
219
+ element: domElem,
220
+ componentRef,
221
+ destroy,
222
+ };
223
+ }
224
+ }
225
+ 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 });
226
+ DynamicRenderer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicRenderer, providedIn: 'root' });
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicRenderer, decorators: [{
228
+ type: Injectable,
229
+ args: [{ providedIn: 'root' }]
230
+ }], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: i0.Injector }, { type: i0.EnvironmentInjector }]; } });
231
+
232
+ /**
233
+ * Service for working with custom widgets.
234
+ *
235
+ * @group Dashboards
236
+ */
237
+ class CustomWidgetsService {
238
+ constructor(
239
+ /** @internal */
240
+ dynamicRenderer) {
241
+ this.dynamicRenderer = dynamicRenderer;
242
+ this.customWidgetsMap$ = new BehaviorSubject(new Map());
243
+ }
244
+ /**
245
+ * Registers a new custom widget.
246
+ *
247
+ * @param customWidgetType - The unique identifier for the custom widget type.
248
+ * @param customWidget - The custom widget component class to register.
249
+ */
250
+ registerCustomWidget(customWidgetType, customWidget) {
251
+ const customWidgetPreactComponent = (props) => {
252
+ const renderedComponent = this.dynamicRenderer.renderComponent(customWidget, props);
253
+ return createWrapperElement(renderedComponent.element, () => renderedComponent.destroy());
254
+ };
255
+ const customWidgetsMap = this.customWidgetsMap$.value;
256
+ if (!customWidgetsMap.has(customWidgetType)) {
257
+ customWidgetsMap.set(customWidgetType, customWidgetPreactComponent);
258
+ this.customWidgetsMap$.next(customWidgetsMap);
259
+ }
260
+ }
261
+ /**
262
+ * Checks if a custom widget is registered.
263
+ *
264
+ * @param customWidgetType - The type of the custom widget.
265
+ * @returns True if the custom widget is registered, false otherwise.
266
+ */
267
+ hasCustomWidget(customWidgetType) {
268
+ return this.customWidgetsMap$.value.has(customWidgetType);
269
+ }
270
+ }
271
+ CustomWidgetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomWidgetsService, deps: [{ token: DynamicRenderer }], target: i0.ɵɵFactoryTarget.Injectable });
272
+ CustomWidgetsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomWidgetsService, providedIn: 'root' });
273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomWidgetsService, decorators: [{
274
+ type: Injectable,
275
+ args: [{
276
+ providedIn: 'root',
277
+ }]
278
+ }], ctorParameters: function () { return [{ type: DynamicRenderer }]; } });
180
279
 
181
280
  function translateToPreactWidgetProps(widgetProps) {
182
281
  const { beforeRender, dataReady, beforeMenuOpen, dataPointClick, dataPointContextMenu, dataPointsSelect } = widgetProps, commonWidgetProps = __rest(widgetProps, ["beforeRender", "dataReady", "beforeMenuOpen", "dataPointClick", "dataPointContextMenu", "dataPointsSelect"]);
183
282
  return Object.assign(Object.assign({}, commonWidgetProps), { onBeforeRender: beforeRender, onDataReady: dataReady, onBeforeMenuOpen: beforeMenuOpen, onDataPointClick: dataPointClick
184
- ? (...[point, nativeEvent]) => dataPointClick({ point, nativeEvent })
283
+ ? (...[point, nativeEvent]) => dataPointClick({
284
+ point,
285
+ nativeEvent,
286
+ })
185
287
  : undefined, onDataPointContextMenu: dataPointContextMenu
186
288
  ? (...[point, nativeEvent]) => dataPointContextMenu({ point, nativeEvent })
187
289
  : undefined, onDataPointsSelected: dataPointsSelect
@@ -261,7 +363,7 @@ let DashboardService = class DashboardService {
261
363
  [id]="widget.id"
262
364
  [widgetType]="widget.widgetType"
263
365
  [chartType]="widget.chartType"
264
- [pluginType]="widget.pluginType"
366
+ [customWidgetType]="widget.customWidgetType"
265
367
  [dataSource]="widget.dataSource"
266
368
  [dataOptions]="widget.dataOptions"
267
369
  [filters]="widget.filters"
@@ -337,6 +439,75 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
337
439
  }]
338
440
  }], ctorParameters: function () { return [{ type: SisenseContextService }]; } });
339
441
 
442
+ /**
443
+ * Service for working with filter.
444
+ *
445
+ * @group Filters
446
+ */
447
+ let FilterService = class FilterService {
448
+ constructor(sisenseContextService) {
449
+ this.sisenseContextService = sisenseContextService;
450
+ }
451
+ /**
452
+ * Retrieves members of the provided filter.
453
+ *
454
+ * Those members can be used to display a list of members in a third-party filter component such as Material UI Select.
455
+ *
456
+ * ## Example
457
+ *
458
+ * Retrieve selected members from a Filter on Country of the Sample ECommerce data model.
459
+ *
460
+ * ```ts
461
+ * try {
462
+ * const data = await filterService.getFilterMembers({
463
+ * filter: filterFactory.members(DM.Country.Country, ['United States', 'Canada'])
464
+ * });
465
+ *
466
+ * const { selectedMembers, allMembers, excludeMembers, enableMultiSelection } = data;
467
+ * console.log('selectedMembers', selectedMembers);
468
+ * } catch (error) {
469
+ * console.error('Error:', error);
470
+ * }
471
+ * ```
472
+ *
473
+ * @param params - Parameters for retrieving filter members
474
+ * @returns Promise that resolves to the filter members data
475
+ */
476
+ getFilterMembers(params) {
477
+ return __awaiter(this, void 0, void 0, function* () {
478
+ const hookAdapter = new HookAdapter(useGetFilterMembers, [
479
+ createSisenseContextConnector(this.sisenseContextService),
480
+ ]);
481
+ const resultPromise = new Promise((resolve, reject) => {
482
+ hookAdapter.subscribe((res) => {
483
+ const { isError, isSuccess, error } = res;
484
+ if (isError) {
485
+ reject(error);
486
+ }
487
+ else if (isSuccess) {
488
+ resolve(res.data);
489
+ }
490
+ });
491
+ });
492
+ hookAdapter.run(params);
493
+ return resultPromise.finally(() => {
494
+ hookAdapter.destroy();
495
+ });
496
+ });
497
+ }
498
+ };
499
+ FilterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterService, deps: [{ token: SisenseContextService }], target: i0.ɵɵFactoryTarget.Injectable });
500
+ FilterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterService, providedIn: 'root' });
501
+ FilterService = __decorate([
502
+ TrackableService(['getFilterMembers'])
503
+ ], FilterService);
504
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterService, decorators: [{
505
+ type: Injectable,
506
+ args: [{
507
+ providedIn: 'root',
508
+ }]
509
+ }], ctorParameters: function () { return [{ type: SisenseContextService }]; } });
510
+
340
511
  /**
341
512
  * Service for working with Sisense Fusion hierarchies.
342
513
  *
@@ -372,58 +543,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
372
543
  }]
373
544
  }], ctorParameters: function () { return [{ type: SisenseContextService }]; } });
374
545
 
375
- /**
376
- * Service for working with plugins fetched from an external environment.
377
- *
378
- * Provides methods for registering, retrieving, and interacting with plugins.
379
- *
380
- * @internal
381
- * @group Contexts
382
- */
383
- class PluginsService {
384
- constructor() {
385
- this.pluginMap$ = new BehaviorSubject(new Map());
386
- }
387
- /**
388
- * Registers a new plugin into the plugin map.
389
- *
390
- * @param pluginType - The unique identifier for the plugin type.
391
- * @param plugin - The plugin instance to register.
392
- */
393
- registerPlugin(pluginType, plugin) {
394
- const pluginMap = this.pluginMap$.value;
395
- if (!pluginMap.has(pluginType)) {
396
- pluginMap.set(pluginType, plugin);
397
- this.pluginMap$.next(pluginMap);
398
- }
399
- }
400
- /**
401
- * Retrieves a plugin by its type.
402
- *
403
- * @param pluginType - The unique identifier for the plugin type.
404
- * @returns The plugin instance if found, otherwise undefined.
405
- */
406
- getPlugin(pluginType) {
407
- return this.pluginMap$.value.get(pluginType);
408
- }
409
- /**
410
- * Retrieves a complete plugin map.
411
- *
412
- * @returns A plugin map.
413
- */
414
- getPlugins() {
415
- return this.pluginMap$;
416
- }
417
- }
418
- PluginsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PluginsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
419
- PluginsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PluginsService, providedIn: 'root' });
420
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PluginsService, decorators: [{
421
- type: Injectable,
422
- args: [{
423
- providedIn: 'root',
424
- }]
425
- }], ctorParameters: function () { return []; } });
426
-
427
546
  /**
428
547
  * Service for executing data queries.
429
548
  *
@@ -530,11 +649,47 @@ let QueryService = class QueryService {
530
649
  });
531
650
  });
532
651
  }
652
+ /**
653
+ * Executes a data query from custom widget component props.
654
+ *
655
+ * This method takes custom widget props (dataSource, dataOptions, filters, etc.)
656
+ * and executes the appropriate data query
657
+ *
658
+ * @param params - Custom widget component props containing data source, data options, filters, etc.
659
+ * @returns Promise resolving to query result with formatted data
660
+ */
661
+ executeCustomWidgetQuery(params) {
662
+ return __awaiter(this, void 0, void 0, function* () {
663
+ const hookAdapter = new HookAdapter(useExecuteCustomWidgetQueryInternal, [
664
+ createSisenseContextConnector(this.sisenseContextService),
665
+ ]);
666
+ const resultPromise = new Promise((resolve, reject) => {
667
+ hookAdapter.subscribe((res) => {
668
+ const { data, isSuccess, isError, error } = res;
669
+ if (isSuccess) {
670
+ resolve({ data });
671
+ }
672
+ else if (isError) {
673
+ reject(error);
674
+ }
675
+ });
676
+ });
677
+ hookAdapter.run(params);
678
+ return resultPromise.finally(() => {
679
+ hookAdapter.destroy();
680
+ });
681
+ });
682
+ }
533
683
  };
534
684
  QueryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: QueryService, deps: [{ token: SisenseContextService }], target: i0.ɵɵFactoryTarget.Injectable });
535
685
  QueryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: QueryService, providedIn: 'root' });
536
686
  QueryService = __decorate([
537
- TrackableService(['executeQuery', 'executeQueryByWidgetId', 'executePivotQuery'])
687
+ TrackableService([
688
+ 'executeQuery',
689
+ 'executeQueryByWidgetId',
690
+ 'executePivotQuery',
691
+ 'executeCustomWidgetQuery',
692
+ ])
538
693
  ], QueryService);
539
694
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: QueryService, decorators: [{
540
695
  type: Injectable,
@@ -3210,19 +3365,19 @@ class DashboardComponent {
3210
3365
  */
3211
3366
  themeService,
3212
3367
  /**
3213
- * Plugin service
3368
+ * Custom widgets service
3214
3369
  *
3215
3370
  * @internal
3216
3371
  * @category Constructor
3217
3372
  */
3218
- pluginService) {
3373
+ customWidgetsService) {
3219
3374
  this.sisenseContextService = sisenseContextService;
3220
3375
  this.themeService = themeService;
3221
- this.pluginService = pluginService;
3376
+ this.customWidgetsService = customWidgetsService;
3222
3377
  this.componentAdapter = new ComponentAdapter(Dashboard, [
3223
3378
  createSisenseContextConnector(this.sisenseContextService),
3224
3379
  createThemeContextConnector(this.themeService),
3225
- createPluginsContextConnector(this.pluginService),
3380
+ createCustomWidgetsContextConnector(this.customWidgetsService),
3226
3381
  ]);
3227
3382
  }
3228
3383
  /**
@@ -3259,12 +3414,12 @@ class DashboardComponent {
3259
3414
  this.componentAdapter.destroy();
3260
3415
  }
3261
3416
  }
3262
- 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 });
3417
+ 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 });
3263
3418
  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"] });
3264
3419
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardComponent, decorators: [{
3265
3420
  type: Component,
3266
3421
  args: [{ selector: 'csdk-dashboard', template: template, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] }]
3267
- }], ctorParameters: function () { return [{ type: SisenseContextService }, { type: ThemeService }, { type: PluginsService }]; }, propDecorators: { preactRef: [{
3422
+ }], ctorParameters: function () { return [{ type: SisenseContextService }, { type: ThemeService }, { type: CustomWidgetsService }]; }, propDecorators: { preactRef: [{
3268
3423
  type: ViewChild,
3269
3424
  args: [rootId]
3270
3425
  }], title: [{
@@ -3334,19 +3489,19 @@ class DashboardByIdComponent {
3334
3489
  */
3335
3490
  themeService,
3336
3491
  /**
3337
- * Plugin service
3492
+ * Custom widgets service
3338
3493
  *
3339
3494
  * @internal
3340
3495
  * @category Constructor
3341
3496
  */
3342
- pluginService) {
3497
+ customWidgetsService) {
3343
3498
  this.sisenseContextService = sisenseContextService;
3344
3499
  this.themeService = themeService;
3345
- this.pluginService = pluginService;
3500
+ this.customWidgetsService = customWidgetsService;
3346
3501
  this.componentAdapter = new ComponentAdapter(DashboardById, [
3347
3502
  createSisenseContextConnector(this.sisenseContextService),
3348
3503
  createThemeContextConnector(this.themeService),
3349
- createPluginsContextConnector(this.pluginService),
3504
+ createCustomWidgetsContextConnector(this.customWidgetsService),
3350
3505
  ]);
3351
3506
  }
3352
3507
  /**
@@ -3376,12 +3531,12 @@ class DashboardByIdComponent {
3376
3531
  this.componentAdapter.destroy();
3377
3532
  }
3378
3533
  }
3379
- 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 });
3534
+ 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 });
3380
3535
  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"] });
3381
3536
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardByIdComponent, decorators: [{
3382
3537
  type: Component,
3383
3538
  args: [{ selector: 'csdk-dashboard-by-id', template: template, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] }]
3384
- }], ctorParameters: function () { return [{ type: SisenseContextService }, { type: ThemeService }, { type: PluginsService }]; }, propDecorators: { preactRef: [{
3539
+ }], ctorParameters: function () { return [{ type: SisenseContextService }, { type: ThemeService }, { type: CustomWidgetsService }]; }, propDecorators: { preactRef: [{
3385
3540
  type: ViewChild,
3386
3541
  args: [rootId]
3387
3542
  }], dashboardOid: [{
@@ -3889,6 +4044,129 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
3889
4044
  type: Output
3890
4045
  }] } });
3891
4046
 
4047
+ /**
4048
+ * Filters panel component that renders a list of filter tiles
4049
+ *
4050
+ * @example
4051
+ * Here's how to render a filters panel with a set of filters.
4052
+ *
4053
+ * ```html
4054
+ <!--Component HTML template in example.component.html-->
4055
+ <csdk-filters-panel
4056
+ [filters]="filtersPanelProps.filters"
4057
+ [defaultDataSource]="filtersPanelProps.defaultDataSource"
4058
+ (filtersChange)="filtersPanelProps.filtersChange($event)"
4059
+ />
4060
+ * ```
4061
+ *
4062
+ * ```ts
4063
+ // Component behavior in example.component.ts
4064
+ import { Component } from '@angular/core';
4065
+ import { type FiltersPanelProps } from '@sisense/sdk-ui-angular';
4066
+ import { filterFactory } from '@sisense/sdk-data';
4067
+ import * as DM from '../../assets/sample-healthcare-model';
4068
+
4069
+ @Component({
4070
+ selector: 'example',
4071
+ templateUrl: './example.component.html',
4072
+ styleUrls: ['./example.component.scss'],
4073
+ })
4074
+ export class ExampleComponent {
4075
+ filtersPanelProps: FiltersPanelProps = {
4076
+ filters: [
4077
+ filterFactory.members(DM.ER.Date.Years, ['2013-01-01T00:00:00']),
4078
+ filterFactory.members(DM.ER.Departments.Department, ['Cardiology']),
4079
+ ],
4080
+ defaultDataSource: DM.DataSource,
4081
+ filtersChange({ filters }) {
4082
+ this.filtersPanelProps.filters = filters;
4083
+ },
4084
+ };
4085
+ }
4086
+ * ```
4087
+ * @group Filter Tiles
4088
+ */
4089
+ class FiltersPanelComponent {
4090
+ /**
4091
+ * Constructor for the `FiltersPanelComponent`.
4092
+ *
4093
+ * @param sisenseContextService - Sisense context service
4094
+ * @param themeService - Theme service
4095
+ */
4096
+ constructor(
4097
+ /**
4098
+ * Sisense context service
4099
+ *
4100
+ * @category Constructor
4101
+ */
4102
+ sisenseContextService,
4103
+ /**
4104
+ * Theme service
4105
+ *
4106
+ * @category Constructor
4107
+ */
4108
+ themeService) {
4109
+ this.sisenseContextService = sisenseContextService;
4110
+ this.themeService = themeService;
4111
+ /**
4112
+ * {@inheritDoc FiltersPanelProps.filtersChange}
4113
+ */
4114
+ this.filtersChange = new EventEmitter();
4115
+ this.componentAdapter = new ComponentAdapter(FiltersPanel, [
4116
+ createSisenseContextConnector(this.sisenseContextService),
4117
+ createThemeContextConnector(this.themeService),
4118
+ ]);
4119
+ }
4120
+ /**
4121
+ * @internal
4122
+ */
4123
+ ngAfterViewInit() {
4124
+ this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());
4125
+ }
4126
+ /**
4127
+ * @internal
4128
+ */
4129
+ ngOnChanges() {
4130
+ if (this.preactRef) {
4131
+ this.componentAdapter.render(this.preactRef.nativeElement, this.getPreactComponentProps());
4132
+ }
4133
+ }
4134
+ getPreactComponentProps() {
4135
+ return {
4136
+ filters: this.filters,
4137
+ defaultDataSource: this.defaultDataSource,
4138
+ dataSources: this.dataSources,
4139
+ config: this.config,
4140
+ onFiltersChange: (...[filters]) => this.filtersChange.emit({ filters }),
4141
+ };
4142
+ }
4143
+ /**
4144
+ * @internal
4145
+ */
4146
+ ngOnDestroy() {
4147
+ this.componentAdapter.destroy();
4148
+ }
4149
+ }
4150
+ 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 });
4151
+ 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"] });
4152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersPanelComponent, decorators: [{
4153
+ type: Component,
4154
+ args: [{ selector: 'csdk-filters-panel', template: template, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] }]
4155
+ }], ctorParameters: function () { return [{ type: SisenseContextService }, { type: ThemeService }]; }, propDecorators: { preactRef: [{
4156
+ type: ViewChild,
4157
+ args: [rootId]
4158
+ }], filters: [{
4159
+ type: Input
4160
+ }], defaultDataSource: [{
4161
+ type: Input
4162
+ }], dataSources: [{
4163
+ type: Input
4164
+ }], config: [{
4165
+ type: Input
4166
+ }], filtersChange: [{
4167
+ type: Output
4168
+ }] } });
4169
+
3892
4170
  /**
3893
4171
  * Member Filter Tile Component
3894
4172
  *
@@ -4747,7 +5025,7 @@ class WidgetComponent {
4747
5025
  id: this.id,
4748
5026
  widgetType: this.widgetType,
4749
5027
  chartType: this.chartType,
4750
- pluginType: this.pluginType,
5028
+ customWidgetType: this.customWidgetType,
4751
5029
  dataSource: this.dataSource,
4752
5030
  dataOptions: this.dataOptions,
4753
5031
  filters: this.filters,
@@ -4771,7 +5049,7 @@ class WidgetComponent {
4771
5049
  }
4772
5050
  }
4773
5051
  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 });
4774
- 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"] });
5052
+ 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"] });
4775
5053
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WidgetComponent, decorators: [{
4776
5054
  type: Component,
4777
5055
  args: [{ selector: 'csdk-widget', template: template, styles: [".csdk-full-size-container{width:100%;height:100%}\n"] }]
@@ -4784,7 +5062,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
4784
5062
  type: Input
4785
5063
  }], chartType: [{
4786
5064
  type: Input
4787
- }], pluginType: [{
5065
+ }], customWidgetType: [{
4788
5066
  type: Input
4789
5067
  }], dataSource: [{
4790
5068
  type: Input
@@ -4987,6 +5265,7 @@ SdkUiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "1
4987
5265
  DashboardComponent,
4988
5266
  PivotTableWidgetComponent,
4989
5267
  FilterTileComponent,
5268
+ FiltersPanelComponent,
4990
5269
  WidgetComponent], imports: [CommonModule, DecoratorsModule], exports: [ChartComponent,
4991
5270
  TableComponent,
4992
5271
  ChartWidgetComponent,
@@ -5019,6 +5298,7 @@ SdkUiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "1
5019
5298
  DashboardComponent,
5020
5299
  PivotTableWidgetComponent,
5021
5300
  FilterTileComponent,
5301
+ FiltersPanelComponent,
5022
5302
  WidgetComponent] });
5023
5303
  SdkUiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdkUiModule, imports: [CommonModule, DecoratorsModule] });
5024
5304
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdkUiModule, decorators: [{
@@ -5057,6 +5337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5057
5337
  DashboardComponent,
5058
5338
  PivotTableWidgetComponent,
5059
5339
  FilterTileComponent,
5340
+ FiltersPanelComponent,
5060
5341
  WidgetComponent,
5061
5342
  ],
5062
5343
  imports: [CommonModule, DecoratorsModule],
@@ -5093,6 +5374,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
5093
5374
  DashboardComponent,
5094
5375
  PivotTableWidgetComponent,
5095
5376
  FilterTileComponent,
5377
+ FiltersPanelComponent,
5096
5378
  WidgetComponent,
5097
5379
  ],
5098
5380
  providers: [],
@@ -5593,5 +5875,5 @@ var widgetModelTranslator = /*#__PURE__*/Object.freeze({
5593
5875
  * Generated bundle index. Do not edit.
5594
5876
  */
5595
5877
 
5596
- 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 };
5878
+ 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 };
5597
5879
  //# sourceMappingURL=sisense-sdk-ui-angular.mjs.map