@sd-angular/core 19.0.9 → 19.0.11
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/README.md +21 -21
- package/assets/STYLE-GUIDE.md +19 -19
- package/assets/fonts/fonts.scss +115 -115
- package/assets/scss/core/scrollbar.scss +30 -30
- package/assets/scss/core/utilities/_grid.scss +25 -19
- package/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.d.ts +2 -4
- package/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.d.ts +2 -4
- package/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.d.ts +5 -6
- package/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +1 -1
- package/components/form-generic/src/components/form-builder/components/table/control/table-control.component.d.ts +1 -1
- package/components/form-generic/src/components/form-render/form-render.component.d.ts +4 -6
- package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +1 -1
- package/components/form-generic/src/services/form-generic.service.d.ts +1 -3
- package/components/modal/src/modal.component.d.ts +1 -1
- package/components/tab-router/src/models/tab-router.model.d.ts +2 -1
- package/components/tab-router/src/services/tab-router.service.d.ts +0 -1
- package/components/table/src/components/command/desktop-command.component.d.ts +7 -7
- package/components/table/src/components/command/pipes/command.pipe.d.ts +1 -12
- package/components/table/src/components/command/pipes/filter.pipe.d.ts +1 -8
- package/components/table/src/components/filter/column-filter/column-filter.component.d.ts +2 -1
- package/components/table/src/models/table-column.model.d.ts +3 -2
- package/components/table/src/pipes/selection-disabled.pipe.d.ts +1 -1
- package/components/table/src/services/config.service.d.ts +4 -5
- package/fesm2022/sd-angular-core-components-anchor.mjs +14 -14
- package/fesm2022/sd-angular-core-components-anchor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-autoid-inspector.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-avatar.mjs +2 -2
- package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-chart.mjs +40 -40
- package/fesm2022/sd-angular-core-components-chart.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-ckeditor-styles.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-code-editor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-document-builder.mjs +0 -1
- package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-editor.mjs +2 -2
- package/fesm2022/sd-angular-core-components-editor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-form-generic.mjs +39 -68
- package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-inform.mjs +2 -2
- package/fesm2022/sd-angular-core-components-inform.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-mini-editor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-modal-resizable.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-modal.mjs +2 -2
- package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-operator.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-org-chart.mjs +2 -2
- package/fesm2022/sd-angular-core-components-org-chart.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-preview.mjs +4 -4
- package/fesm2022/sd-angular-core-components-preview.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-query-bar.mjs +10 -10
- package/fesm2022/sd-angular-core-components-query-bar.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-query-builder.mjs +2 -2
- package/fesm2022/sd-angular-core-components-query-builder.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-quick-action.mjs +2 -2
- package/fesm2022/sd-angular-core-components-quick-action.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-section.mjs +2 -2
- package/fesm2022/sd-angular-core-components-section.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-side-drawer.mjs +2 -2
- package/fesm2022/sd-angular-core-components-side-drawer.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-splitter.mjs +6 -6
- package/fesm2022/sd-angular-core-components-splitter.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-stepper.mjs +2 -2
- package/fesm2022/sd-angular-core-components-stepper.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-tab-router.mjs +31 -26
- package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-tab.mjs +2 -2
- package/fesm2022/sd-angular-core-components-tab.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-table.mjs +53 -64
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-tree.mjs +2 -2
- package/fesm2022/sd-angular-core-components-tree.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-view.mjs.map +1 -1
- package/fesm2022/sd-angular-core-directives.mjs +0 -1
- package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-chip-calendar.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-chip.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-date-range.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-datetime.mjs +4 -4
- package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-inline-text.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input-color.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input-number.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-label.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-label.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-models.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-select.mjs +47 -14
- package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
- package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
- package/fesm2022/sd-angular-core-interceptors.mjs +0 -2
- package/fesm2022/sd-angular-core-interceptors.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-auth.mjs +14 -38
- package/fesm2022/sd-angular-core-modules-auth.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-authom.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-keycloak.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-layout.mjs +7 -14
- package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-permission.mjs +5 -12
- package/fesm2022/sd-angular-core-modules-permission.mjs.map +1 -1
- package/fesm2022/sd-angular-core-pipes.mjs +4 -12
- package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-api.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-confirm.mjs +16 -21
- package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-docx.mjs +1 -8
- package/fesm2022/sd-angular-core-services-docx.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-excel.mjs +26 -19
- package/fesm2022/sd-angular-core-services-excel.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-license.mjs +5 -12
- package/fesm2022/sd-angular-core-services-license.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-notify.mjs +70 -87
- package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-storage.mjs +4 -12
- package/fesm2022/sd-angular-core-services-storage.mjs.map +1 -1
- package/fesm2022/sd-angular-core-utilities-extensions.mjs +43 -1
- package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
- package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
- package/fesm2022/sd-angular-core.mjs.map +1 -1
- package/forms/select/src/select-footer-action.directive.d.ts +5 -1
- package/forms/select/src/select.component.d.ts +4 -0
- package/modules/auth/guards/auth.guard.d.ts +2 -4
- package/modules/auth/guards/portal.guard.d.ts +2 -4
- package/modules/auth/services/auth.service.d.ts +3 -4
- package/modules/keycloak/htmls/auth-keycloak-error.html +54 -54
- package/modules/keycloak/htmls/silent-renew.html +7 -7
- package/modules/layout/modules/home/guards/home-redirect.guard.d.ts +3 -5
- package/modules/permission/src/guards/permission.guard.d.ts +2 -5
- package/package.json +80 -80
- package/pipes/src/format-number.pipe.d.ts +1 -3
- package/sd-angular-core-19.0.11.tgz +0 -0
- package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +3 -3
- package/services/excel/src/lib/excel.service.d.ts +0 -1
- package/services/excel/src/lib/spreadsheet-formula-injection.util.d.ts +5 -0
- package/services/license/src/license.service.d.ts +2 -3
- package/services/notify/src/components/toast/toast.component.d.ts +9 -13
- package/services/notify/src/notify.service.d.ts +4 -5
- package/services/storage/src/storage.service.d.ts +3 -4
- package/utilities/extensions/index.d.ts +1 -0
- package/utilities/extensions/src/object.extension.d.ts +8 -0
- package/sd-angular-core-19.0.9.tgz +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken,
|
|
2
|
+
import { InjectionToken, inject, Injectable, Pipe, SecurityContext, Input, ChangeDetectionStrategy, Component, ViewChild, EventEmitter, Output, ViewChildren, QueryList, ChangeDetectorRef, input, effect, untracked, viewChild, signal, computed } from '@angular/core';
|
|
3
3
|
import { Utilities, StringUtilities as StringUtilities$1 } from '@sdcorejs/utils/fns';
|
|
4
4
|
import { DateUtilities } from '@sd-angular/core/utilities';
|
|
5
5
|
import * as i3 from '@angular/cdk/drag-drop';
|
|
@@ -593,12 +593,9 @@ const ConvertToJavascriptExpression = (condition) => {
|
|
|
593
593
|
};
|
|
594
594
|
|
|
595
595
|
class FormGenericService {
|
|
596
|
-
configuration;
|
|
597
596
|
#selections;
|
|
598
597
|
#definitionHtmls;
|
|
599
|
-
|
|
600
|
-
this.configuration = configuration;
|
|
601
|
-
}
|
|
598
|
+
configuration = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });
|
|
602
599
|
get selections() {
|
|
603
600
|
return this.configuration?.form?.selections || [];
|
|
604
601
|
}
|
|
@@ -744,7 +741,7 @@ class FormGenericService {
|
|
|
744
741
|
return '';
|
|
745
742
|
},
|
|
746
743
|
};
|
|
747
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: FormGenericService, deps: [
|
|
744
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: FormGenericService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
748
745
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: FormGenericService, providedIn: 'root' });
|
|
749
746
|
}
|
|
750
747
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: FormGenericService, decorators: [{
|
|
@@ -752,12 +749,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
|
|
|
752
749
|
args: [{
|
|
753
750
|
providedIn: 'root',
|
|
754
751
|
}]
|
|
755
|
-
}]
|
|
756
|
-
type: Inject,
|
|
757
|
-
args: [SD_FORM_GENERIC_CONFIGURATION]
|
|
758
|
-
}, {
|
|
759
|
-
type: Optional
|
|
760
|
-
}] }] });
|
|
752
|
+
}] });
|
|
761
753
|
|
|
762
754
|
class SdFormRenderService {
|
|
763
755
|
componentViewedPipe;
|
|
@@ -2297,7 +2289,6 @@ class TableComponent {
|
|
|
2297
2289
|
#initTable = async () => {
|
|
2298
2290
|
// Xử lý columns
|
|
2299
2291
|
const columns = [];
|
|
2300
|
-
//console.log( this.component?.columns)
|
|
2301
2292
|
for (const column of this.component?.columns || []) {
|
|
2302
2293
|
// Ghi nhận lại vào object formRenderColumn để có thể xử lý customType hoặc một vài thuộc tính khác khi render UI
|
|
2303
2294
|
this.formRenderColumn[column.key] = column;
|
|
@@ -2450,7 +2441,6 @@ class TableComponent {
|
|
|
2450
2441
|
},
|
|
2451
2442
|
});
|
|
2452
2443
|
}
|
|
2453
|
-
//console.log( this.imageKeys ,this.fileKeys )
|
|
2454
2444
|
}
|
|
2455
2445
|
// await this.#onLoaded();
|
|
2456
2446
|
this.tableOption = {
|
|
@@ -2938,8 +2928,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
|
|
|
2938
2928
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2939
2929
|
/* eslint-disable @angular-eslint/no-input-rename */
|
|
2940
2930
|
class SdFormRender {
|
|
2941
|
-
ref;
|
|
2942
|
-
formGenericConfiguration;
|
|
2943
2931
|
formRenderItems = new QueryList();
|
|
2944
2932
|
form = new FormGroup({});
|
|
2945
2933
|
configuration;
|
|
@@ -2972,22 +2960,22 @@ class SdFormRender {
|
|
|
2972
2960
|
#configurationChanges = new Subject();
|
|
2973
2961
|
#defaultEntityChanges = new Subject();
|
|
2974
2962
|
#entityChanges = new Subject();
|
|
2963
|
+
#renderScheduled = false;
|
|
2964
|
+
#destroyed = false;
|
|
2975
2965
|
loadCompleted = false;
|
|
2976
2966
|
hashedValues;
|
|
2977
2967
|
formValue = {};
|
|
2978
2968
|
// Các component item của form-render sẽ lắng nghe thay đổi
|
|
2979
2969
|
setVariables = new Subject();
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
this.formGenericConfiguration = formGenericConfiguration;
|
|
2983
|
-
}
|
|
2970
|
+
ref = inject(ChangeDetectorRef);
|
|
2971
|
+
formGenericConfiguration = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });
|
|
2984
2972
|
ngAfterViewInit() {
|
|
2985
2973
|
this.#subscription.add(combineLatest([this.#configurationChanges, this.#entityChanges])
|
|
2986
2974
|
.pipe(startWith$1([]))
|
|
2987
2975
|
.subscribe(async () => {
|
|
2988
2976
|
if (this.entity && this.configuration?.components?.length) {
|
|
2989
2977
|
this.loadCompleted = true;
|
|
2990
|
-
this
|
|
2978
|
+
this.#scheduleRender();
|
|
2991
2979
|
if (this.configuration?.onLoaded) {
|
|
2992
2980
|
try {
|
|
2993
2981
|
this.configuration.onLoaded();
|
|
@@ -3018,11 +3006,12 @@ class SdFormRender {
|
|
|
3018
3006
|
this.hashedValues = hashedValues;
|
|
3019
3007
|
// Ở trạng thái view thì không có FormControl nên phải binding entity mới có dữ liệu cho formValue
|
|
3020
3008
|
this.formValue = { ...this.entity, ...values };
|
|
3021
|
-
this
|
|
3009
|
+
this.#scheduleRender();
|
|
3022
3010
|
}
|
|
3023
3011
|
}));
|
|
3024
3012
|
}
|
|
3025
3013
|
ngOnDestroy() {
|
|
3014
|
+
this.#destroyed = true;
|
|
3026
3015
|
this.#subscription.unsubscribe();
|
|
3027
3016
|
}
|
|
3028
3017
|
// Hàm này sẽ đi qua các components và các columns trong table để xử lý upload file
|
|
@@ -3062,18 +3051,25 @@ class SdFormRender {
|
|
|
3062
3051
|
}
|
|
3063
3052
|
return messages;
|
|
3064
3053
|
};
|
|
3065
|
-
|
|
3054
|
+
#scheduleRender() {
|
|
3055
|
+
if (this.#renderScheduled || this.#destroyed) {
|
|
3056
|
+
return;
|
|
3057
|
+
}
|
|
3058
|
+
this.#renderScheduled = true;
|
|
3059
|
+
queueMicrotask(() => {
|
|
3060
|
+
this.#renderScheduled = false;
|
|
3061
|
+
if (!this.#destroyed) {
|
|
3062
|
+
this.ref.detectChanges();
|
|
3063
|
+
}
|
|
3064
|
+
});
|
|
3065
|
+
}
|
|
3066
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdFormRender, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3066
3067
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdFormRender, isStandalone: true, selector: "sd-form-render", inputs: { form: "form", _configuration: ["configuration", "_configuration"], _default: ["defaultEntity", "_default"], _entity: ["entity", "_entity"], _properties: ["properties", "_properties"], _viewed: ["viewed", "_viewed"] }, viewQueries: [{ propertyName: "formRenderItems", predicate: LibItemComponent, descendants: true }], ngImport: i0, template: "@if (form && loadCompleted && hashedValues) {\r\n <div class=\"row mx-0\">\r\n @for (component of configuration.components; track component.id) {\r\n @let expression = hashedValues | whenExpression: component : formValue;\r\n @if (!expression.hidden) {\r\n @if (component.type === 'group') {\r\n @if (!!component.components.length) {\r\n <div class=\"col-12 mt-16\">\r\n <sd-section [title]=\"component.label\" [icon]=\"component.properties.icon\">\r\n <div class=\"row mx-0\">\r\n @for (childComponent of component.components; track childComponent.id) {\r\n @let childExpression = hashedValues | whenExpression: childComponent : formValue;\r\n @if (!childExpression.hidden) {\r\n <lib-item\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"childComponent\"\r\n [required]=\"childExpression.required\"\r\n [disabled]=\"childExpression.disabled\"\r\n [viewed]=\"viewed\"></lib-item>\r\n }\r\n }\r\n </div>\r\n </sd-section>\r\n </div>\r\n }\r\n } @else {\r\n <lib-item\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"expression.required\"\r\n [disabled]=\"expression.disabled\"\r\n [viewed]=\"viewed\"></lib-item>\r\n }\r\n }\r\n }\r\n <variable [variables]=\"configuration.variables\" [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" ></variable>\r\n </div>\r\n}\r\n", styles: [":host{display:contents}\n"], dependencies: [{ kind: "component", type: SdSection, selector: "sd-section", inputs: ["title", "subTitle", "icon", "iconColor", "collapsed", "collapsible", "collapsable", "hideHeader", "noPaddingBody"], outputs: ["collapsedChange"] }, { kind: "component", type: LibItemComponent, selector: "lib-item", inputs: ["setVariables", "form", "entity", "component", "disabled", "required", "viewed", "validator"] }, { kind: "pipe", type: WhenExpressionPipe, name: "whenExpression" }, { kind: "component", type: VariableComponent, selector: "variable", inputs: ["variables", "setVariables", "form", "entity"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3067
3068
|
}
|
|
3068
3069
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdFormRender, decorators: [{
|
|
3069
3070
|
type: Component,
|
|
3070
3071
|
args: [{ selector: 'sd-form-render', changeDetection: ChangeDetectionStrategy.OnPush, imports: [SdSection, LibItemComponent, WhenExpressionPipe, VariableComponent], template: "@if (form && loadCompleted && hashedValues) {\r\n <div class=\"row mx-0\">\r\n @for (component of configuration.components; track component.id) {\r\n @let expression = hashedValues | whenExpression: component : formValue;\r\n @if (!expression.hidden) {\r\n @if (component.type === 'group') {\r\n @if (!!component.components.length) {\r\n <div class=\"col-12 mt-16\">\r\n <sd-section [title]=\"component.label\" [icon]=\"component.properties.icon\">\r\n <div class=\"row mx-0\">\r\n @for (childComponent of component.components; track childComponent.id) {\r\n @let childExpression = hashedValues | whenExpression: childComponent : formValue;\r\n @if (!childExpression.hidden) {\r\n <lib-item\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"childComponent\"\r\n [required]=\"childExpression.required\"\r\n [disabled]=\"childExpression.disabled\"\r\n [viewed]=\"viewed\"></lib-item>\r\n }\r\n }\r\n </div>\r\n </sd-section>\r\n </div>\r\n }\r\n } @else {\r\n <lib-item\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"expression.required\"\r\n [disabled]=\"expression.disabled\"\r\n [viewed]=\"viewed\"></lib-item>\r\n }\r\n }\r\n }\r\n <variable [variables]=\"configuration.variables\" [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" ></variable>\r\n </div>\r\n}\r\n", styles: [":host{display:contents}\n"] }]
|
|
3071
|
-
}],
|
|
3072
|
-
type: Optional
|
|
3073
|
-
}, {
|
|
3074
|
-
type: Inject,
|
|
3075
|
-
args: [SD_FORM_GENERIC_CONFIGURATION]
|
|
3076
|
-
}] }], propDecorators: { formRenderItems: [{
|
|
3072
|
+
}], propDecorators: { formRenderItems: [{
|
|
3077
3073
|
type: ViewChildren,
|
|
3078
3074
|
args: [LibItemComponent]
|
|
3079
3075
|
}], form: [{
|
|
@@ -3512,7 +3508,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
|
|
|
3512
3508
|
// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh
|
|
3513
3509
|
// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc
|
|
3514
3510
|
class AttributeTemplate {
|
|
3515
|
-
formGenericConfiguration;
|
|
3516
3511
|
templates = [];
|
|
3517
3512
|
component;
|
|
3518
3513
|
set _component(component) {
|
|
@@ -3520,9 +3515,7 @@ class AttributeTemplate {
|
|
|
3520
3515
|
this.templates = this.formGenericConfiguration?.form?.templates?.filter(e => e.component?.type === this.component?.type) || [];
|
|
3521
3516
|
}
|
|
3522
3517
|
sdChange = new EventEmitter();
|
|
3523
|
-
|
|
3524
|
-
this.formGenericConfiguration = formGenericConfiguration;
|
|
3525
|
-
}
|
|
3518
|
+
formGenericConfiguration = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });
|
|
3526
3519
|
onChange = (value) => {
|
|
3527
3520
|
if (typeof value === 'string') {
|
|
3528
3521
|
const template = this.templates?.find(e => e.value === value);
|
|
@@ -3531,18 +3524,13 @@ class AttributeTemplate {
|
|
|
3531
3524
|
}
|
|
3532
3525
|
}
|
|
3533
3526
|
};
|
|
3534
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: AttributeTemplate, deps: [
|
|
3527
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: AttributeTemplate, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3535
3528
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: AttributeTemplate, isStandalone: true, selector: "attribute-template", inputs: { _component: ["component", "_component"] }, outputs: { sdChange: "sdChange" }, ngImport: i0, template: "@if (templates.length) {\r\n <!-- <div class=\"d-flex align-items-center py-4\">\r\n <div class=\"T14M\" style=\"flex: 1\">D\u1EEF li\u1EC7u m\u1EABu</div>\r\n <sd-autocomplete\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [(model)]=\"component.template\"\r\n [items]=\"templates\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-autocomplete>\r\n </div> -->\r\n <sd-autocomplete\r\n class=\"py-8\"\r\n size=\"sm\"\r\n [label]=\"'core.component.form-builder.template-data' | translate\"\r\n [(model)]=\"component.template\"\r\n [items]=\"templates\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-autocomplete>\r\n}\r\n", dependencies: [{ kind: "component", type: SdAutocomplete$1, selector: "sd-autocomplete", inputs: ["autoId", "name", "size", "form", "label", "helperText", "placeholder", "valueField", "displayField", "disabledField", "limit", "cacheChecksum", "hyperlink", "items", "hideInlineError", "addable", "required", "disabled", "viewed", "clearable", "validator", "inlineError", "appearance", "model"], outputs: ["modelChange", "sdChange", "sdSelection", "sdAdd"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
3536
3529
|
}
|
|
3537
3530
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: AttributeTemplate, decorators: [{
|
|
3538
3531
|
type: Component,
|
|
3539
3532
|
args: [{ selector: 'attribute-template', imports: [SdAutocomplete$1, TranslatePipe], template: "@if (templates.length) {\r\n <!-- <div class=\"d-flex align-items-center py-4\">\r\n <div class=\"T14M\" style=\"flex: 1\">D\u1EEF li\u1EC7u m\u1EABu</div>\r\n <sd-autocomplete\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [(model)]=\"component.template\"\r\n [items]=\"templates\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-autocomplete>\r\n </div> -->\r\n <sd-autocomplete\r\n class=\"py-8\"\r\n size=\"sm\"\r\n [label]=\"'core.component.form-builder.template-data' | translate\"\r\n [(model)]=\"component.template\"\r\n [items]=\"templates\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-autocomplete>\r\n}\r\n" }]
|
|
3540
|
-
}],
|
|
3541
|
-
type: Optional
|
|
3542
|
-
}, {
|
|
3543
|
-
type: Inject,
|
|
3544
|
-
args: [SD_FORM_GENERIC_CONFIGURATION]
|
|
3545
|
-
}] }], propDecorators: { _component: [{
|
|
3533
|
+
}], propDecorators: { _component: [{
|
|
3546
3534
|
type: Input,
|
|
3547
3535
|
args: [{ alias: 'component', required: true }]
|
|
3548
3536
|
}], sdChange: [{
|
|
@@ -5352,7 +5340,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
|
|
|
5352
5340
|
// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh
|
|
5353
5341
|
// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc
|
|
5354
5342
|
class AttributeTable {
|
|
5355
|
-
formGenericConfiguration;
|
|
5356
5343
|
modal;
|
|
5357
5344
|
form = new FormGroup({});
|
|
5358
5345
|
components;
|
|
@@ -5365,7 +5352,8 @@ class AttributeTable {
|
|
|
5365
5352
|
}
|
|
5366
5353
|
}
|
|
5367
5354
|
columnsKeyChange = new EventEmitter();
|
|
5368
|
-
|
|
5355
|
+
formGenericConfiguration = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });
|
|
5356
|
+
tables = this.formGenericConfiguration?.form?.tables || [];
|
|
5369
5357
|
// Columns
|
|
5370
5358
|
types = TableColumnTypes;
|
|
5371
5359
|
columns = [];
|
|
@@ -5376,10 +5364,6 @@ class AttributeTable {
|
|
|
5376
5364
|
}
|
|
5377
5365
|
columnsChange = new EventEmitter();
|
|
5378
5366
|
column;
|
|
5379
|
-
constructor(formGenericConfiguration) {
|
|
5380
|
-
this.formGenericConfiguration = formGenericConfiguration;
|
|
5381
|
-
this.tables = this.formGenericConfiguration?.form?.tables || [];
|
|
5382
|
-
}
|
|
5383
5367
|
onChangeColumnsKey = (value) => {
|
|
5384
5368
|
this.columnsKeyChange.emit(value);
|
|
5385
5369
|
const table = this.tables.find(e => e.value === value);
|
|
@@ -5445,7 +5429,7 @@ class AttributeTable {
|
|
|
5445
5429
|
}
|
|
5446
5430
|
this.modal?.close();
|
|
5447
5431
|
};
|
|
5448
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: AttributeTable, deps: [
|
|
5432
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: AttributeTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5449
5433
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: AttributeTable, isStandalone: true, selector: "attribute-table", inputs: { components: "components", variables: "variables", _columnsKey: ["columnsKey", "_columnsKey"], _columns: ["columns", "_columns"] }, outputs: { columnsKeyChange: "columnsKeyChange", columnsChange: "columnsChange" }, viewQueries: [{ propertyName: "modal", first: true, predicate: SdModal, descendants: true }], ngImport: i0, template: "<details class=\"fb-section\" open>\r\n <summary class=\"fb-section__head\">\r\n <span class=\"msi\">view_column</span>\r\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.column-list' | translate }}</span>\r\n <span class=\"msi chev\">chevron_right</span>\r\n </summary>\r\n <div class=\"fb-section__body\">\r\n @if (tables.length) {\r\n <sd-autocomplete\r\n class=\"py-8\"\r\n [label]=\"'core.component.form-builder.column-data' | translate\"\r\n [(model)]=\"columnsKey\"\r\n [items]=\"tables\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChangeColumnsKey($event)\"\r\n hideInlineError></sd-autocomplete>\r\n }\r\n @if (!columnsKey) {\r\n <div class=\"fb-columns-list\">\r\n @for (item of columns; track item.key; let idx = $index) {\r\n <div class=\"fb-column-row\" [class.is-active]=\"idx === selectedIdx\">\r\n <span class=\"fb-column-row__type-icon\"><span class=\"msi\">{{ columnTypeSymbol(item.type) }}</span></span>\r\n <div class=\"fb-column-row__meta\">\r\n <div class=\"fb-column-row__label\">\r\n {{ item.label }}\r\n @if (item.validate?.required) {\r\n <span class=\"fb-column-row__req\">*</span>\r\n }\r\n </div>\r\n <div class=\"fb-column-row__sub mono\">{{ item.key }} \u00B7 {{ item.type }}</div>\r\n </div>\r\n <button type=\"button\" class=\"fb-icon-btn\" [attr.aria-label]=\"'core.component.form-builder.column-config' | translate\" (click)=\"editColumn(idx)\">\r\n <span class=\"msi\">edit</span>\r\n </button>\r\n <button type=\"button\" class=\"fb-icon-btn danger\" [attr.aria-label]=\"'core.component.form-builder.delete' | translate\" (click)=\"removeColumn(idx)\">\r\n <span class=\"msi\">delete</span>\r\n </button>\r\n </div>\r\n }\r\n <a class=\"fb-add-link\" (click)=\"addColumn()\">\r\n <span class=\"msi\">add</span>\r\n {{ 'core.component.form-builder.add-column' | translate }}\r\n </a>\r\n </div>\r\n }\r\n </div>\r\n</details>\r\n\r\n<sd-modal [title]=\"'core.component.form-builder.column-config' | translate\" width=\"600px\">\r\n @if (column) {\r\n <details class=\"fb-section\" open>\r\n <summary class=\"fb-section__head\">\r\n <span class=\"msi\">info</span>\r\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\r\n <span class=\"msi chev\">chevron_right</span>\r\n </summary>\r\n <div class=\"fb-section__body\">\r\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"column.key\"></attribute-input>\r\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.column-name' | translate\" [(model)]=\"column.label\"></attribute-input>\r\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.width' | translate\" [(model)]=\"column.width\"></attribute-input>\r\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"column.validate!.required\"></attribute-switch>\r\n <attribute-select [form]=\"form\" [label]=\"'core.component.form-builder.data-type' | translate\" [(model)]=\"column.type\" [items]=\"types\"></attribute-select>\r\n </div>\r\n </details>\r\n @if (column.type === 'boolean') {\r\n <details class=\"fb-section\" open>\r\n <summary class=\"fb-section__head\">\r\n <span class=\"msi\">visibility</span>\r\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\r\n <span class=\"msi chev\">chevron_right</span>\r\n </summary>\r\n <div class=\"fb-section__body\">\r\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.show-when-true' | translate\" [(model)]=\"column.displayOnTrue\"></attribute-input>\r\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.show-when-false' | translate\" [(model)]=\"column.displayOnFalse\"></attribute-input>\r\n </div>\r\n </details>\r\n } @else if (column.type === 'values') {\r\n <attribute-selection\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [component]=\"column\"\r\n [(valuesKey)]=\"column.valuesKey\"\r\n [(values)]=\"column.values\"></attribute-selection>\r\n } @else if (column.type === 'file' || column.type === 'image') {\r\n <details class=\"fb-section\" open>\r\n <summary class=\"fb-section__head\">\r\n <span class=\"msi\">settings</span>\r\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\r\n <span class=\"msi chev\">chevron_right</span>\r\n </summary>\r\n <div class=\"fb-section__body\">\r\n <attribute-parameter [label]=\"'core.component.form-builder.assign-parameter' | translate\" [components]=\"components\" [(model)]=\"column!.args\"></attribute-parameter>\r\n </div>\r\n </details>\r\n }\r\n }\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.save' | translate\" (click)=\"onConfirm()\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n", dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: SdAutocomplete$1, selector: "sd-autocomplete", inputs: ["autoId", "name", "size", "form", "label", "helperText", "placeholder", "valueField", "displayField", "disabledField", "limit", "cacheChecksum", "hyperlink", "items", "hideInlineError", "addable", "required", "disabled", "viewed", "clearable", "validator", "inlineError", "appearance", "model"], outputs: ["modelChange", "sdChange", "sdSelection", "sdAdd"] }, { kind: "component", type: SdButton, selector: "sd-button", inputs: ["autoId", "type", "color", "size", "fontSet", "title", "width", "tooltip", "prefixIcon", "suffixIcon", "disabled", "loading", "block", "htmlType"], outputs: ["click"] }, { kind: "component", type: SdModal, selector: "sd-modal", inputs: ["autoId", "title", "color", "width", "height", "view", "modalClass", "lazyLoadContent", "hideClose", "disableBackdropClose"], outputs: ["sdClosed"] }, { kind: "component", type: AttributeSelection, selector: "attribute-selection", inputs: ["components", "variables", "component", "valuesKey", "values"], outputs: ["valuesKeyChange", "valuesChange", "sdChange"] }, { kind: "component", type: AttributeInput, selector: "attribute-input", inputs: ["form", "label", "disabled", "model"], outputs: ["modelChange", "sdChange"] }, { kind: "component", type: AttributeSelect, selector: "attribute-select", inputs: ["form", "label", "disabled", "multiple", "items", "model"], outputs: ["modelChange", "sdChange"] }, { kind: "component", type: AttributeSwitch, selector: "attribute-switch", inputs: ["form", "label", "model"], outputs: ["modelChange"] }, { kind: "component", type: AttributeParameter, selector: "attribute-parameter", inputs: ["components", "label", "model"], outputs: ["modelChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
5450
5434
|
}
|
|
5451
5435
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: AttributeTable, decorators: [{
|
|
@@ -5463,12 +5447,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImpo
|
|
|
5463
5447
|
AttributeSwitch,
|
|
5464
5448
|
AttributeParameter, TranslatePipe
|
|
5465
5449
|
], template: "<details class=\"fb-section\" open>\r\n <summary class=\"fb-section__head\">\r\n <span class=\"msi\">view_column</span>\r\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.column-list' | translate }}</span>\r\n <span class=\"msi chev\">chevron_right</span>\r\n </summary>\r\n <div class=\"fb-section__body\">\r\n @if (tables.length) {\r\n <sd-autocomplete\r\n class=\"py-8\"\r\n [label]=\"'core.component.form-builder.column-data' | translate\"\r\n [(model)]=\"columnsKey\"\r\n [items]=\"tables\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChangeColumnsKey($event)\"\r\n hideInlineError></sd-autocomplete>\r\n }\r\n @if (!columnsKey) {\r\n <div class=\"fb-columns-list\">\r\n @for (item of columns; track item.key; let idx = $index) {\r\n <div class=\"fb-column-row\" [class.is-active]=\"idx === selectedIdx\">\r\n <span class=\"fb-column-row__type-icon\"><span class=\"msi\">{{ columnTypeSymbol(item.type) }}</span></span>\r\n <div class=\"fb-column-row__meta\">\r\n <div class=\"fb-column-row__label\">\r\n {{ item.label }}\r\n @if (item.validate?.required) {\r\n <span class=\"fb-column-row__req\">*</span>\r\n }\r\n </div>\r\n <div class=\"fb-column-row__sub mono\">{{ item.key }} \u00B7 {{ item.type }}</div>\r\n </div>\r\n <button type=\"button\" class=\"fb-icon-btn\" [attr.aria-label]=\"'core.component.form-builder.column-config' | translate\" (click)=\"editColumn(idx)\">\r\n <span class=\"msi\">edit</span>\r\n </button>\r\n <button type=\"button\" class=\"fb-icon-btn danger\" [attr.aria-label]=\"'core.component.form-builder.delete' | translate\" (click)=\"removeColumn(idx)\">\r\n <span class=\"msi\">delete</span>\r\n </button>\r\n </div>\r\n }\r\n <a class=\"fb-add-link\" (click)=\"addColumn()\">\r\n <span class=\"msi\">add</span>\r\n {{ 'core.component.form-builder.add-column' | translate }}\r\n </a>\r\n </div>\r\n }\r\n </div>\r\n</details>\r\n\r\n<sd-modal [title]=\"'core.component.form-builder.column-config' | translate\" width=\"600px\">\r\n @if (column) {\r\n <details class=\"fb-section\" open>\r\n <summary class=\"fb-section__head\">\r\n <span class=\"msi\">info</span>\r\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\r\n <span class=\"msi chev\">chevron_right</span>\r\n </summary>\r\n <div class=\"fb-section__body\">\r\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"column.key\"></attribute-input>\r\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.column-name' | translate\" [(model)]=\"column.label\"></attribute-input>\r\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.width' | translate\" [(model)]=\"column.width\"></attribute-input>\r\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"column.validate!.required\"></attribute-switch>\r\n <attribute-select [form]=\"form\" [label]=\"'core.component.form-builder.data-type' | translate\" [(model)]=\"column.type\" [items]=\"types\"></attribute-select>\r\n </div>\r\n </details>\r\n @if (column.type === 'boolean') {\r\n <details class=\"fb-section\" open>\r\n <summary class=\"fb-section__head\">\r\n <span class=\"msi\">visibility</span>\r\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\r\n <span class=\"msi chev\">chevron_right</span>\r\n </summary>\r\n <div class=\"fb-section__body\">\r\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.show-when-true' | translate\" [(model)]=\"column.displayOnTrue\"></attribute-input>\r\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.show-when-false' | translate\" [(model)]=\"column.displayOnFalse\"></attribute-input>\r\n </div>\r\n </details>\r\n } @else if (column.type === 'values') {\r\n <attribute-selection\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [component]=\"column\"\r\n [(valuesKey)]=\"column.valuesKey\"\r\n [(values)]=\"column.values\"></attribute-selection>\r\n } @else if (column.type === 'file' || column.type === 'image') {\r\n <details class=\"fb-section\" open>\r\n <summary class=\"fb-section__head\">\r\n <span class=\"msi\">settings</span>\r\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\r\n <span class=\"msi chev\">chevron_right</span>\r\n </summary>\r\n <div class=\"fb-section__body\">\r\n <attribute-parameter [label]=\"'core.component.form-builder.assign-parameter' | translate\" [components]=\"components\" [(model)]=\"column!.args\"></attribute-parameter>\r\n </div>\r\n </details>\r\n }\r\n }\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.save' | translate\" (click)=\"onConfirm()\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n" }]
|
|
5466
|
-
}],
|
|
5467
|
-
type: Optional
|
|
5468
|
-
}, {
|
|
5469
|
-
type: Inject,
|
|
5470
|
-
args: [SD_FORM_GENERIC_CONFIGURATION]
|
|
5471
|
-
}] }], propDecorators: { modal: [{
|
|
5450
|
+
}], propDecorators: { modal: [{
|
|
5472
5451
|
type: ViewChild,
|
|
5473
5452
|
args: [SdModal]
|
|
5474
5453
|
}], components: [{
|
|
@@ -5622,11 +5601,11 @@ class TableControl {
|
|
|
5622
5601
|
return rowIndex === 1 ? 'Sample value' : '—';
|
|
5623
5602
|
};
|
|
5624
5603
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TableControl, deps: [{ token: i0.ChangeDetectorRef }, { token: BuilderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
5625
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: TableControl, isStandalone: true, selector: "table-control", inputs: { _component: ["component", "_component"] }, ngImport: i0, template: "<div class=\"fb-table-control\" [class.is-viewed]=\"component.properties?.viewed\">\n <div class=\"fb-table-control__label\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span>*</span>\n }\n </div>\n\n @if (component.columns?.length) {\n <div class=\"fb-table-control__frame\">\n <div class=\"fb-table-control__header\">\n @for (column of component.columns; track column.key) {\n <div class=\"fb-table-control__cell\" [style.width]=\"column.width\">\n <span class=\"fb-table-control__icon msi\">{{ columnIcon(column.type) }}</span>\n <span>{{ column.label }}</span>\n @if (column.validate?.required) {\n <span class=\"fb-table-control__required\">*</span>\n }\n </div>\n }\n </div>\n\n <div class=\"fb-table-control__body\">\n @for (row of sampleRows(); track row) {\n <div class=\"fb-table-control__row\">\n @for (column of component.columns; track column.key) {\n <div class=\"fb-table-control__cell\" [style.width]=\"column.width\">\n {{ cellPreview(column, row) }}\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <button type=\"button\" class=\"fb-table-control__add\">\n <span>+</span>\n Add row\n </button>\n }\n</div>\n", styles: [":host{display:block;width:100%;max-width:100%;min-width:0}.fb-table-control{display:flex;flex-direction:column;gap:8px;width:100%;max-width:100%;min-width:0;overflow:hidden;color:var(--sd-black500, #212121)}.fb-table-control__label{font-size:14px;line-height:20px;font-weight:600;color:var(--sd-black400, #757575)}.fb-table-control__label span{color:var(--sd-error, #F82C13)}.fb-table-control__frame{width:100%;max-width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;border:1px solid var(--sd-black200, #E6E6E6);border-radius:10px;background:#fff;overscroll-behavior-x:contain}.fb-table-control__header,.fb-table-control__row{display:flex;width:max-content;min-width:max-content}.fb-table-control__header{min-height:44px;background:color-mix(in srgb,var(--sd-black100, #F2F2F2) 70%,#fff);border-bottom:1px solid var(--sd-black200, #E6E6E6)}.fb-table-control__row{min-height:42px;border-bottom:1px solid var(--sd-black200, #E6E6E6)}.fb-table-control__row:last-child{border-bottom:0}.fb-table-control__cell{width:136px;flex:0 0 auto;min-width:96px;display:inline-flex;align-items:center;gap:7px;padding:10px 14px;color:var(--sd-black400, #757575);font-size:13px;line-height:18px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-right:0}.fb-table-control__cell:last-child{border-right:0}.fb-table-control__header .fb-table-control__cell{color:var(--sd-black400, #757575);font-weight:700}.fb-table-control__icon{width:16px;height:16px;flex:0 0 16px;display:inline-flex;align-items:center;justify-content:center;color:var(--sd-black400, #757575);font-size:16px;line-height:1;font-variation-settings:\"FILL\" 0,\"wght\" 300,\"GRAD\" 0,\"opsz\" 20}.fb-table-control__required{color:var(--sd-error, #F82C13)}.fb-table-control__add{align-self:flex-start;height:28px;border:0;background:transparent;color:var(--sd-primary, #2A66F4);display:inline-flex;align-items:center;gap:8px;padding:0 6px;font-size:14px;font-weight:600;cursor:default}.fb-table-control__add span{font-size:18px;line-height:1}.fb-table-control.is-viewed .fb-table-control__header{background:var(--sd-black100, #F2F2F2)}.fb-table-control.is-viewed .fb-table-control__add{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5604
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: TableControl, isStandalone: true, selector: "table-control", inputs: { _component: ["component", "_component"] }, ngImport: i0, template: "<div class=\"fb-table-control\" [class.is-viewed]=\"component.properties?.viewed\">\r\n <div class=\"fb-table-control__label\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span>*</span>\r\n }\r\n </div>\r\n\r\n @if (component.columns?.length) {\r\n <div class=\"fb-table-control__frame\">\r\n <div class=\"fb-table-control__header\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"fb-table-control__cell\" [style.width]=\"column.width\">\r\n <span class=\"fb-table-control__icon msi\">{{ columnIcon(column.type) }}</span>\r\n <span>{{ column.label }}</span>\r\n @if (column.validate?.required) {\r\n <span class=\"fb-table-control__required\">*</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"fb-table-control__body\">\r\n @for (row of sampleRows(); track row) {\r\n <div class=\"fb-table-control__row\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"fb-table-control__cell\" [style.width]=\"column.width\">\r\n {{ cellPreview(column, row) }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <button type=\"button\" class=\"fb-table-control__add\">\r\n <span>+</span>\r\n Add row\r\n </button>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;max-width:100%;min-width:0}.fb-table-control{display:flex;flex-direction:column;gap:8px;width:100%;max-width:100%;min-width:0;overflow:hidden;color:var(--sd-black500, #212121)}.fb-table-control__label{font-size:14px;line-height:20px;font-weight:600;color:var(--sd-black400, #757575)}.fb-table-control__label span{color:var(--sd-error, #F82C13)}.fb-table-control__frame{width:100%;max-width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;border:1px solid var(--sd-black200, #E6E6E6);border-radius:10px;background:#fff;overscroll-behavior-x:contain}.fb-table-control__header,.fb-table-control__row{display:flex;width:max-content;min-width:max-content}.fb-table-control__header{min-height:44px;background:color-mix(in srgb,var(--sd-black100, #F2F2F2) 70%,#fff);border-bottom:1px solid var(--sd-black200, #E6E6E6)}.fb-table-control__row{min-height:42px;border-bottom:1px solid var(--sd-black200, #E6E6E6)}.fb-table-control__row:last-child{border-bottom:0}.fb-table-control__cell{width:136px;flex:0 0 auto;min-width:96px;display:inline-flex;align-items:center;gap:7px;padding:10px 14px;color:var(--sd-black400, #757575);font-size:13px;line-height:18px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-right:0}.fb-table-control__cell:last-child{border-right:0}.fb-table-control__header .fb-table-control__cell{color:var(--sd-black400, #757575);font-weight:700}.fb-table-control__icon{width:16px;height:16px;flex:0 0 16px;display:inline-flex;align-items:center;justify-content:center;color:var(--sd-black400, #757575);font-size:16px;line-height:1;font-variation-settings:\"FILL\" 0,\"wght\" 300,\"GRAD\" 0,\"opsz\" 20}.fb-table-control__required{color:var(--sd-error, #F82C13)}.fb-table-control__add{align-self:flex-start;height:28px;border:0;background:transparent;color:var(--sd-primary, #2A66F4);display:inline-flex;align-items:center;gap:8px;padding:0 6px;font-size:14px;font-weight:600;cursor:default}.fb-table-control__add span{font-size:18px;line-height:1}.fb-table-control.is-viewed .fb-table-control__header{background:var(--sd-black100, #F2F2F2)}.fb-table-control.is-viewed .fb-table-control__add{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5626
5605
|
}
|
|
5627
5606
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TableControl, decorators: [{
|
|
5628
5607
|
type: Component,
|
|
5629
|
-
args: [{ selector: 'table-control', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule], template: "<div class=\"fb-table-control\" [class.is-viewed]=\"component.properties?.viewed\">\n <div class=\"fb-table-control__label\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span>*</span>\n }\n </div>\n\n @if (component.columns?.length) {\n <div class=\"fb-table-control__frame\">\n <div class=\"fb-table-control__header\">\n @for (column of component.columns; track column.key) {\n <div class=\"fb-table-control__cell\" [style.width]=\"column.width\">\n <span class=\"fb-table-control__icon msi\">{{ columnIcon(column.type) }}</span>\n <span>{{ column.label }}</span>\n @if (column.validate?.required) {\n <span class=\"fb-table-control__required\">*</span>\n }\n </div>\n }\n </div>\n\n <div class=\"fb-table-control__body\">\n @for (row of sampleRows(); track row) {\n <div class=\"fb-table-control__row\">\n @for (column of component.columns; track column.key) {\n <div class=\"fb-table-control__cell\" [style.width]=\"column.width\">\n {{ cellPreview(column, row) }}\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <button type=\"button\" class=\"fb-table-control__add\">\n <span>+</span>\n Add row\n </button>\n }\n</div>\n", styles: [":host{display:block;width:100%;max-width:100%;min-width:0}.fb-table-control{display:flex;flex-direction:column;gap:8px;width:100%;max-width:100%;min-width:0;overflow:hidden;color:var(--sd-black500, #212121)}.fb-table-control__label{font-size:14px;line-height:20px;font-weight:600;color:var(--sd-black400, #757575)}.fb-table-control__label span{color:var(--sd-error, #F82C13)}.fb-table-control__frame{width:100%;max-width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;border:1px solid var(--sd-black200, #E6E6E6);border-radius:10px;background:#fff;overscroll-behavior-x:contain}.fb-table-control__header,.fb-table-control__row{display:flex;width:max-content;min-width:max-content}.fb-table-control__header{min-height:44px;background:color-mix(in srgb,var(--sd-black100, #F2F2F2) 70%,#fff);border-bottom:1px solid var(--sd-black200, #E6E6E6)}.fb-table-control__row{min-height:42px;border-bottom:1px solid var(--sd-black200, #E6E6E6)}.fb-table-control__row:last-child{border-bottom:0}.fb-table-control__cell{width:136px;flex:0 0 auto;min-width:96px;display:inline-flex;align-items:center;gap:7px;padding:10px 14px;color:var(--sd-black400, #757575);font-size:13px;line-height:18px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-right:0}.fb-table-control__cell:last-child{border-right:0}.fb-table-control__header .fb-table-control__cell{color:var(--sd-black400, #757575);font-weight:700}.fb-table-control__icon{width:16px;height:16px;flex:0 0 16px;display:inline-flex;align-items:center;justify-content:center;color:var(--sd-black400, #757575);font-size:16px;line-height:1;font-variation-settings:\"FILL\" 0,\"wght\" 300,\"GRAD\" 0,\"opsz\" 20}.fb-table-control__required{color:var(--sd-error, #F82C13)}.fb-table-control__add{align-self:flex-start;height:28px;border:0;background:transparent;color:var(--sd-primary, #2A66F4);display:inline-flex;align-items:center;gap:8px;padding:0 6px;font-size:14px;font-weight:600;cursor:default}.fb-table-control__add span{font-size:18px;line-height:1}.fb-table-control.is-viewed .fb-table-control__header{background:var(--sd-black100, #F2F2F2)}.fb-table-control.is-viewed .fb-table-control__add{display:none}\n"] }]
|
|
5608
|
+
args: [{ selector: 'table-control', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule], template: "<div class=\"fb-table-control\" [class.is-viewed]=\"component.properties?.viewed\">\r\n <div class=\"fb-table-control__label\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span>*</span>\r\n }\r\n </div>\r\n\r\n @if (component.columns?.length) {\r\n <div class=\"fb-table-control__frame\">\r\n <div class=\"fb-table-control__header\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"fb-table-control__cell\" [style.width]=\"column.width\">\r\n <span class=\"fb-table-control__icon msi\">{{ columnIcon(column.type) }}</span>\r\n <span>{{ column.label }}</span>\r\n @if (column.validate?.required) {\r\n <span class=\"fb-table-control__required\">*</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"fb-table-control__body\">\r\n @for (row of sampleRows(); track row) {\r\n <div class=\"fb-table-control__row\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"fb-table-control__cell\" [style.width]=\"column.width\">\r\n {{ cellPreview(column, row) }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <button type=\"button\" class=\"fb-table-control__add\">\r\n <span>+</span>\r\n Add row\r\n </button>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;max-width:100%;min-width:0}.fb-table-control{display:flex;flex-direction:column;gap:8px;width:100%;max-width:100%;min-width:0;overflow:hidden;color:var(--sd-black500, #212121)}.fb-table-control__label{font-size:14px;line-height:20px;font-weight:600;color:var(--sd-black400, #757575)}.fb-table-control__label span{color:var(--sd-error, #F82C13)}.fb-table-control__frame{width:100%;max-width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;border:1px solid var(--sd-black200, #E6E6E6);border-radius:10px;background:#fff;overscroll-behavior-x:contain}.fb-table-control__header,.fb-table-control__row{display:flex;width:max-content;min-width:max-content}.fb-table-control__header{min-height:44px;background:color-mix(in srgb,var(--sd-black100, #F2F2F2) 70%,#fff);border-bottom:1px solid var(--sd-black200, #E6E6E6)}.fb-table-control__row{min-height:42px;border-bottom:1px solid var(--sd-black200, #E6E6E6)}.fb-table-control__row:last-child{border-bottom:0}.fb-table-control__cell{width:136px;flex:0 0 auto;min-width:96px;display:inline-flex;align-items:center;gap:7px;padding:10px 14px;color:var(--sd-black400, #757575);font-size:13px;line-height:18px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-right:0}.fb-table-control__cell:last-child{border-right:0}.fb-table-control__header .fb-table-control__cell{color:var(--sd-black400, #757575);font-weight:700}.fb-table-control__icon{width:16px;height:16px;flex:0 0 16px;display:inline-flex;align-items:center;justify-content:center;color:var(--sd-black400, #757575);font-size:16px;line-height:1;font-variation-settings:\"FILL\" 0,\"wght\" 300,\"GRAD\" 0,\"opsz\" 20}.fb-table-control__required{color:var(--sd-error, #F82C13)}.fb-table-control__add{align-self:flex-start;height:28px;border:0;background:transparent;color:var(--sd-primary, #2A66F4);display:inline-flex;align-items:center;gap:8px;padding:0 6px;font-size:14px;font-weight:600;cursor:default}.fb-table-control__add span{font-size:18px;line-height:1}.fb-table-control.is-viewed .fb-table-control__header{background:var(--sd-black100, #F2F2F2)}.fb-table-control.is-viewed .fb-table-control__add{display:none}\n"] }]
|
|
5630
5609
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: BuilderService }], propDecorators: { _component: [{
|
|
5631
5610
|
type: Input,
|
|
5632
5611
|
args: [{ alias: 'component', required: true }]
|
|
@@ -5696,8 +5675,6 @@ const ValidationAlerts = [
|
|
|
5696
5675
|
|
|
5697
5676
|
/* eslint-disable @angular-eslint/no-input-rename */
|
|
5698
5677
|
class ConfigureValidationComponent {
|
|
5699
|
-
ref;
|
|
5700
|
-
formGenericConfiguration;
|
|
5701
5678
|
modal;
|
|
5702
5679
|
form = new FormGroup({});
|
|
5703
5680
|
attributes = [];
|
|
@@ -5705,9 +5682,9 @@ class ConfigureValidationComponent {
|
|
|
5705
5682
|
functions = [];
|
|
5706
5683
|
alerts = ValidationAlerts;
|
|
5707
5684
|
accept = new EventEmitter();
|
|
5708
|
-
|
|
5709
|
-
|
|
5710
|
-
|
|
5685
|
+
ref = inject(ChangeDetectorRef);
|
|
5686
|
+
formGenericConfiguration = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });
|
|
5687
|
+
constructor() {
|
|
5711
5688
|
this.functions = this.formGenericConfiguration?.form?.validation?.functions || [];
|
|
5712
5689
|
}
|
|
5713
5690
|
ngAfterViewInit() {
|
|
@@ -5765,18 +5742,13 @@ class ConfigureValidationComponent {
|
|
|
5765
5742
|
this.accept.emit(this.validations);
|
|
5766
5743
|
this.modal?.close();
|
|
5767
5744
|
};
|
|
5768
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: ConfigureValidationComponent, deps: [
|
|
5745
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: ConfigureValidationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5769
5746
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: ConfigureValidationComponent, isStandalone: true, selector: "configure-validation", outputs: { accept: "accept" }, viewQueries: [{ propertyName: "modal", first: true, predicate: SdModal, descendants: true }], ngImport: i0, template: "<sd-modal [title]=\"'core.component.form-builder.config-validation-error-warning' | translate\" view=\"dialog\" width=\"800px\" #popupConfigureVariables>\r\n @for (validation of validations; track $index; let idx = $index) {\r\n <div class=\"mat-elevation-z2 position-relative p-8 mb-16\" style=\"border-radius: 8px;\">\r\n <div class=\"row mx-0\">\r\n <sd-select\r\n class=\"col-3\"\r\n [label]=\"'core.component.form-builder.message-type' | translate\"\r\n [(model)]=\"validation.alert\"\r\n [items]=\"alerts\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required></sd-select>\r\n @if (validation.type === 'expression') {\r\n <sd-input class=\"col-9\" [form]=\"form\" [label]=\"'core.component.form-builder.message-display' | translate\" [(model)]=\"validation.message\" required></sd-input>\r\n <expression-builder class=\"col-12\" [label]=\"'core.component.form-builder.condition-expression' | translate\" [(model)]=\"validation.expression\" [attributes]=\"attributes\"></expression-builder>\r\n } @else if (validation.type === 'function') {\r\n <sd-select\r\n class=\"col-9\"\r\n [form]=\"form\"\r\n [(model)]=\"validation.code\"\r\n [items]=\"functions\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required></sd-select>\r\n }\r\n <mat-icon class=\"c-close-icon\" (click)=\"removaValidation(idx)\">delete</mat-icon>\r\n <!-- <sd-button\r\n \r\n prefixIcon=\"delete\"\r\n (click)=\"removaValidation(idx)\"\r\n color=\"error\"\r\n type=\"link\"></sd-button> -->\r\n </div>\r\n </div>\r\n }\r\n <sd-button [title]=\"'core.component.form-builder.add-validation' | translate\" [matMenuTriggerFor]=\"menu\" prefixIcon=\"add\" color=\"primary\" type=\"link\"></sd-button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button (click)=\"addValidation('expression')\" mat-menu-item type=\"button\">\r\n <!-- <mat-icon fontIcon=\"warning\"></mat-icon> -->\r\n <span>{{ 'core.component.form-builder.expression' | translate }}</span>\r\n </button>\r\n <button (click)=\"addValidation('function')\" mat-menu-item type=\"button\">\r\n <!-- <mat-icon fontIcon=\"error\"></mat-icon> -->\r\n <span>{{ 'core.component.form-builder.available-methods' | translate }}</span>\r\n </button>\r\n </mat-menu>\r\n <ng-container sdFooter>\r\n <sd-button type=\"fill\" [title]=\"'core.component.form-builder.save' | translate\" (click)=\"updateValidations()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.c-close-icon{margin-left:auto;font-size:16px;width:16px;height:16px;cursor:pointer;border-radius:50%;color:var(--sd-error);top:4px;right:4px;position:absolute}.c-close-icon:hover{background-color:var(--sd-black200)}\n"], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i1$4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i1$4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i1$4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: SdModal, selector: "sd-modal", inputs: ["autoId", "title", "color", "width", "height", "view", "modalClass", "lazyLoadContent", "hideClose", "disableBackdropClose"], outputs: ["sdClosed"] }, { kind: "component", type: SdButton, selector: "sd-button", inputs: ["autoId", "type", "color", "size", "fontSet", "title", "width", "tooltip", "prefixIcon", "suffixIcon", "disabled", "loading", "block", "htmlType"], outputs: ["click"] }, { kind: "component", type: SdInput, selector: "sd-input", inputs: ["autoId", "name", "appearance", "floatLabel", "size", "form", "label", "helperText", "placeholder", "type", "hideInlineError", "blurOnEnter", "required", "readonly", "disabled", "viewed", "minlength", "maxlength", "pattern", "patternErrorMessage", "validator", "inlineError", "hyperlink", "model"], outputs: ["modelChange", "sdChange", "sdFocus", "sdBlur", "keyupEnter", "cleared", "sdFocusForceBlur"] }, { kind: "component", type: SdSelect, selector: "sd-select", inputs: ["autoId", "name", "size", "form", "label", "helperText", "placeholder", "valueField", "displayField", "disabledField", "cacheChecksum", "limit", "hyperlink", "minWidthPanel", "hideInlineError", "required", "disabled", "viewed", "multiple", "clearable", "validator", "inlineError", "appearance", "floatLabel", "items", "model"], outputs: ["modelChange", "sdChange", "sdSelection"] }, { kind: "component", type: ExpressionBuilderComponent, selector: "expression-builder", inputs: ["label", "attributes", "model"], outputs: ["modelChange", "sdChange", "edit"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5770
5747
|
}
|
|
5771
5748
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: ConfigureValidationComponent, decorators: [{
|
|
5772
5749
|
type: Component,
|
|
5773
5750
|
args: [{ selector: 'configure-validation', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatMenuModule, SdModal, SdButton, SdInput, SdSelect, ExpressionBuilderComponent, MatIconModule, TranslatePipe], template: "<sd-modal [title]=\"'core.component.form-builder.config-validation-error-warning' | translate\" view=\"dialog\" width=\"800px\" #popupConfigureVariables>\r\n @for (validation of validations; track $index; let idx = $index) {\r\n <div class=\"mat-elevation-z2 position-relative p-8 mb-16\" style=\"border-radius: 8px;\">\r\n <div class=\"row mx-0\">\r\n <sd-select\r\n class=\"col-3\"\r\n [label]=\"'core.component.form-builder.message-type' | translate\"\r\n [(model)]=\"validation.alert\"\r\n [items]=\"alerts\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required></sd-select>\r\n @if (validation.type === 'expression') {\r\n <sd-input class=\"col-9\" [form]=\"form\" [label]=\"'core.component.form-builder.message-display' | translate\" [(model)]=\"validation.message\" required></sd-input>\r\n <expression-builder class=\"col-12\" [label]=\"'core.component.form-builder.condition-expression' | translate\" [(model)]=\"validation.expression\" [attributes]=\"attributes\"></expression-builder>\r\n } @else if (validation.type === 'function') {\r\n <sd-select\r\n class=\"col-9\"\r\n [form]=\"form\"\r\n [(model)]=\"validation.code\"\r\n [items]=\"functions\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required></sd-select>\r\n }\r\n <mat-icon class=\"c-close-icon\" (click)=\"removaValidation(idx)\">delete</mat-icon>\r\n <!-- <sd-button\r\n \r\n prefixIcon=\"delete\"\r\n (click)=\"removaValidation(idx)\"\r\n color=\"error\"\r\n type=\"link\"></sd-button> -->\r\n </div>\r\n </div>\r\n }\r\n <sd-button [title]=\"'core.component.form-builder.add-validation' | translate\" [matMenuTriggerFor]=\"menu\" prefixIcon=\"add\" color=\"primary\" type=\"link\"></sd-button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button (click)=\"addValidation('expression')\" mat-menu-item type=\"button\">\r\n <!-- <mat-icon fontIcon=\"warning\"></mat-icon> -->\r\n <span>{{ 'core.component.form-builder.expression' | translate }}</span>\r\n </button>\r\n <button (click)=\"addValidation('function')\" mat-menu-item type=\"button\">\r\n <!-- <mat-icon fontIcon=\"error\"></mat-icon> -->\r\n <span>{{ 'core.component.form-builder.available-methods' | translate }}</span>\r\n </button>\r\n </mat-menu>\r\n <ng-container sdFooter>\r\n <sd-button type=\"fill\" [title]=\"'core.component.form-builder.save' | translate\" (click)=\"updateValidations()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.c-close-icon{margin-left:auto;font-size:16px;width:16px;height:16px;cursor:pointer;border-radius:50%;color:var(--sd-error);top:4px;right:4px;position:absolute}.c-close-icon:hover{background-color:var(--sd-black200)}\n"] }]
|
|
5774
|
-
}], ctorParameters: () => [
|
|
5775
|
-
type: Optional
|
|
5776
|
-
}, {
|
|
5777
|
-
type: Inject,
|
|
5778
|
-
args: [SD_FORM_GENERIC_CONFIGURATION]
|
|
5779
|
-
}] }], propDecorators: { modal: [{
|
|
5751
|
+
}], ctorParameters: () => [], propDecorators: { modal: [{
|
|
5780
5752
|
type: ViewChild,
|
|
5781
5753
|
args: [SdModal]
|
|
5782
5754
|
}], accept: [{
|
|
@@ -6143,7 +6115,6 @@ class SdFormBuilder {
|
|
|
6143
6115
|
};
|
|
6144
6116
|
// Mouseover thì phải có Focus không thì thẻ sẽ báo lỗi
|
|
6145
6117
|
onFocus = (event) => {
|
|
6146
|
-
//console.log(event);
|
|
6147
6118
|
};
|
|
6148
6119
|
xuLyKeoCheo = (dragItem) => {
|
|
6149
6120
|
if (dragItem) {
|