nuxeo-development-framework 5.4.6 → 5.4.7

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 (52) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +633 -346
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/ndf-config-editor/services/dummy-data.js +2 -2
  4. package/esm2015/lib/components/ndf-filters/containers/filters-panel/filters-panel.component.js +62 -16
  5. package/esm2015/lib/components/ndf-filters/models/base-field-config.js +1 -1
  6. package/esm2015/lib/components/ndf-filters/pipes/check-condition.pipe.js +3 -3
  7. package/esm2015/lib/components/reports/ndf-reports/base/base-custom-report.js +41 -0
  8. package/esm2015/lib/components/reports/ndf-reports/base/base-report.js +3 -2
  9. package/esm2015/lib/components/reports/ndf-reports/base/index.js +5 -0
  10. package/esm2015/lib/components/reports/ndf-reports/charts-components/graph-chart/graph-chart.component.js +1 -1
  11. package/esm2015/lib/components/reports/ndf-reports/components/custom-report/custom-report.component.js +49 -0
  12. package/esm2015/lib/components/reports/ndf-reports/components/index.js +2 -1
  13. package/esm2015/lib/components/reports/ndf-reports/constants/charts-types.js +2 -1
  14. package/esm2015/lib/components/reports/ndf-reports/models/custom-definition.js +2 -0
  15. package/esm2015/lib/components/reports/ndf-reports/models/dialog-data.js +1 -1
  16. package/esm2015/lib/components/reports/ndf-reports/models/dynamic-line.js +1 -1
  17. package/esm2015/lib/components/reports/ndf-reports/models/graph-definition.js +2 -0
  18. package/esm2015/lib/components/reports/ndf-reports/models/index.js +3 -2
  19. package/esm2015/lib/components/reports/ndf-reports/models/report-config.js +1 -1
  20. package/esm2015/lib/components/reports/ndf-reports/ndf-reports.module.js +4 -3
  21. package/esm2015/lib/components/reports/ndf-reports/services/custom-reports-registry.service.js +132 -0
  22. package/esm2015/lib/components/reports/ndf-reports/services/index.js +2 -1
  23. package/esm2015/lib/components/reports/ndf-reports/services/report-config-mapper.service.js +8 -1
  24. package/esm2015/lib/components/spell-checker-field/spell-checker-field.module.js +1 -1
  25. package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +7 -6
  26. package/esm2015/lib/shared/evaluator/evaluator.js +3 -2
  27. package/esm2015/lib/shared/evaluator/types.js +1 -1
  28. package/fesm2015/nuxeo-development-framework.js +591 -324
  29. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  30. package/lib/components/ndf-filters/containers/filters-panel/filters-panel.component.d.ts +10 -3
  31. package/lib/components/ndf-filters/models/base-field-config.d.ts +2 -2
  32. package/lib/components/ndf-filters/pipes/check-condition.pipe.d.ts +1 -1
  33. package/lib/components/reports/ndf-reports/base/base-custom-report.d.ts +38 -0
  34. package/lib/components/reports/ndf-reports/base/index.d.ts +4 -0
  35. package/lib/components/reports/ndf-reports/components/_parts/report-actions/report-actions.component.d.ts +1 -0
  36. package/lib/components/reports/ndf-reports/components/custom-report/custom-report.component.d.ts +14 -0
  37. package/lib/components/reports/ndf-reports/components/index.d.ts +1 -0
  38. package/lib/components/reports/ndf-reports/constants/charts-types.d.ts +1 -0
  39. package/lib/components/reports/ndf-reports/containers/ndf-report/ndf-report.component.d.ts +1 -0
  40. package/lib/components/reports/ndf-reports/models/custom-definition.d.ts +11 -0
  41. package/lib/components/reports/ndf-reports/models/dialog-data.d.ts +1 -1
  42. package/lib/components/reports/ndf-reports/models/dynamic-line.d.ts +1 -1
  43. package/lib/components/reports/ndf-reports/models/index.d.ts +2 -1
  44. package/lib/components/reports/ndf-reports/models/report-config.d.ts +3 -2
  45. package/lib/components/reports/ndf-reports/ndf-reports.module.d.ts +21 -20
  46. package/lib/components/reports/ndf-reports/services/custom-reports-registry.service.d.ts +83 -0
  47. package/lib/components/reports/ndf-reports/services/index.d.ts +1 -0
  48. package/lib/components/reports/ndf-reports/services/report-config-mapper.service.d.ts +6 -1
  49. package/lib/shared/evaluator/types.d.ts +1 -1
  50. package/package.json +1 -1
  51. package/esm2015/lib/components/reports/ndf-reports/models/graph.js +0 -2
  52. /package/lib/components/reports/ndf-reports/models/{graph.d.ts → graph-definition.d.ts} +0 -0
@@ -2477,11 +2477,12 @@
2477
2477
  }
2478
2478
  };
2479
2479
  NdfNuxeoDialog.prototype.isArrowFunction = function (fn) {
2480
- var strFn = fn.toString();
2481
- var firstIndex = strFn.indexOf(')');
2482
- var lastIndex = strFn.indexOf('{') + 1;
2483
- var target = strFn.substring(firstIndex, lastIndex).replace(' ', '');
2484
- return lastIndex == 0 || target.includes('=>');
2480
+ // const strFn = fn.toString();
2481
+ // const firstIndex = strFn.indexOf(')');
2482
+ // const lastIndex = strFn.indexOf('{') + 1;
2483
+ // const target = strFn.substring(firstIndex, lastIndex).replace(' ', '');
2484
+ // return lastIndex == 0 || target.includes('=>');
2485
+ return true;
2485
2486
  };
2486
2487
  NdfNuxeoDialog.prototype.onClose = function () {
2487
2488
  this.dialogRef.close();
@@ -19896,312 +19897,6 @@
19896
19897
  type: i0.Input
19897
19898
  }] } });
19898
19899
 
