@masterteam/properties 0.0.31 → 0.0.32
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.
|
@@ -19,7 +19,7 @@ import { toSignal } from '@angular/core/rxjs-interop';
|
|
|
19
19
|
import { Page } from '@masterteam/components/page';
|
|
20
20
|
import { DynamicForm } from '@masterteam/forms/dynamic-form';
|
|
21
21
|
import * as i1$1 from '@angular/forms';
|
|
22
|
-
import { FormGroup, FormControl,
|
|
22
|
+
import { FormGroup, FormControl, Validators, FormArray, ReactiveFormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS, ControlContainer, FormGroupDirective } from '@angular/forms';
|
|
23
23
|
import * as i2 from 'primeng/skeleton';
|
|
24
24
|
import { SkeletonModule } from 'primeng/skeleton';
|
|
25
25
|
import { FormulaBuilder } from '@masterteam/formula-builder';
|
|
@@ -1030,12 +1030,19 @@ class ApiConfiguration {
|
|
|
1030
1030
|
validators: [Validators.required],
|
|
1031
1031
|
}),
|
|
1032
1032
|
headers: new FormArray([]),
|
|
1033
|
-
key: new FormControl(
|
|
1034
|
-
|
|
1033
|
+
key: new FormControl('', {
|
|
1034
|
+
nonNullable: true,
|
|
1035
|
+
validators: [Validators.required],
|
|
1036
|
+
}),
|
|
1037
|
+
value: new FormControl('', {
|
|
1038
|
+
nonNullable: true,
|
|
1039
|
+
validators: [Validators.required],
|
|
1040
|
+
}),
|
|
1035
1041
|
supportMultiSelect: new FormControl(false, { nonNullable: true }),
|
|
1036
1042
|
});
|
|
1037
1043
|
onChange = () => { };
|
|
1038
1044
|
onTouched = () => { };
|
|
1045
|
+
onValidatorChange = () => { };
|
|
1039
1046
|
formChanges = toSignal(this.form.valueChanges, {
|
|
1040
1047
|
initialValue: this.form.getRawValue(),
|
|
1041
1048
|
});
|
|
@@ -1044,6 +1051,7 @@ class ApiConfiguration {
|
|
|
1044
1051
|
effect(() => {
|
|
1045
1052
|
this.formChanges();
|
|
1046
1053
|
this.emitValue();
|
|
1054
|
+
this.onValidatorChange();
|
|
1047
1055
|
});
|
|
1048
1056
|
effect(() => {
|
|
1049
1057
|
const latestSchema = this.facade.apiSchema();
|
|
@@ -1067,8 +1075,8 @@ class ApiConfiguration {
|
|
|
1067
1075
|
if (!value) {
|
|
1068
1076
|
this.form.reset({
|
|
1069
1077
|
endpoint: '',
|
|
1070
|
-
key:
|
|
1071
|
-
value:
|
|
1078
|
+
key: '',
|
|
1079
|
+
value: '',
|
|
1072
1080
|
supportMultiSelect: false,
|
|
1073
1081
|
}, { emitEvent: false });
|
|
1074
1082
|
this.setHeadersFromRecord({});
|
|
@@ -1079,8 +1087,8 @@ class ApiConfiguration {
|
|
|
1079
1087
|
this.schema.set(value.schema ?? null);
|
|
1080
1088
|
this.form.patchValue({
|
|
1081
1089
|
endpoint: value.endpoint ?? '',
|
|
1082
|
-
key: value.key ??
|
|
1083
|
-
value: value.value ??
|
|
1090
|
+
key: value.key ?? '',
|
|
1091
|
+
value: value.value ?? '',
|
|
1084
1092
|
supportMultiSelect: !!value.supportMultiSelect,
|
|
1085
1093
|
}, { emitEvent: false });
|
|
1086
1094
|
this.setHeadersFromRecord(value.headers ?? {});
|
|
@@ -1089,6 +1097,7 @@ class ApiConfiguration {
|
|
|
1089
1097
|
finally {
|
|
1090
1098
|
this.isWriting = false;
|
|
1091
1099
|
this.emitValue(false);
|
|
1100
|
+
this.onValidatorChange();
|
|
1092
1101
|
}
|
|
1093
1102
|
}
|
|
1094
1103
|
registerOnChange(fn) {
|
|
@@ -1097,6 +1106,12 @@ class ApiConfiguration {
|
|
|
1097
1106
|
registerOnTouched(fn) {
|
|
1098
1107
|
this.onTouched = fn;
|
|
1099
1108
|
}
|
|
1109
|
+
validate(_) {
|
|
1110
|
+
return this.form.valid ? null : { apiConfigurationInvalid: true };
|
|
1111
|
+
}
|
|
1112
|
+
registerOnValidatorChange(fn) {
|
|
1113
|
+
this.onValidatorChange = fn;
|
|
1114
|
+
}
|
|
1100
1115
|
setDisabledState(isDisabled) {
|
|
1101
1116
|
if (isDisabled) {
|
|
1102
1117
|
this.form.disable({ emitEvent: false });
|
|
@@ -1132,8 +1147,8 @@ class ApiConfiguration {
|
|
|
1132
1147
|
const value = {
|
|
1133
1148
|
endpoint: this.form.controls.endpoint.value,
|
|
1134
1149
|
headers,
|
|
1135
|
-
key: this.form.controls.key.value
|
|
1136
|
-
value: this.form.controls.value.value
|
|
1150
|
+
key: this.form.controls.key.value,
|
|
1151
|
+
value: this.form.controls.value.value,
|
|
1137
1152
|
supportMultiSelect: this.form.controls.supportMultiSelect.value,
|
|
1138
1153
|
schema: this.schema(),
|
|
1139
1154
|
};
|
|
@@ -1173,7 +1188,12 @@ class ApiConfiguration {
|
|
|
1173
1188
|
useExisting: forwardRef(() => ApiConfiguration),
|
|
1174
1189
|
multi: true,
|
|
1175
1190
|
},
|
|
1176
|
-
|
|
1191
|
+
{
|
|
1192
|
+
provide: NG_VALIDATORS,
|
|
1193
|
+
useExisting: forwardRef(() => ApiConfiguration),
|
|
1194
|
+
multi: true,
|
|
1195
|
+
},
|
|
1196
|
+
], ngImport: i0, template: "<div [formGroup]=\"form\" class=\"space-y-6\">\r\n <div class=\"space-y-4 rounded-xl bg-content px-6 py-4 shadow-sm\">\r\n <div class=\"grid items-end gap-3 md:grid-cols-[minmax(0,1fr)_auto]\">\r\n <mt-text-field\r\n formControlName=\"endpoint\"\r\n [label]=\"'properties.form.endpoint' | transloco\"\r\n [placeholder]=\"'properties.form.endpointPlaceholder' | transloco\"\r\n />\r\n <div class=\"flex justify-end gap-2\">\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"general.plus\"\r\n [label]=\"'properties.form.addHeader' | transloco\"\r\n (click)=\"addHeader()\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n [label]=\"'properties.form.testApi' | transloco\"\r\n [loading]=\"isTesting()\"\r\n (click)=\"testApi()\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (headers.controls.length) {\r\n <div class=\"space-y-3\">\r\n <div class=\"text-sm font-medium text-surface-500\">\r\n {{ \"properties.form.headers\" | transloco }}\r\n </div>\r\n <div class=\"space-y-3\">\r\n @for (\r\n headerCtrl of headers.controls;\r\n track headerCtrl;\r\n let i = $index\r\n ) {\r\n <div\r\n [formGroup]=\"headerCtrl\"\r\n class=\"grid items-end gap-3 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto]\"\r\n >\r\n <mt-text-field\r\n formControlName=\"key\"\r\n [label]=\"'properties.form.headerKey' | transloco\"\r\n />\r\n <mt-text-field\r\n formControlName=\"value\"\r\n [label]=\"'properties.form.headerValue' | transloco\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"general.trash-01\"\r\n (click)=\"removeHeader(i)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <p class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.noHeadersMessage\" | transloco }}\r\n </p>\r\n }\r\n </div>\r\n\r\n <div class=\"space-y-4 rounded-xl bg-content px-6 py-4 shadow-sm\">\r\n @if (hasDetectedSchema()) {\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n formControlName=\"key\"\r\n [options]=\"apiProperties()\"\r\n [showClear]=\"true\"\r\n optionLabel=\"name\"\r\n optionValue=\"key\"\r\n [label]=\"'properties.form.keyField' | transloco\"\r\n />\r\n <mt-select-field\r\n formControlName=\"value\"\r\n [options]=\"apiProperties()\"\r\n [showClear]=\"true\"\r\n optionLabel=\"name\"\r\n optionValue=\"key\"\r\n [label]=\"'properties.form.valueField' | transloco\"\r\n />\r\n </div>\r\n } @else {\r\n <p class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.messageTestApiPrompt\" | transloco }}\r\n </p>\r\n }\r\n\r\n <div class=\"flex items-center justify-between gap-4\">\r\n <mt-toggle-field\r\n formControlName=\"supportMultiSelect\"\r\n [label]=\"'properties.form.labelSupportMultiSelect' | transloco\"\r\n />\r\n @if (isTesting()) {\r\n <span class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.messageTesting\" | transloco }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }, { kind: "component", type: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required", "group", "size", "optionGroupLabel", "optionGroupChildren", "loading", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "component", type: ToggleField, selector: "mt-toggle-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1.TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1177
1197
|
}
|
|
1178
1198
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ApiConfiguration, decorators: [{
|
|
1179
1199
|
type: Component,
|
|
@@ -1191,6 +1211,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
|
|
|
1191
1211
|
useExisting: forwardRef(() => ApiConfiguration),
|
|
1192
1212
|
multi: true,
|
|
1193
1213
|
},
|
|
1214
|
+
{
|
|
1215
|
+
provide: NG_VALIDATORS,
|
|
1216
|
+
useExisting: forwardRef(() => ApiConfiguration),
|
|
1217
|
+
multi: true,
|
|
1218
|
+
},
|
|
1194
1219
|
], template: "<div [formGroup]=\"form\" class=\"space-y-6\">\r\n <div class=\"space-y-4 rounded-xl bg-content px-6 py-4 shadow-sm\">\r\n <div class=\"grid items-end gap-3 md:grid-cols-[minmax(0,1fr)_auto]\">\r\n <mt-text-field\r\n formControlName=\"endpoint\"\r\n [label]=\"'properties.form.endpoint' | transloco\"\r\n [placeholder]=\"'properties.form.endpointPlaceholder' | transloco\"\r\n />\r\n <div class=\"flex justify-end gap-2\">\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"general.plus\"\r\n [label]=\"'properties.form.addHeader' | transloco\"\r\n (click)=\"addHeader()\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n [label]=\"'properties.form.testApi' | transloco\"\r\n [loading]=\"isTesting()\"\r\n (click)=\"testApi()\"\r\n />\r\n </div>\r\n </div>\r\n\r\n @if (headers.controls.length) {\r\n <div class=\"space-y-3\">\r\n <div class=\"text-sm font-medium text-surface-500\">\r\n {{ \"properties.form.headers\" | transloco }}\r\n </div>\r\n <div class=\"space-y-3\">\r\n @for (\r\n headerCtrl of headers.controls;\r\n track headerCtrl;\r\n let i = $index\r\n ) {\r\n <div\r\n [formGroup]=\"headerCtrl\"\r\n class=\"grid items-end gap-3 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto]\"\r\n >\r\n <mt-text-field\r\n formControlName=\"key\"\r\n [label]=\"'properties.form.headerKey' | transloco\"\r\n />\r\n <mt-text-field\r\n formControlName=\"value\"\r\n [label]=\"'properties.form.headerValue' | transloco\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n [text]=\"true\"\r\n icon=\"general.trash-01\"\r\n (click)=\"removeHeader(i)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <p class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.noHeadersMessage\" | transloco }}\r\n </p>\r\n }\r\n </div>\r\n\r\n <div class=\"space-y-4 rounded-xl bg-content px-6 py-4 shadow-sm\">\r\n @if (hasDetectedSchema()) {\r\n <div class=\"grid gap-4 md:grid-cols-2\">\r\n <mt-select-field\r\n formControlName=\"key\"\r\n [options]=\"apiProperties()\"\r\n [showClear]=\"true\"\r\n optionLabel=\"name\"\r\n optionValue=\"key\"\r\n [label]=\"'properties.form.keyField' | transloco\"\r\n />\r\n <mt-select-field\r\n formControlName=\"value\"\r\n [options]=\"apiProperties()\"\r\n [showClear]=\"true\"\r\n optionLabel=\"name\"\r\n optionValue=\"key\"\r\n [label]=\"'properties.form.valueField' | transloco\"\r\n />\r\n </div>\r\n } @else {\r\n <p class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.messageTestApiPrompt\" | transloco }}\r\n </p>\r\n }\r\n\r\n <div class=\"flex items-center justify-between gap-4\">\r\n <mt-toggle-field\r\n formControlName=\"supportMultiSelect\"\r\n [label]=\"'properties.form.labelSupportMultiSelect' | transloco\"\r\n />\r\n @if (isTesting()) {\r\n <span class=\"text-xs text-surface-400\">\r\n {{ \"properties.form.messageTesting\" | transloco }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n" }]
|
|
1195
1220
|
}], ctorParameters: () => [] });
|
|
1196
1221
|
|
|
@@ -1269,7 +1294,7 @@ class CheckListFormConfiguration {
|
|
|
1269
1294
|
this.propertiesFacade.resetConfigProperties();
|
|
1270
1295
|
}
|
|
1271
1296
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: CheckListFormConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1272
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: CheckListFormConfiguration, isStandalone: true, selector: "mt-check-list-form-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1297
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: CheckListFormConfiguration, isStandalone: true, selector: "mt-check-list-form-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues"], outputs: ["runtimeMessagesChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1273
1298
|
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1274
1299
|
] });
|
|
1275
1300
|
}
|
|
@@ -1280,265 +1305,169 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
|
|
|
1280
1305
|
], template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n" }]
|
|
1281
1306
|
}], ctorParameters: () => [] });
|
|
1282
1307
|
|
|
1283
|
-
class
|
|
1308
|
+
class EntityListConfiguration {
|
|
1284
1309
|
propertiesFacade = inject(PropertiesFacade);
|
|
1285
1310
|
controlContainer = inject(ControlContainer);
|
|
1286
1311
|
parentGroup = this.controlContainer.control;
|
|
1287
1312
|
transloco = inject(TranslocoService);
|
|
1313
|
+
previousModuleId = signal(null, ...(ngDevMode ? [{ debugName: "previousModuleId" }] : []));
|
|
1314
|
+
configurationControl = this.parentGroup.get('configuration');
|
|
1288
1315
|
configScopes = this.propertiesFacade.configScopes;
|
|
1289
1316
|
configProperties = this.propertiesFacade.configProperties;
|
|
1290
1317
|
configuration = toSignal(this.parentGroup.valueChanges.pipe(startWith(this.parentGroup.value), map((value) => value?.configuration), distinctUntilChanged()), { initialValue: this.parentGroup.value?.configuration });
|
|
1291
|
-
|
|
1318
|
+
moduleItems = computed(() => {
|
|
1292
1319
|
const scope = this.configScopes()[0];
|
|
1293
1320
|
return scope?.items ?? [];
|
|
1294
|
-
}, ...(ngDevMode ? [{ debugName: "
|
|
1321
|
+
}, ...(ngDevMode ? [{ debugName: "moduleItems" }] : []));
|
|
1322
|
+
accessOptions = [
|
|
1323
|
+
{ label: 'Auto', value: 'Auto' },
|
|
1324
|
+
{ label: 'Read', value: 'Read' },
|
|
1325
|
+
{ label: 'Write', value: 'Write' },
|
|
1326
|
+
{ label: 'ReadWrite', value: 'ReadWrite' },
|
|
1327
|
+
{ label: 'None', value: 'None' },
|
|
1328
|
+
];
|
|
1329
|
+
snapshotModeOptions = [
|
|
1330
|
+
{ label: 'Snapshot', value: 'Snapshot' },
|
|
1331
|
+
{ label: 'Realtime', value: 'Realtime' },
|
|
1332
|
+
];
|
|
1295
1333
|
formConfig = linkedSignal(() => ({
|
|
1296
1334
|
sections: [
|
|
1297
1335
|
{
|
|
1298
1336
|
key: 'configuration',
|
|
1299
1337
|
label: this.transloco.translate('properties.form.configurationSection'),
|
|
1300
|
-
cssClass: ' rounded-xl bg-content \
|
|
1301
|
-
shadow-sm \
|
|
1338
|
+
cssClass: ' rounded-xl bg-content \
|
|
1339
|
+
shadow-sm \
|
|
1302
1340
|
px-6 py-4',
|
|
1303
1341
|
type: 'header',
|
|
1304
1342
|
bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3',
|
|
1305
1343
|
fields: [
|
|
1306
1344
|
{
|
|
1307
|
-
key: '
|
|
1345
|
+
key: 'moduleId',
|
|
1308
1346
|
type: 'select',
|
|
1309
1347
|
label: this.transloco.translate('properties.form.selectScope'),
|
|
1310
1348
|
optionLabel: 'name',
|
|
1311
1349
|
optionValue: 'id',
|
|
1350
|
+
options: this.moduleItems(),
|
|
1312
1351
|
filter: true,
|
|
1313
|
-
options: this.scopeItems(),
|
|
1314
1352
|
},
|
|
1315
|
-
new PickListFieldConfig({
|
|
1316
|
-
key: 'properties',
|
|
1317
|
-
cssClass: 'md:col-span-2',
|
|
1318
|
-
options: this.configProperties(),
|
|
1319
|
-
optionLabel: 'name.display',
|
|
1320
|
-
optionValue: 'key',
|
|
1321
|
-
sourceHeader: this.transloco.translate('properties.form.availableProperties'),
|
|
1322
|
-
targetHeader: this.transloco.translate('properties.form.selectedProperties'),
|
|
1323
|
-
}),
|
|
1324
1353
|
{
|
|
1325
|
-
key: '
|
|
1326
|
-
type: '
|
|
1327
|
-
label:
|
|
1328
|
-
|
|
1354
|
+
key: 'access',
|
|
1355
|
+
type: 'select',
|
|
1356
|
+
label: 'Access',
|
|
1357
|
+
optionLabel: 'label',
|
|
1358
|
+
optionValue: 'value',
|
|
1359
|
+
options: this.accessOptions,
|
|
1329
1360
|
},
|
|
1330
|
-
],
|
|
1331
|
-
},
|
|
1332
|
-
],
|
|
1333
|
-
}), ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
|
|
1334
|
-
constructor() {
|
|
1335
|
-
effect(() => {
|
|
1336
|
-
const scopeId = this.configuration()?.scopeId;
|
|
1337
|
-
if (scopeId) {
|
|
1338
|
-
const scopeType = this.configScopes()[0]?.scope;
|
|
1339
|
-
if (scopeType) {
|
|
1340
|
-
this.propertiesFacade.loadPropertiesForConfigType(scopeType, scopeId);
|
|
1341
|
-
}
|
|
1342
|
-
}
|
|
1343
|
-
});
|
|
1344
|
-
}
|
|
1345
|
-
ngOnDestroy() {
|
|
1346
|
-
this.propertiesFacade.resetConfigProperties();
|
|
1347
|
-
}
|
|
1348
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DynamicListConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1349
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: DynamicListConfiguration, isStandalone: true, selector: "mt-dynamic-list-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1350
|
-
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1351
|
-
] });
|
|
1352
|
-
}
|
|
1353
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DynamicListConfiguration, decorators: [{
|
|
1354
|
-
type: Component,
|
|
1355
|
-
args: [{ selector: 'mt-dynamic-list-configuration', imports: [DynamicForm, ReactiveFormsModule], viewProviders: [
|
|
1356
|
-
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1357
|
-
], template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n" }]
|
|
1358
|
-
}], ctorParameters: () => [] });
|
|
1359
|
-
|
|
1360
|
-
class EditableListViewConfiguration {
|
|
1361
|
-
propertiesFacade = inject(PropertiesFacade);
|
|
1362
|
-
controlContainer = inject(ControlContainer);
|
|
1363
|
-
parentGroup = this.controlContainer.control;
|
|
1364
|
-
transloco = inject(TranslocoService);
|
|
1365
|
-
configScopes = this.propertiesFacade.configScopes;
|
|
1366
|
-
configProperties = this.propertiesFacade.configProperties;
|
|
1367
|
-
configuration = toSignal(this.parentGroup.valueChanges.pipe(startWith(this.parentGroup.value), map((value) => value?.configuration), distinctUntilChanged()), { initialValue: this.parentGroup.value?.configuration });
|
|
1368
|
-
scopeItems = computed(() => {
|
|
1369
|
-
const scope = this.configScopes()[0];
|
|
1370
|
-
return scope?.items ?? [];
|
|
1371
|
-
}, ...(ngDevMode ? [{ debugName: "scopeItems" }] : []));
|
|
1372
|
-
formConfig = linkedSignal(() => ({
|
|
1373
|
-
sections: [
|
|
1374
|
-
{
|
|
1375
|
-
key: 'configuration',
|
|
1376
|
-
label: this.transloco.translate('properties.form.configurationSection'),
|
|
1377
|
-
cssClass: ' rounded-xl bg-content \
|
|
1378
|
-
shadow-sm \
|
|
1379
|
-
px-6 py-4',
|
|
1380
|
-
type: 'header',
|
|
1381
|
-
bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3',
|
|
1382
|
-
fields: [
|
|
1383
1361
|
{
|
|
1384
|
-
key: '
|
|
1362
|
+
key: 'snapshotMode',
|
|
1385
1363
|
type: 'select',
|
|
1386
|
-
label:
|
|
1387
|
-
optionLabel: '
|
|
1388
|
-
optionValue: '
|
|
1389
|
-
options: this.
|
|
1364
|
+
label: 'Snapshot Mode',
|
|
1365
|
+
optionLabel: 'label',
|
|
1366
|
+
optionValue: 'value',
|
|
1367
|
+
options: this.snapshotModeOptions,
|
|
1390
1368
|
},
|
|
1391
1369
|
new PickListFieldConfig({
|
|
1392
|
-
key: '
|
|
1370
|
+
key: 'readFields',
|
|
1393
1371
|
cssClass: 'md:col-span-2',
|
|
1394
1372
|
options: this.configProperties(),
|
|
1395
1373
|
optionLabel: 'name.display',
|
|
1396
1374
|
optionValue: 'key',
|
|
1397
|
-
sourceHeader:
|
|
1398
|
-
targetHeader:
|
|
1375
|
+
sourceHeader: 'Available Read Fields',
|
|
1376
|
+
targetHeader: 'Selected Read Fields',
|
|
1399
1377
|
}),
|
|
1400
|
-
{
|
|
1401
|
-
key: 'isEditable',
|
|
1402
|
-
type: 'toggle',
|
|
1403
|
-
label: this.transloco.translate('properties.form.isEditable'),
|
|
1404
|
-
},
|
|
1405
|
-
{
|
|
1406
|
-
key: 'preserveValue',
|
|
1407
|
-
type: 'toggle',
|
|
1408
|
-
label: this.transloco.translate('properties.form.preserveValue'),
|
|
1409
|
-
},
|
|
1410
|
-
],
|
|
1411
|
-
},
|
|
1412
|
-
],
|
|
1413
|
-
}), ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
|
|
1414
|
-
constructor() {
|
|
1415
|
-
effect(() => {
|
|
1416
|
-
const scopeId = this.configuration()?.scopeId;
|
|
1417
|
-
if (scopeId) {
|
|
1418
|
-
const scopeType = this.configScopes()[0]?.scope;
|
|
1419
|
-
if (scopeType) {
|
|
1420
|
-
this.propertiesFacade.loadPropertiesForConfigType(scopeType, scopeId);
|
|
1421
|
-
}
|
|
1422
|
-
}
|
|
1423
|
-
});
|
|
1424
|
-
}
|
|
1425
|
-
ngOnDestroy() {
|
|
1426
|
-
this.propertiesFacade.resetConfigProperties();
|
|
1427
|
-
}
|
|
1428
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: EditableListViewConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1429
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: EditableListViewConfiguration, isStandalone: true, selector: "mt-editable-list-view-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1430
|
-
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1431
|
-
] });
|
|
1432
|
-
}
|
|
1433
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: EditableListViewConfiguration, decorators: [{
|
|
1434
|
-
type: Component,
|
|
1435
|
-
args: [{ selector: 'mt-editable-list-view-configuration', imports: [DynamicForm, ReactiveFormsModule], viewProviders: [
|
|
1436
|
-
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1437
|
-
], template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n" }]
|
|
1438
|
-
}], ctorParameters: () => [] });
|
|
1439
|
-
|
|
1440
|
-
class InternalModuleConfiguration {
|
|
1441
|
-
// private readonly workspaceStructureFacade = inject(WorkspaceStructureFacade);
|
|
1442
|
-
// = this.workspaceStructureFacade.workspaceNodes;
|
|
1443
|
-
levels;
|
|
1444
|
-
propertiesFacade = inject(PropertiesFacade);
|
|
1445
|
-
cc = inject(ControlContainer);
|
|
1446
|
-
transloco = inject(TranslocoService);
|
|
1447
|
-
parentGroup = this.cc.control;
|
|
1448
|
-
configProperties = this.propertiesFacade.configProperties;
|
|
1449
|
-
configScopes = this.propertiesFacade.configScopes;
|
|
1450
|
-
configuration = toSignal(this.parentGroup.valueChanges.pipe(startWith(this.parentGroup.value), map((v) => v?.configuration), distinctUntilChanged()), { initialValue: this.parentGroup.value?.configuration });
|
|
1451
|
-
PrevModuleId = signal(null, ...(ngDevMode ? [{ debugName: "PrevModuleId" }] : []));
|
|
1452
|
-
scopeItems = computed(() => {
|
|
1453
|
-
const selectedType = this.configuration()?.type;
|
|
1454
|
-
if (!selectedType)
|
|
1455
|
-
return [];
|
|
1456
|
-
const scope = this.configScopes().find((s) => s.scope === selectedType);
|
|
1457
|
-
return scope?.items ?? [];
|
|
1458
|
-
}, ...(ngDevMode ? [{ debugName: "scopeItems" }] : []));
|
|
1459
|
-
formConfig = linkedSignal(() => ({
|
|
1460
|
-
sections: [
|
|
1461
|
-
{
|
|
1462
|
-
key: 'configuration',
|
|
1463
|
-
label: this.transloco.translate('properties.form.configurationSection'),
|
|
1464
|
-
cssClass: ' rounded-xl bg-content \
|
|
1465
|
-
shadow-sm \
|
|
1466
|
-
px-6 py-4',
|
|
1467
|
-
type: 'header',
|
|
1468
|
-
bodyClass: 'grid grid-cols-1 md:grid-cols-2 gap-3 align-items-end ',
|
|
1469
|
-
fields: [
|
|
1470
|
-
{
|
|
1471
|
-
key: 'type',
|
|
1472
|
-
type: 'select',
|
|
1473
|
-
label: this.transloco.translate('properties.form.type'),
|
|
1474
|
-
optionLabel: 'scope',
|
|
1475
|
-
optionValue: 'scope',
|
|
1476
|
-
options: this.configScopes(),
|
|
1477
|
-
},
|
|
1478
|
-
{
|
|
1479
|
-
key: 'scopeId',
|
|
1480
|
-
type: 'select',
|
|
1481
|
-
label: this.transloco.translate('properties.form.selectScope'),
|
|
1482
|
-
optionLabel: 'name',
|
|
1483
|
-
optionValue: 'id',
|
|
1484
|
-
filter: true,
|
|
1485
|
-
options: this.scopeItems(),
|
|
1486
|
-
},
|
|
1487
|
-
{
|
|
1488
|
-
type: 'select',
|
|
1489
|
-
key: 'property',
|
|
1490
|
-
label: this.transloco.translate('properties.form.valueProperty'),
|
|
1491
|
-
optionLabel: 'name.display',
|
|
1492
|
-
optionValue: 'key',
|
|
1493
|
-
options: this.configProperties(),
|
|
1494
|
-
},
|
|
1495
1378
|
new PickListFieldConfig({
|
|
1496
|
-
|
|
1497
|
-
|
|
1379
|
+
key: 'writeFields',
|
|
1380
|
+
cssClass: 'md:col-span-2',
|
|
1498
1381
|
options: this.configProperties(),
|
|
1499
1382
|
optionLabel: 'name.display',
|
|
1500
1383
|
optionValue: 'key',
|
|
1501
|
-
sourceHeader:
|
|
1502
|
-
targetHeader:
|
|
1384
|
+
sourceHeader: 'Available Write Fields',
|
|
1385
|
+
targetHeader: 'Selected Write Fields',
|
|
1386
|
+
relations: [
|
|
1387
|
+
{ action: 'show', key: 'access', value: 'Write' },
|
|
1388
|
+
{ action: 'show', key: 'access', value: 'ReadWrite' },
|
|
1389
|
+
{ action: 'show', key: 'access', value: 'Auto' },
|
|
1390
|
+
],
|
|
1503
1391
|
}),
|
|
1504
1392
|
{
|
|
1393
|
+
key: 'readFilter',
|
|
1394
|
+
type: 'text',
|
|
1505
1395
|
cssClass: 'md:col-span-2',
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
label: this.transloco.translate('properties.form.labelPreserveValue'),
|
|
1396
|
+
label: 'Read Filter',
|
|
1397
|
+
placeholder: 'status == "completed"',
|
|
1509
1398
|
},
|
|
1510
1399
|
],
|
|
1511
1400
|
},
|
|
1512
1401
|
],
|
|
1513
1402
|
}), ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
|
|
1514
1403
|
constructor() {
|
|
1404
|
+
this.applyEntityListDefaults();
|
|
1405
|
+
this.syncLegacyScopeAlias();
|
|
1406
|
+
this.loadModuleProperties();
|
|
1407
|
+
}
|
|
1408
|
+
applyEntityListDefaults() {
|
|
1409
|
+
const config = this.configurationControl.value;
|
|
1410
|
+
if (config)
|
|
1411
|
+
return;
|
|
1412
|
+
this.configurationControl.setValue({
|
|
1413
|
+
moduleId: 0,
|
|
1414
|
+
access: 'Auto',
|
|
1415
|
+
snapshotMode: 'Snapshot',
|
|
1416
|
+
readFields: [],
|
|
1417
|
+
writeFields: [],
|
|
1418
|
+
readFilter: '',
|
|
1419
|
+
}, { emitEvent: true });
|
|
1420
|
+
}
|
|
1421
|
+
syncLegacyScopeAlias() {
|
|
1515
1422
|
effect(() => {
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
}
|
|
1423
|
+
const config = this.configuration();
|
|
1424
|
+
if (!config || typeof config !== 'object')
|
|
1425
|
+
return;
|
|
1426
|
+
const moduleId = config.moduleId;
|
|
1427
|
+
const scopeId = config.scopeId;
|
|
1428
|
+
if ((moduleId === null || moduleId === undefined || moduleId === '') &&
|
|
1429
|
+
scopeId !== null &&
|
|
1430
|
+
scopeId !== undefined &&
|
|
1431
|
+
scopeId !== '') {
|
|
1432
|
+
this.configurationControl.patchValue({ ...config, moduleId: scopeId }, { emitEvent: true });
|
|
1433
|
+
return;
|
|
1434
|
+
}
|
|
1435
|
+
if (moduleId !== null &&
|
|
1436
|
+
moduleId !== undefined &&
|
|
1437
|
+
moduleId !== '' &&
|
|
1438
|
+
moduleId !== scopeId) {
|
|
1439
|
+
this.configurationControl.patchValue({ ...config, scopeId: moduleId }, { emitEvent: true });
|
|
1526
1440
|
}
|
|
1527
1441
|
});
|
|
1528
1442
|
}
|
|
1443
|
+
loadModuleProperties() {
|
|
1444
|
+
effect(() => {
|
|
1445
|
+
const config = this.configuration();
|
|
1446
|
+
const moduleId = config?.moduleId ?? config?.scopeId;
|
|
1447
|
+
if (!moduleId || moduleId === this.previousModuleId()) {
|
|
1448
|
+
return;
|
|
1449
|
+
}
|
|
1450
|
+
const scopeType = this.configScopes()[0]?.scope;
|
|
1451
|
+
if (!scopeType) {
|
|
1452
|
+
return;
|
|
1453
|
+
}
|
|
1454
|
+
this.previousModuleId.set(moduleId);
|
|
1455
|
+
this.propertiesFacade.loadPropertiesForConfigType(scopeType, moduleId);
|
|
1456
|
+
});
|
|
1457
|
+
}
|
|
1529
1458
|
ngOnDestroy() {
|
|
1530
1459
|
this.propertiesFacade.resetConfigProperties();
|
|
1531
1460
|
}
|
|
1532
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type:
|
|
1533
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type:
|
|
1461
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: EntityListConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1462
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: EntityListConfiguration, isStandalone: true, selector: "mt-entity-list-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues"], outputs: ["runtimeMessagesChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1534
1463
|
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1535
1464
|
] });
|
|
1536
1465
|
}
|
|
1537
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type:
|
|
1466
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: EntityListConfiguration, decorators: [{
|
|
1538
1467
|
type: Component,
|
|
1539
|
-
args: [{ selector: 'mt-
|
|
1468
|
+
args: [{ selector: 'mt-entity-list-configuration', imports: [DynamicForm, ReactiveFormsModule], viewProviders: [
|
|
1540
1469
|
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1541
|
-
], template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\
|
|
1470
|
+
], template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\n" }]
|
|
1542
1471
|
}], ctorParameters: () => [] });
|
|
1543
1472
|
|
|
1544
1473
|
class LocationConfiguration {
|
|
@@ -1577,7 +1506,7 @@ class LocationConfiguration {
|
|
|
1577
1506
|
});
|
|
1578
1507
|
}
|
|
1579
1508
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: LocationConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1580
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: LocationConfiguration, isStandalone: true, selector: "mt-location-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1509
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: LocationConfiguration, isStandalone: true, selector: "mt-location-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues"], outputs: ["runtimeMessagesChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1581
1510
|
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1582
1511
|
] });
|
|
1583
1512
|
}
|
|
@@ -1624,7 +1553,7 @@ class LookupConfiguration {
|
|
|
1624
1553
|
});
|
|
1625
1554
|
}
|
|
1626
1555
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: LookupConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1627
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: LookupConfiguration, isStandalone: true, selector: "mt-lookup-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1556
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: LookupConfiguration, isStandalone: true, selector: "mt-lookup-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues"], outputs: ["runtimeMessagesChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1628
1557
|
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1629
1558
|
] });
|
|
1630
1559
|
}
|
|
@@ -1658,7 +1587,7 @@ class PercentageConfiguration {
|
|
|
1658
1587
|
],
|
|
1659
1588
|
}, ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
|
|
1660
1589
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PercentageConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1661
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: PercentageConfiguration, isStandalone: true, selector: "mt-percentage-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1590
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: PercentageConfiguration, isStandalone: true, selector: "mt-percentage-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues"], outputs: ["runtimeMessagesChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1662
1591
|
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1663
1592
|
] });
|
|
1664
1593
|
}
|
|
@@ -1705,7 +1634,7 @@ class UserConfiguration {
|
|
|
1705
1634
|
});
|
|
1706
1635
|
}
|
|
1707
1636
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: UserConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1708
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: UserConfiguration, isStandalone: true, selector: "mt-user-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1637
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: UserConfiguration, isStandalone: true, selector: "mt-user-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues"], outputs: ["runtimeMessagesChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1709
1638
|
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1710
1639
|
] });
|
|
1711
1640
|
}
|
|
@@ -1858,7 +1787,7 @@ class AttachmentConfiguration {
|
|
|
1858
1787
|
],
|
|
1859
1788
|
}, ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
|
|
1860
1789
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AttachmentConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1861
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: AttachmentConfiguration, isStandalone: true, selector: "mt-attachment-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1790
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.3", type: AttachmentConfiguration, isStandalone: true, selector: "mt-attachment-configuration", ngImport: i0, template: "<mt-dynamic-form formControlName=\"configuration\" [formConfig]=\"formConfig()\" />\r\n", styles: [""], dependencies: [{ kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues"], outputs: ["runtimeMessagesChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], viewProviders: [
|
|
1862
1791
|
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
1863
1792
|
] });
|
|
1864
1793
|
}
|
|
@@ -1876,6 +1805,11 @@ class PropertyForm {
|
|
|
1876
1805
|
transloco = inject(TranslocoService);
|
|
1877
1806
|
propertyId = input('', ...(ngDevMode ? [{ debugName: "propertyId" }] : []));
|
|
1878
1807
|
propertyTypes = this.facade.propertyTypes;
|
|
1808
|
+
legacyReplacedViewTypes = [
|
|
1809
|
+
'DynamicList',
|
|
1810
|
+
'EditableListView',
|
|
1811
|
+
'InternalModule',
|
|
1812
|
+
];
|
|
1879
1813
|
submitLabel = computed(() => this.propertyId()
|
|
1880
1814
|
? this.transloco.translate('properties.form.updateButton')
|
|
1881
1815
|
: this.transloco.translate('properties.form.createButton'), ...(ngDevMode ? [{ debugName: "submitLabel" }] : []));
|
|
@@ -1903,6 +1837,10 @@ class PropertyForm {
|
|
|
1903
1837
|
initialValue: Boolean(this.mainControl.value?.isCalculated),
|
|
1904
1838
|
});
|
|
1905
1839
|
formulaSchemaId = computed(() => this.resolveSchemaId(this.facade.parentModuleId() ?? this.facade.moduleId()), ...(ngDevMode ? [{ debugName: "formulaSchemaId" }] : []));
|
|
1840
|
+
availablePropertyTypes = computed(() => {
|
|
1841
|
+
const allTypes = this.propertyTypes()?.value ?? [];
|
|
1842
|
+
return allTypes.filter((item) => !this.legacyReplacedViewTypes.includes(item?.viewType ?? ''));
|
|
1843
|
+
}, ...(ngDevMode ? [{ debugName: "availablePropertyTypes" }] : []));
|
|
1906
1844
|
selectedPropertyTypeConfiguration = computed(() => {
|
|
1907
1845
|
const propertyTypesSetting = this.propertyTypes();
|
|
1908
1846
|
const selectedViewType = this.propertyType();
|
|
@@ -1942,7 +1880,7 @@ class PropertyForm {
|
|
|
1942
1880
|
optionLabel: 'label.en',
|
|
1943
1881
|
optionValue: 'viewType',
|
|
1944
1882
|
cssClass: 'w-1/2',
|
|
1945
|
-
options: this.
|
|
1883
|
+
options: this.availablePropertyTypes(),
|
|
1946
1884
|
disabled: this.isEditing(),
|
|
1947
1885
|
filter: true,
|
|
1948
1886
|
hasPlaceholderPrefix: false,
|
|
@@ -2076,14 +2014,12 @@ class PropertyForm {
|
|
|
2076
2014
|
// Reset config scopes before loading new ones
|
|
2077
2015
|
this.facade.resetConfigScopes();
|
|
2078
2016
|
// Load config scopes for specific property types
|
|
2079
|
-
const supportedTypes = [
|
|
2080
|
-
'InternalModule',
|
|
2081
|
-
'DynamicList',
|
|
2082
|
-
'EditableListView',
|
|
2083
|
-
'LookupLog',
|
|
2084
|
-
];
|
|
2017
|
+
const supportedTypes = ['EntityList', 'LookupModuleCheckList'];
|
|
2085
2018
|
if (supportedTypes.includes(currentPropertyType)) {
|
|
2086
|
-
|
|
2019
|
+
const configScopeType = currentPropertyType === 'LookupModuleCheckList'
|
|
2020
|
+
? 'LookupLog'
|
|
2021
|
+
: currentPropertyType;
|
|
2022
|
+
this.facade.loadConfigAsType(configScopeType);
|
|
2087
2023
|
}
|
|
2088
2024
|
});
|
|
2089
2025
|
effect(() => {
|
|
@@ -2232,7 +2168,7 @@ class PropertyForm {
|
|
|
2232
2168
|
this.destroyConfigurationComponent();
|
|
2233
2169
|
}
|
|
2234
2170
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PropertyForm, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2235
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PropertyForm, isStandalone: true, selector: "mt-property-form", inputs: { propertyId: { classPropertyName: "propertyId", publicName: "propertyId", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "configurationHost", first: true, predicate: ["configurationHost"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<mt-page\r\n [title]=\"\r\n propertyId()\r\n ? ('properties.form.editProperty' | transloco)\r\n : ('properties.form.createNewProperty' | transloco)\r\n \"\r\n avatarIcon=\"custom.products-and-services\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-sky-50)',\r\n '--p-avatar-color': 'var(--p-sky-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n class=\"h-full\"\r\n>\r\n <ng-template #headerEnd>\r\n <mt-button\r\n class=\"mx-2\"\r\n [label]=\"submitLabel()\"\r\n [icon]=\"isEditing() ? 'custom.pencil' : 'general.plus'\"\r\n [loading]=\"submitting()\"\r\n [disabled]=\"submitDisabled() || this.propertyForm.invalid\"\r\n (click)=\"createOrEditProperty()\"\r\n />\r\n </ng-template>\r\n <div\r\n [formGroup]=\"propertyForm\"\r\n class=\"h-full py-4 h-full overflow-y-auto flex justify-center\"\r\n >\r\n <div class=\"w-2/3 flex flex-col gap-6\">\r\n @if (loading()) {\r\n <!-- Skeleton Loading State -->\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <div class=\"flex justify-between items-center gap-6\">\r\n <p-skeleton width=\"50%\" height=\"3rem\"></p-skeleton>\r\n <p-skeleton width=\"8rem\" height=\"2.5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"12rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"6rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n <p-skeleton height=\"3rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"8rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n } @else {\r\n <mt-dynamic-form\r\n [formConfig]=\"dynamicFormConfigMain()\"\r\n [formControlName]=\"'main'\"\r\n />\r\n @if (configurationFormConfig()) {\r\n <mt-dynamic-form\r\n formControlName=\"configuration\"\r\n [formConfig]=\"configurationFormConfig()!\"\r\n />\r\n } @else {\r\n <ng-container #configurationHost></ng-container>\r\n @if (!configurationComponentExists()) {\r\n @switch (propertyType()) {\r\n @case (\"User\") {\r\n <mt-user-configuration />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-percentage-configuration />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-lookup-configuration />\r\n }\r\n @case (\"LookupMultiSelect\") {\
|
|
2171
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PropertyForm, isStandalone: true, selector: "mt-property-form", inputs: { propertyId: { classPropertyName: "propertyId", publicName: "propertyId", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "configurationHost", first: true, predicate: ["configurationHost"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<mt-page\r\n [title]=\"\r\n propertyId()\r\n ? ('properties.form.editProperty' | transloco)\r\n : ('properties.form.createNewProperty' | transloco)\r\n \"\r\n avatarIcon=\"custom.products-and-services\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-sky-50)',\r\n '--p-avatar-color': 'var(--p-sky-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n class=\"h-full\"\r\n>\r\n <ng-template #headerEnd>\r\n <mt-button\r\n class=\"mx-2\"\r\n [label]=\"submitLabel()\"\r\n [icon]=\"isEditing() ? 'custom.pencil' : 'general.plus'\"\r\n [loading]=\"submitting()\"\r\n [disabled]=\"submitDisabled() || this.propertyForm.invalid\"\r\n (click)=\"createOrEditProperty()\"\r\n />\r\n </ng-template>\r\n <div\r\n [formGroup]=\"propertyForm\"\r\n class=\"h-full py-4 h-full overflow-y-auto flex justify-center\"\r\n >\r\n <div class=\"w-2/3 flex flex-col gap-6\">\r\n @if (loading()) {\r\n <!-- Skeleton Loading State -->\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <div class=\"flex justify-between items-center gap-6\">\r\n <p-skeleton width=\"50%\" height=\"3rem\"></p-skeleton>\r\n <p-skeleton width=\"8rem\" height=\"2.5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"12rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"6rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n <p-skeleton height=\"3rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"8rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n } @else {\r\n <mt-dynamic-form\r\n [formConfig]=\"dynamicFormConfigMain()\"\r\n [formControlName]=\"'main'\"\r\n />\r\n @if (configurationFormConfig()) {\r\n <mt-dynamic-form\r\n formControlName=\"configuration\"\r\n [formConfig]=\"configurationFormConfig()!\"\r\n />\r\n } @else {\r\n <ng-container #configurationHost></ng-container>\r\n @if (!configurationComponentExists()) {\r\n @switch (propertyType()) {\r\n @case (\"User\") {\r\n <mt-user-configuration />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-percentage-configuration />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-lookup-configuration />\r\n }\r\n @case (\"LookupMultiSelect\") {\n <mt-lookup-configuration />\n }\n @case (\"EntityList\") {\n <mt-entity-list-configuration />\n }\n @case (\"API\") {\n <mt-api-configuration formControlName=\"configuration\" />\n }\n <!-- @case('ViewList') { REMOVED FOR NOW\r\n <mt-view-list-configuration />\r\n } -->\r\n @case (\"Attachment\") {\r\n <mt-attachment-configuration />\r\n }\r\n <!-- @case('ReferenceProperty') { REMOVED FOR NOW\r\n } -->\r\n @case (\"LookupModuleCheckList\") {\n <mt-check-list-form-configuration />\n }\n <!-- @case('LookupMatrix') { REMOVED FOR NOW\r\n <mt-lookup-configuration />\r\n } -->\r\n @case (\"Location\") {\r\n <mt-location-configuration />\r\n }\r\n }\r\n }\r\n }\r\n @if (isCalculated()) {\r\n <mt-card title=\"Formula\">\r\n <mt-formula-builder\r\n formControlName=\"formula\"\r\n [levelSchemaId]=\"formulaSchemaId()\"\r\n />\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</mt-page>\r\n", styles: [""], dependencies: [{ kind: "component", type: Page, selector: "mt-page", inputs: ["backButton", "backButtonIcon", "avatarIcon", "avatarStyle", "avatarShape", "title", "tabs", "activeTab", "contentClass", "contentId"], outputs: ["backButtonClick", "tabChange"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues"], outputs: ["runtimeMessagesChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormulaBuilder, selector: "mt-formula-builder", inputs: ["propertiesByPath", "levelSchemaId", "templateId", "placeholder", "hideToolbar", "hideStatusBar"], outputs: ["validationChange", "tokensChange"] }, { kind: "component", type: ApiConfiguration, selector: "mt-api-configuration" }, { kind: "component", type: CheckListFormConfiguration, selector: "mt-check-list-form-configuration" }, { kind: "component", type: EntityListConfiguration, selector: "mt-entity-list-configuration" }, { kind: "component", type: LocationConfiguration, selector: "mt-location-configuration" }, { kind: "component", type: LookupConfiguration, selector: "mt-lookup-configuration" }, { kind: "component", type: PercentageConfiguration, selector: "mt-percentage-configuration" }, { kind: "component", type: UserConfiguration, selector: "mt-user-configuration" }, { kind: "component", type: AttachmentConfiguration, selector: "mt-attachment-configuration" }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1.TranslocoPipe, name: "transloco" }] });
|
|
2236
2172
|
}
|
|
2237
2173
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PropertyForm, decorators: [{
|
|
2238
2174
|
type: Component,
|
|
@@ -2245,9 +2181,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
|
|
|
2245
2181
|
FormulaBuilder,
|
|
2246
2182
|
ApiConfiguration,
|
|
2247
2183
|
CheckListFormConfiguration,
|
|
2248
|
-
|
|
2249
|
-
EditableListViewConfiguration,
|
|
2250
|
-
InternalModuleConfiguration,
|
|
2184
|
+
EntityListConfiguration,
|
|
2251
2185
|
LocationConfiguration,
|
|
2252
2186
|
LookupConfiguration,
|
|
2253
2187
|
PercentageConfiguration,
|
|
@@ -2255,7 +2189,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
|
|
|
2255
2189
|
AttachmentConfiguration,
|
|
2256
2190
|
SkeletonModule,
|
|
2257
2191
|
TranslocoModule,
|
|
2258
|
-
], template: "<mt-page\r\n [title]=\"\r\n propertyId()\r\n ? ('properties.form.editProperty' | transloco)\r\n : ('properties.form.createNewProperty' | transloco)\r\n \"\r\n avatarIcon=\"custom.products-and-services\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-sky-50)',\r\n '--p-avatar-color': 'var(--p-sky-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n class=\"h-full\"\r\n>\r\n <ng-template #headerEnd>\r\n <mt-button\r\n class=\"mx-2\"\r\n [label]=\"submitLabel()\"\r\n [icon]=\"isEditing() ? 'custom.pencil' : 'general.plus'\"\r\n [loading]=\"submitting()\"\r\n [disabled]=\"submitDisabled() || this.propertyForm.invalid\"\r\n (click)=\"createOrEditProperty()\"\r\n />\r\n </ng-template>\r\n <div\r\n [formGroup]=\"propertyForm\"\r\n class=\"h-full py-4 h-full overflow-y-auto flex justify-center\"\r\n >\r\n <div class=\"w-2/3 flex flex-col gap-6\">\r\n @if (loading()) {\r\n <!-- Skeleton Loading State -->\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <div class=\"flex justify-between items-center gap-6\">\r\n <p-skeleton width=\"50%\" height=\"3rem\"></p-skeleton>\r\n <p-skeleton width=\"8rem\" height=\"2.5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"12rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"6rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n <p-skeleton height=\"3rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"8rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n } @else {\r\n <mt-dynamic-form\r\n [formConfig]=\"dynamicFormConfigMain()\"\r\n [formControlName]=\"'main'\"\r\n />\r\n @if (configurationFormConfig()) {\r\n <mt-dynamic-form\r\n formControlName=\"configuration\"\r\n [formConfig]=\"configurationFormConfig()!\"\r\n />\r\n } @else {\r\n <ng-container #configurationHost></ng-container>\r\n @if (!configurationComponentExists()) {\r\n @switch (propertyType()) {\r\n @case (\"User\") {\r\n <mt-user-configuration />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-percentage-configuration />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-lookup-configuration />\r\n }\r\n @case (\"LookupMultiSelect\") {\
|
|
2192
|
+
], template: "<mt-page\r\n [title]=\"\r\n propertyId()\r\n ? ('properties.form.editProperty' | transloco)\r\n : ('properties.form.createNewProperty' | transloco)\r\n \"\r\n avatarIcon=\"custom.products-and-services\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-sky-50)',\r\n '--p-avatar-color': 'var(--p-sky-700)',\r\n }\"\r\n (backButtonClick)=\"goBack()\"\r\n backButton\r\n class=\"h-full\"\r\n>\r\n <ng-template #headerEnd>\r\n <mt-button\r\n class=\"mx-2\"\r\n [label]=\"submitLabel()\"\r\n [icon]=\"isEditing() ? 'custom.pencil' : 'general.plus'\"\r\n [loading]=\"submitting()\"\r\n [disabled]=\"submitDisabled() || this.propertyForm.invalid\"\r\n (click)=\"createOrEditProperty()\"\r\n />\r\n </ng-template>\r\n <div\r\n [formGroup]=\"propertyForm\"\r\n class=\"h-full py-4 h-full overflow-y-auto flex justify-center\"\r\n >\r\n <div class=\"w-2/3 flex flex-col gap-6\">\r\n @if (loading()) {\r\n <!-- Skeleton Loading State -->\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <div class=\"flex justify-between items-center gap-6\">\r\n <p-skeleton width=\"50%\" height=\"3rem\"></p-skeleton>\r\n <p-skeleton width=\"8rem\" height=\"2.5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"12rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"6rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n <p-skeleton height=\"3rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n <div class=\"rounded-xl bg-white shadow-sm p-6 space-y-4\">\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1.5rem\"\r\n styleClass=\"mb-4\"\r\n ></p-skeleton>\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\"8rem\" styleClass=\"md:col-span-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n } @else {\r\n <mt-dynamic-form\r\n [formConfig]=\"dynamicFormConfigMain()\"\r\n [formControlName]=\"'main'\"\r\n />\r\n @if (configurationFormConfig()) {\r\n <mt-dynamic-form\r\n formControlName=\"configuration\"\r\n [formConfig]=\"configurationFormConfig()!\"\r\n />\r\n } @else {\r\n <ng-container #configurationHost></ng-container>\r\n @if (!configurationComponentExists()) {\r\n @switch (propertyType()) {\r\n @case (\"User\") {\r\n <mt-user-configuration />\r\n }\r\n @case (\"Percentage\") {\r\n <mt-percentage-configuration />\r\n }\r\n @case (\"Lookup\") {\r\n <mt-lookup-configuration />\r\n }\r\n @case (\"LookupMultiSelect\") {\n <mt-lookup-configuration />\n }\n @case (\"EntityList\") {\n <mt-entity-list-configuration />\n }\n @case (\"API\") {\n <mt-api-configuration formControlName=\"configuration\" />\n }\n <!-- @case('ViewList') { REMOVED FOR NOW\r\n <mt-view-list-configuration />\r\n } -->\r\n @case (\"Attachment\") {\r\n <mt-attachment-configuration />\r\n }\r\n <!-- @case('ReferenceProperty') { REMOVED FOR NOW\r\n } -->\r\n @case (\"LookupModuleCheckList\") {\n <mt-check-list-form-configuration />\n }\n <!-- @case('LookupMatrix') { REMOVED FOR NOW\r\n <mt-lookup-configuration />\r\n } -->\r\n @case (\"Location\") {\r\n <mt-location-configuration />\r\n }\r\n }\r\n }\r\n }\r\n @if (isCalculated()) {\r\n <mt-card title=\"Formula\">\r\n <mt-formula-builder\r\n formControlName=\"formula\"\r\n [levelSchemaId]=\"formulaSchemaId()\"\r\n />\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n</mt-page>\r\n" }]
|
|
2259
2193
|
}], ctorParameters: () => [], propDecorators: { propertyId: [{ type: i0.Input, args: [{ isSignal: true, alias: "propertyId", required: false }] }], configurationHost: [{
|
|
2260
2194
|
type: ViewChild,
|
|
2261
2195
|
args: ['configurationHost', { read: ViewContainerRef }]
|