@yuuvis/client-framework 0.8.0 → 0.9.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/actions/lib/actions/delete-action/delete-action.d.ts +1 -0
- package/common/index.d.ts +1 -0
- package/common/lib/services/error-messages/error-messages.service.d.ts +7 -0
- package/common/lib/services/index.d.ts +1 -0
- package/esm2022/actions/lib/actions/delete-action/delete-action.mjs +4 -10
- package/esm2022/common/index.mjs +2 -1
- package/esm2022/common/lib/directives/drag-select.directive.mjs +2 -2
- package/esm2022/common/lib/services/error-messages/error-messages.service.mjs +68 -0
- package/esm2022/common/lib/services/index.mjs +2 -0
- package/esm2022/forms/index.mjs +9 -8
- package/esm2022/forms/lib/elements/data-grid/data-grid/data-grid.component.mjs +172 -0
- package/esm2022/forms/lib/elements/data-grid/edit-table-data/edit-data.component.mjs +95 -0
- package/esm2022/forms/lib/elements/data-grid/model/data-grid.interface.mjs +9 -0
- package/esm2022/forms/lib/elements/index.mjs +11 -0
- package/esm2022/forms/lib/elements/organization/organization.component.mjs +47 -29
- package/esm2022/icons/lib/icons.mjs +3 -2
- package/esm2022/metadata-form/lib/metadata-default-templates/metadata-default-templates.component.mjs +5 -4
- package/esm2022/metadata-form/lib/metadata-form-element-registry.service.mjs +1 -1
- package/esm2022/metadata-form/lib/metadata-form-field/metadata-form-field.component.mjs +7 -52
- package/esm2022/object-details/index.mjs +2 -1
- package/esm2022/object-details/lib/object-metadata/object-metadata.component.mjs +5 -4
- package/esm2022/object-details/lib/retention-badge/retention-badge.component.mjs +27 -0
- package/esm2022/object-form/index.mjs +1 -1
- package/esm2022/object-form/lib/object-form.component.mjs +2 -1
- package/esm2022/object-form/lib/object-form.service.mjs +5 -2
- package/esm2022/object-summary/lib/object-summary/object-summary.component.mjs +15 -13
- package/esm2022/pagination/lib/pagination.component.mjs +4 -6
- package/esm2022/sequence-list/index.mjs +1 -3
- package/esm2022/sequence-list/lib/sequence-list.component.mjs +11 -16
- package/esm2022/sequence-list/lib/sequence-list.interface.mjs +1 -1
- package/esm2022/tile-list/lib/tile/tile.component.mjs +3 -3
- package/esm2022/tile-list/lib/tile-extension/extensions/email.extension.mjs +1 -1
- package/fesm2022/yuuvis-client-framework-actions.mjs +3 -9
- package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-common.mjs +69 -4
- package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-forms.mjs +1194 -909
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-icons.mjs +2 -1
- package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs +10 -55
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-details.mjs +26 -5
- package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-form.mjs +5 -1
- package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-summary.mjs +14 -12
- package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-pagination.mjs +3 -5
- package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs +17 -296
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-tile-list.mjs +2 -2
- package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
- package/forms/index.d.ts +1 -7
- package/forms/lib/elements/data-grid/data-grid/data-grid.component.d.ts +38 -0
- package/forms/lib/elements/data-grid/edit-table-data/edit-data.component.d.ts +21 -0
- package/forms/lib/elements/data-grid/model/data-grid.interface.d.ts +14 -0
- package/forms/lib/elements/index.d.ts +10 -0
- package/forms/lib/elements/organization/organization.component.d.ts +13 -4
- package/metadata-form/lib/metadata-form-field/metadata-form-field.component.d.ts +0 -1
- package/object-details/index.d.ts +1 -0
- package/object-details/lib/retention-badge/retention-badge.component.d.ts +12 -0
- package/package.json +10 -10
- package/sequence-list/index.d.ts +0 -2
- package/sequence-list/lib/sequence-list.component.d.ts +2 -2
- package/sequence-list/lib/sequence-list.interface.d.ts +5 -4
- package/styles/client-framework.scss +55 -18
- package/esm2022/sequence-list/lib/sequence-list-template-manage/sequence-list-template-manage.component.mjs +0 -183
- package/esm2022/sequence-list/lib/sequence-list-templates/sequence-list-templates.component.mjs +0 -114
- package/sequence-list/lib/sequence-list-template-manage/sequence-list-template-manage.component.d.ts +0 -52
- package/sequence-list/lib/sequence-list-templates/sequence-list-templates.component.d.ts +0 -36
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, viewChild, input, signal, forwardRef, Component, ViewChild
|
|
3
|
-
import * as i1$1 from '@angular/common';
|
|
2
|
+
import { inject, viewChild, input, signal, forwardRef, Component, ViewChild } from '@angular/core';
|
|
4
3
|
import { CommonModule } from '@angular/common';
|
|
5
4
|
import * as i1 from '@yuuvis/components/datepicker';
|
|
6
5
|
import { YvcDatepickerModule } from '@yuuvis/components/datepicker';
|
|
7
6
|
import * as i2 from '@yuuvis/components/icon';
|
|
8
7
|
import { ICONS, YvcIconModule } from '@yuuvis/components/icon';
|
|
9
|
-
import { YvcOverlayService
|
|
10
|
-
import * as i2$
|
|
11
|
-
import { NG_VALUE_ACCESSOR, NonNullableFormBuilder, Validators, NG_VALIDATORS, ReactiveFormsModule
|
|
12
|
-
import * as
|
|
13
|
-
import { TranslateService, LocaleDatePipe, TranslateModule
|
|
8
|
+
import { YvcOverlayService } from '@yuuvis/components/overlay';
|
|
9
|
+
import * as i2$1 from '@angular/forms';
|
|
10
|
+
import { NG_VALUE_ACCESSOR, NonNullableFormBuilder, Validators, NG_VALIDATORS, ReactiveFormsModule } from '@angular/forms';
|
|
11
|
+
import * as i1$1 from '@yuuvis/client-core';
|
|
12
|
+
import { TranslateService, LocaleDatePipe, TranslateModule } from '@yuuvis/client-core';
|
|
14
13
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
15
|
-
import { OrganizationComponent
|
|
14
|
+
import { OrganizationComponent } from '@yuuvis/client-framework/forms';
|
|
16
15
|
import { YUV_ICONS } from '@yuuvis/client-framework/icons';
|
|
17
|
-
import * as i4 from '@yuuvis/components/common';
|
|
18
|
-
import { YvcCommonModule } from '@yuuvis/components/common';
|
|
19
16
|
|
|
20
17
|
class DueDatePickerComponent {
|
|
21
18
|
constructor() {
|
|
@@ -130,6 +127,7 @@ class SequenceListComponent {
|
|
|
130
127
|
items: this.#fb.array([this.#generateSequenceItem()])
|
|
131
128
|
});
|
|
132
129
|
this.entries = [];
|
|
130
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
133
131
|
this.propagateChange = (_) => { };
|
|
134
132
|
this.sequenceForm.valueChanges.pipe(takeUntilDestroyed()).subscribe(() => {
|
|
135
133
|
this.#propagate();
|
|
@@ -138,7 +136,7 @@ class SequenceListComponent {
|
|
|
138
136
|
#generateSequenceItem(sequenceItem) {
|
|
139
137
|
return this.#fb.group({
|
|
140
138
|
title: [sequenceItem?.title || '', Validators.required],
|
|
141
|
-
nextAssignee: [sequenceItem?.nextAssignee
|
|
139
|
+
nextAssignee: [sequenceItem?.nextAssignee || '', Validators.required],
|
|
142
140
|
expiryDatetime: [sequenceItem?.expiryDatetime || undefined]
|
|
143
141
|
});
|
|
144
142
|
}
|
|
@@ -158,6 +156,7 @@ class SequenceListComponent {
|
|
|
158
156
|
const ml = this.maxLength();
|
|
159
157
|
this.maxLengthExceeded = ml !== undefined && this.formItemArray.length >= ml;
|
|
160
158
|
}
|
|
159
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
161
160
|
registerOnTouched() { }
|
|
162
161
|
#propagate() {
|
|
163
162
|
const res = [];
|
|
@@ -175,6 +174,9 @@ class SequenceListComponent {
|
|
|
175
174
|
}
|
|
176
175
|
writeValue(value) {
|
|
177
176
|
this.entries = value || [];
|
|
177
|
+
this.formItemArray.clear();
|
|
178
|
+
if (this.entries.length === 0)
|
|
179
|
+
this.addItem();
|
|
178
180
|
this.entries.forEach((entry) => {
|
|
179
181
|
this.formItemArray.push(this.#generateSequenceItem(entry));
|
|
180
182
|
});
|
|
@@ -207,20 +209,11 @@ class SequenceListComponent {
|
|
|
207
209
|
useExisting: forwardRef(() => SequenceListComponent),
|
|
208
210
|
multi: true
|
|
209
211
|
}
|
|
210
|
-
], viewQueries: [{ propertyName: "orgComponent", first: true, predicate: OrganizationComponent, descendants: true }], ngImport: i0, template: "<form [formGroup]=\"sequenceForm\">\n <section formArrayName=\"items\">\n @for (item of sequenceForm.controls.items.controls; track itemIndex; let itemIndex = $index) {\n <div class=\"item\" [formGroup]=\"item\">\n <button class=\"add before\" type=\"button\" [disabled]=\"maxLengthExceeded\" (click)=\"addItemAt($index)\"><yvc-icon [svg]=\"icons.add\"></yvc-icon></button>\n <span class=\"index\" [attr.data-index]=\"itemIndex + 1\"></span>\n\n <div class=\"item-form\">\n <button class=\"remove\" type=\"button\" (click)=\"removeItem($index)\"
|
|
212
|
+
], viewQueries: [{ propertyName: "orgComponent", first: true, predicate: OrganizationComponent, descendants: true }], ngImport: i0, template: "<form [formGroup]=\"sequenceForm\">\n <section formArrayName=\"items\">\n @for (item of sequenceForm.controls.items.controls; track itemIndex; let itemIndex = $index) {\n <div class=\"item\" [formGroup]=\"item\">\n <button class=\"add before\" type=\"button\" [disabled]=\"maxLengthExceeded\" (click)=\"addItemAt($index)\"><yvc-icon [svg]=\"icons.add\"></yvc-icon></button>\n <span class=\"index\" [attr.data-index]=\"itemIndex + 1\"></span>\n\n <div class=\"item-form\">\n <button class=\"remove\" type=\"button\" (click)=\"removeItem($index)\" [disabled]=\"sequenceForm.controls.items.controls.length === 1\">\n <yvc-icon [svg]=\"icons.delete\"></yvc-icon>\n </button>\n <input [placeholder]=\"'yuv.sequence-list.form.task' | translate\" [maxLength]=\"128\" formControlName=\"title\" />\n <yuv-organization [title]=\"'yuv.sequence-list.form.nextAssignee' | translate\" [withMetadata]=\"true\" formControlName=\"nextAssignee\">\n </yuv-organization>\n </div>\n @if ($last) {\n <button class=\"add after\" type=\"button\" [disabled]=\"maxLengthExceeded\" (click)=\"addItem()\"><yvc-icon [svg]=\"icons.add\"></yvc-icon></button>\n }\n </div>\n }\n </section>\n</form>\n", styles: [":host{--yvc-form-element-border-color: var(--form-element-border-color, var(--text-color-hint));--yvc-form-element-focus-border-color: var(--form-element-focus-border-color, var(--color-accent));--yvc-form-element-focus-outline-color: var(--form-element-focus-outline-color, rgba(var(--color-accent-rgb), .3));--yvc-form-element-focus-outline-with: var(--form-element-focus-outline-with, 2px);--yvc-form-element-disabled-background-color: var(--form-element-disabled-background-color, rgba(from var(--text-color-body) r g b / .1));--yvc-form-element-disabled-opacity: var(--form-element-disabled-opacity, .8);--_sequence-list-item-background: var(--sequence-list-item-background, var(--panel-background));--_sequence-list-item-border-color: var(--sequence-list-item-border-color, var(--panel-divider-color));--_sequence-list-item-border-radius: var(--sequence-list-item-border-radius, calc(var(--app-pane-padding) / 2));--_sequence-list-line-color: var(--sequence-list-line-color, var(--text-color-hint));--_sequence-list-line-width: var(--sequence-list-line-width, 2px);--_sequence-list-line-item-background: var(--sequence-list-line-item-background, var(--panel-background-lightgrey));--_sequence-list-line-item-border-radius: var(--sequence-list-line-item-border-radius, .25em)}:host form section{margin-inline-end:4px}:host form section button.add{--icon-size: 18px;border-radius:var(--_sequence-list-line-item-border-radius);padding:0;display:flex;align-items:center;justify-content:center;background-color:var(--_sequence-list-line-item-background);border:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color)}:host form section button.add:focus{outline:2px solid rgb(from var(--color-accent) r g b/.5);outline-offset:-2px;border-color:var(--color-accent)}:host form section .item{display:grid;grid-template-columns:6ch 1fr;grid-template-rows:auto auto;column-gap:1em;grid-template-areas:\"addBefore .\" \"index form\" \"addAfter .\"}:host form section .item.ng-invalid.ng-dirty .item-form{border-color:var(--color-error);outline:3px solid rgb(from var(--color-error) r g b/.5)}:host form section .item .add.before{grid-area:addBefore;justify-self:center}:host form section .item .add.after{grid-area:addAfter;justify-self:center}:host form section .item .index{grid-area:index;display:grid;align-items:center;justify-content:center}:host form section .item .index:after{content:attr(data-index);grid-row:1;grid-column:1;background-color:var(--_sequence-list-line-item-background);font-size:var(--font-hint);color:var(--text-color-caption);font-weight:700;border:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color);border-radius:var(--_sequence-list-line-item-border-radius);line-height:1em;padding:1px .25em;outline:3px solid rgb(from var(--_sequence-list-line-color) r g b/.1)}:host form section .item .index:before{content:\"\";grid-row:1;grid-column:1;height:100%;width:calc(50% - var(--_sequence-list-line-width) / 2);border-inline-end:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color)}:host form section .item .item-form{grid-area:form;background-color:var(--_sequence-list-item-background);border:1px solid var(--_sequence-list-item-border-color);border-radius:var(--_sequence-list-item-border-radius);padding:calc(var(--app-pane-padding) / 2);display:grid;column-gap:var(--app-pane-padding);row-gap:4px;grid-template-columns:1fr auto;grid-template-rows:repeat(3,auto);grid-template-areas:\"task remove\" \"user user\" \"date date\"}:host form section .item .item-form input{border:1px solid transparent;border-radius:calc(var(--_sequence-list-item-border-radius) / 2);grid-area:task;outline-offset:0;line-height:1em;padding:calc(var(--app-pane-padding) / 4);background-color:transparent;color:var(--text-color-body)}:host form section .item .item-form input:focus{border-color:var(--yvc-form-element-focus-border-color);outline:var(--yvc-form-element-focus-outline-with) solid var(--yvc-form-element-focus-outline-color)}:host form section .item .item-form yvc-datepicker{--form-element-border-color: transparent;grid-area:date;padding:0;flex-flow:row-reverse}:host form section .item .item-form yuv-organization{--form-element-border-color: transparent;border-radius:calc(var(--_sequence-list-item-border-radius) / 2);border:1px solid var(--form-element-border-color);grid-area:user;flex-flow:row-reverse}:host form section .item .item-form yuv-organization:focus-within{border-color:var(--yvc-form-element-focus-border-color);outline:var(--yvc-form-element-focus-outline-with) solid var(--yvc-form-element-focus-outline-color)}:host form section .item .item-form .remove{--icon-size: 18px;padding:calc(var(--app-pane-padding) / 4);grid-area:remove;padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: OrganizationComponent, selector: "yuv-organization", inputs: ["placeholder", "situation", "multiselect", "classifications", "readonly", "autofocus", "appendTo", "excludeMe", "withMetadata"], outputs: ["userSelect"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i2.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }] }); }
|
|
211
213
|
}
|
|
212
214
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SequenceListComponent, decorators: [{
|
|
213
215
|
type: Component,
|
|
214
|
-
args: [{ selector: 'yuv-sequence-list', standalone: true, imports: [
|
|
215
|
-
CommonModule,
|
|
216
|
-
TranslateModule,
|
|
217
|
-
FormInputComponent,
|
|
218
|
-
StringComponent,
|
|
219
|
-
OrganizationComponent,
|
|
220
|
-
DueDatePickerComponent,
|
|
221
|
-
ReactiveFormsModule,
|
|
222
|
-
YvcIconModule
|
|
223
|
-
], providers: [
|
|
216
|
+
args: [{ selector: 'yuv-sequence-list', standalone: true, imports: [CommonModule, TranslateModule, OrganizationComponent, ReactiveFormsModule, YvcIconModule], providers: [
|
|
224
217
|
{
|
|
225
218
|
provide: NG_VALUE_ACCESSOR,
|
|
226
219
|
useExisting: forwardRef(() => SequenceListComponent),
|
|
@@ -233,287 +226,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
233
226
|
}
|
|
234
227
|
], host: {
|
|
235
228
|
tabindex: '0'
|
|
236
|
-
}, template: "<form [formGroup]=\"sequenceForm\">\n <section formArrayName=\"items\">\n @for (item of sequenceForm.controls.items.controls; track itemIndex; let itemIndex = $index) {\n <div class=\"item\" [formGroup]=\"item\">\n <button class=\"add before\" type=\"button\" [disabled]=\"maxLengthExceeded\" (click)=\"addItemAt($index)\"><yvc-icon [svg]=\"icons.add\"></yvc-icon></button>\n <span class=\"index\" [attr.data-index]=\"itemIndex + 1\"></span>\n\n <div class=\"item-form\">\n <button class=\"remove\" type=\"button\" (click)=\"removeItem($index)\"
|
|
229
|
+
}, template: "<form [formGroup]=\"sequenceForm\">\n <section formArrayName=\"items\">\n @for (item of sequenceForm.controls.items.controls; track itemIndex; let itemIndex = $index) {\n <div class=\"item\" [formGroup]=\"item\">\n <button class=\"add before\" type=\"button\" [disabled]=\"maxLengthExceeded\" (click)=\"addItemAt($index)\"><yvc-icon [svg]=\"icons.add\"></yvc-icon></button>\n <span class=\"index\" [attr.data-index]=\"itemIndex + 1\"></span>\n\n <div class=\"item-form\">\n <button class=\"remove\" type=\"button\" (click)=\"removeItem($index)\" [disabled]=\"sequenceForm.controls.items.controls.length === 1\">\n <yvc-icon [svg]=\"icons.delete\"></yvc-icon>\n </button>\n <input [placeholder]=\"'yuv.sequence-list.form.task' | translate\" [maxLength]=\"128\" formControlName=\"title\" />\n <yuv-organization [title]=\"'yuv.sequence-list.form.nextAssignee' | translate\" [withMetadata]=\"true\" formControlName=\"nextAssignee\">\n </yuv-organization>\n </div>\n @if ($last) {\n <button class=\"add after\" type=\"button\" [disabled]=\"maxLengthExceeded\" (click)=\"addItem()\"><yvc-icon [svg]=\"icons.add\"></yvc-icon></button>\n }\n </div>\n }\n </section>\n</form>\n", styles: [":host{--yvc-form-element-border-color: var(--form-element-border-color, var(--text-color-hint));--yvc-form-element-focus-border-color: var(--form-element-focus-border-color, var(--color-accent));--yvc-form-element-focus-outline-color: var(--form-element-focus-outline-color, rgba(var(--color-accent-rgb), .3));--yvc-form-element-focus-outline-with: var(--form-element-focus-outline-with, 2px);--yvc-form-element-disabled-background-color: var(--form-element-disabled-background-color, rgba(from var(--text-color-body) r g b / .1));--yvc-form-element-disabled-opacity: var(--form-element-disabled-opacity, .8);--_sequence-list-item-background: var(--sequence-list-item-background, var(--panel-background));--_sequence-list-item-border-color: var(--sequence-list-item-border-color, var(--panel-divider-color));--_sequence-list-item-border-radius: var(--sequence-list-item-border-radius, calc(var(--app-pane-padding) / 2));--_sequence-list-line-color: var(--sequence-list-line-color, var(--text-color-hint));--_sequence-list-line-width: var(--sequence-list-line-width, 2px);--_sequence-list-line-item-background: var(--sequence-list-line-item-background, var(--panel-background-lightgrey));--_sequence-list-line-item-border-radius: var(--sequence-list-line-item-border-radius, .25em)}:host form section{margin-inline-end:4px}:host form section button.add{--icon-size: 18px;border-radius:var(--_sequence-list-line-item-border-radius);padding:0;display:flex;align-items:center;justify-content:center;background-color:var(--_sequence-list-line-item-background);border:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color)}:host form section button.add:focus{outline:2px solid rgb(from var(--color-accent) r g b/.5);outline-offset:-2px;border-color:var(--color-accent)}:host form section .item{display:grid;grid-template-columns:6ch 1fr;grid-template-rows:auto auto;column-gap:1em;grid-template-areas:\"addBefore .\" \"index form\" \"addAfter .\"}:host form section .item.ng-invalid.ng-dirty .item-form{border-color:var(--color-error);outline:3px solid rgb(from var(--color-error) r g b/.5)}:host form section .item .add.before{grid-area:addBefore;justify-self:center}:host form section .item .add.after{grid-area:addAfter;justify-self:center}:host form section .item .index{grid-area:index;display:grid;align-items:center;justify-content:center}:host form section .item .index:after{content:attr(data-index);grid-row:1;grid-column:1;background-color:var(--_sequence-list-line-item-background);font-size:var(--font-hint);color:var(--text-color-caption);font-weight:700;border:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color);border-radius:var(--_sequence-list-line-item-border-radius);line-height:1em;padding:1px .25em;outline:3px solid rgb(from var(--_sequence-list-line-color) r g b/.1)}:host form section .item .index:before{content:\"\";grid-row:1;grid-column:1;height:100%;width:calc(50% - var(--_sequence-list-line-width) / 2);border-inline-end:var(--_sequence-list-line-width) solid var(--_sequence-list-line-color)}:host form section .item .item-form{grid-area:form;background-color:var(--_sequence-list-item-background);border:1px solid var(--_sequence-list-item-border-color);border-radius:var(--_sequence-list-item-border-radius);padding:calc(var(--app-pane-padding) / 2);display:grid;column-gap:var(--app-pane-padding);row-gap:4px;grid-template-columns:1fr auto;grid-template-rows:repeat(3,auto);grid-template-areas:\"task remove\" \"user user\" \"date date\"}:host form section .item .item-form input{border:1px solid transparent;border-radius:calc(var(--_sequence-list-item-border-radius) / 2);grid-area:task;outline-offset:0;line-height:1em;padding:calc(var(--app-pane-padding) / 4);background-color:transparent;color:var(--text-color-body)}:host form section .item .item-form input:focus{border-color:var(--yvc-form-element-focus-border-color);outline:var(--yvc-form-element-focus-outline-with) solid var(--yvc-form-element-focus-outline-color)}:host form section .item .item-form yvc-datepicker{--form-element-border-color: transparent;grid-area:date;padding:0;flex-flow:row-reverse}:host form section .item .item-form yuv-organization{--form-element-border-color: transparent;border-radius:calc(var(--_sequence-list-item-border-radius) / 2);border:1px solid var(--form-element-border-color);grid-area:user;flex-flow:row-reverse}:host form section .item .item-form yuv-organization:focus-within{border-color:var(--yvc-form-element-focus-border-color);outline:var(--yvc-form-element-focus-outline-with) solid var(--yvc-form-element-focus-outline-color)}:host form section .item .item-form .remove{--icon-size: 18px;padding:calc(var(--app-pane-padding) / 4);grid-area:remove;padding:0}\n"] }]
|
|
237
230
|
}], ctorParameters: () => [], propDecorators: { orgComponent: [{
|
|
238
231
|
type: ViewChild,
|
|
239
232
|
args: [OrganizationComponent]
|
|
240
233
|
}] } });
|
|
241
234
|
|
|
242
|
-
class SequenceListTemplateManageComponent {
|
|
243
|
-
set selectedTemplate(s) {
|
|
244
|
-
if (!this.pendingChanges.check()) {
|
|
245
|
-
this.pendingTaskId = undefined;
|
|
246
|
-
this._selectedTemplate = s ? { ...s } : undefined;
|
|
247
|
-
if (this._selectedTemplate)
|
|
248
|
-
this.form.patchValue({
|
|
249
|
-
templateName: this._selectedTemplate.id === this.CURRENT_ENTRIES_ID ? '' : this._selectedTemplate.name,
|
|
250
|
-
sequence: [...this._selectedTemplate.sequence]
|
|
251
|
-
}, { emitEvent: false });
|
|
252
|
-
this.form.markAsPristine();
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
get selectedTemplate() {
|
|
256
|
-
return this._selectedTemplate;
|
|
257
|
-
}
|
|
258
|
-
get formErrors() {
|
|
259
|
-
const errors = this.form.get('templateName')?.errors;
|
|
260
|
-
return errors ? Object.keys(errors).map((k) => this.labels.errors[k]) : [];
|
|
261
|
-
}
|
|
262
|
-
constructor() {
|
|
263
|
-
this.backend = inject(BackendService);
|
|
264
|
-
this.overlay = inject(YvcOverlayService);
|
|
265
|
-
this.pendingChanges = inject(PendingChangesService);
|
|
266
|
-
this.fb = inject(FormBuilder);
|
|
267
|
-
this.translate = inject(TranslateService);
|
|
268
|
-
this.DEFAULT_TEMPLATE_STORAGE_SECTION = 'sequencelist';
|
|
269
|
-
this.CURRENT_ENTRIES_ID = 'current';
|
|
270
|
-
this.TEMPLATE_NAME_MAX_LENGTH = 128;
|
|
271
|
-
this.disableSubmit = false;
|
|
272
|
-
this.templates = [];
|
|
273
|
-
this.filterTerm = null;
|
|
274
|
-
this.busy = false;
|
|
275
|
-
this.form = this.fb.group({
|
|
276
|
-
templateName: ['', [Validators.required, Validators.maxLength(this.TEMPLATE_NAME_MAX_LENGTH), this.forbiddenNameValidator()]],
|
|
277
|
-
sequence: [[], Validators.required]
|
|
278
|
-
});
|
|
279
|
-
/**
|
|
280
|
-
* Name of the section to store templates in user service (usersettings)
|
|
281
|
-
*/
|
|
282
|
-
this.storageSection = input(this.DEFAULT_TEMPLATE_STORAGE_SECTION);
|
|
283
|
-
this.currentEntries = input([]);
|
|
284
|
-
// emitted once a template has been selected
|
|
285
|
-
this.templateSelect = output();
|
|
286
|
-
this.cancel = output();
|
|
287
|
-
this.labels = {
|
|
288
|
-
save: this.translate.instant('yuv.sequence-list.template.button.save'),
|
|
289
|
-
saveNew: this.translate.instant('yuv.sequence-list.template.button.saveNew'),
|
|
290
|
-
headline: this.translate.instant('yuv.sequence-list.template.headline'),
|
|
291
|
-
headlineNew: this.translate.instant('yuv.sequence-list.template.headlineNew'),
|
|
292
|
-
errors: {
|
|
293
|
-
maxlength: this.translate.instant('yuv.object-form-element.error.maxlength', { maxLength: this.TEMPLATE_NAME_MAX_LENGTH }),
|
|
294
|
-
forbiddenName: this.translate.instant('yuv.sequence-list.template.errors.forbiddenName')
|
|
295
|
-
}
|
|
296
|
-
};
|
|
297
|
-
this.form.statusChanges.pipe(takeUntilDestroyed()).subscribe((res) => {
|
|
298
|
-
if (this.form.dirty && !this.pendingChanges.hasPendingTask(this.pendingTaskId || ' ')) {
|
|
299
|
-
this.pendingTaskId = this.pendingChanges.startTask(this.translate.instant('yuv.sequence-list.template.pending-changes.alert'));
|
|
300
|
-
}
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
forbiddenNameValidator() {
|
|
304
|
-
return (control) => {
|
|
305
|
-
const forbidden = this.templates
|
|
306
|
-
.filter((t) => t.id !== this.selectedTemplate.id)
|
|
307
|
-
.map((t) => t.name)
|
|
308
|
-
.includes(control.value);
|
|
309
|
-
return forbidden ? { forbiddenName: { value: control.value } } : null;
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
selectCurrentEntries() {
|
|
313
|
-
this.selectedTemplate = {
|
|
314
|
-
id: this.CURRENT_ENTRIES_ID,
|
|
315
|
-
name: this.translate.instant('yuv.sequence-list.template.headlineNew'),
|
|
316
|
-
sequence: this.currentEntries() || []
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
applyTemplate() {
|
|
320
|
-
if (this.selectedTemplate)
|
|
321
|
-
this.templateSelect.emit(this.selectedTemplate.sequence);
|
|
322
|
-
}
|
|
323
|
-
deleteTemplate() {
|
|
324
|
-
this.overlay
|
|
325
|
-
.confirm({
|
|
326
|
-
message: this.translate.instant('yuv.sequence-list.template.remove.confirm.message', {
|
|
327
|
-
template: this.selectedTemplate.name
|
|
328
|
-
})
|
|
329
|
-
})
|
|
330
|
-
.subscribe((confirmed) => {
|
|
331
|
-
if (confirmed) {
|
|
332
|
-
this.templates = this.templates.filter((t) => t.id !== this.selectedTemplate.id);
|
|
333
|
-
this.saveTemplates();
|
|
334
|
-
}
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
submit() {
|
|
338
|
-
if (this.selectedTemplate) {
|
|
339
|
-
let selectAfterSave;
|
|
340
|
-
if (this.selectedTemplate.id === this.CURRENT_ENTRIES_ID) {
|
|
341
|
-
// save current list as new template
|
|
342
|
-
const id = Utils.uuid();
|
|
343
|
-
this.templates.push({
|
|
344
|
-
id,
|
|
345
|
-
name: this.form.value.templateName,
|
|
346
|
-
sequence: this.form.value.sequence
|
|
347
|
-
});
|
|
348
|
-
selectAfterSave = id;
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
// update existing template
|
|
352
|
-
const i = this.templates.findIndex((e) => e.id === this.selectedTemplate.id);
|
|
353
|
-
if (i !== -1) {
|
|
354
|
-
this.templates[i] = {
|
|
355
|
-
id: this.selectedTemplate.id,
|
|
356
|
-
name: this.form.value.templateName,
|
|
357
|
-
sequence: this.form.value.sequence
|
|
358
|
-
};
|
|
359
|
-
selectAfterSave = this.selectedTemplate.id;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
this.saveTemplates(selectAfterSave);
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
saveTemplates(templateToBeSelectedAfterSave) {
|
|
366
|
-
this.busy = true;
|
|
367
|
-
this.templates.sort(Utils.sortValues('name', Sort.ASC));
|
|
368
|
-
return this.backend.post(`/users/settings/${this.storageSection}`, { templates: this.templates }).subscribe((res) => {
|
|
369
|
-
this.busy = false;
|
|
370
|
-
this.form.markAsPristine();
|
|
371
|
-
if (this.pendingTaskId)
|
|
372
|
-
this.pendingChanges.finishTask(this.pendingTaskId);
|
|
373
|
-
if (!templateToBeSelectedAfterSave) {
|
|
374
|
-
this.selectedTemplate = undefined;
|
|
375
|
-
}
|
|
376
|
-
else if (templateToBeSelectedAfterSave !== this.selectedTemplate.id) {
|
|
377
|
-
this.selectedTemplate = this.templates.find((t) => templateToBeSelectedAfterSave === t.id);
|
|
378
|
-
}
|
|
379
|
-
}, (err) => (this.busy = false));
|
|
380
|
-
}
|
|
381
|
-
loadTemplates() {
|
|
382
|
-
this.backend.get(`/users/settings/${this.storageSection()}`).subscribe((res) => {
|
|
383
|
-
this.templates = res ? res.templates || [] : [];
|
|
384
|
-
this.templates.sort(Utils.sortValues('name', Sort.ASC));
|
|
385
|
-
this.selectCurrentEntries();
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
ngOnInit() {
|
|
389
|
-
this.loadTemplates();
|
|
390
|
-
}
|
|
391
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SequenceListTemplateManageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
392
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SequenceListTemplateManageComponent, isStandalone: true, selector: "yuv-sequence-list-template-manage", inputs: { storageSection: { classPropertyName: "storageSection", publicName: "storageSection", isSignal: true, isRequired: false, transformFunction: null }, currentEntries: { classPropertyName: "currentEntries", publicName: "currentEntries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { templateSelect: "templateSelect", cancel: "cancel" }, ngImport: i0, template: "<div class=\"template-list\">\n <header>{{ 'yuv.sequence-list.template-list.headline' | translate }}</header>\n\n <!-- current entries -->\n <div class=\"currententries item\" (click)=\"selectCurrentEntries()\" [ngClass]=\"{ current: selectedTemplate?.id === CURRENT_ENTRIES_ID }\">\n {{ 'yuv.sequence-list.template.headlineNew' | translate }}\n </div>\n\n <div class=\"filter\">\n <yuv-form-input [label]=\"'yuv.sequence-list.form.filter' | translate\">\n <yuv-string [(ngModel)]=\"filterTerm\"> </yuv-string>\n </yuv-form-input>\n </div>\n\n <div class=\"templates\">\n @for (tpl of templates | filter: filterTerm : 'name'; track $index) {\n <div class=\"item\" (click)=\"selectedTemplate = tpl\" [ngClass]=\"{ current: selectedTemplate?.id === tpl.id }\">\n {{ tpl.name }}\n </div>\n }\n </div>\n</div>\n\n@if (selectedTemplate) {\n <form class=\"template\" [formGroup]=\"form\">\n <header>{{ selectedTemplate.id !== CURRENT_ENTRIES_ID ? labels.headline : labels.headlineNew }}</header>\n\n <yuv-form-input [label]=\"'yuv.sequence-list.form.templateName' | translate\" [required]=\"true\" [invalid]=\"!!formErrors.length\">\n <yuv-string [autofocus]=\"true\" [required]=\"true\" formControlName=\"templateName\"> </yuv-string>\n </yuv-form-input>\n @for (e of formErrors; track $index) {\n <div class=\"errors\">{{ e }}</div>\n }\n <yuv-sequence-list disable-duedate=\"true\" formControlName=\"sequence\"> </yuv-sequence-list>\n </form>\n}\n\n<div class=\"buttons\">\n <div class=\"left\">\n <button type=\"button\" class=\"secondary\" (click)=\"cancel.emit()\">{{ 'yuv.sequence-list.template.cancel' | translate }}</button>\n </div>\n\n @if (selectedTemplate) {\n <div class=\"right\">\n @if (selectedTemplate.id !== CURRENT_ENTRIES_ID) {\n <button class=\"secondary delete\" type=\"button\" (click)=\"deleteTemplate()\">\n {{ 'yuv.sequence-list.template.button.delete' | translate }}\n </button>\n\n <button class=\"primary apply\" type=\"button\" [disabled]=\"disableSubmit || form.invalid || form.dirty\" (click)=\"applyTemplate()\">\n {{ 'yuv.sequence-list.template.button.apply' | translate }}\n </button>\n }\n\n <!-- save -->\n <button\n class=\"{{ selectedTemplate.id !== CURRENT_ENTRIES_ID ? 'primary' : 'primary' }} save\"\n (click)=\"submit()\"\n type=\"button\"\n [disabled]=\"disableSubmit || form.invalid || form.pristine\"\n >\n {{ selectedTemplate.id !== CURRENT_ENTRIES_ID ? labels.save : labels.saveNew }}\n </button>\n </div>\n }\n</div>\n", styles: [":host{display:grid;height:100%;grid-template-rows:1fr auto;grid-template-columns:200px 1fr;grid-template-areas:\"list template\" \"buttons buttons\"}:host header{font-weight:700;padding:var(--app-pane-padding);border-bottom:1px solid var(--panel-divider-color)}:host .template-list{grid-area:list;display:grid;height:100%;grid-template-rows:auto auto auto 1fr;grid-template-columns:1fr;grid-template-areas:\"header\" \"current\" \"filter\" \"templates\";border-right:1px solid var(--panel-divider-color);overflow:hidden}:host .template-list header{grid-area:header}:host .template-list .filter{grid-area:filter;padding:var(--app-pane-padding);border:1px solid var(--panel-divider-color);border-width:1px 0;background-color:var(--panel-background-lightgrey)}:host .template-list .currententries{grid-area:current}:host .template-list .templates{grid-area:templates;overflow-y:auto}:host .template-list .item{padding:var(--app-pane-padding);cursor:pointer}:host .template-list .item:not(.currententries){border-bottom:1px solid var(--panel-divider-color)}:host .template-list .item:not(.current):hover{background-color:var(--item-focus-background-color)}:host .template-list .item.current{background-color:var(--item-selected-background-color)}:host .template{grid-area:template;display:grid;height:100%;overflow-y:auto;grid-template-rows:auto auto auto 1fr;grid-template-columns:1fr;grid-template-areas:\"headline\" \"name\" \"errors\" \"sequence\"}:host .template h2{grid-area:headline}:host .template yuv-form-input{grid-area:name;margin:var(--app-pane-padding);margin-bottom:calc(var(--app-pane-padding) / 2)}:host .template .errors{grid-area:errors;margin:0 var(--app-pane-padding);color:var(--color-error)}:host .template yuv-sequence-list{grid-area:sequence;margin:var(--app-pane-padding);box-shadow:0 0 1.2em #0000001a}:host .buttons{grid-area:buttons;overflow-x:auto;display:flex;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2 - 2px);border-top:1px solid var(--panel-divider-color)}:host .buttons .left{display:flex}:host .buttons .right{flex:1;display:flex;justify-content:flex-end}:host .buttons .right .save{order:2}:host .buttons .right .delete{order:1}:host .buttons .right .apply{order:3}:host .buttons button{margin:0 2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: YvcOverlayModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }, { kind: "component", type: FormInputComponent, selector: "yuv-form-input", inputs: ["label", "tag", "description", "invalid", "disabled", "required"] }, { kind: "component", type: StringComponent, selector: "yuv-string", inputs: ["multiselect", "rows", "readonly", "autofocus", "classifications", "situation", "regex", "minLength", "maxLength"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SequenceListComponent, selector: "yuv-sequence-list", inputs: ["maxLength"] }, { kind: "ngmodule", type: YuvFormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: YvcCommonModule }, { kind: "pipe", type: i4.FilterPipe, name: "filter" }] }); }
|
|
393
|
-
}
|
|
394
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SequenceListTemplateManageComponent, decorators: [{
|
|
395
|
-
type: Component,
|
|
396
|
-
args: [{ selector: 'yuv-sequence-list-template-manage', standalone: true, imports: [
|
|
397
|
-
CommonModule,
|
|
398
|
-
YvcOverlayModule,
|
|
399
|
-
TranslateModule,
|
|
400
|
-
FormInputComponent,
|
|
401
|
-
StringComponent,
|
|
402
|
-
FormsModule,
|
|
403
|
-
CommonModule,
|
|
404
|
-
SequenceListComponent,
|
|
405
|
-
YuvFormsModule,
|
|
406
|
-
ReactiveFormsModule,
|
|
407
|
-
YvcCommonModule
|
|
408
|
-
], template: "<div class=\"template-list\">\n <header>{{ 'yuv.sequence-list.template-list.headline' | translate }}</header>\n\n <!-- current entries -->\n <div class=\"currententries item\" (click)=\"selectCurrentEntries()\" [ngClass]=\"{ current: selectedTemplate?.id === CURRENT_ENTRIES_ID }\">\n {{ 'yuv.sequence-list.template.headlineNew' | translate }}\n </div>\n\n <div class=\"filter\">\n <yuv-form-input [label]=\"'yuv.sequence-list.form.filter' | translate\">\n <yuv-string [(ngModel)]=\"filterTerm\"> </yuv-string>\n </yuv-form-input>\n </div>\n\n <div class=\"templates\">\n @for (tpl of templates | filter: filterTerm : 'name'; track $index) {\n <div class=\"item\" (click)=\"selectedTemplate = tpl\" [ngClass]=\"{ current: selectedTemplate?.id === tpl.id }\">\n {{ tpl.name }}\n </div>\n }\n </div>\n</div>\n\n@if (selectedTemplate) {\n <form class=\"template\" [formGroup]=\"form\">\n <header>{{ selectedTemplate.id !== CURRENT_ENTRIES_ID ? labels.headline : labels.headlineNew }}</header>\n\n <yuv-form-input [label]=\"'yuv.sequence-list.form.templateName' | translate\" [required]=\"true\" [invalid]=\"!!formErrors.length\">\n <yuv-string [autofocus]=\"true\" [required]=\"true\" formControlName=\"templateName\"> </yuv-string>\n </yuv-form-input>\n @for (e of formErrors; track $index) {\n <div class=\"errors\">{{ e }}</div>\n }\n <yuv-sequence-list disable-duedate=\"true\" formControlName=\"sequence\"> </yuv-sequence-list>\n </form>\n}\n\n<div class=\"buttons\">\n <div class=\"left\">\n <button type=\"button\" class=\"secondary\" (click)=\"cancel.emit()\">{{ 'yuv.sequence-list.template.cancel' | translate }}</button>\n </div>\n\n @if (selectedTemplate) {\n <div class=\"right\">\n @if (selectedTemplate.id !== CURRENT_ENTRIES_ID) {\n <button class=\"secondary delete\" type=\"button\" (click)=\"deleteTemplate()\">\n {{ 'yuv.sequence-list.template.button.delete' | translate }}\n </button>\n\n <button class=\"primary apply\" type=\"button\" [disabled]=\"disableSubmit || form.invalid || form.dirty\" (click)=\"applyTemplate()\">\n {{ 'yuv.sequence-list.template.button.apply' | translate }}\n </button>\n }\n\n <!-- save -->\n <button\n class=\"{{ selectedTemplate.id !== CURRENT_ENTRIES_ID ? 'primary' : 'primary' }} save\"\n (click)=\"submit()\"\n type=\"button\"\n [disabled]=\"disableSubmit || form.invalid || form.pristine\"\n >\n {{ selectedTemplate.id !== CURRENT_ENTRIES_ID ? labels.save : labels.saveNew }}\n </button>\n </div>\n }\n</div>\n", styles: [":host{display:grid;height:100%;grid-template-rows:1fr auto;grid-template-columns:200px 1fr;grid-template-areas:\"list template\" \"buttons buttons\"}:host header{font-weight:700;padding:var(--app-pane-padding);border-bottom:1px solid var(--panel-divider-color)}:host .template-list{grid-area:list;display:grid;height:100%;grid-template-rows:auto auto auto 1fr;grid-template-columns:1fr;grid-template-areas:\"header\" \"current\" \"filter\" \"templates\";border-right:1px solid var(--panel-divider-color);overflow:hidden}:host .template-list header{grid-area:header}:host .template-list .filter{grid-area:filter;padding:var(--app-pane-padding);border:1px solid var(--panel-divider-color);border-width:1px 0;background-color:var(--panel-background-lightgrey)}:host .template-list .currententries{grid-area:current}:host .template-list .templates{grid-area:templates;overflow-y:auto}:host .template-list .item{padding:var(--app-pane-padding);cursor:pointer}:host .template-list .item:not(.currententries){border-bottom:1px solid var(--panel-divider-color)}:host .template-list .item:not(.current):hover{background-color:var(--item-focus-background-color)}:host .template-list .item.current{background-color:var(--item-selected-background-color)}:host .template{grid-area:template;display:grid;height:100%;overflow-y:auto;grid-template-rows:auto auto auto 1fr;grid-template-columns:1fr;grid-template-areas:\"headline\" \"name\" \"errors\" \"sequence\"}:host .template h2{grid-area:headline}:host .template yuv-form-input{grid-area:name;margin:var(--app-pane-padding);margin-bottom:calc(var(--app-pane-padding) / 2)}:host .template .errors{grid-area:errors;margin:0 var(--app-pane-padding);color:var(--color-error)}:host .template yuv-sequence-list{grid-area:sequence;margin:var(--app-pane-padding);box-shadow:0 0 1.2em #0000001a}:host .buttons{grid-area:buttons;overflow-x:auto;display:flex;padding:calc(var(--app-pane-padding) / 2) calc(var(--app-pane-padding) / 2 - 2px);border-top:1px solid var(--panel-divider-color)}:host .buttons .left{display:flex}:host .buttons .right{flex:1;display:flex;justify-content:flex-end}:host .buttons .right .save{order:2}:host .buttons .right .delete{order:1}:host .buttons .right .apply{order:3}:host .buttons button{margin:0 2px}\n"] }]
|
|
409
|
-
}], ctorParameters: () => [] });
|
|
410
|
-
|
|
411
|
-
/**
|
|
412
|
-
* Task sequence list including templates for sequence lists.
|
|
413
|
-
* Templates are preconfigured lists of tasks and recipients.
|
|
414
|
-
*/
|
|
415
|
-
class SequenceListTemplatesComponent {
|
|
416
|
-
get entries() {
|
|
417
|
-
return this._entries;
|
|
418
|
-
}
|
|
419
|
-
constructor() {
|
|
420
|
-
this.fb = inject(FormBuilder);
|
|
421
|
-
this.pendingChanges = inject(PendingChangesService);
|
|
422
|
-
this.overlay = inject(YvcOverlayService);
|
|
423
|
-
this.tplTemplateManager = viewChild('tplTemplateManager');
|
|
424
|
-
this.form = this.fb.group({
|
|
425
|
-
sequence: [[]]
|
|
426
|
-
});
|
|
427
|
-
this._entries = [];
|
|
428
|
-
this.title = input();
|
|
429
|
-
this.maxLength = input(100);
|
|
430
|
-
this.templateStorageSection = input.required();
|
|
431
|
-
this.itemEdit = output();
|
|
432
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
|
|
433
|
-
this.propagateChange = (_) => { };
|
|
434
|
-
this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe((res) => {
|
|
435
|
-
this.setEntries(res.sequence, false);
|
|
436
|
-
this.propagate();
|
|
437
|
-
});
|
|
438
|
-
}
|
|
439
|
-
setEntries(e, patch) {
|
|
440
|
-
this._entries = e;
|
|
441
|
-
if (patch)
|
|
442
|
-
this.form.patchValue({
|
|
443
|
-
sequence: e || []
|
|
444
|
-
});
|
|
445
|
-
}
|
|
446
|
-
propagate() {
|
|
447
|
-
this.propagateChange(this.entries);
|
|
448
|
-
}
|
|
449
|
-
writeValue(value) {
|
|
450
|
-
this.setEntries(value || [], true);
|
|
451
|
-
}
|
|
452
|
-
registerOnChange(fn) {
|
|
453
|
-
this.propagateChange = fn;
|
|
454
|
-
}
|
|
455
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars
|
|
456
|
-
registerOnTouched(fn) { }
|
|
457
|
-
// TEMPLATES
|
|
458
|
-
openTemplateManager() {
|
|
459
|
-
this.oRef = this.overlay.open(this.tplTemplateManager(), {
|
|
460
|
-
width: '55%',
|
|
461
|
-
height: '70%'
|
|
462
|
-
});
|
|
463
|
-
this.oRef.preventClose = () => this.pendingChanges.check();
|
|
464
|
-
}
|
|
465
|
-
templateManagerCancel() {
|
|
466
|
-
if (this.oRef)
|
|
467
|
-
this.oRef.close();
|
|
468
|
-
}
|
|
469
|
-
templateManagerSelect(entries) {
|
|
470
|
-
this.setEntries(entries, true);
|
|
471
|
-
if (this.oRef)
|
|
472
|
-
this.oRef.close();
|
|
473
|
-
}
|
|
474
|
-
validate() {
|
|
475
|
-
return this.form.invalid
|
|
476
|
-
? {
|
|
477
|
-
sequencelist: { invalid: true }
|
|
478
|
-
}
|
|
479
|
-
: null;
|
|
480
|
-
}
|
|
481
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SequenceListTemplatesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
482
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SequenceListTemplatesComponent, isStandalone: true, selector: "yuv-sequence-list-templates", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, templateStorageSection: { classPropertyName: "templateStorageSection", publicName: "templateStorageSection", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { itemEdit: "itemEdit" }, host: { attributes: { "tabindex": "0" } }, providers: [
|
|
483
|
-
{
|
|
484
|
-
provide: NG_VALUE_ACCESSOR,
|
|
485
|
-
useExisting: forwardRef(() => SequenceListTemplatesComponent),
|
|
486
|
-
multi: true
|
|
487
|
-
},
|
|
488
|
-
{
|
|
489
|
-
provide: NG_VALIDATORS,
|
|
490
|
-
useExisting: forwardRef(() => SequenceListTemplatesComponent),
|
|
491
|
-
multi: true
|
|
492
|
-
}
|
|
493
|
-
], viewQueries: [{ propertyName: "tplTemplateManager", first: true, predicate: ["tplTemplateManager"], descendants: true, isSignal: true }], ngImport: i0, template: "<form [formGroup]=\"form\">\n <yuv-sequence-list formControlName=\"sequence\" [maxLength]=\"maxLength()\">\n \n @if (!!templateStorageSection) {\n <button class=\"btn-templates secondary\" (click)=\"openTemplateManager()\">{{ 'yuv.sequence-list.button.templates' | translate }}</button>\n }\n </yuv-sequence-list>\n</form>\n\n<!-- template manager overlay -->\n<ng-template #tplTemplateManager>\n <yuv-sequence-list-template-manage\n (cancel)=\"oRef?.close()\"\n (templateSelect)=\"templateManagerSelect($event)\"\n [storageSection]=\"templateStorageSection() \"\n [currentEntries]=\"entries\"\n >\n </yuv-sequence-list-template-manage>\n</ng-template>\n", styles: [":host{display:block;overflow-y:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: SequenceListComponent, selector: "yuv-sequence-list", inputs: ["maxLength"] }, { kind: "component", type: SequenceListTemplateManageComponent, selector: "yuv-sequence-list-template-manage", inputs: ["storageSection", "currentEntries"], outputs: ["templateSelect", "cancel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$1.TranslatePipe, name: "translate" }] }); }
|
|
494
|
-
}
|
|
495
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SequenceListTemplatesComponent, decorators: [{
|
|
496
|
-
type: Component,
|
|
497
|
-
args: [{ selector: 'yuv-sequence-list-templates', standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule,
|
|
498
|
-
SequenceListComponent, SequenceListTemplateManageComponent, TranslateModule], providers: [
|
|
499
|
-
{
|
|
500
|
-
provide: NG_VALUE_ACCESSOR,
|
|
501
|
-
useExisting: forwardRef(() => SequenceListTemplatesComponent),
|
|
502
|
-
multi: true
|
|
503
|
-
},
|
|
504
|
-
{
|
|
505
|
-
provide: NG_VALIDATORS,
|
|
506
|
-
useExisting: forwardRef(() => SequenceListTemplatesComponent),
|
|
507
|
-
multi: true
|
|
508
|
-
}
|
|
509
|
-
], host: {
|
|
510
|
-
tabindex: '0'
|
|
511
|
-
}, template: "<form [formGroup]=\"form\">\n <yuv-sequence-list formControlName=\"sequence\" [maxLength]=\"maxLength()\">\n \n @if (!!templateStorageSection) {\n <button class=\"btn-templates secondary\" (click)=\"openTemplateManager()\">{{ 'yuv.sequence-list.button.templates' | translate }}</button>\n }\n </yuv-sequence-list>\n</form>\n\n<!-- template manager overlay -->\n<ng-template #tplTemplateManager>\n <yuv-sequence-list-template-manage\n (cancel)=\"oRef?.close()\"\n (templateSelect)=\"templateManagerSelect($event)\"\n [storageSection]=\"templateStorageSection() \"\n [currentEntries]=\"entries\"\n >\n </yuv-sequence-list-template-manage>\n</ng-template>\n", styles: [":host{display:block;overflow-y:auto}\n"] }]
|
|
512
|
-
}], ctorParameters: () => [] });
|
|
513
|
-
|
|
514
235
|
/**
|
|
515
236
|
* Generated bundle index. Do not edit.
|
|
516
237
|
*/
|
|
517
238
|
|
|
518
|
-
export { DueDatePickerComponent, SequenceListComponent
|
|
239
|
+
export { DueDatePickerComponent, SequenceListComponent };
|
|
519
240
|
//# sourceMappingURL=yuuvis-client-framework-sequence-list.mjs.map
|