19899
- var BaseField = /** @class */ (function (_super) {
19900
- __extends(BaseField, _super);
19901
- function BaseField() {
19902
- var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
19903
- _this.dynamicComponent = _this.injector.get(DynamicComponentLoaderService);
19904
- return _this;
19905
- }
19906
- BaseField.prototype.writeValue = function (obj) {
19907
- var _a, _b, _c, _d;
19908
- this.internalValue = obj;
19909
- if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.writeValue) {
19910
- (_d = (_c = this._componentRef) === null || _c === void 0 ? void 0 : _c.instance) === null || _d === void 0 ? void 0 : _d.writeValue(obj);
19911
- }
19912
- };
19913
- BaseField.prototype.validate = function (control) {
19914
- var _a, _b;
19915
- if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.validate) {
19916
- return this._componentRef.instance.validate(control);
19917
- }
19918
- else {
19919
- return null;
19920
- }
19921
- };
19922
- BaseField.prototype.registerOnValidatorChange = function (fn) {
19923
- var _a, _b;
19924
- if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.registerOnValidatorChange) {
19925
- this._componentRef.instance.registerOnValidatorChange(fn);
19926
- }
19927
- };
19928
- BaseField.prototype.ngOnChanges = function (changes) {
19929
- var _this = this;
19930
- if (!this._componentRef) {
19931
- return;
19932
- }
19933
- Object.keys(changes).forEach(function (key) {
19934
- _this._componentRef.instance[key] = changes[key].currentValue;
19935
- });
19936
- this._componentRef.changeDetectorRef.markForCheck();
19937
- };
19938
- BaseField.prototype.ngOnDestroy = function () {
19939
- if (this._componentRef) {
19940
- this._componentRef.destroy();
19941
- }
19942
- };
19943
- BaseField.prototype._prepareValueAccessor = function () {
19944
- var ngControl = this.injector.get(i2.NgControl);
19945
- ngControl.valueAccessor = this._componentRef.instance;
19946
- };
19947
- return BaseField;
19948
- }(BaseCustomValueAccessor));
19949
- BaseField.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: BaseField, deps: null, target: i0__namespace.ɵɵFactoryTarget.Directive });
19950
- BaseField.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: BaseField, inputs: { fieldConfig: "fieldConfig" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["dynamicContainer"], descendants: true, read: i0.ViewContainerRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0__namespace });
19951
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: BaseField, decorators: [{
19952
- type: i0.Directive
19953
- }], propDecorators: { container: [{
19954
- type: i0.ViewChild,
19955
- args: ['dynamicContainer', { read: i0.ViewContainerRef, static: true }]
19956
- }], fieldConfig: [{
19957
- type: i0.Input
19958
- }] } });
19959
-
19960
- var PredicateFieldComponent = /** @class */ (function (_super) {
19961
- __extends(PredicateFieldComponent, _super);
19962
- function PredicateFieldComponent() {
19963
- var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
19964
- _this.handlers = {
19965
- input: _this._prepareField.bind(_this),
19966
- date: _this._prepareField.bind(_this)
19967
- };
19968
- return _this;
19969
- }
19970
- PredicateFieldComponent.prototype.ngOnInit = function () {
19971
- var _a, _b;
19972
- var componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
19973
- if (componentType) {
19974
- this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
19975
- this._prepareValueAccessor();
19976
- this._prepareComponent(componentType);
19977
- }
19978
- };
19979
- PredicateFieldComponent.prototype._prepareComponent = function (type) {
19980
- var _a, _b;
19981
- (_b = (_a = this.handlers)[type]) === null || _b === void 0 ? void 0 : _b.call(_a);
19982
- };
19983
- PredicateFieldComponent.prototype._prepareField = function () {
19984
- var instance = this._componentRef.instance;
19985
- instance.field = this.fieldConfig;
19986
- };
19987
- return PredicateFieldComponent;
19988
- }(BaseField));
19989
- PredicateFieldComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PredicateFieldComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
19990
- PredicateFieldComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PredicateFieldComponent, selector: "app-predicate-field", host: { properties: { "class": "'predicate-field' + ' predicate-field__fieldConfig?.render?.type' " } }, providers: [
19991
- {
19992
- provide: i2.NG_VALUE_ACCESSOR,
19993
- useExisting: i0.forwardRef(function () { return PredicateFieldComponent; }),
19994
- multi: true
19995
- },
19996
- {
19997
- provide: i2.NG_VALIDATORS,
19998
- useExisting: i0.forwardRef(function () { return PredicateFieldComponent; }),
19999
- multi: true
20000
- }
20001
- ], usesInheritance: true, ngImport: i0__namespace, template: "<field-header *ngIf=\"fieldConfig.label && !fieldConfig.render?.options?.hideLabel\" class=\"predicate-field__label\">{{\r\n\tfieldConfig.label | translate\r\n}}</field-header>\r\n\r\n<ng-container #dynamicContainer></ng-container>\r\n", styles: [".predicate-field{display:var(--pf-display, block);padding-inline:var(--pf-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--pf-padding-block, var(--ff-padding-block, 0));max-width:100%}\n"], components: [{ type: FieldHeaderComponent, selector: "field-header" }], directives: [{ type: i4__namespace$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1__namespace.TranslatePipe }, encapsulation: i0__namespace.ViewEncapsulation.None });
20002
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PredicateFieldComponent, decorators: [{
20003
- type: i0.Component,
20004
- args: [{
20005
- selector: 'app-predicate-field',
20006
- templateUrl: './predicate-field.component.html',
20007
- styleUrls: ['./predicate-field.component.scss'],
20008
- encapsulation: i0.ViewEncapsulation.None,
20009
- providers: [
20010
- {
20011
- provide: i2.NG_VALUE_ACCESSOR,
20012
- useExisting: i0.forwardRef(function () { return PredicateFieldComponent; }),
20013
- multi: true
20014
- },
20015
- {
20016
- provide: i2.NG_VALIDATORS,
20017
- useExisting: i0.forwardRef(function () { return PredicateFieldComponent; }),
20018
- multi: true
20019
- }
20020
- ],
20021
- host: {
20022
- '[class]': "'predicate-field' + ' predicate-field__fieldConfig?.render?.type' "
20023
- }
20024
- }]
20025
- }] });
20026
-
20027
- var AggregationFieldComponent = /** @class */ (function (_super) {
20028
- __extends(AggregationFieldComponent, _super);
20029
- function AggregationFieldComponent() {
20030
- var _e;
20031
- var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
20032
- _this.handlers = (_e = {},
20033
- _e[AGGREGATION_FIELD_TYPES.dropdown] = _this._prepareField.bind(_this),
20034
- _e[AGGREGATION_FIELD_TYPES.checkbox] = _this._prepareField.bind(_this),
20035
- _e[AGGREGATION_FIELD_TYPES.radio] = _this._prepareField.bind(_this),
20036
- _e[AGGREGATION_FIELD_TYPES.switch] = _this._prepareField.bind(_this),
20037
- _e[AGGREGATION_FIELD_TYPES.autocomplete] = _this._prepareField.bind(_this),
20038
- _e[AGGREGATION_FIELD_TYPES.dateList] = _this._prepareField.bind(_this),
20039
- _e[AGGREGATION_FIELD_TYPES.custom] = _this._prepareField.bind(_this),
20040
- _e);
20041
- return _this;
20042
- }
20043
- AggregationFieldComponent.prototype.ngOnInit = function () {
20044
- var _a, _b, _c, _d;
20045
- var componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
20046
- if (componentType) {
20047
- this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
20048
- this._prepareValueAccessor();
20049
- (_d = (_c = this.handlers)[componentType]) === null || _d === void 0 ? void 0 : _d.call(_c);
20050
- }
20051
- };
20052
- AggregationFieldComponent.prototype._prepareField = function () {
20053
- var instance = this._componentRef
20054
- .instance;
20055
- instance.aggregation = this.aggregation;
20056
- instance.fieldConfig = this.fieldConfig;
20057
- if (this.contentTemplate) {
20058
- instance.contentTemplate = this.contentTemplate;
20059
- }
20060
- };
20061
- return AggregationFieldComponent;
20062
- }(BaseField));
20063
- AggregationFieldComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: AggregationFieldComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
20064
- AggregationFieldComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AggregationFieldComponent, selector: "app-aggregation-field", inputs: { aggregation: "aggregation", contentTemplate: "contentTemplate" }, host: { properties: { "class": "'aggregation-field' + ' aggregation-field__fieldConfig?.render?.type' " } }, providers: [
20065
- {
20066
- provide: i2.NG_VALUE_ACCESSOR,
20067
- useExisting: i0.forwardRef(function () { return AggregationFieldComponent; }),
20068
- multi: true,
20069
- },
20070
- {
20071
- provide: i2.NG_VALIDATORS,
20072
- useExisting: i0.forwardRef(function () { return AggregationFieldComponent; }),
20073
- multi: true,
20074
- },
20075
- ], usesInheritance: true, ngImport: i0__namespace, template: '<ng-container #dynamicContainer></ng-container>', isInline: true, styles: [""], encapsulation: i0__namespace.ViewEncapsulation.None });
20076
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: AggregationFieldComponent, decorators: [{
20077
- type: i0.Component,
20078
- args: [{
20079
- selector: 'app-aggregation-field',
20080
- template: '<ng-container #dynamicContainer></ng-container>',
20081
- styles: [''],
20082
- encapsulation: i0.ViewEncapsulation.None,
20083
- providers: [
20084
- {
20085
- provide: i2.NG_VALUE_ACCESSOR,
20086
- useExisting: i0.forwardRef(function () { return AggregationFieldComponent; }),
20087
- multi: true,
20088
- },
20089
- {
20090
- provide: i2.NG_VALIDATORS,
20091
- useExisting: i0.forwardRef(function () { return AggregationFieldComponent; }),
20092
- multi: true,
20093
- },
20094
- ],
20095
- host: {
20096
- '[class]': "'aggregation-field' + ' aggregation-field__fieldConfig?.render?.type' ",
20097
- },
20098
- }]
20099
- }], propDecorators: { aggregation: [{
20100
- type: i0.Input
20101
- }], contentTemplate: [{
20102
- type: i0.Input
20103
- }] } });
20104
-
20105
- var CustomFieldComponent = /** @class */ (function (_super) {
20106
- __extends(CustomFieldComponent, _super);
20107
- function CustomFieldComponent() {
20108
- var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
20109
- _this.handlers = {
20110
- activeUser: _this._prepareField.bind(_this),
20111
- aggregationGroup: _this._prepareField.bind(_this)
20112
- };
20113
- return _this;
20114
- }
20115
- CustomFieldComponent.prototype.ngOnInit = function () {
20116
- var _a, _b;
20117
- var componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
20118
- if (componentType) {
20119
- this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
20120
- this._prepareValueAccessor();
20121
- this._prepareComponent(componentType);
20122
- }
20123
- };
20124
- CustomFieldComponent.prototype._prepareComponent = function (type) {
20125
- var _a, _b;
20126
- (_b = (_a = this.handlers)[type]) === null || _b === void 0 ? void 0 : _b.call(_a);
20127
- };
20128
- CustomFieldComponent.prototype._prepareField = function () {
20129
- var instance = this._componentRef.instance;
20130
- instance.field = this.fieldConfig;
20131
- instance.aggregations = this.aggregations;
20132
- };
20133
- return CustomFieldComponent;
20134
- }(BaseField));
20135
- CustomFieldComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomFieldComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
20136
- CustomFieldComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomFieldComponent, selector: "app-custom-field", inputs: { aggregations: "aggregations" }, host: { properties: { "class": "'custom-field' + ' custom-field__fieldConfig?.render?.type' " } }, providers: [
20137
- {
20138
- provide: i2.NG_VALUE_ACCESSOR,
20139
- useExisting: i0.forwardRef(function () { return CustomFieldComponent; }),
20140
- multi: true
20141
- },
20142
- {
20143
- provide: i2.NG_VALIDATORS,
20144
- useExisting: i0.forwardRef(function () { return CustomFieldComponent; }),
20145
- multi: true
20146
- }
20147
- ], usesInheritance: true, ngImport: i0__namespace, template: "<field-header *ngIf=\"fieldConfig.label && !fieldConfig.render?.options?.hideLabel\" class=\"predicate-field__label\">{{\r\n\tfieldConfig.label | translate\r\n}}</field-header>\r\n\r\n<ng-container #dynamicContainer></ng-container>\r\n", styles: [".custom-field{display:var(--cf-display, block);padding-inline:var(--cf-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--cf-padding-block, var(--ff-padding-block, 0));max-width:100%}\n"], components: [{ type: FieldHeaderComponent, selector: "field-header" }], directives: [{ type: i4__namespace$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1__namespace.TranslatePipe }, encapsulation: i0__namespace.ViewEncapsulation.None });
20148
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomFieldComponent, decorators: [{
20149
- type: i0.Component,
20150
- args: [{
20151
- selector: 'app-custom-field',
20152
- templateUrl: './custom-field.component.html',
20153
- styleUrls: ['./custom-field.component.scss'],
20154
- encapsulation: i0.ViewEncapsulation.None,
20155
- providers: [
20156
- {
20157
- provide: i2.NG_VALUE_ACCESSOR,
20158
- useExisting: i0.forwardRef(function () { return CustomFieldComponent; }),
20159
- multi: true
20160
- },
20161
- {
20162
- provide: i2.NG_VALIDATORS,
20163
- useExisting: i0.forwardRef(function () { return CustomFieldComponent; }),
20164
- multi: true
20165
- }
20166
- ],
20167
- host: {
20168
- '[class]': "'custom-field' + ' custom-field__fieldConfig?.render?.type' "
20169
- }
20170
- }]
20171
- }], propDecorators: { aggregations: [{
20172
- type: i0.Input
20173
- }] } });
20174
-
20175
- var FiltersByRolesPipe = /** @class */ (function () {
20176
- function FiltersByRolesPipe(_nuxeoService, _rolesService) {
20177
- this._nuxeoService = _nuxeoService;
20178
- this._rolesService = _rolesService;
20179
- }
20180
- FiltersByRolesPipe.prototype.transform = function (items) {
20181
- var _this = this;
20182
- if (!items) {
20183
- return items;
20184
- }
20185
- return items.filter(function (item) {
20186
- var _a, _b, _c, _d, _e;
20187
- if (!Array.isArray((_a = item.config) === null || _a === void 0 ? void 0 : _a.roles) || ((_b = item.config) === null || _b === void 0 ? void 0 : _b.roles.length) === 0) {
20188
- return true;
20189
- }
20190
- var user = (_d = (_c = _this._nuxeoService) === null || _c === void 0 ? void 0 : _c.nuxeoClient) === null || _d === void 0 ? void 0 : _d.user;
20191
- return _this._rolesService.isUserInRole(user, (_e = item.config) === null || _e === void 0 ? void 0 : _e.roles);
20192
- });
20193
- };
20194
- return FiltersByRolesPipe;
20195
- }());
20196
- FiltersByRolesPipe.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FiltersByRolesPipe, deps: [{ token: NuxeoService }, { token: RolesService }], target: i0__namespace.ɵɵFactoryTarget.Pipe });
20197
- FiltersByRolesPipe.ɵpipe = i0__namespace.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FiltersByRolesPipe, name: "filterByRoles" });
20198
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FiltersByRolesPipe, decorators: [{
20199
- type: i0.Pipe,
20200
- args: [{
20201
- name: 'filterByRoles'
20202
- }]
20203
- }], ctorParameters: function () { return [{ type: NuxeoService }, { type: RolesService }]; } });
20204
-
20205
19900
  /**
20206
19901
  * Creates a secure context for function evaluation that prevents access to the window object.
20207
19902
  * @returns {Record<string, any>} A secure context object with safe properties.
@@ -20227,7 +19922,8 @@
20227
19922
  // Prevent access to window
20228
19923
  window: undefined,
20229
19924
  self: undefined,
20230
- globalThis: undefined
19925
+ globalThis: undefined,
19926
+ _: ___default["default"] // Include lodash if needed, but ensure it's used safely
20231
19927
  };
20232
19928
  }
20233
19929
  /**
@@ -20543,39 +20239,318 @@
20543
20239
  escape: /\{\{\{([\s\S]+?)\}\}\}/g
20544
20240
  };
20545
20241
 
20546
- var CheckConditionPipe = /** @class */ (function () {
20547
- function CheckConditionPipe(nuxeoService) {
20548
- this.nuxeoService = nuxeoService;
20549
- this.user = nuxeoService.nuxeoClient.user;
20242
+ var BaseField = /** @class */ (function (_super) {
20243
+ __extends(BaseField, _super);
20244
+ function BaseField() {
20245
+ var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
20246
+ _this.dynamicComponent = _this.injector.get(DynamicComponentLoaderService);
20247
+ return _this;
20550
20248
  }
20551
- CheckConditionPipe.prototype.transform = function (condition, aggregations, language) {
20552
- if (!condition) {
20553
- return true;
20249
+ BaseField.prototype.writeValue = function (obj) {
20250
+ var _a, _b, _c, _d;
20251
+ this.internalValue = obj;
20252
+ if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.writeValue) {
20253
+ (_d = (_c = this._componentRef) === null || _c === void 0 ? void 0 : _c.instance) === null || _d === void 0 ? void 0 : _d.writeValue(obj);
20554
20254
  }
20555
- try {
20556
- return Evaluator.evaluate(condition, ___default["default"].cloneDeep({ aggregations: aggregations, language: language, user: this.user }));
20255
+ };
20256
+ BaseField.prototype.validate = function (control) {
20257
+ var _a, _b;
20258
+ if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.validate) {
20259
+ return this._componentRef.instance.validate(control);
20557
20260
  }
20558
- catch (error) {
20559
- console.error({ error: error });
20560
- return false;
20261
+ else {
20262
+ return null;
20561
20263
  }
20562
20264
  };
20563
- return CheckConditionPipe;
20265
+ BaseField.prototype.registerOnValidatorChange = function (fn) {
20266
+ var _a, _b;
20267
+ if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.registerOnValidatorChange) {
20268
+ this._componentRef.instance.registerOnValidatorChange(fn);
20269
+ }
20270
+ };
20271
+ BaseField.prototype.ngOnChanges = function (changes) {
20272
+ var _this = this;
20273
+ if (!this._componentRef) {
20274
+ return;
20275
+ }
20276
+ Object.keys(changes).forEach(function (key) {
20277
+ _this._componentRef.instance[key] = changes[key].currentValue;
20278
+ });
20279
+ this._componentRef.changeDetectorRef.markForCheck();
20280
+ };
20281
+ BaseField.prototype.ngOnDestroy = function () {
20282
+ if (this._componentRef) {
20283
+ this._componentRef.destroy();
20284
+ }
20285
+ };
20286
+ BaseField.prototype._prepareValueAccessor = function () {
20287
+ var ngControl = this.injector.get(i2.NgControl);
20288
+ ngControl.valueAccessor = this._componentRef.instance;
20289
+ };
20290
+ return BaseField;
20291
+ }(BaseCustomValueAccessor));
20292
+ BaseField.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: BaseField, deps: null, target: i0__namespace.ɵɵFactoryTarget.Directive });
20293
+ BaseField.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: BaseField, inputs: { fieldConfig: "fieldConfig" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["dynamicContainer"], descendants: true, read: i0.ViewContainerRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0__namespace });
20294
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: BaseField, decorators: [{
20295
+ type: i0.Directive
20296
+ }], propDecorators: { container: [{
20297
+ type: i0.ViewChild,
20298
+ args: ['dynamicContainer', { read: i0.ViewContainerRef, static: true }]
20299
+ }], fieldConfig: [{
20300
+ type: i0.Input
20301
+ }] } });
20302
+
20303
+ var PredicateFieldComponent = /** @class */ (function (_super) {
20304
+ __extends(PredicateFieldComponent, _super);
20305
+ function PredicateFieldComponent() {
20306
+ var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
20307
+ _this.handlers = {
20308
+ input: _this._prepareField.bind(_this),
20309
+ date: _this._prepareField.bind(_this)
20310
+ };
20311
+ return _this;
20312
+ }
20313
+ PredicateFieldComponent.prototype.ngOnInit = function () {
20314
+ var _a, _b;
20315
+ var componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
20316
+ if (componentType) {
20317
+ this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
20318
+ this._prepareValueAccessor();
20319
+ this._prepareComponent(componentType);
20320
+ }
20321
+ };
20322
+ PredicateFieldComponent.prototype._prepareComponent = function (type) {
20323
+ var _a, _b;
20324
+ (_b = (_a = this.handlers)[type]) === null || _b === void 0 ? void 0 : _b.call(_a);
20325
+ };
20326
+ PredicateFieldComponent.prototype._prepareField = function () {
20327
+ var instance = this._componentRef.instance;
20328
+ instance.field = this.fieldConfig;
20329
+ };
20330
+ return PredicateFieldComponent;
20331
+ }(BaseField));
20332
+ PredicateFieldComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PredicateFieldComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
20333
+ PredicateFieldComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PredicateFieldComponent, selector: "app-predicate-field", host: { properties: { "class": "'predicate-field' + ' predicate-field__fieldConfig?.render?.type' " } }, providers: [
20334
+ {
20335
+ provide: i2.NG_VALUE_ACCESSOR,
20336
+ useExisting: i0.forwardRef(function () { return PredicateFieldComponent; }),
20337
+ multi: true
20338
+ },
20339
+ {
20340
+ provide: i2.NG_VALIDATORS,
20341
+ useExisting: i0.forwardRef(function () { return PredicateFieldComponent; }),
20342
+ multi: true
20343
+ }
20344
+ ], usesInheritance: true, ngImport: i0__namespace, template: "<field-header *ngIf=\"fieldConfig.label && !fieldConfig.render?.options?.hideLabel\" class=\"predicate-field__label\">{{\r\n\tfieldConfig.label | translate\r\n}}</field-header>\r\n\r\n<ng-container #dynamicContainer></ng-container>\r\n", styles: [".predicate-field{display:var(--pf-display, block);padding-inline:var(--pf-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--pf-padding-block, var(--ff-padding-block, 0));max-width:100%}\n"], components: [{ type: FieldHeaderComponent, selector: "field-header" }], directives: [{ type: i4__namespace$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1__namespace.TranslatePipe }, encapsulation: i0__namespace.ViewEncapsulation.None });
20345
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: PredicateFieldComponent, decorators: [{
20346
+ type: i0.Component,
20347
+ args: [{
20348
+ selector: 'app-predicate-field',
20349
+ templateUrl: './predicate-field.component.html',
20350
+ styleUrls: ['./predicate-field.component.scss'],
20351
+ encapsulation: i0.ViewEncapsulation.None,
20352
+ providers: [
20353
+ {
20354
+ provide: i2.NG_VALUE_ACCESSOR,
20355
+ useExisting: i0.forwardRef(function () { return PredicateFieldComponent; }),
20356
+ multi: true
20357
+ },
20358
+ {
20359
+ provide: i2.NG_VALIDATORS,
20360
+ useExisting: i0.forwardRef(function () { return PredicateFieldComponent; }),
20361
+ multi: true
20362
+ }
20363
+ ],
20364
+ host: {
20365
+ '[class]': "'predicate-field' + ' predicate-field__fieldConfig?.render?.type' "
20366
+ }
20367
+ }]
20368
+ }] });
20369
+
20370
+ var AggregationFieldComponent = /** @class */ (function (_super) {
20371
+ __extends(AggregationFieldComponent, _super);
20372
+ function AggregationFieldComponent() {
20373
+ var _e;
20374
+ var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
20375
+ _this.handlers = (_e = {},
20376
+ _e[AGGREGATION_FIELD_TYPES.dropdown] = _this._prepareField.bind(_this),
20377
+ _e[AGGREGATION_FIELD_TYPES.checkbox] = _this._prepareField.bind(_this),
20378
+ _e[AGGREGATION_FIELD_TYPES.radio] = _this._prepareField.bind(_this),
20379
+ _e[AGGREGATION_FIELD_TYPES.switch] = _this._prepareField.bind(_this),
20380
+ _e[AGGREGATION_FIELD_TYPES.autocomplete] = _this._prepareField.bind(_this),
20381
+ _e[AGGREGATION_FIELD_TYPES.dateList] = _this._prepareField.bind(_this),
20382
+ _e[AGGREGATION_FIELD_TYPES.custom] = _this._prepareField.bind(_this),
20383
+ _e);
20384
+ return _this;
20385
+ }
20386
+ AggregationFieldComponent.prototype.ngOnInit = function () {
20387
+ var _a, _b, _c, _d;
20388
+ var componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
20389
+ if (componentType) {
20390
+ this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
20391
+ this._prepareValueAccessor();
20392
+ (_d = (_c = this.handlers)[componentType]) === null || _d === void 0 ? void 0 : _d.call(_c);
20393
+ }
20394
+ };
20395
+ AggregationFieldComponent.prototype._prepareField = function () {
20396
+ var instance = this._componentRef
20397
+ .instance;
20398
+ instance.aggregation = this.aggregation;
20399
+ instance.fieldConfig = this.fieldConfig;
20400
+ if (this.contentTemplate) {
20401
+ instance.contentTemplate = this.contentTemplate;
20402
+ }
20403
+ };
20404
+ return AggregationFieldComponent;
20405
+ }(BaseField));
20406
+ AggregationFieldComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: AggregationFieldComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
20407
+ AggregationFieldComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AggregationFieldComponent, selector: "app-aggregation-field", inputs: { aggregation: "aggregation", contentTemplate: "contentTemplate" }, host: { properties: { "class": "'aggregation-field' + ' aggregation-field__fieldConfig?.render?.type' " } }, providers: [
20408
+ {
20409
+ provide: i2.NG_VALUE_ACCESSOR,
20410
+ useExisting: i0.forwardRef(function () { return AggregationFieldComponent; }),
20411
+ multi: true,
20412
+ },
20413
+ {
20414
+ provide: i2.NG_VALIDATORS,
20415
+ useExisting: i0.forwardRef(function () { return AggregationFieldComponent; }),
20416
+ multi: true,
20417
+ },
20418
+ ], usesInheritance: true, ngImport: i0__namespace, template: '<ng-container #dynamicContainer></ng-container>', isInline: true, styles: [""], encapsulation: i0__namespace.ViewEncapsulation.None });
20419
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: AggregationFieldComponent, decorators: [{
20420
+ type: i0.Component,
20421
+ args: [{
20422
+ selector: 'app-aggregation-field',
20423
+ template: '<ng-container #dynamicContainer></ng-container>',
20424
+ styles: [''],
20425
+ encapsulation: i0.ViewEncapsulation.None,
20426
+ providers: [
20427
+ {
20428
+ provide: i2.NG_VALUE_ACCESSOR,
20429
+ useExisting: i0.forwardRef(function () { return AggregationFieldComponent; }),
20430
+ multi: true,
20431
+ },
20432
+ {
20433
+ provide: i2.NG_VALIDATORS,
20434
+ useExisting: i0.forwardRef(function () { return AggregationFieldComponent; }),
20435
+ multi: true,
20436
+ },
20437
+ ],
20438
+ host: {
20439
+ '[class]': "'aggregation-field' + ' aggregation-field__fieldConfig?.render?.type' ",
20440
+ },
20441
+ }]
20442
+ }], propDecorators: { aggregation: [{
20443
+ type: i0.Input
20444
+ }], contentTemplate: [{
20445
+ type: i0.Input
20446
+ }] } });
20447
+
20448
+ var CustomFieldComponent = /** @class */ (function (_super) {
20449
+ __extends(CustomFieldComponent, _super);
20450
+ function CustomFieldComponent() {
20451
+ var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
20452
+ _this.handlers = {
20453
+ activeUser: _this._prepareField.bind(_this),
20454
+ aggregationGroup: _this._prepareField.bind(_this)
20455
+ };
20456
+ return _this;
20457
+ }
20458
+ CustomFieldComponent.prototype.ngOnInit = function () {
20459
+ var _a, _b;
20460
+ var componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
20461
+ if (componentType) {
20462
+ this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
20463
+ this._prepareValueAccessor();
20464
+ this._prepareComponent(componentType);
20465
+ }
20466
+ };
20467
+ CustomFieldComponent.prototype._prepareComponent = function (type) {
20468
+ var _a, _b;
20469
+ (_b = (_a = this.handlers)[type]) === null || _b === void 0 ? void 0 : _b.call(_a);
20470
+ };
20471
+ CustomFieldComponent.prototype._prepareField = function () {
20472
+ var instance = this._componentRef.instance;
20473
+ instance.field = this.fieldConfig;
20474
+ instance.aggregations = this.aggregations;
20475
+ };
20476
+ return CustomFieldComponent;
20477
+ }(BaseField));
20478
+ CustomFieldComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomFieldComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
20479
+ CustomFieldComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomFieldComponent, selector: "app-custom-field", inputs: { aggregations: "aggregations" }, host: { properties: { "class": "'custom-field' + ' custom-field__fieldConfig?.render?.type' " } }, providers: [
20480
+ {
20481
+ provide: i2.NG_VALUE_ACCESSOR,
20482
+ useExisting: i0.forwardRef(function () { return CustomFieldComponent; }),
20483
+ multi: true
20484
+ },
20485
+ {
20486
+ provide: i2.NG_VALIDATORS,
20487
+ useExisting: i0.forwardRef(function () { return CustomFieldComponent; }),
20488
+ multi: true
20489
+ }
20490
+ ], usesInheritance: true, ngImport: i0__namespace, template: "<field-header *ngIf=\"fieldConfig.label && !fieldConfig.render?.options?.hideLabel\" class=\"predicate-field__label\">{{\r\n\tfieldConfig.label | translate\r\n}}</field-header>\r\n\r\n<ng-container #dynamicContainer></ng-container>\r\n", styles: [".custom-field{display:var(--cf-display, block);padding-inline:var(--cf-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--cf-padding-block, var(--ff-padding-block, 0));max-width:100%}\n"], components: [{ type: FieldHeaderComponent, selector: "field-header" }], directives: [{ type: i4__namespace$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1__namespace.TranslatePipe }, encapsulation: i0__namespace.ViewEncapsulation.None });
20491
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomFieldComponent, decorators: [{
20492
+ type: i0.Component,
20493
+ args: [{
20494
+ selector: 'app-custom-field',
20495
+ templateUrl: './custom-field.component.html',
20496
+ styleUrls: ['./custom-field.component.scss'],
20497
+ encapsulation: i0.ViewEncapsulation.None,
20498
+ providers: [
20499
+ {
20500
+ provide: i2.NG_VALUE_ACCESSOR,
20501
+ useExisting: i0.forwardRef(function () { return CustomFieldComponent; }),
20502
+ multi: true
20503
+ },
20504
+ {
20505
+ provide: i2.NG_VALIDATORS,
20506
+ useExisting: i0.forwardRef(function () { return CustomFieldComponent; }),
20507
+ multi: true
20508
+ }
20509
+ ],
20510
+ host: {
20511
+ '[class]': "'custom-field' + ' custom-field__fieldConfig?.render?.type' "
20512
+ }
20513
+ }]
20514
+ }], propDecorators: { aggregations: [{
20515
+ type: i0.Input
20516
+ }] } });
20517
+
20518
+ var FiltersByRolesPipe = /** @class */ (function () {
20519
+ function FiltersByRolesPipe(_nuxeoService, _rolesService) {
20520
+ this._nuxeoService = _nuxeoService;
20521
+ this._rolesService = _rolesService;
20522
+ }
20523
+ FiltersByRolesPipe.prototype.transform = function (items) {
20524
+ var _this = this;
20525
+ if (!items) {
20526
+ return items;
20527
+ }
20528
+ return items.filter(function (item) {
20529
+ var _a, _b, _c, _d, _e;
20530
+ if (!Array.isArray((_a = item.config) === null || _a === void 0 ? void 0 : _a.roles) || ((_b = item.config) === null || _b === void 0 ? void 0 : _b.roles.length) === 0) {
20531
+ return true;
20532
+ }
20533
+ var user = (_d = (_c = _this._nuxeoService) === null || _c === void 0 ? void 0 : _c.nuxeoClient) === null || _d === void 0 ? void 0 : _d.user;
20534
+ return _this._rolesService.isUserInRole(user, (_e = item.config) === null || _e === void 0 ? void 0 : _e.roles);
20535
+ });
20536
+ };
20537
+ return FiltersByRolesPipe;
20564
20538
  }());
