@datorama/core 22.5.1 → 22.5.5

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 (32) hide show
  1. package/bundles/datorama-core.umd.js +128 -109
  2. package/bundles/datorama-core.umd.js.map +1 -1
  3. package/bundles/datorama-core.umd.min.js +18 -18
  4. package/bundles/datorama-core.umd.min.js.map +1 -1
  5. package/datorama-core.metadata.json +1 -1
  6. package/esm2015/lib/accordion/accordion/accordion.component.js +11 -3
  7. package/esm2015/lib/grid-v2/grid/grid-v2.types.js +1 -1
  8. package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +6 -2
  9. package/esm2015/lib/grid-v2/grid-pagination/grid-pagination.component.js +2 -2
  10. package/esm2015/lib/grid-v2/grid-store/grid.service.js +2 -2
  11. package/esm2015/lib/icon/icon.types.js +1 -1
  12. package/esm2015/lib/sortable/sortable.component.js +7 -2
  13. package/esm2015/lib/version.js +2 -2
  14. package/esm5/lib/accordion/accordion/accordion.component.js +15 -3
  15. package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
  16. package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +6 -2
  17. package/esm5/lib/grid-v2/grid-pagination/grid-pagination.component.js +2 -2
  18. package/esm5/lib/grid-v2/grid-store/grid.service.js +2 -2
  19. package/esm5/lib/icon/icon.types.js +1 -1
  20. package/esm5/lib/sortable/sortable.component.js +7 -2
  21. package/esm5/lib/version.js +2 -2
  22. package/fesm2015/datorama-core.js +118 -103
  23. package/fesm2015/datorama-core.js.map +1 -1
  24. package/fesm5/datorama-core.js +128 -109
  25. package/fesm5/datorama-core.js.map +1 -1
  26. package/i18n/locale-en_US.json +2 -0
  27. package/lib/accordion/accordion/accordion.component.d.ts +4 -1
  28. package/lib/grid-v2/grid/grid-v2.types.d.ts +1 -0
  29. package/lib/grid-v2/grid-filter/grid-filter.component.d.ts +1 -0
  30. package/lib/icon/icon.types.d.ts +1 -1
  31. package/lib/sortable/sortable.component.d.ts +3 -1
  32. package/package.json +1 -1
@@ -6633,6 +6633,108 @@ const defaultClientSearchStrategy = (searchIn, searchValue, labelKey) => {
6633
6633
  return false;
6634
6634
  };
6635
6635
 
