@valtimo/dashboard 13.45.1 → 13.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/valtimo-dashboard.mjs +502 -74
- package/fesm2022/valtimo-dashboard.mjs.map +1 -1
- package/lib/data-sources/task-count/components/index.d.ts +1 -0
- package/lib/data-sources/task-count/components/index.d.ts.map +1 -1
- package/lib/data-sources/task-count/components/task-count-condition-group/index.d.ts +2 -0
- package/lib/data-sources/task-count/components/task-count-condition-group/index.d.ts.map +1 -0
- package/lib/data-sources/task-count/components/task-count-condition-group/task-count-condition-group.component.d.ts +68 -0
- package/lib/data-sources/task-count/components/task-count-condition-group/task-count-condition-group.component.d.ts.map +1 -0
- package/lib/data-sources/task-count/components/task-count-configuration/task-count-configuration.component.d.ts +43 -18
- package/lib/data-sources/task-count/components/task-count-configuration/task-count-configuration.component.d.ts.map +1 -1
- package/lib/data-sources/task-count/constants/index.d.ts +2 -0
- package/lib/data-sources/task-count/constants/index.d.ts.map +1 -0
- package/lib/data-sources/task-count/constants/task-count.test-ids.d.ts +11 -0
- package/lib/data-sources/task-count/constants/task-count.test-ids.d.ts.map +1 -0
- package/lib/data-sources/task-count/models/task-count.model.d.ts +50 -3
- package/lib/data-sources/task-count/models/task-count.model.d.ts.map +1 -1
- package/lib/data-sources/task-count/task-count.module.d.ts +2 -1
- package/lib/data-sources/task-count/task-count.module.d.ts.map +1 -1
- package/lib/data-sources/task-count/task-count.specification.d.ts.map +1 -1
- package/lib/data-sources/task-count/utils/index.d.ts +2 -0
- package/lib/data-sources/task-count/utils/index.d.ts.map +1 -0
- package/lib/data-sources/task-count/utils/task-count-conditions.utils.d.ts +27 -0
- package/lib/data-sources/task-count/utils/task-count-conditions.utils.d.ts.map +1 -0
- package/lib/models/data-source.model.d.ts +40 -1
- package/lib/models/data-source.model.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { ViewChild, Component, InjectionToken, Injectable, Inject, ViewContainerRef, Input, ViewChildren, ViewEncapsulation, Pipe, EventEmitter, Output, ChangeDetectionStrategy, NgModule } from '@angular/core';
|
|
2
|
+
import { ViewChild, Component, InjectionToken, Injectable, Inject, ViewContainerRef, Input, ViewChildren, ViewEncapsulation, Pipe, EventEmitter, Output, ChangeDetectionStrategy, NgModule, signal } from '@angular/core';
|
|
3
3
|
import moment from 'moment';
|
|
4
|
-
import { BehaviorSubject, filter, map, Subject, Subscription, combineLatest, debounceTime, tap, startWith, distinctUntilChanged } from 'rxjs';
|
|
4
|
+
import { BehaviorSubject, filter, map, Subject, Subscription, combineLatest, debounceTime, tap, startWith, distinctUntilChanged, shareReplay } from 'rxjs';
|
|
5
5
|
import { take, map as map$1, delay } from 'rxjs/operators';
|
|
6
6
|
import * as i1 from '@valtimo/task';
|
|
7
7
|
import { TaskModule } from '@valtimo/task';
|
|
@@ -19,15 +19,16 @@ import { HttpClient } from '@angular/common/http';
|
|
|
19
19
|
import * as i2$1 from '@valtimo/shared';
|
|
20
20
|
import { ROLE_USER } from '@valtimo/shared';
|
|
21
21
|
import * as i4 from 'carbon-components-angular';
|
|
22
|
-
import { InputModule, CheckboxModule, DropdownModule, ButtonModule, TilesModule, LayerModule, IconModule, TabsModule, ThemeModule, LoadingModule } from 'carbon-components-angular';
|
|
22
|
+
import { InputModule, CheckboxModule, DropdownModule, ButtonModule, TilesModule, LayerModule, IconModule, ContentSwitcherModule, NotificationModule, TabsModule, ThemeModule, LoadingModule } from 'carbon-components-angular';
|
|
23
23
|
import * as i1$3 from '@angular/forms';
|
|
24
|
-
import { Validators, ReactiveFormsModule } from '@angular/forms';
|
|
24
|
+
import { Validators, ReactiveFormsModule, FormGroup, FormControl, FormArray } from '@angular/forms';
|
|
25
25
|
import { ScaleTypes } from '@carbon/charts';
|
|
26
26
|
import * as i3$2 from '@carbon/charts-angular';
|
|
27
27
|
import { ChartsModule } from '@carbon/charts-angular';
|
|
28
28
|
import * as i2$2 from '@valtimo/document';
|
|
29
29
|
import { isEqual } from 'lodash';
|
|
30
30
|
import { Add16, TrashCan16 } from '@carbon/icons';
|
|
31
|
+
import { toObservable } from '@angular/core/rxjs-interop';
|
|
31
32
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
32
33
|
import { AuthGuardService } from '@valtimo/security';
|
|
33
34
|
|
|
@@ -2825,7 +2826,7 @@ class CaseCountConfigurationComponent {
|
|
|
2825
2826
|
}));
|
|
2826
2827
|
}
|
|
2827
2828
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseCountConfigurationComponent, deps: [{ token: i1$3.FormBuilder }, { token: i2$2.DocumentService }, { token: i3$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2828
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseCountConfigurationComponent, isStandalone: false, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-count-configuration-form\"\n *ngIf=\"{documentItems: documentItems$ | async, operatorItems: operatorItems$} as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n type=\"valuePathSelectorDropdownValue\"\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"defaultConditionValues$ | async\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n (allValuesValidEvent)=\"onAllConditionsValid($event)\"\n (valueChange)=\"conditionsValueChange($event)\"\n valuePathSelectorNotation=\"dots\"\n [valuePathSelectorPrefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [valuePathSelectorShowCaseDefinitionSelector]=\"false\"\n [valuePathSelectorCaseDefinitionKey]=\"selectedDocumentDefinition$ | async\"\n [keyColumnFlex]=\"2\"\n [dropdownColumnFlex]=\"1\"\n [valueColumnFlex]=\"1\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["::ng-deep .case-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .case-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i4.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i4.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2829
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseCountConfigurationComponent, isStandalone: false, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-count-configuration-form\"\n *ngIf=\"{documentItems: documentItems$ | async, operatorItems: operatorItems$} as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n type=\"valuePathSelectorDropdownValue\"\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"defaultConditionValues$ | async\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n (allValuesValidEvent)=\"onAllConditionsValid($event)\"\n (valueChange)=\"conditionsValueChange($event)\"\n valuePathSelectorNotation=\"dots\"\n [valuePathSelectorPrefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [valuePathSelectorShowCaseDefinitionSelector]=\"false\"\n [valuePathSelectorCaseDefinitionKey]=\"selectedDocumentDefinition$ | async\"\n [keyColumnFlex]=\"2\"\n [dropdownColumnFlex]=\"1\"\n [valueColumnFlex]=\"1\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["::ng-deep .case-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .case-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i4.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i4.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteButtonType", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2829
2830
|
}
|
|
2830
2831
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseCountConfigurationComponent, decorators: [{
|
|
2831
2832
|
type: Component,
|
|
@@ -3244,7 +3245,7 @@ class CaseCountsConfigurationComponent {
|
|
|
3244
3245
|
};
|
|
3245
3246
|
}
|
|
3246
3247
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseCountsConfigurationComponent, deps: [{ token: i1$3.FormBuilder }, { token: i2$2.DocumentService }, { token: i3$1.TranslateService }, { token: i4.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3247
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseCountsConfigurationComponent, isStandalone: false, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-counts-configuration-form\"\n *ngIf=\"{\n documentItems: documentItems$ | async,\n operatorItems: operatorItems$,\n queryItemsValue: queryItemsValue$ | async,\n selectedDocumentDefinition: selectedDocumentDefinition$ | async,\n } as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <cds-label class=\"conditions__label\">{{\n 'counts' | widgetTranslate: dataSourceKey | async\n }}</cds-label>\n\n <p class=\"conditions__helper-text cds--form__helper-text\">\n {{ 'countsHelperText' | widgetTranslate: dataSourceKey | async }}\n </p>\n\n @for (_ of queryItemsList$ | async; track $index; let i = $index) {\n <cds-tile class=\"count-tile\" [cdsLayer]=\"1\">\n <div class=\"count-tile__input\" [cdsLayer]=\"0\">\n <v-input\n [title]=\"'countTitle' | widgetTranslate: dataSourceKey | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.queryItemsValue[i]?.label\"\n [disabled]=\"formDisabled\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n (valueChange)=\"labelValueChange(i, $event)\"\n >\n </v-input>\n\n <valtimo-carbon-multi-input\n type=\"valuePathSelectorDropdownValue\"\n [disabled]=\"formDisabled\"\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.queryItemsValue[i]?.queryConditions\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"1\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"1\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n valuePathSelectorNotation=\"dots\"\n [valuePathSelectorPrefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [valuePathSelectorShowCaseDefinitionSelector]=\"false\"\n [valuePathSelectorCaseDefinitionKey]=\"obs.selectedDocumentDefinition\"\n [keyColumnFlex]=\"2\"\n [dropdownColumnFlex]=\"1\"\n [valueColumnFlex]=\"1\"\n (valueChange)=\"conditionsValueChange(i, $event)\"\n ></valtimo-carbon-multi-input>\n </div>\n\n <div class=\"count-tile__delete-button\">\n <cds-icon-button\n [disabled]=\"formDisabled || i < 2\"\n (click)=\"deleteCount(i)\"\n kind=\"danger\"\n size=\"sm\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n </cds-tile>\n }\n\n <button\n class=\"add-count-button\"\n cdsButton=\"primary\"\n [disabled]=\"formDisabled\"\n (click)=\"addQueryItem()\"\n >\n {{ 'Aantal toevoegen' }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</form>\n", styles: ["::ng-deep .case-counts-configuration-form .conditions__label{display:flex;margin-bottom:8px}::ng-deep .case-counts-configuration-form .conditions__helper-text{font-style:italic;display:flex;margin-bottom:16px}::ng-deep .case-counts-configuration-form .count-tile{display:flex;flex-direction:row;gap:32px;justify-content:space-between;margin-bottom:16px}::ng-deep .case-counts-configuration-form .count-tile__input{width:100%}::ng-deep .case-counts-configuration-form .add-count-button{margin-bottom:16px}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i1$1.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder", "dataTestId", "trim", "presetsTitle", "presetOptions"], outputs: ["valueChange"] }, { kind: "component", type: i4.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i4.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i4.IconButton, selector: "cds-icon-button, ibm-icon-button", inputs: ["buttonNgClass", "buttonAttributes", "buttonId", "kind", "size", "type", "isExpressive", "disabled", "description", "showTooltipWhenDisabled"], outputs: ["click", "focus", "blur", "tooltipClick"] }, { kind: "component", type: i4.Tile, selector: "cds-tile, ibm-tile", inputs: ["theme"] }, { kind: "directive", type: i4.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3248
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: CaseCountsConfigurationComponent, isStandalone: false, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-counts-configuration-form\"\n *ngIf=\"{\n documentItems: documentItems$ | async,\n operatorItems: operatorItems$,\n queryItemsValue: queryItemsValue$ | async,\n selectedDocumentDefinition: selectedDocumentDefinition$ | async,\n } as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <cds-label class=\"conditions__label\">{{\n 'counts' | widgetTranslate: dataSourceKey | async\n }}</cds-label>\n\n <p class=\"conditions__helper-text cds--form__helper-text\">\n {{ 'countsHelperText' | widgetTranslate: dataSourceKey | async }}\n </p>\n\n @for (_ of queryItemsList$ | async; track $index; let i = $index) {\n <cds-tile class=\"count-tile\" [cdsLayer]=\"1\">\n <div class=\"count-tile__input\" [cdsLayer]=\"0\">\n <v-input\n [title]=\"'countTitle' | widgetTranslate: dataSourceKey | async\"\n [margin]=\"true\"\n [defaultValue]=\"obs.queryItemsValue[i]?.label\"\n [disabled]=\"formDisabled\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n (valueChange)=\"labelValueChange(i, $event)\"\n >\n </v-input>\n\n <valtimo-carbon-multi-input\n type=\"valuePathSelectorDropdownValue\"\n [disabled]=\"formDisabled\"\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.queryItemsValue[i]?.queryConditions\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"1\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"1\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n valuePathSelectorNotation=\"dots\"\n [valuePathSelectorPrefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [valuePathSelectorShowCaseDefinitionSelector]=\"false\"\n [valuePathSelectorCaseDefinitionKey]=\"obs.selectedDocumentDefinition\"\n [keyColumnFlex]=\"2\"\n [dropdownColumnFlex]=\"1\"\n [valueColumnFlex]=\"1\"\n (valueChange)=\"conditionsValueChange(i, $event)\"\n ></valtimo-carbon-multi-input>\n </div>\n\n <div class=\"count-tile__delete-button\">\n <cds-icon-button\n [disabled]=\"formDisabled || i < 2\"\n (click)=\"deleteCount(i)\"\n kind=\"danger\"\n size=\"sm\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n </cds-tile>\n }\n\n <button\n class=\"add-count-button\"\n cdsButton=\"primary\"\n [disabled]=\"formDisabled\"\n (click)=\"addQueryItem()\"\n >\n {{ 'Aantal toevoegen' }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</form>\n", styles: ["::ng-deep .case-counts-configuration-form .conditions__label{display:flex;margin-bottom:8px}::ng-deep .case-counts-configuration-form .conditions__helper-text{font-style:italic;display:flex;margin-bottom:16px}::ng-deep .case-counts-configuration-form .count-tile{display:flex;flex-direction:row;gap:32px;justify-content:space-between;margin-bottom:16px}::ng-deep .case-counts-configuration-form .count-tile__input{width:100%}::ng-deep .case-counts-configuration-form .add-count-button{margin-bottom:16px}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i1$1.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder", "dataTestId", "trim", "presetsTitle", "presetOptions"], outputs: ["valueChange"] }, { kind: "component", type: i4.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i4.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteButtonType", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i4.IconButton, selector: "cds-icon-button, ibm-icon-button", inputs: ["buttonNgClass", "buttonAttributes", "buttonId", "kind", "size", "type", "isExpressive", "disabled", "description", "showTooltipWhenDisabled"], outputs: ["click", "focus", "blur", "tooltipClick"] }, { kind: "component", type: i4.Tile, selector: "cds-tile, ibm-tile", inputs: ["theme"] }, { kind: "directive", type: i4.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3248
3249
|
}
|
|
3249
3250
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseCountsConfigurationComponent, decorators: [{
|
|
3250
3251
|
type: Component,
|
|
@@ -3634,7 +3635,7 @@ class CaseGroupByConfigurationComponent {
|
|
|
3634
3635
|
}));
|
|
3635
3636
|
}
|
|
3636
3637
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseGroupByConfigurationComponent, deps: [{ token: i1$3.FormBuilder }, { token: i2$2.DocumentService }, { token: i3$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3637
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseGroupByConfigurationComponent, isStandalone: false, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-count-configuration-form\"\n *ngIf=\"{\n documentItems: documentItems$ | async,\n operatorItems: operatorItems$,\n selectedDocumentDefinition: selectedDocumentDefinition$ | async,\n formValue: formValue$ | async,\n } as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'pathHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'pathHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"full-width\"\n >\n {{ 'path' | widgetTranslate: dataSourceKey | async }}\n\n <valtimo-value-path-selector\n formControlName=\"path\"\n [caseDefinitionKey]=\"obs.selectedDocumentDefinition\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n ></valtimo-value-path-selector>\n </cds-label>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n type=\"valuePathSelectorDropdownValue\"\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.formValue?.queryConditions\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n valuePathSelectorNotation=\"dots\"\n [valuePathSelectorPrefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [valuePathSelectorShowCaseDefinitionSelector]=\"false\"\n [valuePathSelectorCaseDefinitionKey]=\"obs.selectedDocumentDefinition\"\n [keyColumnFlex]=\"2\"\n [dropdownColumnFlex]=\"1\"\n [valueColumnFlex]=\"1\"\n (valueChange)=\"conditionsValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'enumHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'enum' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addDisplay' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.formValue?.enum\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'displayValue' | widgetTranslate: dataSourceKey | async\"\n type=\"keyValue\"\n (valueChange)=\"enumValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["::ng-deep .case-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .case-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}::ng-deep .case-count-configuration-form .full-width,::ng-deep .case-count-configuration-form .full-width .cds--label{width:100%}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i4.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i4.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "component", type: i1$1.ValuePathSelectorComponent, selector: "valtimo-value-path-selector", inputs: ["name", "appendInline", "margin", "marginLg", "marginXl", "disabled", "caseDefinitionKey", "caseDefinitionVersionTag", "buildingBlockDefinitionKey", "buildingBlockDefinitionVersionTag", "prefixes", "excludePrefixes", "label", "tooltip", "required", "showCaseDefinitionSelector", "notation", "dropUp", "defaultValue", "type", "parentItem", "filterItems"], outputs: ["valueChangeEvent", "collectionSelected"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3638
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: CaseGroupByConfigurationComponent, isStandalone: false, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"case-count-configuration-form\"\n *ngIf=\"{\n documentItems: documentItems$ | async,\n operatorItems: operatorItems$,\n selectedDocumentDefinition: selectedDocumentDefinition$ | async,\n formValue: formValue$ | async,\n } as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n formControlName=\"documentDefinition\"\n [helperText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'documentDefinitionHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalid]=\"documentDefinition.dirty && documentDefinition.invalid\"\n [label]=\"'documentDefinition' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"documentDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs?.documentItems || []\" type=\"multi\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n <div class=\"form__element\">\n <cds-label\n [helperText]=\"'pathHelperText' | widgetTranslate: dataSourceKey | async\"\n [invalidText]=\"'pathHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"full-width\"\n >\n {{ 'path' | widgetTranslate: dataSourceKey | async }}\n\n <valtimo-value-path-selector\n formControlName=\"path\"\n [caseDefinitionKey]=\"obs.selectedDocumentDefinition\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n ></valtimo-value-path-selector>\n </cds-label>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n type=\"valuePathSelectorDropdownValue\"\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.formValue?.queryConditions\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n valuePathSelectorNotation=\"dots\"\n [valuePathSelectorPrefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [valuePathSelectorShowCaseDefinitionSelector]=\"false\"\n [valuePathSelectorCaseDefinitionKey]=\"obs.selectedDocumentDefinition\"\n [keyColumnFlex]=\"2\"\n [dropdownColumnFlex]=\"1\"\n [valueColumnFlex]=\"1\"\n (valueChange)=\"conditionsValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'enumHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'enum' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addDisplay' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"obs.formValue?.enum\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'displayValue' | widgetTranslate: dataSourceKey | async\"\n type=\"keyValue\"\n (valueChange)=\"enumValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["::ng-deep .case-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .case-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}::ng-deep .case-count-configuration-form .full-width,::ng-deep .case-count-configuration-form .full-width .cds--label{width:100%}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i4.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i4.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteButtonType", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "component", type: i1$1.ValuePathSelectorComponent, selector: "valtimo-value-path-selector", inputs: ["name", "appendInline", "margin", "marginLg", "marginXl", "disabled", "caseDefinitionKey", "caseDefinitionVersionTag", "buildingBlockDefinitionKey", "buildingBlockDefinitionVersionTag", "prefixes", "excludePrefixes", "label", "tooltip", "required", "showCaseDefinitionSelector", "notation", "dropUp", "defaultValue", "type", "parentItem", "filterItems"], outputs: ["valueChangeEvent", "collectionSelected"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3638
3639
|
}
|
|
3639
3640
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: CaseGroupByConfigurationComponent, decorators: [{
|
|
3640
3641
|
type: Component,
|
|
@@ -3854,7 +3855,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
3854
3855
|
*/
|
|
3855
3856
|
|
|
3856
3857
|
/*
|
|
3857
|
-
* Copyright 2015-
|
|
3858
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
3858
3859
|
*
|
|
3859
3860
|
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3860
3861
|
* you may not use this file except in compliance with the License.
|
|
@@ -3868,85 +3869,467 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
3868
3869
|
* See the License for the specific language governing permissions and
|
|
3869
3870
|
* limitations under the License.
|
|
3870
3871
|
*/
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
-
|
|
3874
|
-
|
|
3872
|
+
const TASK_COUNT_TEST_IDS = {
|
|
3873
|
+
caseDefinitionDropdown: 'taskCountCaseDefinitionDropdown',
|
|
3874
|
+
conditionGroup: 'taskCountConditionGroup',
|
|
3875
|
+
operatorSwitcher: 'taskCountGroupOperatorSwitcher',
|
|
3876
|
+
operatorAndButton: 'taskCountGroupOperatorAndButton',
|
|
3877
|
+
operatorOrButton: 'taskCountGroupOperatorOrButton',
|
|
3878
|
+
operatorMirror: 'taskCountGroupOperatorMirror',
|
|
3879
|
+
addGroupButton: 'taskCountAddGroupButton',
|
|
3880
|
+
deleteGroupButton: 'taskCountDeleteGroupButton',
|
|
3881
|
+
};
|
|
3882
|
+
|
|
3883
|
+
/*
|
|
3884
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
3885
|
+
*
|
|
3886
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3887
|
+
* you may not use this file except in compliance with the License.
|
|
3888
|
+
* You may obtain a copy of the License at
|
|
3889
|
+
*
|
|
3890
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
3891
|
+
*
|
|
3892
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3893
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
3894
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3895
|
+
* See the License for the specific language governing permissions and
|
|
3896
|
+
* limitations under the License.
|
|
3897
|
+
*/
|
|
3898
|
+
|
|
3899
|
+
/*
|
|
3900
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
3901
|
+
*
|
|
3902
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3903
|
+
* you may not use this file except in compliance with the License.
|
|
3904
|
+
* You may obtain a copy of the License at
|
|
3905
|
+
*
|
|
3906
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
3907
|
+
*
|
|
3908
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3909
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
3910
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3911
|
+
* See the License for the specific language governing permissions and
|
|
3912
|
+
* limitations under the License.
|
|
3913
|
+
*/
|
|
3914
|
+
/** The operators the condition rows offer. Anything else is preserved but not editable. */
|
|
3915
|
+
const EDITABLE_CONDITION_OPERATORS = [
|
|
3916
|
+
'!=',
|
|
3917
|
+
'==',
|
|
3918
|
+
'>',
|
|
3919
|
+
'>=',
|
|
3920
|
+
'<',
|
|
3921
|
+
'<=',
|
|
3922
|
+
];
|
|
3923
|
+
function createConditionGroup(operator, rows = [], unsupportedNodes = []) {
|
|
3924
|
+
return new FormGroup({
|
|
3925
|
+
operator: new FormControl(operator, { nonNullable: true }),
|
|
3926
|
+
rows: new FormControl(rows, { nonNullable: true }),
|
|
3927
|
+
// The multi input drops incomplete rows from its value, so a group that is still being filled
|
|
3928
|
+
// in can only be recognised through the event the multi input emits for it. Until that event
|
|
3929
|
+
// arrives - and for a group that is never rendered - the rows themselves decide, so that a
|
|
3930
|
+
// group created with an empty row does not report itself as complete in the meantime.
|
|
3931
|
+
rowsComplete: new FormControl(rows.every(isRowComplete), {
|
|
3932
|
+
nonNullable: true,
|
|
3933
|
+
validators: [Validators.requiredTrue],
|
|
3934
|
+
}),
|
|
3935
|
+
groups: new FormArray([]),
|
|
3936
|
+
unsupportedNodes: new FormControl(unsupportedNodes, { nonNullable: true }),
|
|
3937
|
+
});
|
|
3938
|
+
}
|
|
3939
|
+
function createEmptyConditionRow() {
|
|
3940
|
+
return { key: '', dropdown: '', value: '' };
|
|
3941
|
+
}
|
|
3942
|
+
/**
|
|
3943
|
+
* Applies the conditions of a stored configuration to [root], leaving the form instance itself
|
|
3944
|
+
* intact so that subscriptions on it survive a prefill.
|
|
3945
|
+
*
|
|
3946
|
+
* A single group at the top level is adopted as the root group itself, so that its operator
|
|
3947
|
+
* survives a save/reload round-trip. Anything else - including a legacy flat list of conditions -
|
|
3948
|
+
* becomes a set of children combined with AND, matching the backend's list semantics.
|
|
3949
|
+
*/
|
|
3950
|
+
function resetRootGroup(root, nodes) {
|
|
3951
|
+
const [firstNode] = nodes;
|
|
3952
|
+
if (nodes.length === 1 && isWireGroup(firstNode)) {
|
|
3953
|
+
applyWireGroup(root, firstNode);
|
|
3954
|
+
return;
|
|
3955
|
+
}
|
|
3956
|
+
root.controls.operator.setValue('and');
|
|
3957
|
+
applyWireChildren(root, nodes);
|
|
3958
|
+
}
|
|
3959
|
+
/**
|
|
3960
|
+
* Walks [group] once and collects the wire node to emit and whether the tree holds nodes the editor
|
|
3961
|
+
* cannot render.
|
|
3962
|
+
*
|
|
3963
|
+
* Groups without a single condition serialize to `null`: the backend rejects empty `and`/`or`
|
|
3964
|
+
* groups, because `cb.or()` without predicates evaluates to false and would silently zero out the
|
|
3965
|
+
* count.
|
|
3966
|
+
*/
|
|
3967
|
+
function serializeConditionGroup(group) {
|
|
3968
|
+
const children = [];
|
|
3969
|
+
let hasUnsupportedNodes = group.unsupportedNodes.length > 0;
|
|
3970
|
+
group.rows.filter(isRowComplete).forEach(row => children.push(rowToLeaf(row)));
|
|
3971
|
+
group.groups.forEach(nestedGroup => {
|
|
3972
|
+
const nested = serializeConditionGroup(nestedGroup);
|
|
3973
|
+
hasUnsupportedNodes = hasUnsupportedNodes || nested.hasUnsupportedNodes;
|
|
3974
|
+
if (nested.node) {
|
|
3975
|
+
children.push(nested.node);
|
|
3976
|
+
}
|
|
3977
|
+
});
|
|
3978
|
+
children.push(...group.unsupportedNodes);
|
|
3979
|
+
return {
|
|
3980
|
+
node: children.length ? toWireGroup(group.operator, children) : null,
|
|
3981
|
+
hasUnsupportedNodes,
|
|
3982
|
+
};
|
|
3983
|
+
}
|
|
3984
|
+
function toWireGroup(operator, children) {
|
|
3985
|
+
return operator === 'or' ? { or: children } : { and: children };
|
|
3986
|
+
}
|
|
3987
|
+
function applyWireGroup(group, wireGroup) {
|
|
3988
|
+
if (isWireOrGroup(wireGroup)) {
|
|
3989
|
+
group.controls.operator.setValue('or');
|
|
3990
|
+
applyWireChildren(group, wireGroup.or);
|
|
3991
|
+
}
|
|
3992
|
+
else {
|
|
3993
|
+
group.controls.operator.setValue('and');
|
|
3994
|
+
applyWireChildren(group, wireGroup.and);
|
|
3995
|
+
}
|
|
3996
|
+
}
|
|
3997
|
+
function applyWireChildren(group, nodes) {
|
|
3998
|
+
const rows = [];
|
|
3999
|
+
const unsupportedNodes = [];
|
|
4000
|
+
group.controls.groups.clear();
|
|
4001
|
+
nodes.forEach(node => {
|
|
4002
|
+
if (isWireGroup(node)) {
|
|
4003
|
+
const nestedGroup = createConditionGroup('and');
|
|
4004
|
+
applyWireGroup(nestedGroup, node);
|
|
4005
|
+
group.controls.groups.push(nestedGroup);
|
|
4006
|
+
}
|
|
4007
|
+
else if (isEditableLeaf(node)) {
|
|
4008
|
+
rows.push(wireLeafToRow(node));
|
|
3875
4009
|
}
|
|
3876
4010
|
else {
|
|
3877
|
-
|
|
4011
|
+
unsupportedNodes.push(node);
|
|
3878
4012
|
}
|
|
4013
|
+
});
|
|
4014
|
+
group.controls.rows.setValue(rows);
|
|
4015
|
+
// The rows that were reported as incomplete are gone, and a group whose rows are all removed no
|
|
4016
|
+
// longer renders a multi input to report on them, so the flag is reset here rather than waited on.
|
|
4017
|
+
group.controls.rowsComplete.setValue(rows.every(isRowComplete));
|
|
4018
|
+
group.controls.unsupportedNodes.setValue(unsupportedNodes);
|
|
4019
|
+
}
|
|
4020
|
+
function isWireOrGroup(node) {
|
|
4021
|
+
return Array.isArray(node.or);
|
|
4022
|
+
}
|
|
4023
|
+
function isWireAndGroup(node) {
|
|
4024
|
+
return Array.isArray(node.and);
|
|
4025
|
+
}
|
|
4026
|
+
function isWireGroup(node) {
|
|
4027
|
+
return !!node && (isWireOrGroup(node) || isWireAndGroup(node));
|
|
4028
|
+
}
|
|
4029
|
+
/** A leaf is editable when every part of it fits the three inputs of a condition row. */
|
|
4030
|
+
function isEditableLeaf(leaf) {
|
|
4031
|
+
const value = leaf.value ?? leaf.queryValue;
|
|
4032
|
+
return (typeof (leaf.path ?? leaf.queryPath) === 'string' &&
|
|
4033
|
+
(typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') &&
|
|
4034
|
+
EDITABLE_CONDITION_OPERATORS.includes((leaf.operator ?? leaf.queryOperator)));
|
|
4035
|
+
}
|
|
4036
|
+
function wireLeafToRow(leaf) {
|
|
4037
|
+
return {
|
|
4038
|
+
key: (leaf.path ?? leaf.queryPath),
|
|
4039
|
+
dropdown: (leaf.operator ?? leaf.queryOperator),
|
|
4040
|
+
value: String(leaf.value ?? leaf.queryValue),
|
|
4041
|
+
};
|
|
4042
|
+
}
|
|
4043
|
+
function rowToLeaf(row) {
|
|
4044
|
+
return {
|
|
4045
|
+
path: row.key,
|
|
4046
|
+
operator: row.dropdown,
|
|
4047
|
+
value: parseRowValue(row.value),
|
|
4048
|
+
};
|
|
4049
|
+
}
|
|
4050
|
+
/**
|
|
4051
|
+
* Rows only hold strings. Restore the type - the backend compares a string as text, so '100' > '50'
|
|
4052
|
+
* is false. Only values that round-trip unchanged convert, keeping "0050" and "50.10" strings.
|
|
4053
|
+
*/
|
|
4054
|
+
function parseRowValue(value) {
|
|
4055
|
+
if (value === 'true' || value === 'false') {
|
|
4056
|
+
return value === 'true';
|
|
3879
4057
|
}
|
|
3880
|
-
|
|
3881
|
-
|
|
4058
|
+
const asNumber = Number(value);
|
|
4059
|
+
return Number.isFinite(asNumber) && String(asNumber) === value ? asNumber : value;
|
|
4060
|
+
}
|
|
4061
|
+
function isRowComplete(row) {
|
|
4062
|
+
return !!row.key && !!row.dropdown && !!row.value;
|
|
4063
|
+
}
|
|
4064
|
+
|
|
4065
|
+
/*
|
|
4066
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
4067
|
+
*
|
|
4068
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4069
|
+
* you may not use this file except in compliance with the License.
|
|
4070
|
+
* You may obtain a copy of the License at
|
|
4071
|
+
*
|
|
4072
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4073
|
+
*
|
|
4074
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4075
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4076
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4077
|
+
* See the License for the specific language governing permissions and
|
|
4078
|
+
* limitations under the License.
|
|
4079
|
+
*/
|
|
4080
|
+
|
|
4081
|
+
/*
|
|
4082
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
4083
|
+
*
|
|
4084
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4085
|
+
* you may not use this file except in compliance with the License.
|
|
4086
|
+
* You may obtain a copy of the License at
|
|
4087
|
+
*
|
|
4088
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4089
|
+
*
|
|
4090
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4091
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4092
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4093
|
+
* See the License for the specific language governing permissions and
|
|
4094
|
+
* limitations under the License.
|
|
4095
|
+
*/
|
|
4096
|
+
/**
|
|
4097
|
+
* A single condition group in the task count configuration: an AND/OR selector, the group's own
|
|
4098
|
+
* condition rows, and its nested groups. The component renders itself recursively, so groups can
|
|
4099
|
+
* be nested to any depth - matching the backend `AndConditionGroup`/`OrConditionGroup` tree.
|
|
4100
|
+
*
|
|
4101
|
+
* All state lives in the [group] form: the rows are bound to the multi input as a control, and a
|
|
4102
|
+
* nested group is a form in the `groups` array. Changes therefore reach the configuration component
|
|
4103
|
+
* through the form itself, without this component reporting them.
|
|
4104
|
+
*/
|
|
4105
|
+
class TaskCountConditionGroupComponent {
|
|
4106
|
+
get operator() {
|
|
4107
|
+
return this.group.controls.operator.value;
|
|
4108
|
+
}
|
|
4109
|
+
get rowsControl() {
|
|
4110
|
+
return this.group.controls.rows;
|
|
4111
|
+
}
|
|
4112
|
+
get groups() {
|
|
4113
|
+
return this.group.controls.groups;
|
|
4114
|
+
}
|
|
4115
|
+
/**
|
|
4116
|
+
* Index of the connector that carries the interactive operator selector.
|
|
4117
|
+
*
|
|
4118
|
+
* The root renders a connector between every pair of sections, but a group has a single operator,
|
|
4119
|
+
* so all of them would set the same value. Only this one is a selector; the rest mirror it as
|
|
4120
|
+
* static text, to avoid suggesting that the sections can be joined by different operators.
|
|
4121
|
+
*/
|
|
4122
|
+
get interactiveConnectorIndex() {
|
|
4123
|
+
return this.rowsControl.value.length ? 0 : 1;
|
|
4124
|
+
}
|
|
4125
|
+
constructor(iconService) {
|
|
4126
|
+
this.iconService = iconService;
|
|
4127
|
+
this.disabled = false;
|
|
4128
|
+
this.operatorItems = [];
|
|
4129
|
+
/** The outermost group cannot be deleted and starts out without condition rows. */
|
|
4130
|
+
this.root = false;
|
|
4131
|
+
this.deleteGroupEvent = new EventEmitter();
|
|
4132
|
+
this.testIds = TASK_COUNT_TEST_IDS;
|
|
4133
|
+
this.iconService.registerAll([Add16, TrashCan16]);
|
|
4134
|
+
}
|
|
4135
|
+
setOperator(operator) {
|
|
4136
|
+
if (this.operator === operator) {
|
|
4137
|
+
return;
|
|
4138
|
+
}
|
|
4139
|
+
this.group.controls.operator.setValue(operator);
|
|
4140
|
+
}
|
|
4141
|
+
/**
|
|
4142
|
+
* The multi input drops rows that are not filled in completely, so its value alone cannot tell a
|
|
4143
|
+
* half-filled group apart from a complete one. This event does, and marks the group invalid until
|
|
4144
|
+
* every row is either complete or removed.
|
|
4145
|
+
*/
|
|
4146
|
+
onAllRowsValid(allRowsValid) {
|
|
4147
|
+
this.group.controls.rowsComplete.setValue(allRowsValid);
|
|
4148
|
+
}
|
|
4149
|
+
/**
|
|
4150
|
+
* Appends a section to this group, leaving the operator of the group untouched.
|
|
4151
|
+
*
|
|
4152
|
+
* How the sections relate is a single property of this group, shown on the connectors between
|
|
4153
|
+
* them and changed there with [setOperator]. An addition deliberately does not ask for it: the
|
|
4154
|
+
* operator of the group and the operator inside a section are two different levels, and the first
|
|
4155
|
+
* addition has nothing to relate the new section to yet. The new section starts out combining its
|
|
4156
|
+
* own conditions with 'and'; that operator is changed in the header of the section itself.
|
|
4157
|
+
*/
|
|
4158
|
+
addGroup() {
|
|
4159
|
+
this.groups.push(createConditionGroup('and', [createEmptyConditionRow()]));
|
|
4160
|
+
}
|
|
4161
|
+
removeGroup(index) {
|
|
4162
|
+
this.groups.removeAt(index);
|
|
4163
|
+
}
|
|
4164
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TaskCountConditionGroupComponent, deps: [{ token: i4.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4165
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TaskCountConditionGroupComponent, isStandalone: true, selector: "valtimo-task-count-condition-group", inputs: { group: "group", dataSourceKey: "dataSourceKey", disabled: "disabled", operatorItems: "operatorItems", root: "root" }, outputs: { deleteGroupEvent: "deleteGroupEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<!-- The AND/OR selector for this group, in the header of a nested group or on the first connector\n between the root sections. -->\n<ng-template #operatorSwitcher>\n <cds-content-switcher\n class=\"condition-operator\"\n [attr.data-test-id]=\"testIds.operatorSwitcher\"\n size=\"sm\"\n >\n <button\n cdsContentOption\n type=\"button\"\n [active]=\"operator === 'and'\"\n [attr.data-test-id]=\"testIds.operatorAndButton\"\n [disabled]=\"disabled\"\n (selected)=\"setOperator('and')\"\n >\n {{ 'and' | widgetTranslate: dataSourceKey | async }}\n </button>\n\n <button\n cdsContentOption\n type=\"button\"\n [active]=\"operator === 'or'\"\n [attr.data-test-id]=\"testIds.operatorOrButton\"\n [disabled]=\"disabled\"\n (selected)=\"setOperator('or')\"\n >\n {{ 'or' | widgetTranslate: dataSourceKey | async }}\n </button>\n </cds-content-switcher>\n</ng-template>\n\n<!--\n The condition rows of this group. The multi input is a form control, so the rows are written and\n read through [rowsControl] and its disabled state follows the control - binding [disabled] here\n would set it on the form directive as well.\n-->\n<ng-template #conditionRows let-minimumAmountOfRows=\"minimumAmountOfRows\">\n <valtimo-carbon-multi-input\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems\"\n [formControl]=\"rowsControl\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"minimumAmountOfRows\"\n [minimumAmountOfRows]=\"minimumAmountOfRows\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n (allValuesValidEvent)=\"onAllRowsValid($event)\"\n addButtonType=\"tertiary\"\n deleteButtonType=\"danger--ghost\"\n type=\"keyDropdownValue\"\n ></valtimo-carbon-multi-input>\n</ng-template>\n\n@if (root) {\n <!--\n The root group is not a section of its own: it only groups the sections. Its single operator\n defines how all of the sections relate to each other, and is rendered as a connector between\n them - a selector on the first connector, static text on the ones after it. Connectors only\n appear once there is something to relate (two or more sections, or a section following\n root-level rows). Each section carries its own operator for the conditions inside it. \"Add\n condition group\" appends a new section. Direct root-level rows only exist for configuration\n authored in a file; they are kept editable so that saving does not drop them.\n -->\n <div class=\"condition-root\" [attr.data-test-id]=\"testIds.conditionGroup\">\n @if (rowsControl.value.length) {\n <ng-container\n *ngTemplateOutlet=\"conditionRows; context: {minimumAmountOfRows: 0}\"\n ></ng-container>\n }\n\n @for (nestedGroup of groups.controls; track nestedGroup; let index = $index) {\n @if (index === interactiveConnectorIndex) {\n <ng-container *ngTemplateOutlet=\"operatorSwitcher\"></ng-container>\n } @else if (index > interactiveConnectorIndex) {\n <p\n class=\"condition-root__operator-mirror\"\n [attr.data-test-id]=\"testIds.operatorMirror\"\n aria-hidden=\"true\"\n >\n {{ operator | widgetTranslate: dataSourceKey | async }}\n </p>\n }\n\n <valtimo-task-count-condition-group\n [dataSourceKey]=\"dataSourceKey\"\n [disabled]=\"disabled\"\n [group]=\"nestedGroup\"\n [operatorItems]=\"operatorItems\"\n (deleteGroupEvent)=\"removeGroup(index)\"\n ></valtimo-task-count-condition-group>\n }\n\n <button\n class=\"condition-root__add-button\"\n cdsButton=\"tertiary\"\n type=\"button\"\n [attr.data-test-id]=\"testIds.addGroupButton\"\n [disabled]=\"disabled\"\n (click)=\"addGroup()\"\n >\n {{ 'addGroup' | widgetTranslate: dataSourceKey | async }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n} @else {\n <cds-tile class=\"condition-group\" [attr.data-test-id]=\"testIds.conditionGroup\" [cdsLayer]=\"0\">\n <div class=\"condition-group__header\">\n <ng-container *ngTemplateOutlet=\"operatorSwitcher\"></ng-container>\n\n <cds-icon-button\n [attr.data-test-id]=\"testIds.deleteGroupButton\"\n [description]=\"'deleteGroup' | widgetTranslate: dataSourceKey | async\"\n [disabled]=\"disabled\"\n (click)=\"deleteGroupEvent.emit()\"\n kind=\"danger--ghost\"\n size=\"sm\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n\n <ng-container\n *ngTemplateOutlet=\"conditionRows; context: {minimumAmountOfRows: 1}\"\n ></ng-container>\n\n @for (nestedGroup of groups.controls; track nestedGroup; let index = $index) {\n <valtimo-task-count-condition-group\n [dataSourceKey]=\"dataSourceKey\"\n [disabled]=\"disabled\"\n [group]=\"nestedGroup\"\n [operatorItems]=\"operatorItems\"\n (deleteGroupEvent)=\"removeGroup(index)\"\n ></valtimo-task-count-condition-group>\n }\n </cds-tile>\n}\n", styles: [":host{display:block}.condition-operator{max-width:160px;width:100%}.condition-operator .cds--content-switcher-btn{display:flex;align-items:center;justify-content:center;min-block-size:1.875rem;block-size:1.875rem;padding-block:0}.condition-root{display:flex;flex-direction:column;gap:16px}.condition-root__operator-mirror{max-width:160px;width:100%;margin:0;text-align:center;color:var(--cds-text-secondary);font-size:.75rem;font-weight:600;letter-spacing:.32px}.condition-root__add-button{align-self:flex-start}.condition-group{display:flex;flex-direction:column;gap:16px;background-color:var(--cds-layer-02)}.condition-group__header{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:16px}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "component", type: TaskCountConditionGroupComponent, selector: "valtimo-task-count-condition-group", inputs: ["group", "dataSourceKey", "disabled", "operatorItems", "root"], outputs: ["deleteGroupEvent"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i4.IconButton, selector: "cds-icon-button, ibm-icon-button", inputs: ["buttonNgClass", "buttonAttributes", "buttonId", "kind", "size", "type", "isExpressive", "disabled", "description", "showTooltipWhenDisabled"], outputs: ["click", "focus", "blur", "tooltipClick"] }, { kind: "ngmodule", type: CarbonMultiInputModule }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteButtonType", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ContentSwitcherModule }, { kind: "component", type: i4.ContentSwitcher, selector: "cds-content-switcher, ibm-content-switcher", inputs: ["ariaLabel", "size"], outputs: ["selected"] }, { kind: "directive", type: i4.ContentSwitcherOption, selector: "[cdsContentOption], [ibmContentOption]", inputs: ["active", "name"], outputs: ["selected", "onClick", "onFocus"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i4.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TilesModule }, { kind: "component", type: i4.Tile, selector: "cds-tile, ibm-tile", inputs: ["theme"] }, { kind: "ngmodule", type: WidgetTranslatePipeModule }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4166
|
+
}
|
|
4167
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TaskCountConditionGroupComponent, decorators: [{
|
|
4168
|
+
type: Component,
|
|
4169
|
+
args: [{ standalone: true, selector: 'valtimo-task-count-condition-group', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
4170
|
+
ButtonModule,
|
|
4171
|
+
CarbonMultiInputModule,
|
|
4172
|
+
CommonModule,
|
|
4173
|
+
ContentSwitcherModule,
|
|
4174
|
+
IconModule,
|
|
4175
|
+
LayerModule,
|
|
4176
|
+
ReactiveFormsModule,
|
|
4177
|
+
TilesModule,
|
|
4178
|
+
WidgetTranslatePipeModule,
|
|
4179
|
+
], template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<!-- The AND/OR selector for this group, in the header of a nested group or on the first connector\n between the root sections. -->\n<ng-template #operatorSwitcher>\n <cds-content-switcher\n class=\"condition-operator\"\n [attr.data-test-id]=\"testIds.operatorSwitcher\"\n size=\"sm\"\n >\n <button\n cdsContentOption\n type=\"button\"\n [active]=\"operator === 'and'\"\n [attr.data-test-id]=\"testIds.operatorAndButton\"\n [disabled]=\"disabled\"\n (selected)=\"setOperator('and')\"\n >\n {{ 'and' | widgetTranslate: dataSourceKey | async }}\n </button>\n\n <button\n cdsContentOption\n type=\"button\"\n [active]=\"operator === 'or'\"\n [attr.data-test-id]=\"testIds.operatorOrButton\"\n [disabled]=\"disabled\"\n (selected)=\"setOperator('or')\"\n >\n {{ 'or' | widgetTranslate: dataSourceKey | async }}\n </button>\n </cds-content-switcher>\n</ng-template>\n\n<!--\n The condition rows of this group. The multi input is a form control, so the rows are written and\n read through [rowsControl] and its disabled state follows the control - binding [disabled] here\n would set it on the form directive as well.\n-->\n<ng-template #conditionRows let-minimumAmountOfRows=\"minimumAmountOfRows\">\n <valtimo-carbon-multi-input\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems\"\n [formControl]=\"rowsControl\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"minimumAmountOfRows\"\n [minimumAmountOfRows]=\"minimumAmountOfRows\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n (allValuesValidEvent)=\"onAllRowsValid($event)\"\n addButtonType=\"tertiary\"\n deleteButtonType=\"danger--ghost\"\n type=\"keyDropdownValue\"\n ></valtimo-carbon-multi-input>\n</ng-template>\n\n@if (root) {\n <!--\n The root group is not a section of its own: it only groups the sections. Its single operator\n defines how all of the sections relate to each other, and is rendered as a connector between\n them - a selector on the first connector, static text on the ones after it. Connectors only\n appear once there is something to relate (two or more sections, or a section following\n root-level rows). Each section carries its own operator for the conditions inside it. \"Add\n condition group\" appends a new section. Direct root-level rows only exist for configuration\n authored in a file; they are kept editable so that saving does not drop them.\n -->\n <div class=\"condition-root\" [attr.data-test-id]=\"testIds.conditionGroup\">\n @if (rowsControl.value.length) {\n <ng-container\n *ngTemplateOutlet=\"conditionRows; context: {minimumAmountOfRows: 0}\"\n ></ng-container>\n }\n\n @for (nestedGroup of groups.controls; track nestedGroup; let index = $index) {\n @if (index === interactiveConnectorIndex) {\n <ng-container *ngTemplateOutlet=\"operatorSwitcher\"></ng-container>\n } @else if (index > interactiveConnectorIndex) {\n <p\n class=\"condition-root__operator-mirror\"\n [attr.data-test-id]=\"testIds.operatorMirror\"\n aria-hidden=\"true\"\n >\n {{ operator | widgetTranslate: dataSourceKey | async }}\n </p>\n }\n\n <valtimo-task-count-condition-group\n [dataSourceKey]=\"dataSourceKey\"\n [disabled]=\"disabled\"\n [group]=\"nestedGroup\"\n [operatorItems]=\"operatorItems\"\n (deleteGroupEvent)=\"removeGroup(index)\"\n ></valtimo-task-count-condition-group>\n }\n\n <button\n class=\"condition-root__add-button\"\n cdsButton=\"tertiary\"\n type=\"button\"\n [attr.data-test-id]=\"testIds.addGroupButton\"\n [disabled]=\"disabled\"\n (click)=\"addGroup()\"\n >\n {{ 'addGroup' | widgetTranslate: dataSourceKey | async }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n} @else {\n <cds-tile class=\"condition-group\" [attr.data-test-id]=\"testIds.conditionGroup\" [cdsLayer]=\"0\">\n <div class=\"condition-group__header\">\n <ng-container *ngTemplateOutlet=\"operatorSwitcher\"></ng-container>\n\n <cds-icon-button\n [attr.data-test-id]=\"testIds.deleteGroupButton\"\n [description]=\"'deleteGroup' | widgetTranslate: dataSourceKey | async\"\n [disabled]=\"disabled\"\n (click)=\"deleteGroupEvent.emit()\"\n kind=\"danger--ghost\"\n size=\"sm\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n\n <ng-container\n *ngTemplateOutlet=\"conditionRows; context: {minimumAmountOfRows: 1}\"\n ></ng-container>\n\n @for (nestedGroup of groups.controls; track nestedGroup; let index = $index) {\n <valtimo-task-count-condition-group\n [dataSourceKey]=\"dataSourceKey\"\n [disabled]=\"disabled\"\n [group]=\"nestedGroup\"\n [operatorItems]=\"operatorItems\"\n (deleteGroupEvent)=\"removeGroup(index)\"\n ></valtimo-task-count-condition-group>\n }\n </cds-tile>\n}\n", styles: [":host{display:block}.condition-operator{max-width:160px;width:100%}.condition-operator .cds--content-switcher-btn{display:flex;align-items:center;justify-content:center;min-block-size:1.875rem;block-size:1.875rem;padding-block:0}.condition-root{display:flex;flex-direction:column;gap:16px}.condition-root__operator-mirror{max-width:160px;width:100%;margin:0;text-align:center;color:var(--cds-text-secondary);font-size:.75rem;font-weight:600;letter-spacing:.32px}.condition-root__add-button{align-self:flex-start}.condition-group{display:flex;flex-direction:column;gap:16px;background-color:var(--cds-layer-02)}.condition-group__header{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:16px}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
4180
|
+
}], ctorParameters: () => [{ type: i4.IconService }], propDecorators: { group: [{
|
|
4181
|
+
type: Input
|
|
4182
|
+
}], dataSourceKey: [{
|
|
4183
|
+
type: Input
|
|
4184
|
+
}], disabled: [{
|
|
4185
|
+
type: Input
|
|
4186
|
+
}], operatorItems: [{
|
|
4187
|
+
type: Input
|
|
4188
|
+
}], root: [{
|
|
4189
|
+
type: Input
|
|
4190
|
+
}], deleteGroupEvent: [{
|
|
4191
|
+
type: Output
|
|
4192
|
+
}] } });
|
|
4193
|
+
|
|
4194
|
+
/*
|
|
4195
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
4196
|
+
*
|
|
4197
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4198
|
+
* you may not use this file except in compliance with the License.
|
|
4199
|
+
* You may obtain a copy of the License at
|
|
4200
|
+
*
|
|
4201
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4202
|
+
*
|
|
4203
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4204
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4205
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4206
|
+
* See the License for the specific language governing permissions and
|
|
4207
|
+
* limitations under the License.
|
|
4208
|
+
*/
|
|
4209
|
+
|
|
4210
|
+
/*
|
|
4211
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
4212
|
+
*
|
|
4213
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
4214
|
+
* you may not use this file except in compliance with the License.
|
|
4215
|
+
* You may obtain a copy of the License at
|
|
4216
|
+
*
|
|
4217
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
4218
|
+
*
|
|
4219
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4220
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
4221
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4222
|
+
* See the License for the specific language governing permissions and
|
|
4223
|
+
* limitations under the License.
|
|
4224
|
+
*/
|
|
4225
|
+
class TaskCountConfigurationComponent {
|
|
4226
|
+
set disabled(disabledValue) {
|
|
4227
|
+
this.$disabled.set(disabledValue);
|
|
4228
|
+
this.applyDisabledState();
|
|
3882
4229
|
}
|
|
3883
4230
|
set prefillConfiguration(configurationValue) {
|
|
3884
|
-
if (configurationValue) {
|
|
3885
|
-
|
|
3886
|
-
key: condition.queryPath,
|
|
3887
|
-
dropdown: condition.queryOperator,
|
|
3888
|
-
value: condition.queryValue,
|
|
3889
|
-
})));
|
|
4231
|
+
if (!configurationValue) {
|
|
4232
|
+
return;
|
|
3890
4233
|
}
|
|
4234
|
+
this._$selectedCaseDefinitionName.set(configurationValue.caseDefinitionName ?? undefined);
|
|
4235
|
+
resetRootGroup(this.conditionsForm, configurationValue.conditions ?? configurationValue.queryConditions ?? []);
|
|
4236
|
+
// Prefill runs after [disabled] and adds enabled groups, which re-enable their parents.
|
|
4237
|
+
this.applyDisabledState();
|
|
3891
4238
|
}
|
|
3892
|
-
constructor(
|
|
3893
|
-
this.
|
|
4239
|
+
constructor(documentService, translateService, widgetTranslationService) {
|
|
4240
|
+
this.documentService = documentService;
|
|
3894
4241
|
this.translateService = translateService;
|
|
3895
|
-
this.
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
|
|
3899
|
-
|
|
4242
|
+
this.widgetTranslationService = widgetTranslationService;
|
|
4243
|
+
this.configurationEvent = new EventEmitter();
|
|
4244
|
+
this.$disabled = signal(false);
|
|
4245
|
+
/**
|
|
4246
|
+
* The whole condition tree. Kept for the lifetime of the component - a prefill resets its
|
|
4247
|
+
* contents - so that the subscription below survives it.
|
|
4248
|
+
*/
|
|
4249
|
+
this.conditionsForm = createConditionGroup('and');
|
|
4250
|
+
this.testIds = TASK_COUNT_TEST_IDS;
|
|
4251
|
+
// Declared before the observables below, which read it at field-initialization time.
|
|
4252
|
+
this._$selectedCaseDefinitionName = signal(undefined);
|
|
4253
|
+
this._serializedConditions$ = this.conditionsForm.valueChanges.pipe(startWith(null), map(() => serializeConditionGroup(this.conditionsForm.getRawValue())), shareReplay({ bufferSize: 1, refCount: true }));
|
|
4254
|
+
this.hasUnsupportedConditions$ = this._serializedConditions$.pipe(map(serialized => serialized.hasUnsupportedNodes));
|
|
4255
|
+
/**
|
|
4256
|
+
* Emits once and then on every language change. Subscribing to a translation is the only way to
|
|
4257
|
+
* be notified, so the lists below are rebuilt whenever this fires.
|
|
4258
|
+
*/
|
|
4259
|
+
this._languageChange$ = this.translateService
|
|
3900
4260
|
.stream('key')
|
|
3901
|
-
.pipe(
|
|
4261
|
+
.pipe(shareReplay({ bufferSize: 1, refCount: true }));
|
|
4262
|
+
this.caseDefinitionItems$ = combineLatest([
|
|
4263
|
+
this.documentService.getAllDefinitions(),
|
|
4264
|
+
toObservable(this._$selectedCaseDefinitionName),
|
|
4265
|
+
this._languageChange$,
|
|
4266
|
+
]).pipe(map(([definitions, selectedCaseDefinitionName]) => [
|
|
4267
|
+
{
|
|
4268
|
+
content: this.widgetTranslationService.instant('allCaseDefinitions', this.dataSourceKey),
|
|
4269
|
+
selected: selectedCaseDefinitionName === undefined,
|
|
4270
|
+
caseDefinitionName: undefined,
|
|
4271
|
+
},
|
|
4272
|
+
...definitions.content.map(definition => ({
|
|
4273
|
+
content: definition.id.name,
|
|
4274
|
+
selected: definition.id.name === selectedCaseDefinitionName,
|
|
4275
|
+
caseDefinitionName: definition.id.name,
|
|
4276
|
+
})),
|
|
4277
|
+
]));
|
|
4278
|
+
this.operatorItems$ = this._languageChange$.pipe(map(() => EDITABLE_CONDITION_OPERATORS.map(operator => ({
|
|
3902
4279
|
id: operator,
|
|
3903
4280
|
content: this.translateService.instant('condition.operator.' + operator),
|
|
3904
4281
|
selected: false,
|
|
3905
4282
|
}))));
|
|
3906
|
-
this.
|
|
3907
|
-
|
|
3908
|
-
|
|
4283
|
+
this.unsupportedConditionsNotification$ = this._languageChange$.pipe(map(() => ({
|
|
4284
|
+
type: 'info',
|
|
4285
|
+
lowContrast: true,
|
|
4286
|
+
title: this.widgetTranslationService.instant('unsupportedConditionsNotification', this.dataSourceKey),
|
|
4287
|
+
showClose: false,
|
|
4288
|
+
})));
|
|
3909
4289
|
this._subscriptions = new Subscription();
|
|
3910
4290
|
}
|
|
3911
4291
|
ngOnInit() {
|
|
3912
|
-
this.
|
|
4292
|
+
this._subscriptions.add(this.conditionsForm.valueChanges.subscribe(() => this.emit()));
|
|
4293
|
+
this.emit();
|
|
3913
4294
|
}
|
|
3914
4295
|
ngOnDestroy() {
|
|
3915
4296
|
this._subscriptions.unsubscribe();
|
|
3916
4297
|
}
|
|
3917
|
-
|
|
3918
|
-
if (
|
|
3919
|
-
|
|
3920
|
-
}
|
|
3921
|
-
else {
|
|
3922
|
-
this.queryConditions.setValue(values.map(value => ({
|
|
3923
|
-
queryPath: value.key,
|
|
3924
|
-
queryOperator: value.dropdown,
|
|
3925
|
-
queryValue: value.value,
|
|
3926
|
-
})));
|
|
4298
|
+
caseDefinitionSelected(event) {
|
|
4299
|
+
if (!event) {
|
|
4300
|
+
return;
|
|
3927
4301
|
}
|
|
4302
|
+
this._$selectedCaseDefinitionName.set(event.item?.caseDefinitionName ?? undefined);
|
|
4303
|
+
this.emit();
|
|
4304
|
+
}
|
|
4305
|
+
/** Rows are a form control, so the multi input follows the form, not a [disabled] binding. */
|
|
4306
|
+
applyDisabledState() {
|
|
4307
|
+
this.$disabled()
|
|
4308
|
+
? this.conditionsForm.disable({ emitEvent: false })
|
|
4309
|
+
: this.conditionsForm.enable({ emitEvent: false });
|
|
4310
|
+
}
|
|
4311
|
+
emit() {
|
|
4312
|
+
const { node } = serializeConditionGroup(this.conditionsForm.getRawValue());
|
|
4313
|
+
this.configurationEvent.emit({
|
|
4314
|
+
// A disabled form is neither valid nor invalid, so a read-only configuration is not reported
|
|
4315
|
+
// as an incomplete one.
|
|
4316
|
+
valid: !this.conditionsForm.invalid,
|
|
4317
|
+
data: {
|
|
4318
|
+
caseDefinitionName: this._$selectedCaseDefinitionName() ?? undefined,
|
|
4319
|
+
// Emitted as a single root node so that the operator of the outermost group survives a
|
|
4320
|
+
// save/reload round-trip. An empty root is omitted entirely: the backend rejects empty
|
|
4321
|
+
// `and`/`or` groups.
|
|
4322
|
+
conditions: node ? [node] : [],
|
|
4323
|
+
},
|
|
4324
|
+
});
|
|
3928
4325
|
}
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
}
|
|
3932
|
-
openFormSubscription() {
|
|
3933
|
-
this._subscriptions.add(combineLatest([
|
|
3934
|
-
this.form.valueChanges.pipe(startWith(this.form.value)),
|
|
3935
|
-
this.allConditionsValid$,
|
|
3936
|
-
]).subscribe(([formValue, allConditionsValid]) => {
|
|
3937
|
-
this.configurationEvent.emit({
|
|
3938
|
-
valid: this.form.valid && allConditionsValid,
|
|
3939
|
-
data: formValue,
|
|
3940
|
-
});
|
|
3941
|
-
}));
|
|
3942
|
-
}
|
|
3943
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TaskCountConfigurationComponent, deps: [{ token: i1$3.FormBuilder }, { token: i3$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3944
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: TaskCountConfigurationComponent, isStandalone: false, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<form\n class=\"task-count-configuration-form\"\n *ngIf=\"{operatorItems: operatorItems$} as obs\"\n [formGroup]=\"form\"\n>\n <div class=\"form__element conditions-multi-input\">\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n <valtimo-carbon-multi-input\n [addRowText]=\"'addCondition' | widgetTranslate: dataSourceKey | async\"\n [defaultValues]=\"defaultConditionValues$ | async\"\n [dropdownColumnTitle]=\"'operator' | widgetTranslate: dataSourceKey | async\"\n [dropdownItems]=\"operatorItems$ | async\"\n [fullWidth]=\"true\"\n [initialAmountOfRows]=\"0\"\n [keyColumnTitle]=\"'path' | widgetTranslate: dataSourceKey | async\"\n [minimumAmountOfRows]=\"0\"\n [valueColumnTitle]=\"'value' | widgetTranslate: dataSourceKey | async\"\n type=\"keyDropdownValue\"\n (allValuesValidEvent)=\"onAllConditionsValid($event)\"\n (valueChange)=\"conditionsValueChange($event)\"\n ></valtimo-carbon-multi-input>\n </div>\n</form>\n", styles: ["::ng-deep .task-count-configuration-form .conditions-label{margin-bottom:16px}::ng-deep .task-count-configuration-form .conditions-multi-input .cds--form__helper-text{font-style:italic}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i1$1.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["addRowText", "addButtonType", "addRowTranslationKey", "arbitraryAmountTitles", "arbitraryValueAmount", "defaultValues", "deleteRowText", "deleteRowTranslationKey", "disabled", "dropdownColumnTitle", "dropdownItems", "dropdownWidth", "fullWidth", "hideAddButton", "hideDeleteButton", "initialAmountOfRows", "keyColumnTitle", "margin", "maxRows", "minimumAmountOfRows", "name", "required", "title", "titleTranslationKey", "tooltip", "type", "valueColumnTitle", "valuePathSelectorCaseDefinitionKey", "valuePathSelectorPrefixes", "valuePathSelectorShowCaseDefinitionSelector", "valuePathSelectorNotation", "keyColumnFlex", "dropdownColumnFlex", "valueColumnFlex"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
4326
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TaskCountConfigurationComponent, deps: [{ token: i2$2.DocumentService }, { token: i3$1.TranslateService }, { token: WidgetTranslationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4327
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TaskCountConfigurationComponent, isStandalone: false, selector: "ng-component", inputs: { dataSourceKey: "dataSourceKey", disabled: "disabled", prefillConfiguration: "prefillConfiguration" }, outputs: { configurationEvent: "configurationEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"task-count-configuration-form\">\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n [attr.data-test-id]=\"testIds.caseDefinitionDropdown\"\n [disabled]=\"$disabled()\"\n [helperText]=\"'caseDefinitionNameHelperText' | widgetTranslate: dataSourceKey | async\"\n [label]=\"'caseDefinitionName' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"caseDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"(caseDefinitionItems$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n @if (hasUnsupportedConditions$ | async) {\n <div class=\"form__element\">\n <cds-inline-notification\n [notificationObj]=\"unsupportedConditionsNotification$ | async\"\n ></cds-inline-notification>\n </div>\n }\n\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n\n <valtimo-task-count-condition-group\n [dataSourceKey]=\"dataSourceKey\"\n [disabled]=\"$disabled()\"\n [group]=\"conditionsForm\"\n [operatorItems]=\"(operatorItems$ | async) || []\"\n [root]=\"true\"\n ></valtimo-task-count-condition-group>\n</div>\n", styles: ["::ng-deep .task-count-configuration-form{margin-bottom:24px}::ng-deep .task-count-configuration-form .form__element{margin-bottom:16px}::ng-deep .task-count-configuration-form .conditions-label{display:flex;flex-direction:column;margin-bottom:16px}::ng-deep .task-count-configuration-form .conditions-label .cds--form__helper-text{font-style:italic}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "component", type: i4.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i4.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i4.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "component", type: i4.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }, { kind: "component", type: TaskCountConditionGroupComponent, selector: "valtimo-task-count-condition-group", inputs: ["group", "dataSourceKey", "disabled", "operatorItems", "root"], outputs: ["deleteGroupEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: WidgetTranslatePipe, name: "widgetTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3945
4328
|
}
|
|
3946
4329
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TaskCountConfigurationComponent, decorators: [{
|
|
3947
4330
|
type: Component,
|
|
3948
|
-
args: [{ standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-
|
|
3949
|
-
}], ctorParameters: () => [{ type:
|
|
4331
|
+
args: [{ standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2026 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"task-count-configuration-form\">\n <div class=\"form__element\">\n <cds-dropdown\n [appendInline]=\"true\"\n [attr.data-test-id]=\"testIds.caseDefinitionDropdown\"\n [disabled]=\"$disabled()\"\n [helperText]=\"'caseDefinitionNameHelperText' | widgetTranslate: dataSourceKey | async\"\n [label]=\"'caseDefinitionName' | widgetTranslate: dataSourceKey | async\"\n (selected)=\"caseDefinitionSelected($event)\"\n >\n <cds-dropdown-list [items]=\"(caseDefinitionItems$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n\n @if (hasUnsupportedConditions$ | async) {\n <div class=\"form__element\">\n <cds-inline-notification\n [notificationObj]=\"unsupportedConditionsNotification$ | async\"\n ></cds-inline-notification>\n </div>\n }\n\n <cds-label\n [helperText]=\"'conditionsHelperText' | widgetTranslate: dataSourceKey | async\"\n class=\"conditions-label\"\n >{{ 'conditions' | widgetTranslate: dataSourceKey | async }}</cds-label\n >\n\n <valtimo-task-count-condition-group\n [dataSourceKey]=\"dataSourceKey\"\n [disabled]=\"$disabled()\"\n [group]=\"conditionsForm\"\n [operatorItems]=\"(operatorItems$ | async) || []\"\n [root]=\"true\"\n ></valtimo-task-count-condition-group>\n</div>\n", styles: ["::ng-deep .task-count-configuration-form{margin-bottom:24px}::ng-deep .task-count-configuration-form .form__element{margin-bottom:16px}::ng-deep .task-count-configuration-form .conditions-label{display:flex;flex-direction:column;margin-bottom:16px}::ng-deep .task-count-configuration-form .conditions-label .cds--form__helper-text{font-style:italic}\n/*!\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
4332
|
+
}], ctorParameters: () => [{ type: i2$2.DocumentService }, { type: i3$1.TranslateService }, { type: WidgetTranslationService }], propDecorators: { dataSourceKey: [{
|
|
3950
4333
|
type: Input
|
|
3951
4334
|
}], disabled: [{
|
|
3952
4335
|
type: Input
|
|
@@ -3989,7 +4372,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
3989
4372
|
*/
|
|
3990
4373
|
|
|
3991
4374
|
/*
|
|
3992
|
-
* Copyright 2015-
|
|
4375
|
+
* Copyright 2015-2026 Ritense BV, the Netherlands.
|
|
3993
4376
|
*
|
|
3994
4377
|
* Licensed under EUPL, Version 1.2 (the "License");
|
|
3995
4378
|
* you may not use this file except in compliance with the License.
|
|
@@ -4041,30 +4424,54 @@ const taskCountSpecification = {
|
|
|
4041
4424
|
translations: {
|
|
4042
4425
|
de: {
|
|
4043
4426
|
title: 'Aufgabenanzahl',
|
|
4044
|
-
path: 'Pfad',
|
|
4427
|
+
path: 'Pfad (erforderlich)',
|
|
4045
4428
|
operator: 'Operator',
|
|
4046
4429
|
value: 'Wert',
|
|
4047
|
-
|
|
4048
|
-
|
|
4430
|
+
caseDefinitionName: 'Falltyp',
|
|
4431
|
+
caseDefinitionNameHelperText: 'Optional. Zählt nur Aufgaben, die zu diesem Falltyp gehören.',
|
|
4432
|
+
allCaseDefinitions: 'Alle Falltypen',
|
|
4433
|
+
conditions: 'Bedingungen (optional)',
|
|
4434
|
+
conditionsHelperText: `Geben Sie optionale Bedingungen zum Abrufen der Anzahl der Aufgaben. ${CONDITIONS_HELPER_TEXTS.DE('task:assignee')} Bedingungen innerhalb einer Gruppe werden mit dem Operator der Gruppe verknüpft.`,
|
|
4049
4435
|
addCondition: 'Bedingung hinzufügen',
|
|
4436
|
+
and: 'UND',
|
|
4437
|
+
or: 'ODER',
|
|
4438
|
+
addGroup: 'Bedingungsgruppe hinzufügen',
|
|
4439
|
+
deleteGroup: 'Bedingungsgruppe löschen',
|
|
4440
|
+
unsupportedConditionsNotification: 'Dieses Widget enthält Bedingungen, die nur über Konfigurationsdateien bearbeitet werden können. Sie bleiben beim Speichern erhalten.',
|
|
4050
4441
|
},
|
|
4051
4442
|
en: {
|
|
4052
4443
|
title: 'Task count',
|
|
4053
4444
|
path: 'Path (required)',
|
|
4054
4445
|
operator: 'Operator',
|
|
4055
4446
|
value: 'Value',
|
|
4056
|
-
|
|
4057
|
-
|
|
4447
|
+
caseDefinitionName: 'Case type',
|
|
4448
|
+
caseDefinitionNameHelperText: 'Optional. Only counts tasks that belong to this case type.',
|
|
4449
|
+
allCaseDefinitions: 'All case types',
|
|
4450
|
+
conditions: 'Conditions (optional)',
|
|
4451
|
+
conditionsHelperText: `Specify optional conditions for retrieving the number of tasks. ${CONDITIONS_HELPER_TEXTS.EN('task:assignee')} Conditions within a group are combined using the operator of that group.`,
|
|
4058
4452
|
addCondition: 'Add condition',
|
|
4453
|
+
and: 'AND',
|
|
4454
|
+
or: 'OR',
|
|
4455
|
+
addGroup: 'Add condition group',
|
|
4456
|
+
deleteGroup: 'Delete condition group',
|
|
4457
|
+
unsupportedConditionsNotification: 'This widget contains conditions that can only be edited through configuration files. They are preserved when you save.',
|
|
4059
4458
|
},
|
|
4060
4459
|
nl: {
|
|
4061
4460
|
title: 'Aantal taken',
|
|
4062
|
-
path: 'Pad',
|
|
4461
|
+
path: 'Pad (verplicht)',
|
|
4063
4462
|
operator: 'Operator',
|
|
4064
4463
|
value: 'Waarde',
|
|
4065
|
-
|
|
4066
|
-
|
|
4464
|
+
caseDefinitionName: 'Zaaktype',
|
|
4465
|
+
caseDefinitionNameHelperText: 'Optioneel. Telt alleen taken die bij dit zaaktype horen.',
|
|
4466
|
+
allCaseDefinitions: 'Alle zaaktypes',
|
|
4467
|
+
conditions: 'Condities (optioneel)',
|
|
4468
|
+
conditionsHelperText: `Geef optionele condities op voor het ophalen van het aantal taken. ${CONDITIONS_HELPER_TEXTS.NL('task:assignee')} Condities binnen een groep worden gecombineerd met de operator van die groep.`,
|
|
4067
4469
|
addCondition: 'Conditie toevoegen',
|
|
4470
|
+
and: 'EN',
|
|
4471
|
+
or: 'OF',
|
|
4472
|
+
addGroup: 'Conditiegroep toevoegen',
|
|
4473
|
+
deleteGroup: 'Conditiegroep verwijderen',
|
|
4474
|
+
unsupportedConditionsNotification: 'Dit widget bevat condities die alleen via configuratiebestanden bewerkt kunnen worden. Ze blijven behouden bij het opslaan.',
|
|
4068
4475
|
},
|
|
4069
4476
|
},
|
|
4070
4477
|
};
|
|
@@ -4091,13 +4498,27 @@ class TaskCountDataSourceModule {
|
|
|
4091
4498
|
WidgetTranslatePipeModule,
|
|
4092
4499
|
InputModule,
|
|
4093
4500
|
DropdownModule,
|
|
4094
|
-
CarbonMultiInputModule
|
|
4501
|
+
CarbonMultiInputModule,
|
|
4502
|
+
ButtonModule,
|
|
4503
|
+
ContentSwitcherModule,
|
|
4504
|
+
IconModule,
|
|
4505
|
+
LayerModule,
|
|
4506
|
+
NotificationModule,
|
|
4507
|
+
TilesModule,
|
|
4508
|
+
TaskCountConditionGroupComponent], exports: [TaskCountConditionGroupComponent, TaskCountConfigurationComponent] }); }
|
|
4095
4509
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TaskCountDataSourceModule, providers: [{ provide: DATA_SOURCE_TOKEN, useValue: taskCountSpecification, multi: true }], imports: [CommonModule,
|
|
4096
4510
|
ReactiveFormsModule,
|
|
4097
4511
|
WidgetTranslatePipeModule,
|
|
4098
4512
|
InputModule,
|
|
4099
4513
|
DropdownModule,
|
|
4100
|
-
CarbonMultiInputModule
|
|
4514
|
+
CarbonMultiInputModule,
|
|
4515
|
+
ButtonModule,
|
|
4516
|
+
ContentSwitcherModule,
|
|
4517
|
+
IconModule,
|
|
4518
|
+
LayerModule,
|
|
4519
|
+
NotificationModule,
|
|
4520
|
+
TilesModule,
|
|
4521
|
+
TaskCountConditionGroupComponent] }); }
|
|
4101
4522
|
}
|
|
4102
4523
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TaskCountDataSourceModule, decorators: [{
|
|
4103
4524
|
type: NgModule,
|
|
@@ -4110,8 +4531,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
4110
4531
|
InputModule,
|
|
4111
4532
|
DropdownModule,
|
|
4112
4533
|
CarbonMultiInputModule,
|
|
4534
|
+
ButtonModule,
|
|
4535
|
+
ContentSwitcherModule,
|
|
4536
|
+
IconModule,
|
|
4537
|
+
LayerModule,
|
|
4538
|
+
NotificationModule,
|
|
4539
|
+
TilesModule,
|
|
4540
|
+
TaskCountConditionGroupComponent,
|
|
4113
4541
|
],
|
|
4114
|
-
exports: [TaskCountConfigurationComponent],
|
|
4542
|
+
exports: [TaskCountConditionGroupComponent, TaskCountConfigurationComponent],
|
|
4115
4543
|
providers: [{ provide: DATA_SOURCE_TOKEN, useValue: taskCountSpecification, multi: true }],
|
|
4116
4544
|
}]
|
|
4117
4545
|
}] });
|
|
@@ -4356,5 +4784,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
|
|
|
4356
4784
|
* Generated bundle index. Do not edit.
|
|
4357
4785
|
*/
|
|
4358
4786
|
|
|
4359
|
-
export { BigNumberConfigurationComponent, BigNumberDisplayComponent, BigNumberModule, CaseCountConfigurationComponent, CaseCountDataSourceModule, CaseCountsConfigurationComponent, CaseCountsDataSourceModule, CaseGroupByConfigurationComponent, CaseGroupByDataSourceModule, DASHBOARD_TEST_IDS, DASHBOARD_WIDGET_TEST_ID_PREFIX, DATA_FEATURES, DATA_SOURCE_TOKEN, DISPLAY_TYPE_TOKEN, DashboardComponent, DashboardModule, DashboardService, DataSourcesModule, DisplayWidgetTypesModule, DonutConfigurationComponent, DonutDisplayComponent, DonutModule, GaugeConfigurationComponent, GaugeDisplayComponent, GaugeModule, HttpLoaderFactory, MeterConfigurationComponent, MeterDisplayComponent, MeterModule, TaskCountConfigurationComponent, TaskCountDataSourceModule, WIDGET_1X_HEIGHT, WIDGET_1X_MIN_WIDTH, WidgetDashboardComponent, WidgetDashboardContentComponent, WidgetService, WidgetSeverity, WidgetTranslatePipe, WidgetTranslatePipeModule, WidgetTranslationService, bigNumberSpecification, caseCountDataSourceSpecification, caseCountsDataSourceSpecification, caseGroupByDataSourceSpecification, donutSpecification, gaugeSpecification, meterSpecification, taskCountSpecification };
|
|
4787
|
+
export { BigNumberConfigurationComponent, BigNumberDisplayComponent, BigNumberModule, CaseCountConfigurationComponent, CaseCountDataSourceModule, CaseCountsConfigurationComponent, CaseCountsDataSourceModule, CaseGroupByConfigurationComponent, CaseGroupByDataSourceModule, DASHBOARD_TEST_IDS, DASHBOARD_WIDGET_TEST_ID_PREFIX, DATA_FEATURES, DATA_SOURCE_TOKEN, DISPLAY_TYPE_TOKEN, DashboardComponent, DashboardModule, DashboardService, DataSourcesModule, DisplayWidgetTypesModule, DonutConfigurationComponent, DonutDisplayComponent, DonutModule, GaugeConfigurationComponent, GaugeDisplayComponent, GaugeModule, HttpLoaderFactory, MeterConfigurationComponent, MeterDisplayComponent, MeterModule, TaskCountConditionGroupComponent, TaskCountConfigurationComponent, TaskCountDataSourceModule, WIDGET_1X_HEIGHT, WIDGET_1X_MIN_WIDTH, WidgetDashboardComponent, WidgetDashboardContentComponent, WidgetService, WidgetSeverity, WidgetTranslatePipe, WidgetTranslatePipeModule, WidgetTranslationService, bigNumberSpecification, caseCountDataSourceSpecification, caseCountsDataSourceSpecification, caseGroupByDataSourceSpecification, donutSpecification, gaugeSpecification, meterSpecification, taskCountSpecification };
|
|
4360
4788
|
//# sourceMappingURL=valtimo-dashboard.mjs.map
|