20565
- CheckConditionPipe.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CheckConditionPipe, deps: [{ token: NuxeoService }], target: i0__namespace.ɵɵFactoryTarget.Pipe });
20566
- CheckConditionPipe.ɵpipe = i0__namespace.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CheckConditionPipe, name: "checkCondition" });
20567
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CheckConditionPipe, decorators: [{
20539
+ FiltersByRolesPipe.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FiltersByRolesPipe, deps: [{ token: NuxeoService }, { token: RolesService }], target: i0__namespace.ɵɵFactoryTarget.Pipe });
20540
+ FiltersByRolesPipe.ɵpipe = i0__namespace.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FiltersByRolesPipe, name: "filterByRoles" });
20541
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FiltersByRolesPipe, decorators: [{
20568
20542
  type: i0.Pipe,
20569
20543
  args: [{
20570
- name: 'checkCondition'
20544
+ name: 'filterByRoles'
20571
20545
  }]
20572
- }], ctorParameters: function () { return [{ type: NuxeoService }]; } });
20546
+ }], ctorParameters: function () { return [{ type: NuxeoService }, { type: RolesService }]; } });
20573
20547
 
20574
20548
  var FiltersPanelComponent = /** @class */ (function (_super) {
20575
20549
  __extends(FiltersPanelComponent, _super);
20576
- function FiltersPanelComponent(_translateService) {
20550
+ function FiltersPanelComponent(_translateService, nuxeoService) {
20577
20551
  var _this = _super.call(this) || this;
20578
20552
  _this._translateService = _translateService;
20553
+ _this.nuxeoService = nuxeoService;
20579
20554
  _this.currentLang = _this._translateService.currentLang;
20580
20555
  _this.direction$ = _this._translateService.onLangChange.pipe(operators.startWith({ lang: _this._translateService.currentLang }), operators.map(function (lang) {
20581
20556
  _this.currentLang = lang.lang;
@@ -20586,6 +20561,7 @@
20586
20561
  _this.filterChanged = new i0.EventEmitter();
20587
20562
  _this.fieldTypes = FIELD_TYPE;
20588
20563
  _this.FieldRenderType = AGGREGATION_FIELD_TYPES;
20564
+ _this.visibleFields = {};
20589
20565
  _this.formGroup = new i2.FormGroup({});
20590
20566
  return _this;
20591
20567
  }
@@ -20605,6 +20581,9 @@
20605
20581
  Object.defineProperty(FiltersPanelComponent.prototype, "activeQuery", {
20606
20582
  set: function (obj) {
20607
20583
  this._activeQuerySub.next(obj);
20584
+ if (obj) {
20585
+ this._evaluateConditions();
20586
+ }
20608
20587
  },
20609
20588
  enumerable: false,
20610
20589
  configurable: true
@@ -20624,19 +20603,27 @@
20624
20603
  FiltersPanelComponent.prototype.ngOnInit = function () {
20625
20604
  this._handleFormGroupChanges();
20626
20605
  this._handelActiveQueryChange();
20606
+ this._evaluateConditions();
20607
+ };
20608
+ FiltersPanelComponent.prototype.ngOnChanges = function (changes) {
20609
+ var _a, _b;
20610
+ if (!((_a = changes === null || changes === void 0 ? void 0 : changes.fields) === null || _a === void 0 ? void 0 : _a.firstChange) || !((_b = changes === null || changes === void 0 ? void 0 : changes.aggregations) === null || _b === void 0 ? void 0 : _b.firstChange)) {
20611
+ this._evaluateConditions();
20612
+ }
20627
20613
  };
20628
20614
  FiltersPanelComponent.prototype.resetFilters = function () {
20629
20615
  this.formGroup.reset({});
20630
20616
  };
20631
20617
  FiltersPanelComponent.prototype._sortItems = function (items) {
20632
20618
  var _defaultOrder = 0;
20633
- return items.sort(function (_b, _c) {
20634
- var o1 = _b.config.order;
20635
- var o2 = _c.config.order;
20619
+ return items.sort(function (_c, _d) {
20620
+ var o1 = _c.config.order;
20621
+ var o2 = _d.config.order;
20636
20622
  return (o1 !== null && o1 !== void 0 ? o1 : _defaultOrder) - (o2 !== null && o2 !== void 0 ? o2 : _defaultOrder);
20637
20623
  });
20638
20624
  };
20639
20625
  FiltersPanelComponent.prototype._initFormGroup = function () {
20626
+ this.visibleFields = {};
20640
20627
  this._removeControls();
20641
20628
  this._prepareFiltersForm();
20642
20629
  };
@@ -20648,13 +20635,13 @@
20648
20635
  });
20649
20636
  };
20650
20637
  FiltersPanelComponent.prototype._prepareFiltersForm = function () {
20651
- var e_1, _b;
20638
+ var e_1, _c;
20652
20639
  if (!this.fields) {
20653
20640
  return;
20654
20641
  }
20655
20642
  try {
20656
- for (var _c = __values(this.fields), _d = _c.next(); !_d.done; _d = _c.next()) {
20657
- var field = _d.value;
20643
+ for (var _d = __values(this.fields), _e = _d.next(); !_e.done; _e = _d.next()) {
20644
+ var field = _e.value;
20658
20645
  var key = field.config.fieldKey;
20659
20646
  if (!this.formGroup.contains(key)) {
20660
20647
  this.formGroup.addControl(key, new i2.FormControl(field.config.values));
@@ -20664,7 +20651,7 @@
20664
20651
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
20665
20652
  finally {
20666
20653
  try {
20667
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
20654
+ if (_e && !_e.done && (_c = _d.return)) _c.call(_d);
20668
20655
  }
20669
20656
  finally { if (e_1) throw e_1.error; }
20670
20657
  }
@@ -20672,7 +20659,10 @@
20672
20659
  FiltersPanelComponent.prototype._handleFormGroupChanges = function () {
20673
20660
  var _this = this;
20674
20661
  this.formGroup.valueChanges
20675
- .pipe(operators.debounceTime(300), operators.map(function (data) { return removeEmptyKeys(data); }), operators.distinctUntilChanged(function (a, b) { return ___default["default"].isEqual(a, b); }), operators.takeUntil(this.destroy$))
20662
+ .pipe(operators.debounceTime(300), operators.map(function (formValue) {
20663
+ var data = _this._evaluateConditions(formValue);
20664
+ return removeEmptyKeys(data);
20665
+ }), operators.distinctUntilChanged(function (a, b) { return ___default["default"].isEqual(a, b); }), operators.takeUntil(this.destroy$))
20676
20666
  .subscribe(function (res) {
20677
20667
  _this.filterChanged.emit(res);
20678
20668
  });
@@ -20691,10 +20681,41 @@
20691
20681
  _this._patchActiveQuery(res);
20692
20682
  });
20693
20683
  };
20684
+ FiltersPanelComponent.prototype._evaluateConditions = function (values) {
20685
+ var _this = this;
20686
+ if (values === void 0) { values = this.formGroup.getRawValue(); }
20687
+ this.visibleFields = {};
20688
+ this.fields.forEach(function (field) {
20689
+ var _a;
20690
+ var fieldKey = field.config.fieldKey;
20691
+ var condition = (_a = field.config) === null || _a === void 0 ? void 0 : _a.condition;
20692
+ try {
20693
+ var isVisible = !condition ||
20694
+ Evaluator.evaluate(condition, ___default["default"].cloneDeep({
20695
+ aggregations: _this.aggregations,
20696
+ language: _this.currentLang,
20697
+ user: _this.nuxeoService.nuxeoClient.user,
20698
+ values: _this.formGroup.getRawValue()
20699
+ }));
20700
+ _this.visibleFields[fieldKey] = isVisible;
20701
+ if (!isVisible) {
20702
+ var control = _this.formGroup.get(fieldKey);
20703
+ if (!!(control === null || control === void 0 ? void 0 : control.value)) {
20704
+ control.reset();
20705
+ control.updateValueAndValidity({ emitEvent: false });
20706
+ }
20707
+ }
20708
+ }
20709
+ catch (e) {
20710
+ console.error("Error evaluating condition for field " + field.config.fieldKey + ":", e);
20711
+ }
20712
+ });
20713
+ return this.formGroup.value;
20714
+ };
20694
20715
  return FiltersPanelComponent;
20695
20716
  }(BaseFiltersPanel));
20696
- FiltersPanelComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FiltersPanelComponent, deps: [{ token: i1__namespace.TranslateService }], target: i0__namespace.ɵɵFactoryTarget.Component });
20697
- FiltersPanelComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FiltersPanelComponent, selector: "app-filters-panel", inputs: { aggregations: "aggregations", fields: "fields", activeQuery: "activeQuery" }, outputs: { filterChanged: "filterChanged" }, usesInheritance: true, ngImport: i0__namespace, template: "<div [formGroup]=\"formGroup\" class=\"filters-panel\" [dir]=\"direction$ | async\">\r\n\t<div class=\"reset-filter flex reset-container\">\r\n\t\t<button mat-stroked-button class=\"w-full\" (click)=\"resetFilters()\" [disabled]=\"!hasValues\">\r\n\t\t\t{{ 'BUTTONS.clearFilter' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n\t<ng-container *ngFor=\"let field of fields | filterByRoles; trackBy: trackByFieldKey\">\r\n\t\t<ng-container *permission=\"{ name: field.config?.permission }\">\r\n\t\t\t<ng-container *ngIf=\"field.config?.condition | checkCondition: aggregations : currentLang \">\r\n\t\t\t\t<app-predicate-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.predicate\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t></app-predicate-field>\r\n\t\t\t\t<app-aggregation-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.aggregation && !!aggregations\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[aggregation]=\"aggregations[field.config.aggregation]\"\r\n\t\t\t\t\t[contentTemplate]=\"getContentTemplate(field.config.render.type)\"\r\n\t\t\t\t></app-aggregation-field>\r\n\t\t\t\t<app-custom-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.custom\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t\t[aggregations]=\"aggregations\"\r\n\t\t\t\t></app-custom-field>\r\n\t\t\t</ng-container>\r\n\t\t</ng-container>\r\n\t</ng-container>\r\n</div>\r\n", styles: [".filters-panel{display:var(--filters-panel-display, flex);flex-direction:var(--filters-panel-direction, column);grid-gap:var(--filters-panel-gap, .5rem);gap:var(--filters-panel-gap, .5rem);flex-wrap:var(--filters-panel-wrap, wrap);max-width:100%;box-sizing:border-box}.aggregation-field{padding-inline:var(--af-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--af-padding-block, var(--ff-padding-block, 0));max-width:100%}.reset-container{padding:.5rem;position:sticky;top:-8px;z-index:4;background:var(--reset-filter-panel-bg, #fff)}.reset-container button.mat-button-base{background-color:var(--reset-filter-panel-btn-bg, transparent);border-color:var(--reset-filter-panel-btn-bg, #e2e8f0);color:var(--reset-filter-panel-btn-color, currentColor)}\n"], components: [{ type: i1__namespace$c.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: PredicateFieldComponent, selector: "app-predicate-field" }, { type: AggregationFieldComponent, selector: "app-aggregation-field", inputs: ["aggregation", "contentTemplate"] }, { type: CustomFieldComponent, selector: "app-custom-field", inputs: ["aggregations"] }], directives: [{ type: i2__namespace$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2__namespace$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4__namespace.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i4__namespace$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: PermissionsDirective, selector: "[permission]", inputs: ["permission"] }, { type: i4__namespace$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2__namespace$4.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "async": i4__namespace$1.AsyncPipe, "translate": i1__namespace.TranslatePipe, "filterByRoles": FiltersByRolesPipe, "checkCondition": CheckConditionPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
20717
+ FiltersPanelComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FiltersPanelComponent, deps: [{ token: i1__namespace.TranslateService }, { token: NuxeoService }], target: i0__namespace.ɵɵFactoryTarget.Component });
20718
+ FiltersPanelComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FiltersPanelComponent, selector: "app-filters-panel", inputs: { aggregations: "aggregations", fields: "fields", activeQuery: "activeQuery" }, outputs: { filterChanged: "filterChanged" }, usesInheritance: true, usesOnChanges: true, ngImport: i0__namespace, template: "<div [formGroup]=\"formGroup\" class=\"filters-panel\" [dir]=\"direction$ | async\">\r\n\t<div class=\"reset-filter flex reset-container\">\r\n\t\t<button mat-stroked-button class=\"w-full\" (click)=\"resetFilters()\" [disabled]=\"!hasValues\">\r\n\t\t\t{{ 'BUTTONS.clearFilter' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n\t<ng-container *ngFor=\"let field of fields | filterByRoles; trackBy: trackByFieldKey\">\r\n\t\t<ng-container *permission=\"{ name: field.config?.permission }\">\r\n\t\t\t<ng-container *ngIf=\"visibleFields[field.config.fieldKey]\">\r\n\t\t\t\t<app-predicate-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.predicate\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t></app-predicate-field>\r\n\t\t\t\t<app-aggregation-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.aggregation && !!aggregations\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[aggregation]=\"aggregations[field.config.aggregation]\"\r\n\t\t\t\t\t[contentTemplate]=\"getContentTemplate(field.config.render.type)\"\r\n\t\t\t\t></app-aggregation-field>\r\n\t\t\t\t<app-custom-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.custom\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t\t[aggregations]=\"aggregations\"\r\n\t\t\t\t></app-custom-field>\r\n\t\t\t</ng-container>\r\n\t\t</ng-container>\r\n\t</ng-container>\r\n</div>\r\n", styles: [".filters-panel{display:var(--filters-panel-display, flex);flex-direction:var(--filters-panel-direction, column);grid-gap:var(--filters-panel-gap, .5rem);gap:var(--filters-panel-gap, .5rem);flex-wrap:var(--filters-panel-wrap, wrap);max-width:100%;box-sizing:border-box}.aggregation-field{padding-inline:var(--af-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--af-padding-block, var(--ff-padding-block, 0));max-width:100%}.reset-container{padding:.5rem;position:sticky;top:-8px;z-index:4;background:var(--reset-filter-panel-bg, #fff)}.reset-container button.mat-button-base{background-color:var(--reset-filter-panel-btn-bg, transparent);border-color:var(--reset-filter-panel-btn-bg, #e2e8f0);color:var(--reset-filter-panel-btn-color, currentColor)}\n"], components: [{ type: i1__namespace$c.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: PredicateFieldComponent, selector: "app-predicate-field" }, { type: AggregationFieldComponent, selector: "app-aggregation-field", inputs: ["aggregation", "contentTemplate"] }, { type: CustomFieldComponent, selector: "app-custom-field", inputs: ["aggregations"] }], directives: [{ type: i2__namespace$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2__namespace$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4__namespace.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i4__namespace$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: PermissionsDirective, selector: "[permission]", inputs: ["permission"] }, { type: i4__namespace$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2__namespace$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2__namespace$4.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "async": i4__namespace$1.AsyncPipe, "translate": i1__namespace.TranslatePipe, "filterByRoles": FiltersByRolesPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
20698
20719
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FiltersPanelComponent, decorators: [{
20699
20720
  type: i0.Component,
20700
20721
  args: [{
@@ -20703,7 +20724,7 @@
20703
20724
  styleUrls: ['./filters-panel.component.scss'],
20704
20725
  changeDetection: i0.ChangeDetectionStrategy.OnPush
20705
20726
  }]
20706
- }], ctorParameters: function () { return [{ type: i1__namespace.TranslateService }]; }, propDecorators: { aggregations: [{
20727
+ }], ctorParameters: function () { return [{ type: i1__namespace.TranslateService }, { type: NuxeoService }]; }, propDecorators: { aggregations: [{
20707
20728
  type: i0.Input
20708
20729
  }], fields: [{
20709
20730
  type: i0.Input
@@ -20803,6 +20824,34 @@
20803
20824
  }]
20804
20825
  }] });
20805
20826
 
20827
+ var CheckConditionPipe = /** @class */ (function () {
20828
+ function CheckConditionPipe(nuxeoService) {
20829
+ this.nuxeoService = nuxeoService;
20830
+ this.user = nuxeoService.nuxeoClient.user;
20831
+ }
20832
+ CheckConditionPipe.prototype.transform = function (condition, aggregations, language, filterValues) {
20833
+ if (!condition) {
20834
+ return true;
20835
+ }
20836
+ try {
20837
+ return Evaluator.evaluate(condition, ___default["default"].cloneDeep({ aggregations: aggregations, language: language, user: this.user, values: filterValues }));
20838
+ }
20839
+ catch (error) {
20840
+ console.error({ error: error });
20841
+ return false;
20842
+ }
20843
+ };
20844
+ return CheckConditionPipe;
20845
+ }());
20846
+ CheckConditionPipe.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CheckConditionPipe, deps: [{ token: NuxeoService }], target: i0__namespace.ɵɵFactoryTarget.Pipe });
20847
+ CheckConditionPipe.ɵpipe = i0__namespace.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CheckConditionPipe, name: "checkCondition" });
20848
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CheckConditionPipe, decorators: [{
20849
+ type: i0.Pipe,
20850
+ args: [{
20851
+ name: 'checkCondition'
20852
+ }]
20853
+ }], ctorParameters: function () { return [{ type: NuxeoService }]; } });
20854
+
20806
20855
  var AggregationGroupComponent = /** @class */ (function (_super) {
20807
20856
  __extends(AggregationGroupComponent, _super);
20808
20857
  function AggregationGroupComponent() {
@@ -45137,6 +45186,13 @@
45137
45186
  var _colors = __spreadArray(__spreadArray([], __read(((config === null || config === void 0 ? void 0 : config.colors) || []))), __read(getColors()));
45138
45187
  return Object.assign(Object.assign({}, config), { colors: _colors, chart: chart });
45139
45188
  };
45189
+ /**
45190
+ * Prepares a custom chart configuration
45191
+ * @param config
45192
+ */
45193
+ ReportConfigMapperService.prototype.prepareCustomConfig = function (config) {
45194
+ return config;
45195
+ };
45140
45196
  /**
45141
45197
  * Prepares a digit chart configuration
45142
45198
  * @param config The digit chart definition
@@ -45184,6 +45240,138 @@
45184
45240
  }]
45185
45241
  }], ctorParameters: function () { return [{ type: ChartPluginsRegistry }]; } });
45186
45242
 
45243
+ var CustomReportsRegistry = /** @class */ (function () {
45244
+ function CustomReportsRegistry(_factoryResolver) {
45245
+ this._factoryResolver = _factoryResolver;
45246
+ this._components = new Map();
45247
+ }
45248
+ /**
45249
+ * Register a component with the registry
45250
+ * @param config Component configuration
45251
+ */
45252
+ CustomReportsRegistry.prototype.registerComponent = function (config) {
45253
+ if (!config.type || !config.component) {
45254
+ throw new Error('Invalid component configuration: type and component are required');
45255
+ }
45256
+ if (this._components.has(config.type)) {
45257
+ console.warn("Component with type '" + config.type + "' is already registered. Overwriting...");
45258
+ }
45259
+ this._components.set(config.type, config);
45260
+ };
45261
+ /**
45262
+ * Register multiple components at once
45263
+ * @param configs Array of component configurations
45264
+ */
45265
+ CustomReportsRegistry.prototype.registerComponents = function (configs) {
45266
+ var _this = this;
45267
+ configs.forEach(function (config) { return _this.registerComponent(config); });
45268
+ };
45269
+ /**
45270
+ * Render a component by type into a ViewContainerRef
45271
+ * @param type Component type identifier
45272
+ * @param vcr ViewContainerRef to render into
45273
+ */
45274
+ CustomReportsRegistry.prototype.renderComponent = function (type, vcr) {
45275
+ if (!this._components.has(type)) {
45276
+ throw new Error("Unknown component with type: '" + type + "'");
45277
+ }
45278
+ var config = this._components.get(type);
45279
+ return this.loadComponent(config, vcr);
45280
+ };
45281
+ /**
45282
+ * Load a component into a ViewContainerRef
45283
+ * @param config Component configuration
45284
+ * @param vcr ViewContainerRef to render into
45285
+ */
45286
+ CustomReportsRegistry.prototype.loadComponent = function (config, vcr) {
45287
+ var componentFactory = this._factoryResolver.resolveComponentFactory(config.component);
45288
+ return vcr.createComponent(componentFactory);
45289
+ };
45290
+ /**
45291
+ * Check if a component is registered
45292
+ * @param type Component type identifier
45293
+ */
45294
+ CustomReportsRegistry.prototype.hasComponent = function (type) {
45295
+ return this._components.has(type);
45296
+ };
45297
+ /**
45298
+ * Get component configuration by type
45299
+ * @param type Component type identifier
45300
+ */
45301
+ CustomReportsRegistry.prototype.getComponent = function (type) {
45302
+ return this._components.get(type);
45303
+ };
45304
+ /**
45305
+ * Get all registered component types
45306
+ */
45307
+ CustomReportsRegistry.prototype.getComponentTypes = function () {
45308
+ return Array.from(this._components.keys());
45309
+ };
45310
+ /**
45311
+ * Get all registered components
45312
+ */
45313
+ CustomReportsRegistry.prototype.getAllComponents = function () {
45314
+ return Array.from(this._components.values());
45315
+ };
45316
+ /**
45317
+ * Get components by category
45318
+ * @param category Category to filter by
45319
+ */
45320
+ CustomReportsRegistry.prototype.getComponentsByCategory = function (category) {
45321
+ return Array.from(this._components.values()).filter(function (config) { return config.category === category; });
45322
+ };
45323
+ /**
45324
+ * Get all unique categories
45325
+ */
45326
+ CustomReportsRegistry.prototype.getCategories = function () {
45327
+ var categories = Array.from(this._components.values())
45328
+ .map(function (config) { return config.category; })
45329
+ .filter(function (category) { return !!category; });
45330
+ return __spreadArray([], __read(new Set(categories)));
45331
+ };
45332
+ /**
45333
+ * Unregister a component
45334
+ * @param type Component type identifier
45335
+ */
45336
+ CustomReportsRegistry.prototype.unregisterComponent = function (type) {
45337
+ return this._components.delete(type);
45338
+ };
45339
+ /**
45340
+ * Clear all registered components
45341
+ */
45342
+ CustomReportsRegistry.prototype.clearComponents = function () {
45343
+ this._components.clear();
45344
+ };
45345
+ /**
45346
+ * Get the total number of registered components
45347
+ */
45348
+ CustomReportsRegistry.prototype.getComponentCount = function () {
45349
+ return this._components.size;
45350
+ };
45351
+ /**
45352
+ * Search components by name or type
45353
+ * @param searchTerm Search term
45354
+ */
45355
+ CustomReportsRegistry.prototype.searchComponents = function (searchTerm) {
45356
+ var term = searchTerm.toLowerCase();
45357
+ return Array.from(this._components.values()).filter(function (config) {
45358
+ var _a, _b;
45359
+ return config.type.toLowerCase().includes(term) ||
45360
+ ((_a = config.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(term)) ||
45361
+ ((_b = config.description) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes(term));
45362
+ });
45363
+ };
45364
+ return CustomReportsRegistry;
45365
+ }());
45366
+ CustomReportsRegistry.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomReportsRegistry, deps: [{ token: i0__namespace.ComponentFactoryResolver }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
45367
+ CustomReportsRegistry.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomReportsRegistry, providedIn: 'root' });
45368
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomReportsRegistry, decorators: [{
45369
+ type: i0.Injectable,
45370
+ args: [{
45371
+ providedIn: 'root'
45372
+ }]
45373
+ }], ctorParameters: function () { return [{ type: i0__namespace.ComponentFactoryResolver }]; } });
45374
+
45187
45375
  var DigitChartComponent = /** @class */ (function (_super) {
45188
45376
  __extends(DigitChartComponent, _super);
45189
45377
  function DigitChartComponent() {
@@ -45288,7 +45476,7 @@
45288
45476
  return GraphChartComponent;
45289
45477
  }(BaseChart));
45290
45478
  GraphChartComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: GraphChartComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
45291
- GraphChartComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: GraphChartComponent, selector: "app-graph-chart", usesInheritance: true, ngImport: i0__namespace, template: "<ng-container *ngIf=\"report$ | async as report\">\r\n\t<div class=\"chart-legends\"></div>\r\n\t<app-chart\r\n\t\t[type]=\"report.config.type\"\r\n\t\t[data]=\"report.data\"\r\n\t\t[options]=\"report.config?.options\"\r\n\t\t[plugins]=\"report.config?.plugins\"\r\n\t\t[responsive]=\"true\"\r\n\t\t(onReady)=\"chartReady($event)\"\r\n\t\tclass=\"app-chart\"\r\n\t></app-chart>\r\n</ng-container>\r\n", styles: [":host{--chart-height: var(--graph-chart-height, 300px);display:var(--graph-chart-display, flex);flex-direction:var(--graph-chart-direction, row);justify-content:var(--graph-chart-justify-content, between);align-items:var(--graph-chart-align-items, center);grid-gap:var(--graph-chart-gap, .5rem);gap:var(--graph-chart-gap, .5rem)}.app-chart{min-width:var(--app-chart-min-width, 0);min-height:var(--app-chart-min-height, 0);height:var(--app-chart-height, auto);width:var(--app-chart-width, 100%);padding:var(--app-chart-padding, 1rem);display:flex;align-items:center;justify-content:center;align-self:stretch}@media print{.app-chart ::ng-deep canvas{max-width:100%!important}}::ng-deep .chart-legends{max-height:var(--chart-legends-height, var(--chart-height));min-width:var(--chart-legends-width, 0);overflow:auto;font-size:1rem;text-align:start;display:flex;flex-direction:column;grid-gap:.2rem;gap:.2rem;padding-block:.5rem}::ng-deep .chart-legends:empty{--chart-legends-width: 0;display:none}::ng-deep .chart-legends.has-items{--chart-legends-width: 200px}::ng-deep .chart-legends__legend{display:flex;align-items:baseline;-webkit-user-select:none;user-select:none;cursor:default}::ng-deep .chart-legends__box{width:var(--chart-legends-box-width, 8px);height:var(--chart-legends-box-height, 8px);border-radius:var(--chart-legends-radius, 50%);margin-inline:var(--chart-legends-box-inline, 0 .5rem);display:inline-block;flex-shrink:0}\n"], components: [{ type: ChartComponent, selector: "app-chart", inputs: ["data", "options"] }], directives: [{ type: i4__namespace$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i4__namespace$1.AsyncPipe } });
45479
+ GraphChartComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: GraphChartComponent, selector: "app-graph-chart", usesInheritance: true, ngImport: i0__namespace, template: "<ng-container *ngIf=\"report$ | async as report\">\r\n\t<div class=\"chart-legends\"></div>\r\n\t<app-chart\r\n\t\t[type]=\"report.config.type\"\r\n\t\t[data]=\"report.data\"\r\n\t\t[options]=\"report.config?.options\"\r\n\t\t[plugins]=\"report.config?.plugins\"\r\n\t\t[responsive]=\"true\"\r\n\t\t(onReady)=\"chartReady($event)\"\r\n\t\tclass=\"app-chart\"\r\n\t></app-chart>\r\n</ng-container>\r\n", styles: [":host{--chart-height: var(--graph-chart-height, 330px);display:var(--graph-chart-display, flex);flex-direction:var(--graph-chart-direction, row);justify-content:var(--graph-chart-justify-content, between);align-items:var(--graph-chart-align-items, center);grid-gap:var(--graph-chart-gap, .5rem);gap:var(--graph-chart-gap, .5rem)}.app-chart{min-width:var(--app-chart-min-width, 0);min-height:var(--app-chart-min-height, 0);height:var(--app-chart-height, auto);width:var(--app-chart-width, 100%);padding:var(--app-chart-padding, 1rem);display:flex;align-items:center;justify-content:center;align-self:stretch}@media print{.app-chart ::ng-deep canvas{max-width:100%!important}}::ng-deep .chart-legends{max-height:var(--chart-legends-height, var(--chart-height));min-width:var(--chart-legends-width, 0);overflow:auto;font-size:1rem;text-align:start;display:flex;flex-direction:column;grid-gap:.2rem;gap:.2rem;padding-block:.5rem}::ng-deep .chart-legends:empty{--chart-legends-width: 0;display:none}::ng-deep .chart-legends.has-items{--chart-legends-width: 200px}::ng-deep .chart-legends__legend{display:flex;align-items:baseline;-webkit-user-select:none;user-select:none;cursor:default}::ng-deep .chart-legends__box{width:var(--chart-legends-box-width, 8px);height:var(--chart-legends-box-height, 8px);border-radius:var(--chart-legends-radius, 50%);margin-inline:var(--chart-legends-box-inline, 0 .5rem);display:inline-block;flex-shrink:0}\n"], components: [{ type: ChartComponent, selector: "app-chart", inputs: ["data", "options"] }], directives: [{ type: i4__namespace$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i4__namespace$1.AsyncPipe } });
45292
45480
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: GraphChartComponent, decorators: [{
45293
45481
  type: i0.Component,
45294
45482
  args: [{
@@ -45309,6 +45497,7 @@
45309
45497
  graph: 'graph',
45310
45498
  digit: 'digit',
45311
45499
  dynamicLine: 'dynamicLine',
45500
+ custom: 'custom',
45312
45501
  };
45313
45502
 
45314
45503
  var TIME_GROUPS = {
@@ -45372,6 +45561,7 @@
45372
45561
  _a[REPORT_MODE.graph] = this._configMapperService.prepareGraphConfig,
45373
45562
  _a[REPORT_MODE.digit] = this._configMapperService.prepareDigitConfig,
45374
45563
  _a[REPORT_MODE.dynamicLine] = this._configMapperService.prepareGraphLineConfig,
45564
+ _a[REPORT_MODE.custom] = this._configMapperService.prepareCustomConfig,
45375
45565
  _a);
45376
45566
  return mappers[obj.mode].call(this._configMapperService, obj);
45377
45567
  };
@@ -45922,6 +46112,102 @@
45922
46112
  args: ['graphChart']
45923
46113
  }] } });