6636
+ /**
6637
+ * @license
6638
+ * Copyright Datorama. All Rights Reserved.
6639
+ *
6640
+ * Use of this source code is governed by an Apache License 2.0 license that can be
6641
+ * found in the LICENSE file at https://github.com/datorama/client-core/blob/master/LICENSE
6642
+ */
6643
+ let DatoSortableComponent = class DatoSortableComponent {
6644
+ constructor() {
6645
+ this.list = [];
6646
+ this.noop = noop;
6647
+ /**
6648
+ * Sortablejs options
6649
+ */
6650
+ this.datoOptions = {};
6651
+ /**
6652
+ * Fired once items order has changed
6653
+ */
6654
+ this.orderUpdated = new EventEmitter();
6655
+ this.defaultOptions = {
6656
+ handle: '.dato-sortable-handler',
6657
+ ghostClass: 'dato-sortable-ghost',
6658
+ chosenClass: 'dato-sortable-chosen',
6659
+ dragClass: 'dato-sortable-drag'
6660
+ };
6661
+ }
6662
+ set datoList(list) {
6663
+ const isArr = Array.isArray(list);
6664
+ const validInput = isArr || (list instanceof FormControl && Array.isArray(list.value));
6665
+ if (!validInput) {
6666
+ throw new Error(`DatoSortable - datoList expected array or form control but got ${typeof list}`);
6667
+ }
6668
+ if (!isArr) {
6669
+ this.formControl = list;
6670
+ this.list = [...this.formControl.value];
6671
+ }
6672
+ else {
6673
+ this.list = list;
6674
+ }
6675
+ }
6676
+ ngOnInit() {
6677
+ const _a = this.datoOptions, { dynamicGhostHeight, hasStaticItems } = _a, sortableOptions = __rest(_a, ["dynamicGhostHeight", "hasStaticItems"]);
6678
+ const mergedOptions = Object.assign(Object.assign(Object.assign({}, this.defaultOptions), sortableOptions), { onUpdate: event => (sortableOptions.onUpdate ? sortableOptions.onUpdate(event) : this.emitUpdate(event)) });
6679
+ if (dynamicGhostHeight) {
6680
+ mergedOptions.onStart = event => this.setGhostHeight(event);
6681
+ }
6682
+ if (hasStaticItems) {
6683
+ mergedOptions.onMove = event => {
6684
+ if (event.related.classList.contains('dato-sortable-static-item')) {
6685
+ return false;
6686
+ }
6687
+ return sortableOptions.onMove ? sortableOptions.onMove(event) : true;
6688
+ };
6689
+ }
6690
+ this.mergedOptions = mergedOptions;
6691
+ }
6692
+ emitUpdate(event) {
6693
+ if (this.formControl) {
6694
+ this.formControl.setValue(this.list);
6695
+ }
6696
+ this.orderUpdated.emit(event);
6697
+ }
6698
+ setGhostHeight(event) {
6699
+ const originalEl = event.from.children[event.oldIndex];
6700
+ setStyle(originalEl, 'display', 'block');
6701
+ const { height } = originalEl.getBoundingClientRect();
6702
+ setStyle(originalEl, 'display', 'none');
6703
+ const ghostEl = query('.dato-sortable-ghost');
6704
+ setStyle(ghostEl, 'height', `${height}px`);
6705
+ }
6706
+ };
6707
+ __decorate([
6708
+ ContentChildren(DatoAccordionGroupComponent),
6709
+ __metadata("design:type", QueryList)
6710
+ ], DatoSortableComponent.prototype, "accordionGroups", void 0);
6711
+ __decorate([
6712
+ Input(),
6713
+ __metadata("design:type", Object),
6714
+ __metadata("design:paramtypes", [Object])
6715
+ ], DatoSortableComponent.prototype, "datoList", null);
6716
+ __decorate([
6717
+ Input(),
6718
+ __metadata("design:type", Object)
6719
+ ], DatoSortableComponent.prototype, "datoOptions", void 0);
6720
+ __decorate([
6721
+ Input(),
6722
+ __metadata("design:type", String)
6723
+ ], DatoSortableComponent.prototype, "containerClass", void 0);
6724
+ __decorate([
6725
+ Output(),
6726
+ __metadata("design:type", Object)
6727
+ ], DatoSortableComponent.prototype, "orderUpdated", void 0);
6728
+ DatoSortableComponent = __decorate([
6729
+ Component({
6730
+ selector: 'dato-sortable',
6731
+ template: "<section [sortablejs]=\"list\" [sortablejsOptions]=\"mergedOptions\" [ngClass]=\"containerClass\"\n (update.stop)=\"noop()\" (add.stop)=\"noop()\" (sort.stop)=\"noop()\" (remove.stop)=\"noop()\"\n (filter.stop)=\"noop()\" (change.stop)=\"noop()\" (drag.stop)=\"noop()\">\n <ng-content></ng-content>\n</section>",
6732
+ changeDetection: ChangeDetectionStrategy.OnPush,
6733
+ encapsulation: ViewEncapsulation.None,
6734
+ styles: ["dato-sortable{display:inline-block}dato-sortable .dato-sortable-handler{cursor:move;cursor:-webkit-grabbing}.dato-sortable-ghost>*{display:none!important}.dato-sortable-drag{box-shadow:0 2px 14px 0 rgba(0,0,0,.2)}"]
6735
+ })
6736
+ ], DatoSortableComponent);
6737
+
6636
6738
  /**
6637
6739
  * @license
6638
6740
  * Copyright Datorama. All Rights Reserved.
@@ -6674,6 +6776,9 @@ let DatoAccordionComponent = DatoAccordionComponent_1 = class DatoAccordionCompo
6674
6776
  }
6675
6777
  }
6676
6778
  }
6779
+ get groups() {
6780
+ return this.sortable && this.sortable.accordionGroups.length > 0 ? this.sortable.accordionGroups : this.childGroups;
6781
+ }
6677
6782
  ngOnChanges(changes) {
6678
6783
  if (changes.expandAll && !changes.expandAll.firstChange) {
6679
6784
  this.setExpandAll();
@@ -6845,11 +6950,15 @@ DatoAccordionComponent.ctorParameters = () => [
6845
6950
  __decorate([
6846
6951
  ContentChildren(DatoAccordionGroupComponent),
6847
6952
  __metadata("design:type", QueryList)
6848
- ], DatoAccordionComponent.prototype, "groups", void 0);
6953
+ ], DatoAccordionComponent.prototype, "childGroups", void 0);
6849
6954
  __decorate([
6850
6955
  ContentChildren(DatoAccordionComponent_1, { descendants: true }),
6851
6956
  __metadata("design:type", QueryList)
6852
6957
  ], DatoAccordionComponent.prototype, "childAccordion", void 0);
6958
+ __decorate([
6959
+ ContentChild(DatoSortableComponent, { static: true }),
6960
+ __metadata("design:type", DatoSortableComponent)
6961
+ ], DatoAccordionComponent.prototype, "sortable", void 0);
6853
6962
  __decorate([
6854
6963
  Input(),
6855
6964
  __metadata("design:type", Object)
@@ -8855,104 +8964,6 @@ DatoOptionsModule = __decorate([
8855
8964
  })
8856
8965
  ], DatoOptionsModule);
8857
8966
 
8858
- /**
8859
- * @license
8860
- * Copyright Datorama. All Rights Reserved.
8861
- *
8862
- * Use of this source code is governed by an Apache License 2.0 license that can be
8863
- * found in the LICENSE file at https://github.com/datorama/client-core/blob/master/LICENSE
8864
- */
8865
- let DatoSortableComponent = class DatoSortableComponent {
8866
- constructor() {
8867
- this.list = [];
8868
- this.noop = noop;
8869
- /**
8870
- * Sortablejs options
8871
- */
8872
- this.datoOptions = {};
8873
- /**
8874
- * Fired once items order has changed
8875
- */
8876
- this.orderUpdated = new EventEmitter();
8877
- this.defaultOptions = {
8878
- handle: '.dato-sortable-handler',
8879
- ghostClass: 'dato-sortable-ghost',
8880
- chosenClass: 'dato-sortable-chosen',
8881
- dragClass: 'dato-sortable-drag'
8882
- };
8883
- }
8884
- set datoList(list) {
8885
- const isArr = Array.isArray(list);
8886
- const validInput = isArr || (list instanceof FormControl && Array.isArray(list.value));
8887
- if (!validInput) {
8888
- throw new Error(`DatoSortable - datoList expected array or form control but got ${typeof list}`);
8889
- }
8890
- if (!isArr) {
8891
- this.formControl = list;
8892
- this.list = [...this.formControl.value];
8893
- }
8894
- else {
8895
- this.list = list;
8896
- }
8897
- }
8898
- ngOnInit() {
8899
- const _a = this.datoOptions, { dynamicGhostHeight, hasStaticItems } = _a, sortableOptions = __rest(_a, ["dynamicGhostHeight", "hasStaticItems"]);
8900
- const mergedOptions = Object.assign(Object.assign(Object.assign({}, this.defaultOptions), sortableOptions), { onUpdate: event => (sortableOptions.onUpdate ? sortableOptions.onUpdate(event) : this.emitUpdate(event)) });
8901
- if (dynamicGhostHeight) {
8902
- mergedOptions.onStart = event => this.setGhostHeight(event);
8903
- }
8904
- if (hasStaticItems) {
8905
- mergedOptions.onMove = event => {
8906
- if (event.related.classList.contains('dato-sortable-static-item')) {
8907
- return false;
8908
- }
8909
- return sortableOptions.onMove ? sortableOptions.onMove(event) : true;
8910
- };
8911
- }
8912
- this.mergedOptions = mergedOptions;
8913
- }
8914
- emitUpdate(event) {
8915
- if (this.formControl) {
8916
- this.formControl.setValue(this.list);
8917
- }
8918
- this.orderUpdated.emit(event);
8919
- }
8920
- setGhostHeight(event) {
8921
- const originalEl = event.from.children[event.oldIndex];
8922
- setStyle(originalEl, 'display', 'block');
8923
- const { height } = originalEl.getBoundingClientRect();
8924
- setStyle(originalEl, 'display', 'none');
8925
- const ghostEl = query('.dato-sortable-ghost');
8926
- setStyle(ghostEl, 'height', `${height}px`);
8927
- }
8928
- };
8929
- __decorate([
8930
- Input(),
8931
- __metadata("design:type", Object),
8932
- __metadata("design:paramtypes", [Object])
8933
- ], DatoSortableComponent.prototype, "datoList", null);
8934
- __decorate([
8935
- Input(),
8936
- __metadata("design:type", Object)
8937
- ], DatoSortableComponent.prototype, "datoOptions", void 0);
8938
- __decorate([
8939
- Input(),
8940
- __metadata("design:type", String)
8941
- ], DatoSortableComponent.prototype, "containerClass", void 0);
8942
- __decorate([
8943
- Output(),
8944
- __metadata("design:type", Object)
8945
- ], DatoSortableComponent.prototype, "orderUpdated", void 0);
8946
- DatoSortableComponent = __decorate([
8947
- Component({
8948
- selector: 'dato-sortable',
8949
- template: "<section [sortablejs]=\"list\" [sortablejsOptions]=\"mergedOptions\" [ngClass]=\"containerClass\"\n (update.stop)=\"noop()\" (add.stop)=\"noop()\" (sort.stop)=\"noop()\" (remove.stop)=\"noop()\"\n (filter.stop)=\"noop()\" (change.stop)=\"noop()\" (drag.stop)=\"noop()\">\n <ng-content></ng-content>\n</section>",
8950
- changeDetection: ChangeDetectionStrategy.OnPush,
8951
- encapsulation: ViewEncapsulation.None,
8952
- styles: ["dato-sortable{display:inline-block}dato-sortable .dato-sortable-handler{cursor:move;cursor:-webkit-grabbing}.dato-sortable-ghost>*{display:none!important}.dato-sortable-drag{box-shadow:0 2px 14px 0 rgba(0,0,0,.2)}"]
8953
- })
8954
- ], DatoSortableComponent);
8955
-
8956
8967
  /**
8957
8968
  * @license
8958
8969
  * Copyright Datorama. All Rights Reserved.
@@ -11177,6 +11188,7 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
11177
11188
  };
11178
11189
  this.hotKeyTooltip = formatKeys(this.applyHotKeyConfig.keys);
11179
11190
  this.activeAccordionId = 0;
11191
+ this.showClearFiltersButton = true;
11180
11192
  this.excludedValues = new Set();
11181
11193
  }
11182
11194
  get byValueControl() {
@@ -11241,6 +11253,9 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
11241
11253
  const colFilter = filter || colDef.filter;
11242
11254
  const filterOptions = DatoGridFilterOptionsMap[colFilter];
11243
11255
  this.pivotColumn = gridQuery.api.columns.getSecondaryPivotColumn(pivotKeys, pivotValueColumn);
11256
+ if (!isNil(filtersConfig.showClearFiltersButton)) {
11257
+ this.showClearFiltersButton = filtersConfig.showClearFiltersButton;
11258
+ }
11244
11259
  if (filtersConfig.sections) {
11245
11260
  this.filterSections = { [filtersConfig.sections]: true };
11246
11261
  }
@@ -11715,7 +11730,7 @@ DatoGridFilterComponent.ctorParameters = () => [
11715
11730
  DatoGridFilterComponent = __decorate([
11716
11731
  Component({
11717
11732
  selector: 'dato-grid-filter',
11718
- template: "<form class=\"container primary-0-background-color\" [formGroup]=\"filterForm\" datoForm\n *datoSubscribe=\"hasFilter$ as hasFilter\">\n <ng-container>\n <dato-accordion closeOthers=\"true\" class=\"filter-options\" [activeIds]=\"activeAccordionId\">\n <ng-container *ngIf=\"filterSections.Conditional\">\n\n <dato-accordion-group>\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"conditional-filters\"\n [class.primary-100-background-color]=\"header_1.isOpen\" #header_1>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex-grow d-flex align-start-center\">{{'core.filterByCondition' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_1.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #conditionalContent>\n <div class=\"conditional-content-container d-flex-column\" formGroupName=\"conditional\"\n [class.multi-conditions]=\"conditionsControls.length > 1\">\n <div class=\"operand d-flex-column mb-10\"\n [attr.data-auto-id]=\"'condition-' + i\"\n *ngFor=\"let operand of conditionsControls; index as i; last as last\">\n <div class=\"d-flex\">\n <div class=\"d-flex-column d-flex-grow min-width-0\">\n <ng-container formArrayName=\"conditions\">\n\n <ng-container [formGroupName]=\"i\">\n <dato-select datoSize=\"sm\" class=\"mb-10\" [attr.data-auto-id]=\"'condition-' + i + '-operand'\" formControlName=\"type\"\n datoSelectClass=\"operand-select\"\n [dataSet]=\"conditionalFilterOptions\"\n [isCombo]=\"false\" #select>\n <dato-option *ngFor=\"let option of select.data; index as index\"\n [option]=\"option\">\n {{ option.label }}\n </dato-option>\n </dato-select>\n <ng-container [ngSwitch]=\"filterType\">\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Date\">\n <dato-date-picker [attr.data-auto-id]=\"'condition-date-' + i + '-value'\"\n formControlName=\"value\" class=\"d-flex-grow range-calendar\">\n <ng-template>\n <dato-date-picker-range *ngIf=\"getOperandType(i) === rangeOperand; else singleDate\"></dato-date-picker-range>\n <ng-template #singleDate>\n <dato-date-picker-single></dato-date-picker-single>\n </ng-template>\n </ng-template>\n </dato-date-picker>\n </div>\n <ng-container *ngIf=\"!isConditionalEmpty(operand)\">\n <dato-input *ngSwitchCase=\"gridFilterTypes.String\" datoSize=\"sm\"\n (keydown.enter.stop.prevent)=\"closePopUp()\"\n datoControlErrors [attr.data-auto-id]=\"'condition-string-' + i + '-value'\"\n [datoControlErrorsOnBlur]=\"false\"\n class=\"condition-value\"\n placeholder=\"core.filter\" formControlName=\"value\"\n [isFocused]=\"conditionalContent._expanded\"\n ></dato-input>\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Number\">\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\" [showControls]=\"false\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"value\" [attr.data-auto-id]=\"'condition-number-' + i + '-value'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors [datoAutoFocus]=\"conditionalContent._expanded\"\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n <ng-container *ngIf=\"getOperandType(i) === rangeOperand\">\n <div class=\"mx-5\">-</div>\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"rangeEnd\" [attr.data-auto-id]=\"'condition-number-' + i + '-range-end'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div>\n\n <dato-icon-button datoSize=\"md\"\n datoType=\"none\" icon=\"trash\"\n class=\"overflow-hidden delete\"\n datoTooltip=\"core.deleteFilterCondition\"\n [attr.data-auto-id]=\"'condition-' + i + '-remove'\"\n (click)=\"removeCondition(i)\"\n datoTooltipPosition=\"right-start\"></dato-icon-button>\n </div>\n </div>\n <dato-operator-toggler class=\"mt-10 justify-center width-100 d-flex\" data-auto-id=\"operator-toggler\"\n expanded=\"true\" [datoTogglerValue]=\"conditionsOperator\"\n *ngIf=\"conditionsControls.length > 1 && !last\"\n formControlName=\"operator\"></dato-operator-toggler>\n </div>\n <div class=\"d-flex align-center\">\n <dato-link *ngIf=\"conditionsControls.length < 3\" class=\"no-select\" datoSize=\"sm\" data-auto-id=\"add-condition\"\n datoType=\"secondary\" (click)=\"addCondition()\">\n <dato-icon height=\"10px\" width=\"10px\" icon=\"plus-simple\"></dato-icon>\n {{ 'core.condition' | translate }}\n </dato-link>\n </div>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n <ng-container *ngIf=\"filterSections.By_Value\">\n <dato-accordion-group class=\"list-content\">\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"by-value-filters\"\n [class.primary-100-background-color]=\"header_2.isOpen\" #header_2>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex d-flex-grow align-start-center\">{{'core.filterByValue' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_2.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #byValueContent>\n <div class=\"value-content-container d-flex-column\">\n <dato-input datoSize=\"sm\" placeholder=\"core.search-all-values\" [debounceTime]=\"300\" #search [formControl]=\"listSearchControl\" [isFocused]=\"byValueContent._expanded\"></dato-input>\n <dato-list-v2 class=\"primary-0-background-color\"\n containerHeight=\"195px\"\n [withSelectAll]=\"true\"\n [clientSearch]=\"isClientSideGrid\"\n [sortByKey]=\"listSortByKey\"\n [labelType]=\"listLabelType\"\n [searchController]=\"search\"\n [options]=\"listOptions\"\n [isSortList]=\"!keepPredefinedListOriginalOrder\"\n [loading]=\"loadingList\"\n [noDataTpl]=\"isClientSideGrid ? null : noData\"\n formControlName=\"byValue\"\n data-auto-id=\"by-value-filters-list\">\n </dato-list-v2>\n <ng-template #noData>\n <div *ngIf=\"serverSearchErrored; else noResults\" class=\"mb-10 d-flex-1 d-flex-column align-center\" data-auto-id=\"by-value-server-error\">\n <img class=\"mt-20\" datoStaticSrc=\"core/grid/filter-server-error.svg\"/>\n <p class=\"dato-note-bold mt-10 mb-10 primary-300-color\">{{ 'core.something-went-wrong' | translate }}</p>\n <p class=\"dato-note-italic primary-300-color\">{{ 'core.try-again-later' | translate }}</p>\n </div>\n <ng-template #noResults>\n <dato-list-no-result class=\"mb-10 block\" data-auto-id=\"by-value-no-results\"></dato-list-no-result>\n </ng-template>\n </ng-template>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n </dato-accordion>\n </ng-container>\n <div class=\"actions no-select px-10 py-12 d-flex align-end-center\">\n <dato-link class=\"mr-30\" datoType=\"secondary\" datoSize=\"sm\" (click)=\"clearFilters()\" data-auto-id=\"clear-filters\"\n [disabled]=\"!hasFilter\">{{ 'core.clearFilters' | translate }}</dato-link>\n <dato-button datoSize=\"sm\" [datoTooltip]=\"hotKeyTooltip\" [datoHotkeys]=\"applyHotKeyConfig\" (click)=\"closePopUp()\" data-auto-id=\"apply-filters\">{{'core.apply' | translate}}</dato-button>\n </div>\n</form>\n",
11733
+ template: "<form class=\"container primary-0-background-color\" [formGroup]=\"filterForm\" datoForm\n *datoSubscribe=\"hasFilter$ as hasFilter\">\n <ng-container>\n <dato-accordion closeOthers=\"true\" class=\"filter-options\" [activeIds]=\"activeAccordionId\">\n <ng-container *ngIf=\"filterSections.Conditional\">\n\n <dato-accordion-group>\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"conditional-filters\"\n [class.primary-100-background-color]=\"header_1.isOpen\" #header_1>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex-grow d-flex align-start-center\">{{'core.filterByCondition' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_1.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #conditionalContent>\n <div class=\"conditional-content-container d-flex-column\" formGroupName=\"conditional\"\n [class.multi-conditions]=\"conditionsControls.length > 1\">\n <div class=\"operand d-flex-column mb-10\"\n [attr.data-auto-id]=\"'condition-' + i\"\n *ngFor=\"let operand of conditionsControls; index as i; last as last\">\n <div class=\"d-flex\">\n <div class=\"d-flex-column d-flex-grow min-width-0\">\n <ng-container formArrayName=\"conditions\">\n\n <ng-container [formGroupName]=\"i\">\n <dato-select datoSize=\"sm\" class=\"mb-10\" [attr.data-auto-id]=\"'condition-' + i + '-operand'\" formControlName=\"type\"\n datoSelectClass=\"operand-select\"\n [dataSet]=\"conditionalFilterOptions\"\n [isCombo]=\"false\" #select>\n <dato-option *ngFor=\"let option of select.data; index as index\"\n [option]=\"option\">\n {{ option.label }}\n </dato-option>\n </dato-select>\n <ng-container [ngSwitch]=\"filterType\">\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Date\">\n <dato-date-picker [attr.data-auto-id]=\"'condition-date-' + i + '-value'\"\n formControlName=\"value\" class=\"d-flex-grow range-calendar\">\n <ng-template>\n <dato-date-picker-range *ngIf=\"getOperandType(i) === rangeOperand; else singleDate\"></dato-date-picker-range>\n <ng-template #singleDate>\n <dato-date-picker-single></dato-date-picker-single>\n </ng-template>\n </ng-template>\n </dato-date-picker>\n </div>\n <ng-container *ngIf=\"!isConditionalEmpty(operand)\">\n <dato-input *ngSwitchCase=\"gridFilterTypes.String\" datoSize=\"sm\"\n (keydown.enter.stop.prevent)=\"closePopUp()\"\n datoControlErrors [attr.data-auto-id]=\"'condition-string-' + i + '-value'\"\n [datoControlErrorsOnBlur]=\"false\"\n class=\"condition-value\"\n placeholder=\"core.filter\" formControlName=\"value\"\n [isFocused]=\"conditionalContent._expanded\"\n ></dato-input>\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Number\">\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\" [showControls]=\"false\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"value\" [attr.data-auto-id]=\"'condition-number-' + i + '-value'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors [datoAutoFocus]=\"conditionalContent._expanded\"\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n <ng-container *ngIf=\"getOperandType(i) === rangeOperand\">\n <div class=\"mx-5\">-</div>\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"rangeEnd\" [attr.data-auto-id]=\"'condition-number-' + i + '-range-end'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div>\n\n <dato-icon-button datoSize=\"md\"\n datoType=\"none\" icon=\"trash\"\n class=\"overflow-hidden delete\"\n datoTooltip=\"core.deleteFilterCondition\"\n [attr.data-auto-id]=\"'condition-' + i + '-remove'\"\n (click)=\"removeCondition(i)\"\n datoTooltipPosition=\"right-start\"></dato-icon-button>\n </div>\n </div>\n <dato-operator-toggler class=\"mt-10 justify-center width-100 d-flex\" data-auto-id=\"operator-toggler\"\n expanded=\"true\" [datoTogglerValue]=\"conditionsOperator\"\n *ngIf=\"conditionsControls.length > 1 && !last\"\n formControlName=\"operator\"></dato-operator-toggler>\n </div>\n <div class=\"d-flex align-center\">\n <dato-link *ngIf=\"conditionsControls.length < 3\" class=\"no-select\" datoSize=\"sm\" data-auto-id=\"add-condition\"\n datoType=\"secondary\" (click)=\"addCondition()\">\n <dato-icon height=\"10px\" width=\"10px\" icon=\"plus-simple\"></dato-icon>\n {{ 'core.condition' | translate }}\n </dato-link>\n </div>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n <ng-container *ngIf=\"filterSections.By_Value\">\n <dato-accordion-group class=\"list-content\">\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"by-value-filters\"\n [class.primary-100-background-color]=\"header_2.isOpen\" #header_2>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex d-flex-grow align-start-center\">{{'core.filterByValue' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_2.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #byValueContent>\n <div class=\"value-content-container d-flex-column\">\n <dato-input datoSize=\"sm\" placeholder=\"core.search-all-values\" [debounceTime]=\"300\" #search [formControl]=\"listSearchControl\" [isFocused]=\"byValueContent._expanded\"></dato-input>\n <dato-list-v2 class=\"primary-0-background-color\"\n containerHeight=\"195px\"\n [withSelectAll]=\"true\"\n [clientSearch]=\"isClientSideGrid\"\n [sortByKey]=\"listSortByKey\"\n [labelType]=\"listLabelType\"\n [searchController]=\"search\"\n [options]=\"listOptions\"\n [isSortList]=\"!keepPredefinedListOriginalOrder\"\n [loading]=\"loadingList\"\n [noDataTpl]=\"isClientSideGrid ? null : noData\"\n formControlName=\"byValue\"\n data-auto-id=\"by-value-filters-list\">\n </dato-list-v2>\n <ng-template #noData>\n <div *ngIf=\"serverSearchErrored; else noResults\" class=\"mb-10 d-flex-1 d-flex-column align-center\" data-auto-id=\"by-value-server-error\">\n <img class=\"mt-20\" datoStaticSrc=\"core/grid/filter-server-error.svg\"/>\n <p class=\"dato-note-bold mt-10 mb-10 primary-300-color\">{{ 'core.something-went-wrong' | translate }}</p>\n <p class=\"dato-note-italic primary-300-color\">{{ 'core.try-again-later' | translate }}</p>\n </div>\n <ng-template #noResults>\n <dato-list-no-result class=\"mb-10 block\" data-auto-id=\"by-value-no-results\"></dato-list-no-result>\n </ng-template>\n </ng-template>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n </dato-accordion>\n </ng-container>\n <div class=\"actions no-select px-10 py-12 d-flex align-end-center\">\n <dato-link *ngIf=\"showClearFiltersButton\" class=\"mr-30\" datoType=\"secondary\" datoSize=\"sm\"\n (click)=\"clearFilters()\" data-auto-id=\"clear-filters\" [disabled]=\"!hasFilter\">\n {{ 'core.clearFilters' | translate }}\n </dato-link>\n <dato-button datoSize=\"sm\" [datoTooltip]=\"hotKeyTooltip\" [datoHotkeys]=\"applyHotKeyConfig\" (click)=\"closePopUp()\" data-auto-id=\"apply-filters\">{{'core.apply' | translate}}</dato-button>\n </div>\n</form>\n",
11719
11734
  changeDetection: ChangeDetectionStrategy.OnPush,
11720
11735
  styles: [":host dato-accordion-header{transition:background-color .2s ease-in-out}:host>.container{width:242px}:host .value-content-container dato-input{padding:10px}:host .conditional-content-container{padding:10px;transition:padding-right .2s ease-in-out}:host .conditional-content-container.multi-conditions{padding-right:0}:host .conditional-content-container.multi-conditions .delete{width:24px}:host .filter-title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;height:40px;transition:color .2s ease-in-out}:host .separator{height:1px;width:100%}:host .delete{transition:width .2s ease-in-out;width:0}"]
11721
11736
  }),
@@ -12693,7 +12708,7 @@ let GridService = class GridService {
12693
12708
  appliedFilter[field] = filter;
12694
12709
  }
12695
12710
  this.updateSettings({ filter: appliedFilter });
12696
- this.api.grid.onFilterChanged();
12711
+ this.notifyFilterUpdate();
12697
12712
  }
12698
12713
  }
12699
12714
  setGridSort(gridSort) {
@@ -14630,7 +14645,7 @@ DatoGridPaginationV2Component = __decorate([
14630
14645
  Component({
14631
14646
  selector: 'dato-grid-pagination-v2',
14632
14647
  changeDetection: ChangeDetectionStrategy.OnPush,
14633
- template: "<div class=\"d-flex-row d-flex-auto d-flex-wrap container\" [class.small]=\"smallVersion\"\n [attr.data-pages-count]=\"totalPages\"\n [attr.data-current-page]=\"pageNumbersDisplay.currentPage\"\n [attr.data-page-size]=\"rowsPerPage\"\n [attr.data-rows-count]=\"rowCount\">\n <div *ngIf=\"totalPages > 1\" #navigation\n class=\"navigation d-flex-row d-flex-0-0-auto align-center\">\n\n <!-- First Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"mr-4\" data-auto-id=\"pagiantion-first-page\"\n icon=\"chevron-left-double\"\n datoType=\"secondary\"\n datoSize=\"md\"\n [disabled]=\"prevPageDisabled\"\n (click)=\"navigateFirstPage()\">\n </dato-icon-button>\n\n <!-- Previous Page -->\n <dato-icon-button icon=\"arrow-left\" datoType=\"secondary\" datoSize=\"md\"\n [disabled]=\"prevPageDisabled\" data-auto-id=\"pagiantion-previous-page\"\n (click)=\"navigatePrevPage()\">\n </dato-icon-button>\n\n\n <div class=\"d-flex mx-5 align-center number-container\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-previous-batch\"\n *ngIf=\"pageNumbersDisplay.showFirstEllipsis && !smallVersion\"\n (click)=\"showPreviousBatch()\">...\n </dato-link>\n <dato-link class=\"page-number mx-5\" [datoType]=\"page === pageNumbersDisplay.currentPage ? 'primary' : 'secondary'\" datoSize=\"sm\"\n *ngFor=\"let page of pageNumbersDisplay.pages; index as i; trackBy: trackByPage;\" [attr.data-auto-id]=\"'pagiantion-page-' + i\"\n (click)=\"navigatePage(page - 1)\">\n {{page}}\n </dato-link>\n\n <div class=\"d-flex\" *ngIf=\"pageNumbersDisplay.showLastPage && !smallVersion\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-next-batch\"\n (click)=\"showNextBatch()\">...</dato-link>\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\"\n [attr.data-auto-id]=\"'pagiantion-page-' + totalPages\"\n (click)=\"navigatePage(totalPages - 1)\">\n {{totalPages}}\n </dato-link>\n </div>\n\n </div>\n\n <!-- Next Page -->\n <dato-icon-button icon=\"arrow-right\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"navigateNextPage()\" data-auto-id=\"pagiantion-next-page\"\n [disabled]=\"nextPageDisabled\">\n </dato-icon-button>\n\n <!-- Last Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"ml-4\" icon=\"chevron-right-double\"\n datoType=\"secondary\" datoSize=\"md\" data-auto-id=\"pagiantion-last-page\"\n [disabled]=\"nextPageDisabled\"\n (click)=\"navigatePage(totalPages - 1)\">\n </dato-icon-button>\n\n </div>\n\n <div *ngIf=\"totalPages > 1 && !smallVersion\"\n class=\"separator mx-10 my-auto primary-100-background-color\">\n </div>\n\n <div class=\"total d-flex-0-0-auto d-flex-row align-center\">\n <span class=\"dato-note primary-300-color\">{{rowsRange}}</span>\n </div>\n\n <div *ngIf=\"showBottomControls\" class=\"grid-controls d-flex d-flex-1 justify-end\">\n <dato-icon-button *ngIf=\"hasRowGroupColumns\" [icon]=\"isExpanded ? 'collapse' : 'expand'\" datoType=\"secondary\"\n datoSize=\"md\" (click)=\"toggleGroupsState()\" data-auto-id=\"pagination-expand-collapse\"\n [datoTooltipV2]=\"isExpanded ? 'core.collapse-rows' : 'core.expand-rows'\">\n </dato-icon-button>\n\n <dato-icon-button class=\"mx-4\" icon=\"maximize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('content')\" [datoTooltipV2]=\"'core.fit-to-content'\"\n data-auto-id=\"pagination-fit-to-content\">\n </dato-icon-button>\n\n <dato-icon-button icon=\"minimize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('container')\" [datoTooltipV2]=\"'core.fit-to-container'\"\n data-auto-id=\"pagination-fit-to-container\">\n </dato-icon-button>\n </div>\n</div>\n",
14648
+ template: "<div class=\"d-flex-row d-flex-auto d-flex-wrap container\" [class.small]=\"smallVersion\"\n [attr.data-pages-count]=\"totalPages\"\n [attr.data-current-page]=\"pageNumbersDisplay.currentPage\"\n [attr.data-page-size]=\"rowsPerPage\"\n [attr.data-rows-count]=\"rowCount\">\n <div *ngIf=\"totalPages > 1\" #navigation\n class=\"navigation d-flex-row d-flex-0-0-auto align-center\">\n\n <!-- First Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"mr-4\" data-auto-id=\"pagiantion-first-page\"\n icon=\"chevron-left-double\"\n datoType=\"secondary\"\n datoSize=\"md\"\n [disabled]=\"prevPageDisabled\"\n (click)=\"navigateFirstPage()\">\n </dato-icon-button>\n\n <!-- Previous Page -->\n <dato-icon-button icon=\"arrow-left\" datoType=\"secondary\" datoSize=\"md\"\n [disabled]=\"prevPageDisabled\" data-auto-id=\"pagiantion-previous-page\"\n (click)=\"navigatePrevPage()\">\n </dato-icon-button>\n\n\n <div class=\"d-flex mx-5 align-center number-container\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-previous-batch\"\n *ngIf=\"pageNumbersDisplay.showFirstEllipsis && !smallVersion\"\n (click)=\"showPreviousBatch()\">...\n </dato-link>\n <dato-link class=\"page-number mx-5\" [datoType]=\"page === pageNumbersDisplay.currentPage ? 'primary' : 'secondary'\" datoSize=\"sm\"\n *ngFor=\"let page of pageNumbersDisplay.pages; index as i; trackBy: trackByPage;\" [attr.data-auto-id]=\"'pagiantion-page-' + i\"\n (click)=\"navigatePage(page - 1)\">\n {{page}}\n </dato-link>\n\n <div class=\"d-flex\" *ngIf=\"pageNumbersDisplay.showLastPage && !smallVersion\">\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\" data-auto-id=\"pagiantion-next-batch\"\n (click)=\"showNextBatch()\">...</dato-link>\n <dato-link class=\"page-number mx-5\" datoType=\"secondary\" datoSize=\"sm\"\n [attr.data-auto-id]=\"'pagiantion-page-' + totalPages\"\n (click)=\"navigatePage(totalPages - 1)\">\n {{totalPages}}\n </dato-link>\n </div>\n\n </div>\n\n <!-- Next Page -->\n <dato-icon-button icon=\"arrow-right\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"navigateNextPage()\" data-auto-id=\"pagiantion-next-page\"\n [disabled]=\"nextPageDisabled\">\n </dato-icon-button>\n\n <!-- Last Page -->\n <dato-icon-button *ngIf=\"!disableButtons\"\n class=\"ml-4\" icon=\"chevron-right-double\"\n datoType=\"secondary\" datoSize=\"md\" data-auto-id=\"pagiantion-last-page\"\n [disabled]=\"nextPageDisabled\"\n (click)=\"navigatePage(totalPages - 1)\">\n </dato-icon-button>\n\n </div>\n\n <div *ngIf=\"totalPages > 1 && !smallVersion\"\n class=\"separator mx-10 my-auto primary-100-background-color\">\n </div>\n\n <div class=\"total d-flex-0-0-auto d-flex-row align-center\">\n <span class=\"dato-note primary-300-color\">{{rowsRange}}</span>\n </div>\n\n <div *ngIf=\"showBottomControls\" class=\"grid-controls d-flex d-flex-1 justify-end\">\n <dato-icon-button *ngIf=\"hasRowGroupColumns\" [icon]=\"isExpanded ? 'collapse' : 'expand'\" datoType=\"secondary\"\n datoSize=\"md\" (click)=\"toggleGroupsState()\" data-auto-id=\"pagination-expand-collapse\"\n [datoTooltipV2]=\"isExpanded ? 'core.collapse-rows' : 'core.expand-rows'\">\n </dato-icon-button>\n\n <dato-icon-button class=\"mx-4\" icon=\"maximize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('content')\" [datoTooltipV2]=\"'core.fit-to-text'\"\n data-auto-id=\"pagination-fit-to-content\">\n </dato-icon-button>\n\n <dato-icon-button icon=\"minimize-horizontal\" datoType=\"secondary\" datoSize=\"md\"\n (click)=\"autoFitGrid('container')\" [datoTooltipV2]=\"'core.revert-to-default-size'\"\n data-auto-id=\"pagination-fit-to-container\">\n </dato-icon-button>\n </div>\n</div>\n",
14634
14649
  providers: [DecimalPipe],
14635
14650
  styles: [":host{padding:12px 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:25px}:host .container{height:25px}:host .navigation .page-number{transition:color .3s ease-in-out}:host .navigation .page-number:first-of-type{margin-left:7px}:host .navigation .page-number:last-of-type{margin-right:7px}:host .separator{width:1px;height:25px}:host .container.small .navigation,:host .container.small .total{margin-top:8px;margin-left:auto;margin-right:auto}"]
14636
14651
  }),
@@ -22655,7 +22670,7 @@ function fixNgLeaks() {
22655
22670
  };
22656
22671
  }
22657
22672
 
22658
- window.coreVersion = '22.5.1';
22673
+ window.coreVersion = '22.5.5';
22659
22674
 
22660
22675
  /**
22661
22676
  * @license