@provoly/dashboard 1.4.32 → 1.4.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/filters/autocomplete/autocomplete.component.mjs +6 -3
- package/esm2022/lib/core/model/filter.interface.mjs +1 -1
- package/esm2022/lib/core/store/search/search.actions.mjs +1 -1
- package/esm2022/lib/core/store/search/search.effects.mjs +2 -2
- package/esm2022/lib/core/store/search/search.service.mjs +32 -25
- package/esm2022/widgets/widget-template/component/widget-template.component.mjs +24 -40
- package/fesm2022/provoly-dashboard-filters-autocomplete.mjs +5 -2
- package/fesm2022/provoly-dashboard-filters-autocomplete.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-template.mjs +22 -37
- package/fesm2022/provoly-dashboard-widgets-widget-template.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +32 -25
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/lib/core/model/filter.interface.d.ts +1 -0
- package/lib/core/store/search/search.actions.d.ts +3 -0
- package/lib/core/store/search/search.service.d.ts +2 -1
- package/package.json +13 -13
- package/widgets/widget-template/component/widget-template.component.d.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provoly-dashboard-filters-autocomplete.mjs","sources":["../../../../projects/provoly/dashboard/filters/autocomplete/style/css.component.ts","../../../../projects/provoly/dashboard/filters/autocomplete/autocomplete.component.ts","../../../../projects/provoly/dashboard/filters/autocomplete/autocomplete.component.html","../../../../projects/provoly/dashboard/filters/autocomplete/autocomplete.module.ts","../../../../projects/provoly/dashboard/filters/autocomplete/provoly-dashboard-filters-autocomplete.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'pry-autocomplete-css',\n template: '',\n styleUrls: ['./_m-autocomplete.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PryAutocompleteCssComponent {}\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport {\n BaseFilterComponent,\n PrySelectComponent,\n SearchActions,\n SearchSelectors,\n SearchService\n} from '@provoly/dashboard';\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n map,\n Observable,\n of,\n skipUntil,\n startWith,\n Subject,\n switchMap,\n tap\n} from 'rxjs';\nimport equal from 'fast-deep-equal/es6';\nimport { Attribute } from '@provoly/dashboard/toolbox';\n\n@Component({\n selector: 'pry-autocomplete',\n templateUrl: './autocomplete.component.html'\n})\nexport class AutocompleteComponent extends BaseFilterComponent implements OnInit, OnDestroy {\n search$ = new BehaviorSubject<string>('');\n autocomplete$?: Observable<string[]>;\n loader: boolean = false;\n preventInitCall$ = new Subject<void>();\n possibleFilterValues$!: Observable<string[]>;\n possibleFilterValues: string[] = [];\n items$ = new BehaviorSubject<string[]>([]);\n @ViewChild('select') select!: PrySelectComponent;\n\n constructor(\n store: Store,\n private searchService: SearchService\n ) {\n super(store);\n this.type = 'autocomplete';\n }\n\n override ngOnInit() {\n this.possibleFilterValues$ = this.store.select(SearchSelectors.possibleFilterValues(this.filter?.id));\n this.subscriptions.add(this.possibleFilterValues$.subscribe((values) => (this.possibleFilterValues = values)));\n\n super.ngOnInit();\n if (this.filter?.attributes) {\n this.store.dispatch(\n SearchActions.getPossibleFilterValues({\n filterId: this.filter?.id ?? '',\n attributes: (this.filter?.attributes as Omit<Attribute, 'customId'>[]).filter(\n (a) => !!a.datasource && !!a.id\n ),\n limit: this.filter?.limit ?? 10,\n force: !this.filter.preventRefreshes\n })\n );\n }\n\n this.search$.next(`${this._value}`);\n this.autocomplete$ = this.search$.pipe(\n distinctUntilChanged((p, v) => equal(p, v)),\n skipUntil(this.preventInitCall$),\n debounceTime(500),\n switchMap((search) => {\n if (!!search && search.length > 1) {\n this.loader = true;\n this.items$.next([]);\n return this.searchService.autocomplete(this.filter?.attributes, search, this.filter?.limit).pipe(\n tap(() => (this.loader = false)),\n catchError((err) => {\n this.loader = false;\n console.error('Autocomplete failed', err);\n return [];\n })\n );\n }\n return of([] as string[]);\n })\n );\n setTimeout(() => this.preventInitCall$.next(), 200);\n\n this.subscriptions.add(\n combineLatest([this.possibleFilterValues$, this.autocomplete$.pipe(startWith(null))])\n .pipe(map(([possibleValues, autocomplete]) => (!!autocomplete ? autocomplete : possibleValues)))\n .subscribe((values) => this.items$.next(values))\n );\n }\n\n resetAutocompleteValues() {\n if (this.items$.getValue()?.length !== this.possibleFilterValues?.length) {\n this.items$.next(this.possibleFilterValues);\n }\n }\n\n setFilter(value: string) {\n if (value !== this.filter?.value) {\n super.updateFilter(value);\n }\n }\n\n updateSearch($event?: Event) {\n // @ts-ignore\n const value = $event ? $event.target!.value : '';\n this.search$.next(value);\n }\n\n clear() {\n this.search$.next('');\n this.cleared.next();\n }\n\n enterPressed($event: void) {\n this.pressedEnter.next();\n }\n}\n","<pry-autocomplete-css></pry-autocomplete-css>\n@if (filter) {\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\" (keyup)=\"updateSearch($event)\" #ref>\n @if (filter.name) {\n <label class=\"a-label m-filter__label\" for=\"{{ filter.name }}\">{{ filter.name }} : </label>\n }\n <pry-select\n [id]=\"filter.name\"\n [items]=\"items$ | async\"\n [ngModel]=\"filter.value\"\n (ngModelChange)=\"setFilter($event)\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n [externalAutocompleteService]=\"true\"\n aria-labelledby=\"item-label\"\n (blur)=\"updateSearch($event)\"\n [elementRef]=\"ref\"\n (cleared)=\"clear()\"\n [loading]=\"loader\"\n (clicked)=\"resetAutocompleteValues()\"\n [placeholder]=\"filter.placeholder ?? '' | i18n: { warn: false }\"\n (pressedEnter)=\"enterPressed($event)\"\n #select\n ></pry-select>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n BaseFilterComponent,\n BaseFilterModule,\n PryI18nModule,\n PryIconModule,\n PrySelectModule\n} from '@provoly/dashboard';\nimport { AutocompleteComponent } from './autocomplete.component';\nimport { PryAutocompleteCssComponent } from './style/css.component';\n\n@NgModule({\n declarations: [AutocompleteComponent, PryAutocompleteCssComponent],\n exports: [AutocompleteComponent],\n imports: [CommonModule, ReactiveFormsModule, FormsModule, PrySelectModule, PryIconModule, PryI18nModule]\n})\nexport class PryAutocompleteModule extends BaseFilterModule {\n override getComponent(): Type<BaseFilterComponent> {\n return AutocompleteComponent as Type<AutocompleteComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4.PryAutocompleteCssComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provoly-dashboard-filters-autocomplete.mjs","sources":["../../../../projects/provoly/dashboard/filters/autocomplete/style/css.component.ts","../../../../projects/provoly/dashboard/filters/autocomplete/autocomplete.component.ts","../../../../projects/provoly/dashboard/filters/autocomplete/autocomplete.component.html","../../../../projects/provoly/dashboard/filters/autocomplete/autocomplete.module.ts","../../../../projects/provoly/dashboard/filters/autocomplete/provoly-dashboard-filters-autocomplete.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'pry-autocomplete-css',\n template: '',\n styleUrls: ['./_m-autocomplete.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PryAutocompleteCssComponent {}\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport {\n BaseFilterComponent,\n PrySelectComponent,\n SearchActions,\n SearchSelectors,\n SearchService\n} from '@provoly/dashboard';\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n map,\n Observable,\n of,\n skipUntil,\n startWith,\n Subject,\n switchMap,\n tap\n} from 'rxjs';\nimport equal from 'fast-deep-equal/es6';\nimport { Attribute } from '@provoly/dashboard/toolbox';\n\n@Component({\n selector: 'pry-autocomplete',\n templateUrl: './autocomplete.component.html'\n})\nexport class AutocompleteComponent extends BaseFilterComponent implements OnInit, OnDestroy {\n search$ = new BehaviorSubject<string>('');\n autocomplete$?: Observable<string[]>;\n loader: boolean = false;\n preventInitCall$ = new Subject<void>();\n possibleFilterValues$!: Observable<string[]>;\n possibleFilterValues: string[] = [];\n items$ = new BehaviorSubject<string[]>([]);\n @ViewChild('select') select!: PrySelectComponent;\n\n constructor(\n store: Store,\n private searchService: SearchService\n ) {\n super(store);\n this.type = 'autocomplete';\n }\n\n override ngOnInit() {\n this.possibleFilterValues$ = this.store.select(SearchSelectors.possibleFilterValues(this.filter?.id));\n this.subscriptions.add(this.possibleFilterValues$.subscribe((values) => (this.possibleFilterValues = values)));\n\n super.ngOnInit();\n if (this.filter?.attributes) {\n this.store.dispatch(\n SearchActions.getPossibleFilterValues({\n filterId: this.filter?.id ?? '',\n attributes: (this.filter?.attributes as Omit<Attribute, 'customId'>[]).filter(\n (a) => !!a.datasource && !!a.id\n ),\n limit: this.filter?.limit ?? 10,\n force: !this.filter.preventRefreshes,\n valuesFilters: this.filter.valuesFilters\n })\n );\n }\n\n this.search$.next(`${this._value}`);\n this.autocomplete$ = this.search$.pipe(\n distinctUntilChanged((p, v) => equal(p, v)),\n skipUntil(this.preventInitCall$),\n debounceTime(500),\n switchMap((search) => {\n if (!!search && search.length > 1) {\n this.loader = true;\n this.items$.next([]);\n return this.searchService\n .autocomplete(this.filter?.attributes, search, this.filter?.valuesFilters, this.filter?.limit)\n .pipe(\n tap(() => (this.loader = false)),\n catchError((err) => {\n this.loader = false;\n console.error('Autocomplete failed', err);\n return [];\n })\n );\n }\n return of([] as string[]);\n })\n );\n setTimeout(() => this.preventInitCall$.next(), 200);\n\n this.subscriptions.add(\n combineLatest([this.possibleFilterValues$, this.autocomplete$.pipe(startWith(null))])\n .pipe(map(([possibleValues, autocomplete]) => (!!autocomplete ? autocomplete : possibleValues)))\n .subscribe((values) => this.items$.next(values))\n );\n }\n\n resetAutocompleteValues() {\n if (this.items$.getValue()?.length !== this.possibleFilterValues?.length) {\n this.items$.next(this.possibleFilterValues);\n }\n }\n\n setFilter(value: string) {\n if (value !== this.filter?.value) {\n super.updateFilter(value);\n }\n }\n\n updateSearch($event?: Event) {\n // @ts-ignore\n const value = $event ? $event.target!.value : '';\n this.search$.next(value);\n }\n\n clear() {\n this.search$.next('');\n this.cleared.next();\n }\n\n enterPressed($event: void) {\n this.pressedEnter.next();\n }\n}\n","<pry-autocomplete-css></pry-autocomplete-css>\n@if (filter) {\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\" (keyup)=\"updateSearch($event)\" #ref>\n @if (filter.name) {\n <label class=\"a-label m-filter__label\" for=\"{{ filter.name }}\">{{ filter.name }} : </label>\n }\n <pry-select\n [id]=\"filter.name\"\n [items]=\"items$ | async\"\n [ngModel]=\"filter.value\"\n (ngModelChange)=\"setFilter($event)\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n [externalAutocompleteService]=\"true\"\n aria-labelledby=\"item-label\"\n (blur)=\"updateSearch($event)\"\n [elementRef]=\"ref\"\n (cleared)=\"clear()\"\n [loading]=\"loader\"\n (clicked)=\"resetAutocompleteValues()\"\n [placeholder]=\"filter.placeholder ?? '' | i18n: { warn: false }\"\n (pressedEnter)=\"enterPressed($event)\"\n #select\n ></pry-select>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n BaseFilterComponent,\n BaseFilterModule,\n PryI18nModule,\n PryIconModule,\n PrySelectModule\n} from '@provoly/dashboard';\nimport { AutocompleteComponent } from './autocomplete.component';\nimport { PryAutocompleteCssComponent } from './style/css.component';\n\n@NgModule({\n declarations: [AutocompleteComponent, PryAutocompleteCssComponent],\n exports: [AutocompleteComponent],\n imports: [CommonModule, ReactiveFormsModule, FormsModule, PrySelectModule, PryIconModule, PryI18nModule]\n})\nexport class PryAutocompleteModule extends BaseFilterModule {\n override getComponent(): Type<BaseFilterComponent> {\n return AutocompleteComponent as Type<AutocompleteComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4.PryAutocompleteCssComponent"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { OverlayModule } from '@angular/cdk/overlay';
|
|
|
2
2
|
import * as i5 from '@angular/common';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
|
-
import { Component, ViewEncapsulation, NgModule } from '@angular/core';
|
|
5
|
+
import { Component, ViewEncapsulation, SecurityContext, NgModule } from '@angular/core';
|
|
6
6
|
import { FormsModule } from '@angular/forms';
|
|
7
7
|
import * as i3 from '@provoly/dashboard';
|
|
8
8
|
import { DataWidgetComponent, BaseWidgetModule, PryCoreModule, PryDashboardModule, PrySelectModule, PryIconModule, PryToggleModule, PryI18nModule } from '@provoly/dashboard';
|
|
@@ -31,8 +31,8 @@ class WidgetTemplateComponent extends DataWidgetComponent {
|
|
|
31
31
|
this.subscriptions.add(this.options$.pipe(filter((opt) => !!opt)).subscribe((options) => {
|
|
32
32
|
this.optionsCopy = { ...structuredClone(options) };
|
|
33
33
|
}));
|
|
34
|
-
this.template$ = this.options$.pipe(map((options) => (!!options.svg ? options.svg : options.html ?? '')), combineLatestWith(this.resultSet$), map(([template, rs]) => this.evaluate(template, rs)));
|
|
35
|
-
this.css$ = this.options$.pipe(map((options) => `<style>${
|
|
34
|
+
this.template$ = this.options$.pipe(map((options) => (!!options.svg ? options.svg : options.html ?? '')), combineLatestWith(this.resultSet$), map(([template, rs]) => this.sanitizer.sanitize(SecurityContext.HTML, WidgetTemplateComponent.evaluate(template, rs)) ?? ''));
|
|
35
|
+
this.css$ = this.options$.pipe(map((options) => `<style>${WidgetTemplateComponent.limitScope(options.css ?? '', this.id + '')}</style>`), combineLatestWith(this.resultSet$), map(([template, rs]) => this.sanitizer.sanitize(SecurityContext.STYLE, WidgetTemplateComponent.evaluate(template, rs)) ?? ''));
|
|
36
36
|
}
|
|
37
37
|
emitManifest() {
|
|
38
38
|
this.manifestModified.emit({
|
|
@@ -40,52 +40,37 @@ class WidgetTemplateComponent extends DataWidgetComponent {
|
|
|
40
40
|
manifest: { ...this.manifest, options: this.optionsCopy }
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
|
-
evaluate(template, rs) {
|
|
43
|
+
static evaluate(template, rs) {
|
|
44
44
|
const regexp = new RegExp('{{(.*?)}}', 'g');
|
|
45
45
|
const toReplace = template.match(regexp);
|
|
46
46
|
let result = template;
|
|
47
47
|
if (!!toReplace) {
|
|
48
48
|
toReplace.forEach((extracted) => {
|
|
49
|
-
const expr = extracted.substring(2, extracted.length - 2);
|
|
50
|
-
const splitted = expr.split(/[.\]]/).filter((extr) => extr !== '');
|
|
49
|
+
const expr = extracted.substring(2, extracted.length - 2).trim();
|
|
51
50
|
let evaluation = null;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
try {
|
|
52
|
+
// Replace rs references with actual values from the rs object
|
|
53
|
+
const replacedExpr = expr.replace(/rs\['(.*?)'\]\[(\d+)\]\.attributes\.(\w+)/g, (match, p1, p2, p3) => {
|
|
54
|
+
return rs.items[p1][parseInt(p2, 10)].attributes[p3].value;
|
|
55
|
+
});
|
|
56
|
+
// Evaluate the arithmetic expression
|
|
57
|
+
try {
|
|
58
|
+
evaluation = new Function('return ' + replacedExpr)();
|
|
59
59
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
evaluation = evaluation[parseInt(splitPart.substring(1), 10)];
|
|
63
|
-
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
evaluation = replacedExpr;
|
|
64
62
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
evaluation = evaluation[splitPart];
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
const prop = splitPart.substring(0, indexOfCaret);
|
|
73
|
-
const subProp = splitPart.substring(indexOfCaret + 1);
|
|
74
|
-
evaluation = evaluation[prop].values[subProp];
|
|
75
|
-
}
|
|
76
|
-
if (!!evaluation && evaluation.type === 'VALUE') {
|
|
77
|
-
evaluation = evaluation.value;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
});
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error('Error evaluating expression:', expr, error);
|
|
66
|
+
}
|
|
82
67
|
result = result.replace(extracted, evaluation);
|
|
83
68
|
});
|
|
84
69
|
}
|
|
85
|
-
return
|
|
70
|
+
return result;
|
|
86
71
|
}
|
|
87
|
-
limitScope(css) {
|
|
88
|
-
const scope = `.pry-template-${
|
|
72
|
+
static limitScope(css, id) {
|
|
73
|
+
const scope = `.pry-template-${id}`;
|
|
89
74
|
const scoped = css.replace(/([},] ?)/g, `$1${scope} `).replace(new RegExp(scope + ' $'), '');
|
|
90
75
|
return scope + ' ' + scoped;
|
|
91
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provoly-dashboard-widgets-widget-template.mjs","sources":["../../../../projects/provoly/dashboard/widgets/widget-template/style/css.component.ts","../../../../projects/provoly/dashboard/widgets/widget-template/component/widget-template.component.ts","../../../../projects/provoly/dashboard/widgets/widget-template/component/widget-template.component.html","../../../../projects/provoly/dashboard/widgets/widget-template/i18n/en.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-template/i18n/fr.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-template/widget-template.module.ts","../../../../projects/provoly/dashboard/widgets/widget-template/provoly-dashboard-widgets-widget-template.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'pry-widget-template-css',\n template: '',\n styleUrls: ['./_o-widget-template.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PryWidgetTemplateCssComponent {}\n","import { Component, ElementRef } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Store } from '@ngrx/store';\nimport { DataWidgetComponent, TemplateWidgetOptions } from '@provoly/dashboard';\nimport { combineLatestWith, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs';\n\n@Component({\n selector: 'pry-widget-template',\n templateUrl: './widget-template.component.html'\n})\nexport class WidgetTemplateComponent extends DataWidgetComponent {\n options$: Observable<TemplateWidgetOptions>;\n optionsCopy: TemplateWidgetOptions = {};\n template$: Observable<SafeHtml>;\n css$: Observable<SafeHtml>;\n id: number;\n static idGenerator = 0;\n\n constructor(\n store: Store<any>,\n el: ElementRef,\n private sanitizer: DomSanitizer\n ) {\n super(store, el);\n this.id = WidgetTemplateComponent.idGenerator++;\n this.options$ = this.manifest$.pipe(map((manifest) => manifest.options as TemplateWidgetOptions));\n\n this.subscriptions.add(\n this.options$.pipe(filter((opt) => !!opt)).subscribe((options) => {\n this.optionsCopy = { ...(structuredClone(options) as TemplateWidgetOptions) };\n })\n );\n\n this.template$ = this.options$.pipe(\n map((options) => (!!options.svg ? options.svg : options.html ?? '')),\n combineLatestWith(this.resultSet$),\n map(([template, rs]) => this.evaluate(template, rs))\n );\n\n this.css$ = this.options$.pipe(\n map((options) => `<style>${this.limitScope(options.css ?? '')}</style>`),\n combineLatestWith(this.resultSet$),\n map(([template, rs]) => this.evaluate(template, rs))\n );\n }\n\n override emitManifest() {\n this.manifestModified.emit({\n widgetIndex: this.widgetIndex,\n manifest: { ...this.manifest, options: this.optionsCopy }\n });\n }\n\n evaluate(template: string, rs: any): SafeHtml {\n const regexp = new RegExp('{{(.*?)}}', 'g');\n const toReplace = template.match(regexp);\n let result = template;\n\n if (!!toReplace) {\n toReplace.forEach((extracted) => {\n const expr = extracted.substring(2, extracted.length - 2);\n const splitted = expr.split(/[.\\]]/).filter((extr) => extr !== '');\n let evaluation: any = null;\n\n splitted.forEach((_splitPart) => {\n const splitPart = _splitPart.trim();\n if (splitPart.startsWith('rs')) {\n const classId = (expr.match(/rs\\['(.)*?'/) ?? ['no-class-id-detected'])[0]\n .replace(\"rs['\", '')\n .replace(\"'\", '');\n evaluation = rs.items[classId];\n } else if (splitPart.startsWith('[')) {\n if (!!evaluation) {\n evaluation = evaluation[parseInt(splitPart.substring(1), 10)];\n }\n } else {\n if (!!evaluation) {\n const indexOfCaret = splitPart.indexOf('[');\n if (indexOfCaret === -1) {\n evaluation = evaluation[splitPart];\n } else {\n const prop = splitPart.substring(0, indexOfCaret);\n const subProp = splitPart.substring(indexOfCaret + 1);\n evaluation = evaluation[prop].values[subProp];\n }\n if (!!evaluation && evaluation.type === 'VALUE') {\n evaluation = evaluation.value;\n }\n }\n }\n });\n\n result = result.replace(extracted, evaluation);\n });\n }\n\n return this.sanitizer.bypassSecurityTrustHtml(result);\n }\n\n private limitScope(css: string): string {\n const scope = `.pry-template-${this.id}`;\n\n const scoped = css.replace(/([},] ?)/g, `$1${scope} `).replace(new RegExp(scope + ' $'), '');\n\n return scope + ' ' + scoped;\n }\n\n changeHtml($event: Event) {\n // @ts-ignore\n this.optionsCopy.html = $event.currentTarget.value;\n }\n\n changeCss($event: Event) {\n // @ts-ignore\n this.optionsCopy.css = $event.currentTarget.value;\n }\n}\n","<pry-widget-template-css></pry-widget-template-css>\n@if (displayHeader$ | async) {\n <pry-widget-header\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"html_src\">{{ '@pry.widget.template.html' | i18n }}</label>\n <textarea\n class=\"a-form-field a-text-area -overflow\"\n id=\"html_src\"\n [value]=\"optionsCopy.html\"\n (input)=\"changeHtml($event)\"\n ></textarea>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"css_src\">{{ '@pry.widget.template.css' | i18n }}</label>\n <textarea\n class=\"a-form-field a-text-area -overflow\"\n id=\"css_src\"\n [value]=\"optionsCopy.css\"\n (input)=\"changeCss($event)\"\n ></textarea>\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n}\n@if (css$ | async; as css) {\n <div [innerHtml]=\"css\"></div>\n}\n@if (template$ | async; as template) {\n <div [class]=\"'pry-template-' + id\" [innerHtml]=\"template\"></div>\n}\n","export const enTranslations = {\n '@pry': {\n widget: {\n template: {\n html: 'Html',\n css: 'Css'\n }\n }\n }\n};\n","export const frTranslations = {\n '@pry': {\n widget: {\n template: {\n html: 'Html',\n css: 'Css'\n }\n }\n }\n};\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BaseWidgetComponent,\n BaseWidgetModule,\n PryCoreModule,\n PryDashboardModule,\n PryI18nModule,\n PryI18nService,\n PryIconModule,\n PrySelectModule,\n PryToggleModule\n} from '@provoly/dashboard';\nimport { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';\nimport { WidgetTemplateComponent } from './component/widget-template.component';\nimport { enTranslations } from './i18n/en.translations';\nimport { frTranslations } from './i18n/fr.translations';\nimport { PryWidgetTemplateCssComponent } from './style/css.component';\n\n@NgModule({\n declarations: [WidgetTemplateComponent, PryWidgetTemplateCssComponent],\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n PryCoreModule,\n PryDashboardModule,\n PrySelectModule,\n PryIconModule,\n PryCheckboxModule,\n PryToggleModule,\n PryI18nModule\n ],\n exports: [WidgetTemplateComponent]\n})\nexport class WidgetTemplateModule extends BaseWidgetModule {\n constructor(private pryTranslateService: PryI18nService) {\n super();\n this.pryTranslateService.addLangObject('fr', 'widget-template', frTranslations);\n this.pryTranslateService.addLangObject('en', 'widget-template', enTranslations);\n }\n\n override getComponent() {\n return WidgetTemplateComponent as Type<BaseWidgetComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4.PryWidgetTemplateCssComponent","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provoly-dashboard-widgets-widget-template.mjs","sources":["../../../../projects/provoly/dashboard/widgets/widget-template/style/css.component.ts","../../../../projects/provoly/dashboard/widgets/widget-template/component/widget-template.component.ts","../../../../projects/provoly/dashboard/widgets/widget-template/component/widget-template.component.html","../../../../projects/provoly/dashboard/widgets/widget-template/i18n/en.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-template/i18n/fr.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-template/widget-template.module.ts","../../../../projects/provoly/dashboard/widgets/widget-template/provoly-dashboard-widgets-widget-template.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'pry-widget-template-css',\n template: '',\n styleUrls: ['./_o-widget-template.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PryWidgetTemplateCssComponent {}\n","import { Component, ElementRef, SecurityContext } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Store } from '@ngrx/store';\nimport { DataWidgetComponent, TemplateWidgetOptions } from '@provoly/dashboard';\nimport { combineLatestWith, filter, map, Observable } from 'rxjs';\n\n@Component({\n selector: 'pry-widget-template',\n templateUrl: './widget-template.component.html'\n})\nexport class WidgetTemplateComponent extends DataWidgetComponent {\n options$: Observable<TemplateWidgetOptions>;\n optionsCopy: TemplateWidgetOptions = {};\n template$: Observable<SafeHtml>;\n css$: Observable<SafeHtml>;\n id: number;\n static idGenerator = 0;\n\n constructor(\n store: Store<any>,\n el: ElementRef,\n private sanitizer: DomSanitizer\n ) {\n super(store, el);\n this.id = WidgetTemplateComponent.idGenerator++;\n this.options$ = this.manifest$.pipe(map((manifest) => manifest.options as TemplateWidgetOptions));\n\n this.subscriptions.add(\n this.options$.pipe(filter((opt) => !!opt)).subscribe((options) => {\n this.optionsCopy = { ...(structuredClone(options) as TemplateWidgetOptions) };\n })\n );\n\n this.template$ = this.options$.pipe(\n map((options) => (!!options.svg ? options.svg : options.html ?? '')),\n combineLatestWith(this.resultSet$),\n map(\n ([template, rs]) =>\n this.sanitizer.sanitize(SecurityContext.HTML, WidgetTemplateComponent.evaluate(template, rs)) ?? ''\n )\n );\n\n this.css$ = this.options$.pipe(\n map((options) => `<style>${WidgetTemplateComponent.limitScope(options.css ?? '', this.id + '')}</style>`),\n combineLatestWith(this.resultSet$),\n map(\n ([template, rs]) =>\n this.sanitizer.sanitize(SecurityContext.STYLE, WidgetTemplateComponent.evaluate(template, rs)) ?? ''\n )\n );\n }\n\n override emitManifest() {\n this.manifestModified.emit({\n widgetIndex: this.widgetIndex,\n manifest: { ...this.manifest, options: this.optionsCopy }\n });\n }\n\n static evaluate(template: string, rs: any): string {\n const regexp = new RegExp('{{(.*?)}}', 'g');\n const toReplace = template.match(regexp);\n let result = template;\n\n if (!!toReplace) {\n toReplace.forEach((extracted) => {\n const expr = extracted.substring(2, extracted.length - 2).trim();\n let evaluation: any = null;\n\n try {\n // Replace rs references with actual values from the rs object\n const replacedExpr = expr.replace(/rs\\['(.*?)'\\]\\[(\\d+)\\]\\.attributes\\.(\\w+)/g, (match, p1, p2, p3) => {\n return rs.items[p1][parseInt(p2, 10)].attributes[p3].value;\n });\n\n // Evaluate the arithmetic expression\n try {\n evaluation = new Function('return ' + replacedExpr)();\n } catch (error) {\n evaluation = replacedExpr;\n }\n } catch (error) {\n console.error('Error evaluating expression:', expr, error);\n }\n\n result = result.replace(extracted, evaluation);\n });\n }\n\n return result;\n }\n\n static limitScope(css: string, id: string): string {\n const scope = `.pry-template-${id}`;\n\n const scoped = css.replace(/([},] ?)/g, `$1${scope} `).replace(new RegExp(scope + ' $'), '');\n\n return scope + ' ' + scoped;\n }\n\n changeHtml($event: Event) {\n // @ts-ignore\n this.optionsCopy.html = $event.currentTarget.value;\n }\n\n changeCss($event: Event) {\n // @ts-ignore\n this.optionsCopy.css = $event.currentTarget.value;\n }\n}\n","<pry-widget-template-css></pry-widget-template-css>\n@if (displayHeader$ | async) {\n <pry-widget-header\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"html_src\">{{ '@pry.widget.template.html' | i18n }}</label>\n <textarea\n class=\"a-form-field a-text-area -overflow\"\n id=\"html_src\"\n [value]=\"optionsCopy.html\"\n (input)=\"changeHtml($event)\"\n ></textarea>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"css_src\">{{ '@pry.widget.template.css' | i18n }}</label>\n <textarea\n class=\"a-form-field a-text-area -overflow\"\n id=\"css_src\"\n [value]=\"optionsCopy.css\"\n (input)=\"changeCss($event)\"\n ></textarea>\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n}\n@if (css$ | async; as css) {\n <div [innerHtml]=\"css\"></div>\n}\n@if (template$ | async; as template) {\n <div [class]=\"'pry-template-' + id\" [innerHtml]=\"template\"></div>\n}\n","export const enTranslations = {\n '@pry': {\n widget: {\n template: {\n html: 'Html',\n css: 'Css'\n }\n }\n }\n};\n","export const frTranslations = {\n '@pry': {\n widget: {\n template: {\n html: 'Html',\n css: 'Css'\n }\n }\n }\n};\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BaseWidgetComponent,\n BaseWidgetModule,\n PryCoreModule,\n PryDashboardModule,\n PryI18nModule,\n PryI18nService,\n PryIconModule,\n PrySelectModule,\n PryToggleModule\n} from '@provoly/dashboard';\nimport { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';\nimport { WidgetTemplateComponent } from './component/widget-template.component';\nimport { enTranslations } from './i18n/en.translations';\nimport { frTranslations } from './i18n/fr.translations';\nimport { PryWidgetTemplateCssComponent } from './style/css.component';\n\n@NgModule({\n declarations: [WidgetTemplateComponent, PryWidgetTemplateCssComponent],\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n PryCoreModule,\n PryDashboardModule,\n PrySelectModule,\n PryIconModule,\n PryCheckboxModule,\n PryToggleModule,\n PryI18nModule\n ],\n exports: [WidgetTemplateComponent]\n})\nexport class WidgetTemplateModule extends BaseWidgetModule {\n constructor(private pryTranslateService: PryI18nService) {\n super();\n this.pryTranslateService.addLangObject('fr', 'widget-template', frTranslations);\n this.pryTranslateService.addLangObject('en', 'widget-template', enTranslations);\n }\n\n override getComponent() {\n return WidgetTemplateComponent as Type<BaseWidgetComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4.PryWidgetTemplateCssComponent","i1"],"mappings":"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"}
|
|
@@ -5054,30 +5054,33 @@ class SearchService {
|
|
|
5054
5054
|
getItemsFilter(id, cumulative) {
|
|
5055
5055
|
let params = cumulative ?? new HttpParams({ encoder: new FilterParamEncoder() });
|
|
5056
5056
|
if (this.filters[id]) {
|
|
5057
|
-
this.filters[id]
|
|
5058
|
-
|
|
5059
|
-
.forEach((filter) => {
|
|
5060
|
-
let valuesToAddToParams = filter.value;
|
|
5061
|
-
// INSIDE and OUTSIDE operators uses 2 values but not sent in an array, values are separated by a coma
|
|
5062
|
-
// wich must not be encoded (as if values were in an array)
|
|
5063
|
-
const isMultiValued = ['INSIDE', 'OUTSIDE'].find((val) => val === filter.operator) !== undefined;
|
|
5064
|
-
if (isMultiValued) {
|
|
5065
|
-
valuesToAddToParams = filter.value.split(',');
|
|
5066
|
-
}
|
|
5067
|
-
// date filter value must be send in ISO-8601 format
|
|
5068
|
-
if (filter.type === 'date') {
|
|
5069
|
-
valuesToAddToParams = isMultiValued
|
|
5070
|
-
? valuesToAddToParams.map((value) => DateUtils.parseToIsoString(value))
|
|
5071
|
-
: DateUtils.parseToIsoString(valuesToAddToParams);
|
|
5072
|
-
}
|
|
5073
|
-
const value = Array.isArray(valuesToAddToParams)
|
|
5074
|
-
? valuesToAddToParams.map((v) => encodeURIComponent(v.toString().split(',').join('\\,'))).join(',')
|
|
5075
|
-
: encodeURIComponent(valuesToAddToParams.toString().replace(/,/g, '\\,'));
|
|
5076
|
-
params = params.append('filter', `${filter.attribute},${filter.operator},${value}`);
|
|
5077
|
-
});
|
|
5057
|
+
const filtersToAppendToParams = this.filters[id].filter((filter) => filter.value !== null && filter.value !== undefined);
|
|
5058
|
+
params = this.appendItemFilter(filtersToAppendToParams, params);
|
|
5078
5059
|
}
|
|
5079
5060
|
return params;
|
|
5080
5061
|
}
|
|
5062
|
+
appendItemFilter(filters, params) {
|
|
5063
|
+
filters.forEach((filter) => {
|
|
5064
|
+
let valuesToAddToParams = filter.value;
|
|
5065
|
+
// INSIDE and OUTSIDE operators uses 2 values but not sent in an array, values are separated by a coma
|
|
5066
|
+
// wich must not be encoded (as if values were in an array)
|
|
5067
|
+
const isMultiValued = ['INSIDE', 'OUTSIDE'].find((val) => val === filter.operator) !== undefined;
|
|
5068
|
+
if (isMultiValued) {
|
|
5069
|
+
valuesToAddToParams = filter.value.split(',');
|
|
5070
|
+
}
|
|
5071
|
+
// date filter value must be send in ISO-8601 format
|
|
5072
|
+
if (filter.type === 'date') {
|
|
5073
|
+
valuesToAddToParams = isMultiValued
|
|
5074
|
+
? valuesToAddToParams.map((value) => DateUtils.parseToIsoString(value))
|
|
5075
|
+
: DateUtils.parseToIsoString(valuesToAddToParams);
|
|
5076
|
+
}
|
|
5077
|
+
const value = Array.isArray(valuesToAddToParams)
|
|
5078
|
+
? valuesToAddToParams.map((v) => encodeURIComponent(v.toString().split(',').join('\\,'))).join(',')
|
|
5079
|
+
: encodeURIComponent(valuesToAddToParams.toString().replace(/,/g, '\\,'));
|
|
5080
|
+
params = params.append('filter', `${filter.attribute},${filter.operator},${value}`);
|
|
5081
|
+
});
|
|
5082
|
+
return params;
|
|
5083
|
+
}
|
|
5081
5084
|
getOrder(quickOrder) {
|
|
5082
5085
|
let params = new HttpParams({ encoder: new FilterParamEncoder() });
|
|
5083
5086
|
if (quickOrder) {
|
|
@@ -5128,12 +5131,16 @@ class SearchService {
|
|
|
5128
5131
|
this.transformations.forEach((func) => (transformed = func(id, transformed)));
|
|
5129
5132
|
return transformed;
|
|
5130
5133
|
}
|
|
5131
|
-
autocomplete(attributes, search = '', limit) {
|
|
5134
|
+
autocomplete(attributes, search = '', filters = [], limit) {
|
|
5135
|
+
const params = this.appendItemFilter(filters, new HttpParams({ encoder: new FilterParamEncoder() }));
|
|
5132
5136
|
return this.store.select(ConfigSelectors.dataUrl).pipe(switchMap((url) => this.httpClient.post(encodeURI(`${url}/data-sources/values`), {
|
|
5133
|
-
attributes: (attributes ?? []).map((attr) => ({
|
|
5137
|
+
attributes: (attributes ?? []).map((attr) => ({
|
|
5138
|
+
datasource: attr.datasource,
|
|
5139
|
+
attribute: attr.id
|
|
5140
|
+
})),
|
|
5134
5141
|
value: search,
|
|
5135
5142
|
limit
|
|
5136
|
-
})));
|
|
5143
|
+
}, { params })));
|
|
5137
5144
|
}
|
|
5138
5145
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5139
5146
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchService, providedIn: 'root' }); }
|
|
@@ -5486,7 +5493,7 @@ class SearchEffects {
|
|
|
5486
5493
|
next: action.next
|
|
5487
5494
|
}))));
|
|
5488
5495
|
this.getPossibleFilterValues$ = createEffect(() => this.actions$.pipe(ofType(SearchActions.getPossibleFilterValues), withLatestFrom(this.store.select(SearchSelectors.filterValues), this.store.select(DashboardSelectors.rank)), filter(([action, filterValues, rank]) => (action.force || !filterValues[action.filterId] || filterValues[action.filterId].length === 0) && rank === 0), mergeMap(([action]) => this.searchService
|
|
5489
|
-
.autocomplete(action.attributes, '', action.limit)
|
|
5496
|
+
.autocomplete(action.attributes, '', action.valuesFilters, action.limit)
|
|
5490
5497
|
.pipe(map((values) => SearchActions.setPossibleFilterValues({ filterId: action.filterId, values }))))));
|
|
5491
5498
|
}
|
|
5492
5499
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SearchEffects, deps: [{ token: i1$2.Actions }, { token: SearchService }, { token: i1.Store }, { token: WidgetFactoryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|