45924
46114
 
46115
+ var BaseCustomReport = /** @class */ (function (_super) {
46116
+ __extends(BaseCustomReport, _super);
46117
+ function BaseCustomReport() {
46118
+ var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
46119
+ _this.direction = 'rtl';
46120
+ _this._criteriaSub = new rxjs.ReplaySubject(null);
46121
+ _this.criteria$ = _this._criteriaSub.asObservable();
46122
+ _this._configSub = new rxjs.BehaviorSubject(null);
46123
+ _this.config$ = _this._configSub.asObservable();
46124
+ return _this;
46125
+ }
46126
+ Object.defineProperty(BaseCustomReport.prototype, "criteria", {
46127
+ set: function (value) {
46128
+ this._criteria = ___default["default"].cloneDeep(value);
46129
+ this._criteriaSub.next(this._criteria);
46130
+ },
46131
+ enumerable: false,
46132
+ configurable: true
46133
+ });
46134
+ Object.defineProperty(BaseCustomReport.prototype, "config", {
46135
+ get: function () {
46136
+ return this._configSub.getValue();
46137
+ },
46138
+ set: function (obj) {
46139
+ if (obj) {
46140
+ this._configSub.next(obj);
46141
+ }
46142
+ },
46143
+ enumerable: false,
46144
+ configurable: true
46145
+ });
46146
+ return BaseCustomReport;
46147
+ }(DestroySubject));
46148
+ BaseCustomReport.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: BaseCustomReport, deps: null, target: i0__namespace.ɵɵFactoryTarget.Directive });
46149
+ BaseCustomReport.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: BaseCustomReport, inputs: { direction: "direction", data: "data", criteria: "criteria", config: "config" }, usesInheritance: true, ngImport: i0__namespace });
46150
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: BaseCustomReport, decorators: [{
46151
+ type: i0.Directive
46152
+ }], propDecorators: { direction: [{
46153
+ type: i0.Input
46154
+ }], data: [{
46155
+ type: i0.Input
46156
+ }], criteria: [{
46157
+ type: i0.Input
46158
+ }], config: [{
46159
+ type: i0.Input
46160
+ }] } });
46161
+
46162
+ var CustomReportComponent = /** @class */ (function (_super) {
46163
+ __extends(CustomReportComponent, _super);
46164
+ function CustomReportComponent() {
46165
+ var _this = _super.apply(this, __spreadArray([], __read(arguments))) || this;
46166
+ _this._registeredComponents = _this.injector.get(CustomReportsRegistry);
46167
+ return _this;
46168
+ }
46169
+ CustomReportComponent.prototype.ngOnInit = function () {
46170
+ /* const componentType = this._registeredComponents.getComponent(this.reportDefinition.type);
46171
+ if (componentType) {
46172
+ this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
46173
+ this._prepareValueAccessor();
46174
+ this._prepareComponent(componentType);
46175
+ }*/
46176
+ };
46177
+ CustomReportComponent.prototype.ngOnChanges = function (changes) {
46178
+ var _this = this;
46179
+ if (!this._componentRef) {
46180
+ return;
46181
+ }
46182
+ Object.keys(changes).forEach(function (key) {
46183
+ _this._componentRef.instance[key] = changes[key].currentValue;
46184
+ });
46185
+ this._componentRef.changeDetectorRef.markForCheck();
46186
+ };
46187
+ CustomReportComponent.prototype.ngOnDestroy = function () {
46188
+ if (this._componentRef) {
46189
+ this._componentRef.destroy();
46190
+ }
46191
+ };
46192
+ return CustomReportComponent;
46193
+ }(BaseReport));
46194
+ CustomReportComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomReportComponent, deps: null, target: i0__namespace.ɵɵFactoryTarget.Component });
46195
+ CustomReportComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomReportComponent, selector: "app-custom-report", host: { classAttribute: "custom-report flex flex-col flex-grow" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["dynamicContainer"], descendants: true, read: i0.ViewContainerRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0__namespace, template: "\r\n<ng-container #dynamicContainer></ng-container>\r\n", styles: [""] });
46196
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: CustomReportComponent, decorators: [{
46197
+ type: i0.Component,
46198
+ args: [{
46199
+ selector: 'app-custom-report',
46200
+ templateUrl: './custom-report.component.html',
46201
+ styleUrls: ['./custom-report.component.scss'],
46202
+ host: {
46203
+ class: 'custom-report flex flex-col flex-grow'
46204
+ }
46205
+ }]
46206
+ }], propDecorators: { container: [{
46207
+ type: i0.ViewChild,
46208
+ args: ['dynamicContainer', { read: i0.ViewContainerRef, static: true }]
46209
+ }] } });
46210
+
45925
46211
  function mapToNdfTableConfig(report, details) {
45926
46212
  var _a, _b, _c, _d, _e;
45927
46213
  var _request = report.request;
@@ -46338,7 +46624,7 @@
46338
46624
  DynamicTimelineReportComponent,
46339
46625
  TimeGroupSelectorComponent,
46340
46626
  GraphDialogComponent,
46341
- TimelineDialogComponent, ScrollableDivDirective, GraphChartComponent, DigitChartComponent, ReportActionsComponent], imports: [i4.CommonModule,
46627
+ TimelineDialogComponent, ScrollableDivDirective, GraphChartComponent, DigitChartComponent, ReportActionsComponent, CustomReportComponent], imports: [i4.CommonModule,
46342
46628
  i1.TranslateModule,
46343
46629
  i3$2.MatMenuModule,
46344
46630
  i2$2.MatIconModule,
@@ -46383,7 +46669,7 @@
46383
46669
  i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: NdfReportsModule, decorators: [{
46384
46670
  type: i0.NgModule,
46385
46671
  args: [{
46386
- declarations: [CONTAINERS, COMPONENTS, DIRECTIVES, CHARTS, ReportActionsComponent],
46672
+ declarations: [CONTAINERS, COMPONENTS, DIRECTIVES, CHARTS, ReportActionsComponent, CustomReportComponent],
46387
46673
  imports: [
46388
46674
  i4.CommonModule,
46389
46675
  i1.TranslateModule,
@@ -47676,7 +47962,7 @@
47676
47962
  {
47677
47963
  aggregation: 'RetentionInfo_activeRetentionExpireDate_agg',
47678
47964
  propertyPath: 'aggregations.RetentionInfo_activeRetentionExpireDate_agg.buckets',
47679
- transformer: 'removeTime',
47965
+ transformer: 'timeFormat',
47680
47966
  },
47681
47967
  ],
47682
47968
  chart: {
@@ -48600,6 +48886,7 @@
48600
48886
  exports.CustomFieldComponent = CustomFieldComponent;
48601
48887
  exports.CustomMomentDateAdapter = CustomMomentDateAdapter;
48602
48888
  exports.CustomPpViewerComponent = CustomPpViewerComponent;
48889
+ exports.CustomReportsRegistry = CustomReportsRegistry;
48603
48890
  exports.CustomSocketComponent = CustomSocketComponent;
48604
48891
  exports.CustomTemplateDirective = CustomTemplateDirective;
48605
48892
  exports.CustomToastrModule = CustomToastrModule;