@sdcorejs/angular 21.0.11 → 21.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -23
- package/assets/STYLE-GUIDE.md +58 -72
- package/assets/scss/core/color.scss +56 -45
- package/assets/scss/core/form.scss +20 -8
- package/assets/scss/core/utilities/_base.scss +3 -3
- package/assets/scss/core/utilities/_border.scss +1 -1
- package/assets/scss/themes/default.scss +46 -32
- package/assets/scss/themes/material-theme.scss +8 -87
- package/fesm2022/sdcorejs-angular-components-anchor.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +8 -8
- package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-badge.mjs +3 -3
- package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-button.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-document-builder.mjs +3 -3
- package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-editor.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-form-generic.mjs +17 -14
- package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-import-excel.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-inform.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-mini-editor.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-mini-editor.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-modal.mjs +24 -5
- package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-org-chart.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-preview.mjs +4 -4
- package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-query-builder.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-section.mjs +7 -11
- package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-splitter.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-stepper.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-tab.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-table.mjs +9 -9
- package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-tree.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-upload-file.mjs +4 -4
- package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-components-view.mjs +2 -2
- package/fesm2022/sdcorejs-angular-components-view.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-directives.mjs +1 -1
- package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-date-range.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-date.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-datetime.mjs +468 -344
- package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-input-number.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-input.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-label.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-label.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-radio.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-select.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-switch.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-forms-textarea.mjs +2 -2
- package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-modules-layout.mjs +11 -9
- package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-confirm.mjs +84 -3
- package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
- package/fesm2022/sdcorejs-angular-services-loading.mjs +1 -1
- package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
- package/package.json +1 -1
- package/types/sdcorejs-angular-components-badge.d.ts +2 -2
- package/types/sdcorejs-angular-components-button.d.ts +1 -1
- package/types/sdcorejs-angular-components-modal.d.ts +1 -1
- package/types/sdcorejs-angular-components-section.d.ts +1 -5
- package/types/sdcorejs-angular-components-side-drawer.d.ts +1 -1
- package/types/sdcorejs-angular-components-table.d.ts +0 -2
- package/types/sdcorejs-angular-forms-datetime.d.ts +4 -4
- package/types/sdcorejs-angular-services-confirm.d.ts +49 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdcorejs-angular-components-form-generic.mjs","sources":["../../../projects/sdcorejs-angular/components/form-generic/src/configurations/form-generic.configuration.ts","../../../projects/sdcorejs-angular/components/form-generic/src/models/form-generic-component.model.ts","../../../projects/sdcorejs-angular/components/form-generic/src/models/form-generic-expression.model.ts","../../../projects/sdcorejs-angular/components/form-generic/src/services/form-generic.service.ts","../../../projects/sdcorejs-angular/components/form-generic/src/services/form-render.service.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/component-viewed.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/when-expression.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/expression-query.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/expression-view.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/expression-feel.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/html.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/hyperlink.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textfield/textfield.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textfield/textfield.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textarea/textarea.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textarea/textarea.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-string/chip-string.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-string/chip-string.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/number/number.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/number/number.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/datetime/datetime.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/datetime/datetime.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/select/select.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/select/select.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/radio/radio.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/radio/radio.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/upload/upload.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/upload/upload.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/table/table.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/table/table.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/html/html.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/html/html.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/item.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/item.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/variable/variable.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/variable/variable.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/form-render.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/form-render.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-expression/form-expression-query-adapter.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-expression/attribute-expression.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-expression/attribute-expression.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input/attribute-input.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input/attribute-input.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-switch/attribute-switch.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-switch/attribute-switch.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/services/builder.service.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/control/textfield-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/control/textfield-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/control/textarea-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/control/textarea-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/control/chip-string-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/control/chip-string-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/attribute/number-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/attribute/number-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/control/number-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/control/number-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/control/datetime-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/control/datetime-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-select/attribute-select.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-select/attribute-select.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/attribute-selection.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/attribute-selection.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/attribute/select-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/attribute/select-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/control/select-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/control/select-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/control/radio-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/control/radio-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/attribute/radio-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/attribute/radio-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/control/checkbox-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/control/checkbox-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/html-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/html-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/control/html-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/control/html-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/attribute/upload-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/attribute/upload-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/control/upload-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/control/upload-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/attribute/table-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/attribute/table-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/control/table-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/control/table-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/group/attribute/group-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/group/attribute/group-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/models/form-generic-validation.model.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/form-builder-layout.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/form-builder.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/form-builder.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.html","../../../projects/sdcorejs-angular/components/form-generic/sdcorejs-angular-components-form-generic.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IWorkflowConfigurationForm } from './form.configuration';\n\nexport interface ISdFormGenericConfiguration {\n form?: IWorkflowConfigurationForm;\n}\n\nexport const SD_FORM_GENERIC_CONFIGURATION = new InjectionToken<ISdFormGenericConfiguration>('sd.form-generic.configuration');\n","// Định nghĩa các Components của Form Render\nimport { SdTableColumn, SdTableOption } from '@sdcorejs/angular/components/table';\nimport { SdUploadFile } from '@sdcorejs/angular/components/upload-file';\nimport { Color, ValidationPatternType } from '@sdcorejs/utils/models';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdFormGenericSelectionStaticItem } from './form-generic-definition-selection.model';\nimport { SdFormGenericExpression } from './form-generic-expression.model';\nimport { SdFormGeneric } from './form-generic.model';\nimport { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';\n\nexport interface SdFormRenderConfiguration {\n onLoaded?: () => void;\n components: SdFormGeneric['components'];\n validations?: SdFormGeneric['validations'];\n variables?: SdFormGenericVariable[];\n beforeSubmit?: (entity: Record<string, any>) => Promise<Record<string, any>>;\n}\n\nexport interface SdFormGenericLayout {\n row?: string;\n columns: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n mobileColumns?:\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | '10'\n | '11'\n | '12'\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12;\n}\n\nexport const GenerateId = () => {\n return Utilities.randomId('id');\n};\n\nexport const GenerateKey = () => {\n return Utilities.randomId('key');\n};\n\nexport const SdFormatComponent = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n if (component) {\n if (!component.id) {\n component.id = GenerateId();\n }\n // Html và Group không có key và validate\n if (component.type !== 'group') {\n if (!component.key) {\n component.key = GenerateKey();\n }\n if (!component.validate) {\n component.validate = {};\n }\n }\n if (!component.layout) {\n component.layout = {\n columns: '12',\n };\n }\n\n if (!component.properties) {\n component.properties = {};\n }\n\n if (component.type === 'datetime') {\n // Nếu là datetime thì gán mặc định subtype là date\n component.subtype = component.subtype || 'date';\n } else if (component.type === 'table') {\n // Nếu là table thì lấy columns mẫu\n if (!component.columns?.length) {\n component.columns = [\n {\n key: 'key_1',\n label: 'Cột 1',\n type: 'string',\n },\n {\n key: 'key_2',\n label: 'Cột 2',\n type: 'string',\n },\n {\n key: 'key_3',\n label: 'Cột 3',\n type: 'string',\n },\n ];\n }\n } else if (component.type === 'radio') {\n // Nếu là radio thì lấy values mẫu\n if (!component.values?.length) {\n component.values = [\n {\n value: 'value_1',\n label: 'Label 1',\n },\n {\n value: 'value_2',\n label: 'Label 2',\n },\n ];\n }\n // Mặc định trải ngang các lựa chọn\n component.properties.direction = component.properties.direction || 'row';\n } else if (component.type === 'upload') {\n component.properties!.type = component.properties!.type || 'file';\n component.properties!.source = component.properties!.source || 'ALL';\n }\n }\n};\n\nexport interface SdFormGenericVariable {\n id: string;\n key: string;\n label: string;\n}\n\nexport type SdFormGenericComponent =\n | SdFormGenericTextfield\n | SdFormGenericChipString\n | SdFormGenericChipCalendar\n | SdFormGenericTextarea\n | SdFormGenericNumber\n | SdFormGenericCheckbox\n | SdFormGenericDatetime\n | SdFormGenericValues\n | SdFormGenericUpload\n | SdFormGenericTable\n | SdFormGenericHtml\n | SdFormGenericBreak;\n\nexport type SdFormGenericValues = SdFormGenericRadio | SdFormGenericSelect | SdFormGenericChecklist;\nexport interface SdFormGenericComponentBase {\n template?: string;\n id: string;\n key: string;\n label: string;\n helperText?: string;\n layout?: SdFormGenericLayout;\n validate?: {\n required?: boolean;\n };\n disabled?: boolean;\n properties?: {\n viewed?: boolean; // true nếu muốn hiển thị dạng view (view khác với disable)\n hyperlink?: string; // Hyperlink khi ở trạng thái viewed\n hidden?: boolean;\n hiddenWhenExpression?: SdFormGenericExpression;\n visibleWhenExpression?: SdFormGenericExpression;\n disabledWhenExpression?: SdFormGenericExpression;\n requiredWhenExpression?: SdFormGenericExpression;\n onChange?: {\n // Thực tế khi sử dụng sẽ có mong muốn trigger sự kiện change sẽ làm gì đó\n // Nếu muốn setValues thì cú pháp sẽ là \"key\": \"${otherKey}\" hoặc \"key\": true, \"key\": \"value\"\n setValues?: Record<string, any>;\n };\n } & Record<string, any>;\n}\nexport interface SdFormGenericTextfield extends SdFormGenericComponentBase {\n type: 'textfield';\n defaultValue?: string;\n validate?: {\n maxlength?: number;\n minlength?: number;\n pattern?: ValidationPatternType | string; // Regex\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\n } & SdFormGenericComponentBase['validate'];\n}\n\nexport interface SdFormGenericChipString extends SdFormGenericComponentBase {\n type: 'chip-string';\n defaultValue?: string[];\n validate?: {\n maxlength?: number;\n minlength?: number;\n pattern?: ValidationPatternType | string; // Regex\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\n maxOfItems?: number; // Số lượng item tối đa\n } & SdFormGenericComponentBase['validate'];\n}\nexport interface SdFormGenericChipCalendar extends SdFormGenericComponentBase {\n type: 'chip-calendar';\n defaultValue?: string[];\n validate?: {\n maxlength?: number;\n minlength?: number;\n pattern?: ValidationPatternType | string; // Regex\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\n maxOfItems?: number; // Số lượng item tối đa\n } & SdFormGenericComponentBase['validate'];\n}\nexport interface SdFormGenericTextarea extends SdFormGenericComponentBase {\n type: 'textarea';\n defaultValue?: string;\n validate?: {\n maxlength?: number;\n minlength?: number;\n } & SdFormGenericComponentBase['validate'];\n}\n\nexport interface SdFormGenericNumber extends SdFormGenericComponentBase {\n type: 'number';\n defaultValue?: number;\n validate?: {\n min?: number;\n max?: number;\n } & SdFormGenericComponentBase['validate'];\n}\n\nexport interface SdFormGenericCheckbox extends SdFormGenericComponentBase {\n type: 'checkbox';\n defaultValue?: boolean;\n}\n\nexport interface SdFormGenericDatetime extends SdFormGenericComponentBase {\n type: 'datetime';\n subtype: 'date' | 'datetime';\n defaultValue?: string;\n validate?: {\n min?: 'TODAY' | string;\n max?: 'TODAY' | string;\n } & SdFormGenericComponentBase['validate'];\n}\nexport interface SdFormGenericRadio extends SdFormGenericComponentBase {\n type: 'radio';\n values?: SdFormGenericSelectionStaticItem[];\n valuesKey?: string; // Mapping từ form-render-values\n defaultValue?: string;\n properties?: {\n direction?: 'row' | 'column';\n } & SdFormGenericComponentBase['properties'];\n}\nexport interface SdFormGenericSelect extends SdFormGenericComponentBase {\n type: 'select';\n values?: SdFormGenericSelectionStaticItem[];\n valuesKey?: string; // Mapping từ form-render-values\n defaultValue?: string | string[];\n properties?: {\n query?: Record<string, any>;\n multiple?: boolean;\n setVariables?: Record<string, string>; // Chỉ đối với dữ liệu từ API\n } & SdFormGenericComponentBase['properties'];\n}\nexport interface SdFormGenericChecklist extends SdFormGenericComponentBase {\n type: 'checklist';\n values?: SdFormGenericSelectionStaticItem[];\n valuesKey?: string; // Mapping từ form-render-values\n defaultValue?: string[];\n properties?: {\n query?: Record<string, any>;\n } & SdFormGenericComponentBase['properties'];\n}\nexport interface SdFormGenericGroup {\n id: string;\n type: 'group';\n label: string;\n layout: SdFormGenericLayout;\n components: SdFormGenericComponent[];\n properties: {\n icon: string;\n color: Color;\n hidden?: boolean;\n hiddenWhenExpression?: SdFormGenericExpression;\n visibleWhenExpression?: SdFormGenericExpression;\n };\n}\n\n// CUSTOM\nexport interface SdFormGenericUpload extends SdFormGenericComponentBase {\n type: 'upload';\n properties?: {\n type?: SdUnwrapSignal<SdUploadFile['type']>;\n maxSize?: SdUnwrapSignal<SdUploadFile['maxSize']>; // Dung lượng tối đa\n max?: SdUnwrapSignal<SdUploadFile['max']>; // Số lượng file tối đa\n extensions?: SdUnwrapSignal<SdUploadFile['extensions']>;\n args?: Record<string, any>; //.tham số\n // Dành cho mobile\n source?: 'ALL' | 'PHOTO_LIBRARY' | 'CAPTURE'; // Mặc định là ALL\n } & SdFormGenericComponentBase['properties'];\n}\n\nexport interface FormRenderComponentTableColumnValues {\n valuesKey: string;\n query?: Record<string, any>;\n}\n\nexport type SdFormGenericTableColumn<T = any> =\n | TableColumnString<T>\n | TableColumnNumber<T>\n | TableColumnBool<T>\n | TableColumnDate<T>\n | TableColumnDatetime<T>\n | TableColumnRadio<T>\n | TableColumnValues<T>\n | TableColumnImage<T>\n | TableColumnFile<T>;\n\nexport const TableColumnTypes = [\n {\n value: 'string',\n display: 'Chuỗi',\n },\n {\n value: 'number',\n display: 'Số',\n },\n {\n value: 'date',\n display: 'Ngày',\n },\n {\n value: 'datetime',\n display: 'Ngày giờ',\n },\n {\n value: 'values',\n display: 'Chọn giá trị',\n },\n {\n value: 'boolean',\n display: 'True/False',\n },\n {\n value: 'file',\n display: 'Tệp',\n },\n {\n value: 'image',\n display: 'Ảnh',\n },\n];\n\ninterface TableColumnBase<T = any> {\n key: Extract<keyof T, string>;\n label: string;\n width?: SdTableColumn['width'];\n validate?: {\n required?: boolean;\n };\n}\n\ninterface TableColumnString<T = any> extends TableColumnBase<T> {\n type: 'string';\n validate?: { minlength?: number; maxlength?: number; pattern?: string; patternErrorMessage?: string } & TableColumnBase['validate'];\n}\n\ninterface TableColumnNumber<T = any> extends TableColumnBase<T> {\n type: 'number';\n validate?: { min?: number; max?: number } & TableColumnBase['validate'];\n}\n\ninterface TableColumnDate<T = any> extends TableColumnBase<T> {\n type: 'date';\n validate?: { min?: 'TODAY' | string; max?: 'TODAY' | string } & TableColumnBase['validate'];\n}\n\ninterface TableColumnDatetime<T = any> extends TableColumnBase<T> {\n type: 'datetime';\n validate?: { min?: 'TODAY' | string; max?: 'TODAY' | string } & TableColumnBase['validate'];\n}\n\ninterface TableColumnBool<T = any> extends TableColumnBase<T> {\n type: 'boolean';\n displayOnTrue?: string;\n displayOnFalse?: string;\n}\n\ninterface TableColumnRadio<T = any> extends TableColumnBase<T> {\n type: 'radio';\n values?: SdFormGenericSelectionStaticItem[];\n}\n\ninterface TableColumnValues<T = any> extends TableColumnBase<T> {\n type: 'values';\n valuesKey: string;\n query?: Record<string, any>;\n values?: SdFormGenericSelectionStaticItem[];\n}\ninterface TableColumnImage<T = any> extends TableColumnBase<T> {\n type: 'image';\n args?: Record<string, any>;\n validate?: { max?: number; maxSize?: number } & TableColumnBase['validate'];\n}\n\ninterface TableColumnFile<T = any> extends TableColumnBase<T> {\n type: 'file';\n args?: Record<string, any>;\n validate?: { max?: number; maxSize?: number } & TableColumnBase['validate'];\n}\n\nexport interface SdFormGenericTable extends SdFormGenericComponentBase {\n type: 'table';\n columnsKey?: string;\n columns?: SdFormGenericTableColumn[];\n properties?: {\n type?: SdTableOption['type'];\n titleButtonCreate?: string; // Tiêu đề nút tạo mới\n } & SdFormGenericComponentBase['properties'];\n}\n\n/**\n * Break component — invisible runtime element ép xuống dòng mới. Dùng khi layout có\n * vùng cố định và việc ẩn/hiện trường khác không nên xáo trộn vị trí các trường còn lại.\n * Ở canvas (design) render thanh ngang mảnh; ở runtime render empty 12-col cell.\n *\n * Extend SdFormGenericComponentBase để tương thích với union narrowing trong các pipe/render\n * (key, validate, disabled, properties full) — runtime sẽ ignore mọi field ngoài id/type/layout.\n */\nexport interface SdFormGenericBreak extends SdFormGenericComponentBase {\n type: 'break';\n}\n\nexport interface SdFormGenericHtml {\n template?: string;\n id: string;\n key?: string;\n type: 'html';\n content: string;\n validate?: {\n required?: boolean;\n };\n layout?: SdFormGenericLayout;\n properties?: {\n viewed?: boolean;\n hyperlink?: string; // Hyperlink khi ở trạng thái viewed\n hidden?: boolean;\n hiddenWhenExpression?: SdFormGenericExpression;\n visibleWhenExpression?: SdFormGenericExpression;\n variables?: { key: string; label: string; value?: string }[];\n queries?: { key: string; label: string }[];\n query?: Record<string, any>;\n };\n}\n\nexport type FormBuilderComponentGroup = 'basic' | 'choice' | 'advanced' | 'layout';\n\nexport interface FormBuilderComponent {\n type: string;\n /** Material Icons Outlined icon name. Rendered via the builder icon alias. */\n symbol: string;\n /** Category group for the left palette grouping. */\n group: FormBuilderComponentGroup;\n name: string;\n}\n\nexport const FormBuilderComponents: FormBuilderComponent[] = [\n // ── Basic ───────────────────────────────────────────────────\n { type: 'textfield', symbol: 'text_fields', group: 'basic', name: 'Text field' },\n { type: 'textarea', symbol: 'notes', group: 'basic', name: 'Text area' },\n { type: 'number', symbol: '123', group: 'basic', name: 'Number' },\n { type: 'datetime', symbol: 'calendar_month', group: 'basic', name: 'Date' },\n // ── Choice ──────────────────────────────────────────────────\n { type: 'select', symbol: 'arrow_drop_down_circle', group: 'choice', name: 'Select' },\n { type: 'radio', symbol: 'radio_button_checked', group: 'choice', name: 'Radio' },\n { type: 'checkbox', symbol: 'check_box', group: 'choice', name: 'Check box' },\n // ── Advanced ────────────────────────────────────────────────\n { type: 'chip-string', symbol: 'label', group: 'advanced', name: 'Chip string' },\n { type: 'chip-calendar', symbol: 'event_note', group: 'advanced', name: 'Chip calendar' },\n { type: 'upload', symbol: 'upload_file', group: 'advanced', name: 'Upload' },\n { type: 'table', symbol: 'table_rows', group: 'advanced', name: 'Table' },\n // ── Layout ──────────────────────────────────────────────────\n // Break KHÔNG có trong palette — thêm qua per-row \"+ Break\" quick-add button.\n { type: 'group', symbol: 'category', group: 'layout', name: 'Group' },\n { type: 'html', symbol: 'code', group: 'layout', name: 'HTML' },\n];\n\n/** Lookup: component type → Material icon + label, used by attribute panel header. */\nexport const COMPONENT_ICONS: Record<string, { symbol: string; label: string }> = FormBuilderComponents.reduce(\n (acc, c) => ({ ...acc, [c.type]: { symbol: c.symbol, label: c.name } }),\n {} as Record<string, { symbol: string; label: string }>\n);\n\nexport const GetComponentAttributes = (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => {\n const attributes: { value: string; display: string }[] = [];\n if (components.length) {\n for (const component of components) {\n if (component.type === 'group') {\n attributes.push(...GetComponentAttributes(component.components));\n } else if (component.type !== 'html') {\n attributes.push({\n value: component.key,\n display: component.label,\n });\n }\n }\n }\n return attributes;\n};\n\nexport const GetVariableAttributes = (variables: SdFormGenericVariable[]) => {\n const attributes: { value: string; display: string }[] = [];\n if (variables.length) {\n for (const variable of variables) {\n attributes.push({\n value: variable.key,\n display: `[VARIABLE] ${variable.label}`,\n });\n }\n }\n return attributes;\n};\n","import { Operator as SdOperator } from '@sdcorejs/utils/models';\nimport { SdFormGenericComponent, SdFormGenericGroup } from './form-generic-component.model';\nimport { DateUtilities } from '@sdcorejs/angular/utilities';\n\nexport interface SdFormGenericExpression {\n key: string; // Random, phục vụ cho @for ở attribute-expression\n type: 'combinator';\n combinator: '&&' | '||';\n conditions: (SdFormGenericExpression | SdFormGenericExpressionCondition)[];\n}\n\nexport interface SdFormGenericExpressionCondition {\n key: string; // Random, phục vụ cho @for ở attribute-expression\n type: 'condition';\n field?: string;\n operator: SdOperator;\n value: any;\n dayInfo: DayInfo;\n}\n\nexport type Operator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';\nexport const Operators: {\n value: Operator;\n symbol?: string;\n display: string;\n}[] = [\n {\n value: 'EQUAL',\n symbol: '=',\n display: 'Bằng',\n },\n {\n value: 'NOT_EQUAL',\n symbol: '≠',\n display: 'Không bằng',\n },\n {\n value: 'GREATER_THAN',\n symbol: '>',\n display: 'Lớn hơn',\n },\n {\n value: 'LESS_THAN',\n symbol: '<',\n display: 'Nhỏ hơn',\n },\n {\n value: 'GREATER_OR_EQUAL',\n symbol: '≥',\n display: 'Lớn hơn, hoặc bằng',\n },\n {\n value: 'LESS_OR_EQUAL',\n symbol: '≤',\n display: 'Nhỏ hơn, hoặc bằng',\n },\n {\n value: 'NULL',\n symbol: 'motion_photos_off',\n display: 'Là rỗng',\n },\n {\n value: 'NOT_NULL',\n symbol: 'adjust',\n display: 'Không rỗng',\n },\n];\n\nexport type Attribute = AttributeBase | AttributeBoolean | AttributeDate | AttributeValues;\n\ninterface AttributeBase {\n value: string;\n display: string;\n type: 'string' | 'number';\n}\n\ninterface AttributeBoolean {\n value: string;\n display: string;\n type: 'boolean';\n displayOnTrue: string;\n displayOnFalse: string;\n}\n\ninterface AttributeDate {\n value: string;\n display: string;\n type: 'datetime';\n}\n\nexport interface DayInfo {\n type?: 'RELATED' | 'NOW' | 'DATETIME' | 'ATTRIBUTE';\n related?: 'LASTDAY' | 'NEXTDAY' | 'LASTWEEK' | 'NEXTWEEK' | 'LASTMONTH' | 'NEXTMONTH';\n relatedValue?: number;\n}\n\nexport const DayInfoTypes = [\n { value: 'RELATED', display: 'Ngày liên quan' },\n { value: 'NOW', display: 'Ngày hiện tại' },\n { value: 'DATETIME', display: 'Ngày cụ thể' },\n { value: 'ATTRIBUTE', display: 'Trường dữ liệu' },\n];\n\nexport const DayInfoPreviouses = [\n { value: 'LASTDAY', display: 'Ngày trước', format: (n: number) => `${n || 1}LastDay` },\n { value: 'NEXTDAY', display: 'Ngày tới', format: (n: number) => `${n || 1}NextDay` },\n // { value: 'LASTWEEK', display: 'Tuần trước', format: (n: number) => `${n || 1}LastWeek` },\n // { value: 'NEXTWEEK', display: 'Tuần tới', format: (n: number) => `${n || 1}NextWeek` },\n // { value: 'LASTMONTH', display: 'Tháng trước', format: (n: number) => `${n || 1}LastMonth` },\n // { value: 'NEXTMONTH', display: 'Tháng tới', format: (n: number) => `${n || 1}NextMonth` },\n];\n\nexport const GetDatetimeValue = (value: string) => {\n if (!value || typeof value !== 'string') {\n return undefined;\n }\n if (value === 'now') {\n return DateUtilities.toFormat(new Date(), 'yyyy/MM/dd HH:mm:ss');\n }\n if (value?.endsWith('LastDay')) {\n const relatedValue = +value.replace('LastDay', '');\n if (relatedValue) {\n return DateUtilities.toFormat(DateUtilities.addDays(new Date(), -relatedValue), 'yyyy/MM/dd HH:mm:ss');\n }\n }\n if (value?.endsWith('NextDay')) {\n const relatedValue = +value.replace('LastDay', '');\n if (relatedValue) {\n return DateUtilities.toFormat(DateUtilities.addDays(new Date(), relatedValue), 'yyyy/MM/dd HH:mm:ss');\n }\n }\n return undefined;\n};\n\ninterface AttributeValues {\n value: string;\n display: string;\n type: 'values';\n values: { value: string; display: string }[];\n}\n\nexport const AttributeOperators: Record<\n Attribute['type'],\n {\n value: Operator;\n symbol?: string;\n display: string;\n }[]\n> = {\n string: [\n {\n value: 'EQUAL',\n symbol: '=',\n display: 'Bằng',\n },\n {\n value: 'NOT_EQUAL',\n symbol: '≠',\n display: 'Không bằng',\n },\n {\n value: 'NULL',\n symbol: 'motion_photos_off',\n display: 'Là rỗng',\n },\n {\n value: 'NOT_NULL',\n symbol: 'adjust',\n display: 'Không rỗng',\n },\n ],\n number: Operators,\n datetime: Operators,\n boolean: [\n {\n value: 'EQUAL',\n symbol: '=',\n display: 'Bằng',\n },\n {\n value: 'NOT_EQUAL',\n symbol: '≠',\n display: 'Không bằng',\n },\n ],\n values: [\n {\n value: 'EQUAL',\n symbol: '=',\n display: 'Bằng',\n },\n {\n value: 'NOT_EQUAL',\n symbol: '≠',\n display: 'Không bằng',\n },\n {\n value: 'NULL',\n symbol: 'motion_photos_off',\n display: 'Là rỗng',\n },\n {\n value: 'NOT_NULL',\n symbol: 'adjust',\n display: 'Không rỗng',\n },\n ],\n};\n\n// Từ components map thành các attributes\nexport const GetAttributes = (components: (SdFormGenericComponent | SdFormGenericGroup)[]): Attribute[] => {\n const attributes: Attribute[] = [];\n if (components.length) {\n for (const component of components) {\n if (component.type === 'group') {\n attributes.push(...GetAttributes(component.components));\n } else if (component.type === 'textfield' || component.type === 'textarea') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n } else if (component.type === 'number') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'number',\n });\n } else if (component.type === 'datetime') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'datetime',\n });\n } else if (component.type === 'checkbox') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'boolean',\n displayOnTrue: 'YES',\n displayOnFalse: 'NO',\n });\n } else if (component.type === 'radio' || component.type === 'select') {\n if (component.values?.length) {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'values',\n values: component.values.map(e => ({\n value: e.value,\n display: e.label,\n })),\n });\n } else {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n }\n }\n }\n }\n return attributes;\n};\n\nexport const TemplateToCondition = (template: string | undefined | null, entity: Record<string, any>) => {\n if (!template) {\n return undefined;\n }\n const regex = /\\$\\{([A-Za-z0-9._-]*)\\}/g;\n const matches = template.match(regex) || [];\n for (const match of matches) {\n const key = match.slice(2, match.length - 1);\n if (key) {\n // Xử lý trong trường hợp key có định dạng a.b.c ...\n let val: any = entity;\n const strs = key.split('.');\n for (const str of strs) {\n val = val?.[str];\n }\n if (typeof val === 'string') {\n // Xử lý đối với trường hợp string là 'datetime' thì cần format thành string đồng nhất để compare chính xác\n if (DateUtilities.isDate(val)) {\n template = template.replace(match, `'${DateUtilities.toFormat(val, 'yyyy/MM/dd HH:mm:ss')}'`);\n } else {\n // Nếu là chuỗi thì thêm dấu nháy khi replace giá trị để so sánh, ví dụ 'a' === 'a'\n // Nếu là số hay boolean thì không cần, ví dụ 121 === 121\n template = template.replace(match, `'${val}'`);\n }\n } else {\n template = template.replace(match, val ?? `undefined`);\n }\n }\n }\n return template;\n};\n\nconst GetEntityValue = (entity: Record<string, any>, key: string | undefined) => {\n if (!key) {\n return undefined;\n }\n\n let value: any = entity;\n for (const part of key.split('.')) {\n value = value?.[part];\n }\n return value;\n};\n\nconst NormalizeExpressionValue = (value: any) => {\n if (typeof value === 'string' && DateUtilities.isDate(value)) {\n return DateUtilities.toFormat(value, 'yyyy/MM/dd HH:mm:ss');\n }\n return value;\n};\n\nconst EvaluateExpressionCondition = (condition: SdFormGenericExpressionCondition, entity: Record<string, any>) => {\n const actualValue = NormalizeExpressionValue(GetEntityValue(entity, condition.field));\n const { operator } = condition;\n if (!operator) {\n return undefined;\n }\n if (operator === 'NULL') {\n return !actualValue;\n }\n if (operator === 'NOT_NULL') {\n return !!actualValue;\n }\n\n const expectedValue = typeof condition.value === 'string' ? GetDatetimeValue(condition.value) || condition.value : condition.value;\n if (expectedValue === undefined || expectedValue === null || expectedValue === '') {\n return undefined;\n }\n\n const normalizedExpectedValue = NormalizeExpressionValue(expectedValue);\n if (operator === 'EQUAL') {\n return actualValue === normalizedExpectedValue;\n }\n if (operator === 'GREATER_THAN') {\n return actualValue > normalizedExpectedValue;\n }\n if (operator === 'LESS_THAN') {\n return actualValue < normalizedExpectedValue;\n }\n if (operator === 'NOT_EQUAL') {\n return actualValue !== normalizedExpectedValue;\n }\n if (operator === 'GREATER_OR_EQUAL') {\n return actualValue >= normalizedExpectedValue;\n }\n if (operator === 'LESS_OR_EQUAL') {\n return actualValue <= normalizedExpectedValue;\n }\n return undefined;\n};\n\nexport const EvaluateExpression = (\n condition: SdFormGenericExpression | SdFormGenericExpressionCondition,\n entity: Record<string, any>\n): boolean | undefined => {\n if (condition.type === 'combinator') {\n if (!condition.conditions?.length) {\n return undefined;\n }\n\n const results = condition.conditions.map(child => EvaluateExpression(child, entity));\n if (results.some(result => typeof result !== 'boolean')) {\n return undefined;\n }\n\n if (condition.combinator === '&&') {\n return results.every(result => result === true);\n }\n return results.some(result => result === true);\n }\n\n return EvaluateExpressionCondition(condition, entity);\n};\n\nexport const ExpressionToJavascriptExpression = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\n const queries: string[] = [];\n if (condition.type === 'combinator') {\n if (condition.conditions?.length) {\n for (const child of condition.conditions) {\n queries.push(`(${ExpressionToJavascriptExpression(child)})`);\n }\n }\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\n const query = queries.join(` ${condition.combinator} `);\n if (queries.length > 1) {\n return `(${query})`;\n } else {\n return query;\n }\n } else {\n return ConvertToJavascriptExpression(condition);\n }\n};\nconst ConvertToJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\n const { value } = condition;\n // Convert thành syntax ${field}\n const field = '${' + condition.field + '}';\n const { operator } = condition;\n if (!operator) {\n return undefined;\n }\n if (operator === 'NULL') {\n return `!${field}`;\n }\n if (operator === 'NOT_NULL') {\n return `!!${field}`;\n }\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n // Xử lý đối với trường hợp string là 'datetime' thì value sẽ có thể là 'now', '1LastDay' ....\n const datetimeValue = GetDatetimeValue(value);\n if (operator === 'EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} === '${datetimeValue || value}'`;\n }\n return `${field} === ${value}`;\n }\n if (operator === 'GREATER_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} > '${datetimeValue || value}'`;\n }\n return `${field} > ${value}`;\n }\n if (operator === 'LESS_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} < '${datetimeValue || value}'`;\n }\n return `${field} < ${value}`;\n }\n if (operator === 'NOT_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} !== '${datetimeValue || value}'`;\n }\n return `${field} !== ${value}`;\n }\n if (operator === 'GREATER_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} >= '${datetimeValue || value}'`;\n }\n return `${field} >= ${value}`;\n }\n if (operator === 'LESS_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} <= '${datetimeValue || value}'`;\n }\n return `${field} <= ${value}`;\n }\n return undefined;\n};\n","import { inject, Injectable } from '@angular/core';\nimport { SdSearch } from '@sdcorejs/angular/forms';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../configurations';\nimport { SdFormGenericArgs, SdFormGenericDefinitionHtml, SdFormGenericDefinitionSelection, SdFormGenericSelectionItem } from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormGenericService {\n #selections?: SdFormGenericDefinitionSelection[];\n #definitionHtmls?: SdFormGenericDefinitionHtml[];\n private readonly configuration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n get selections() {\n return this.configuration?.form?.selections || [];\n }\n\n get tables() {\n return this.configuration?.form?.tables || [];\n }\n\n getSelection = async (valuesKey: string | undefined | null) => {\n if (!valuesKey) {\n return undefined;\n }\n const selections = await this.selection.definitions();\n return selections.find(e => e.value === valuesKey);\n };\n\n selection = {\n definitions: async (): Promise<SdFormGenericDefinitionSelection[]> => {\n // Nếu chưa xử lý lấy trước đó thì thực hiện xử lý lấy data cho selections\n if (!this.#selections) {\n const selections = this.configuration?.form?.selections;\n if (!selections) {\n this.#selections = [];\n } else if (Array.isArray(selections)) {\n this.#selections = selections;\n } else {\n const results = selections();\n if (results instanceof Promise) {\n this.#selections = (await results) || [];\n } else {\n this.#selections = results || [];\n }\n }\n }\n return this.#selections || [];\n },\n getDefinition: async (valuesKey: string | undefined | null) => {\n if (!valuesKey) {\n return undefined;\n }\n const selections = await this.selection.definitions();\n return selections.find(e => e.value === valuesKey);\n },\n // Lấy dữ liệu items cho dropdown, radio, checklist\n // Dữ liệu có thể là 1 mảng hoặc hàm\n items: async (\n valuesKey: string | undefined | null,\n args: SdFormGenericArgs\n ): Promise<SdFormGenericSelectionItem[] | SdSearch<SdFormGenericSelectionItem>> => {\n try {\n const { component, column } = args;\n // Nếu có values thì xử lý trả về mảng tĩnh\n if (component && 'values' in component && Array.isArray(component.values) && component.values.length) {\n return component.values.map(e => ({\n value: e.value,\n display: e.label,\n data: e,\n }));\n }\n // Nếu component là table và có thông tin column\n if (component?.type === 'table' && column && 'values' in column && Array.isArray(column.values) && column.values.length) {\n return column.values.map(e => ({\n value: e.value,\n display: e.label,\n data: e,\n }));\n }\n // Ngoài ra nếu không có valuesKey thì trả về mảng rỗng\n if (!valuesKey) {\n return [];\n }\n // Tìm cấu hình dựa vào valuesKey\n const selection = await this.selection.getDefinition(valuesKey);\n if (!selection) {\n return [];\n }\n if ('values' in selection) {\n return await selection.values(args);\n } else if ('valuesKey' in selection && selection?.valuesKey && !!this.configuration?.form?.getValues) {\n return (await this.configuration?.form?.getValues?.(selection.valuesKey, selection.args)) || [];\n } else if ('lazyValues' in selection) {\n return searchArgs => {\n return selection.lazyValues(searchArgs, args);\n };\n } else if ('lazyValuesKey' in selection && selection?.lazyValuesKey && !!this.configuration?.form?.getLazyValues) {\n const getLazyValues = this.configuration?.form?.getLazyValues?.(selection.lazyValuesKey, selection.args);\n return searchArgs => {\n return getLazyValues(searchArgs, args);\n };\n }\n return [];\n } catch (err) {\n console.error(err);\n return [];\n }\n },\n variables: {\n detail: async (valuesKey: string, values: string | number | string[] | number[], args: SdFormGenericArgs) => {\n const selection = await this.selection.getDefinition(valuesKey);\n return selection?.variables?.detail?.(values, args);\n },\n },\n };\n\n html = {\n definitions: async (): Promise<SdFormGenericDefinitionHtml[]> => {\n // Nếu chưa xử lý lấy trước đó thì thực hiện xử lý lấy data cho htmls\n if (!this.#definitionHtmls) {\n const htmls = this.configuration?.form?.htmls;\n if (!htmls) {\n this.#definitionHtmls = [];\n } else if (Array.isArray(htmls)) {\n this.#definitionHtmls = htmls;\n } else {\n const results = htmls();\n if (results instanceof Promise) {\n this.#definitionHtmls = (await results) || [];\n } else {\n this.#definitionHtmls = results || [];\n }\n }\n }\n return this.#definitionHtmls || [];\n },\n getContent: async (template: string, query?: Record<string, any>): Promise<string> => {\n const definitions = await this.html.definitions();\n const html = definitions.find(e => e.value === template);\n if (html) {\n if (typeof html.content === 'string') {\n return html.content;\n }\n if (typeof html.content === 'function') {\n return await html.content(query).catch(err => {\n console.error(err);\n return '';\n });\n }\n return '';\n }\n return '';\n },\n };\n}\n","import { Injectable } from '@angular/core';\nimport { SdFormGeneric } from '../models/form-generic.model';\nimport { ComponentViewedPipe } from '../pipes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdFormRenderService {\n constructor(private readonly componentViewedPipe: ComponentViewedPipe) {}\n\n viewEntities = async (form: SdFormGeneric, entities: Record<string, any>[]): Promise<Record<string, any>[]> => {\n const reuslts: Record<string, any>[] = [];\n for (const entity of entities || []) {\n const result: Record<string, any> = {};\n for (const component of form?.components || []) {\n // Group và upload thì k cần lấy view\n if (\n component.type !== 'table' &&\n component.type !== 'group' &&\n component.type !== 'upload' &&\n component.type !== 'html' &&\n component.key\n ) {\n result[component.key] = await this.componentViewedPipe.transform(entity?.[component.key], entity, component);\n }\n }\n reuslts.push(result);\n }\n return reuslts;\n };\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport { DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { EMPTY_STR } from '@sdcorejs/utils/constants';\nimport { SdFormGenericComponent, SdFormGenericHtml } from '../models';\nimport { FormGenericService } from '../services';\nimport { SdFormatNumberPipe } from '@sdcorejs/angular/pipes';\n\n@Pipe({\n name: 'componentViewed',\n standalone: true,\n})\n@Injectable({\n providedIn: 'root',\n})\n// Pipe xử lý hiển thị detail cho component\nexport class ComponentViewedPipe implements PipeTransform {\n constructor(\n private readonly formatNumberPipe: SdFormatNumberPipe,\n private readonly formGenericService: FormGenericService\n ) {}\n transform = async (\n value: any,\n entity: Record<string, any>,\n component: Exclude<SdFormGenericComponent, SdFormGenericHtml>\n ): Promise<string> => {\n if (!component?.key) {\n return '';\n }\n const val = entity?.[component.key];\n if (val === undefined || val === null) {\n return EMPTY_STR;\n }\n if (component.type === 'textfield' || component.type === 'textarea') {\n return val || EMPTY_STR;\n }\n if (component.type === 'number') {\n return this.formatNumberPipe.transform(value)?.toString() ?? EMPTY_STR;\n }\n if (component.type === 'datetime') {\n if (component.subtype === 'datetime') {\n return DateUtilities.toFormat(val, 'dd/MM/yyyy HH:mm') || EMPTY_STR;\n } else {\n return DateUtilities.toFormat(val, 'dd/MM/yyyy') || EMPTY_STR;\n }\n }\n if (component.type === 'select' || component.type === 'radio' || component.type === 'checklist') {\n const values = (Array.isArray(val) ? val : [val]).filter(value => value !== undefined && value !== null && value !== '');\n if (!values.length) {\n return EMPTY_STR;\n }\n const selection = await this.formGenericService.selection.getDefinition(component?.valuesKey);\n // Nếu có cấu hình view tương ứng với selection thì sử dụng viewed\n if (selection?.viewed) {\n return (\n (await selection.viewed(values, {\n entity,\n component,\n })) || EMPTY_STR\n );\n }\n // Ngoài ra xử lý lấy thông tin items\n const items = await this.formGenericService.selection.items(component?.valuesKey, {\n entity,\n component,\n });\n if (!items) {\n return EMPTY_STR;\n }\n // Nếu items là Array thì kiểm tra value và hiển thị display\n if (Array.isArray(items)) {\n return (\n items\n .filter(e => values.includes(e.value))\n .map(e => e.display)\n .join(', ') || EMPTY_STR\n );\n }\n // items là Function (lazyValues) thì thực hiện gọi API\n return await items({\n type: 'VALUE',\n value: values,\n }).then(results => {\n return (\n results\n .filter(e => values.includes(e.value))\n .map(e => e.display)\n .join(', ') || EMPTY_STR\n );\n });\n }\n return '';\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { EvaluateExpression, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericHtml } from '../models';\n\n@Pipe({\n name: 'whenExpression',\n standalone: true,\n})\n// Xử lý thông tin required, disabled, hidden của component\nexport class WhenExpressionPipe implements PipeTransform {\n #hidden = (component: SdFormGenericComponent | SdFormGenericGroup, variables: Record<string, any>) => {\n if (component.properties?.hidden) {\n return true;\n }\n const hiddenWhenExpression = component.properties?.hiddenWhenExpression;\n if (hiddenWhenExpression) {\n const result = EvaluateExpression(hiddenWhenExpression, variables);\n if (typeof result === 'boolean') {\n return result;\n }\n return true;\n }\n const visibleWhenExpression = component.properties?.visibleWhenExpression;\n if (visibleWhenExpression) {\n const result = EvaluateExpression(visibleWhenExpression, variables);\n if (typeof result === 'boolean') {\n return !result;\n }\n return true;\n }\n return false;\n };\n #disabled = (component: Exclude<SdFormGenericComponent, SdFormGenericHtml>, variables: Record<string, any>) => {\n const disabledWhenExpression = component.properties?.disabledWhenExpression;\n if (disabledWhenExpression) {\n const result = EvaluateExpression(disabledWhenExpression, variables);\n if (typeof result === 'boolean') {\n return result;\n }\n return true;\n }\n return false;\n };\n #required = (component: Exclude<SdFormGenericComponent, SdFormGenericHtml>, variables: Record<string, any>) => {\n const requiredWhenExpression = component.properties?.requiredWhenExpression;\n if (requiredWhenExpression) {\n const result = EvaluateExpression(requiredWhenExpression, variables);\n if (typeof result === 'boolean') {\n return result;\n }\n return false;\n }\n return false;\n };\n transform(\n hashed: string | undefined,\n component: SdFormGenericComponent | SdFormGenericGroup,\n entity: Record<string, any>\n ): {\n hidden: boolean;\n disabled: boolean;\n required: boolean;\n } {\n // Group và html chỉ xử lý ẩn/hiện\n if (component.type === 'group' || component.type === 'html' || component.type === 'break') {\n // Break/html/group: chỉ tính hidden (validate/disabled không áp dụng).\n return {\n hidden: this.#hidden(component, entity),\n disabled: false,\n required: false,\n };\n }\n return {\n hidden: this.#hidden(component, entity),\n disabled: component?.disabled || this.#disabled(component, entity),\n required: component?.validate?.required || this.#required(component, entity),\n };\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport { SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\n\n// Từ Expression JSON build thành Expression String\n@Pipe({\n name: 'expressionQuery',\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ExpressionQueryPipe implements PipeTransform {\n #generateQuery = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\n const queries: string[] = [];\n if (condition.type === 'combinator') {\n if (condition.conditions?.length) {\n for (const child of condition.conditions) {\n queries.push(`(${this.#generateQuery(child)})`);\n }\n }\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\n const query = queries.join(` ${condition.combinator} `);\n if (queries.length > 1) {\n return `(${query})`;\n } else {\n return query;\n }\n } else {\n return this.#generateJavascriptExpression(condition);\n }\n };\n #generateJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\n const { value } = condition;\n // Convert thành syntax ${field}\n const field = '${' + condition.field + '}';\n const { operator } = condition;\n if (!operator) {\n return undefined;\n }\n if (operator === 'NULL') {\n return `!${field}`;\n }\n if (operator === 'NOT_NULL') {\n return `!!${field}`;\n }\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n if (operator === 'EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} === '${value}'`;\n }\n return `${field} === ${value}`;\n }\n if (operator === 'GREATER_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} > '${value}'`;\n }\n return `${field} > ${value}`;\n }\n if (operator === 'LESS_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} < '${value}'`;\n }\n return `${field} < ${value}`;\n }\n if (operator === 'NOT_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} !== '${value}'`;\n }\n return `${field} !== ${value}`;\n }\n if (operator === 'GREATER_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} >= '${value}'`;\n }\n return `${field} >= ${value}`;\n }\n if (operator === 'LESS_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} <= '${value}'`;\n }\n return `${field} <= ${value}`;\n }\n return undefined;\n };\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition | undefined): string | undefined {\n if (!condition) {\n return undefined;\n }\n return this.#generateQuery(condition);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Attribute, Operators, SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\n\n@Pipe({\n name: 'expressionView',\n})\nexport class ExpressionViewPipe implements PipeTransform {\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition, attributes: Attribute[]): string {\n if (condition.type === 'combinator') {\n return '';\n }\n const { field, operator, value } = condition;\n const containerStyle = `style=\"border: 1px solid #e6e6e6; border-radius: 4px; background-color: #e6e6e6; padding: 4px 8px;\"`;\n const results: string[] = [];\n // Wording field\n results.push(`<div ${containerStyle}>${attributes.find(e => e.value === field)?.display || field}</div>`);\n // Wording operator\n if (operator) {\n results.push(`<div>${Operators.find(e => e.value === operator)?.display || operator}</div>`);\n }\n // Wording value\n if (operator && value !== undefined) {\n results.push(`<div ${containerStyle}>${value}</div>`);\n }\n return `<div class=\"d-flex flex-row align-items-center\" style=\"gap:8px ;flex-wrap: wrap ;word-wrap: break-word\">${results.join(\n ''\n )}</div>`;\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport { SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\n\n// Từ Expression JSON build thành Expression String theo cú pháp của FEEL mà Camunda sử dụng\n@Pipe({\n name: 'expressionFeel',\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ExpressionFeelPipe implements PipeTransform {\n #generateQuery = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\n const queries: string[] = [];\n if (condition.type === 'combinator') {\n if (condition.conditions?.length) {\n for (const child of condition.conditions) {\n queries.push(`${this.#generateQuery(child)}`);\n }\n }\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\n const query = queries.join(` ${condition.combinator === '||' ? 'or' : 'and'} `);\n if (queries.length > 1) {\n return `(${query})`;\n } else {\n return query;\n }\n } else {\n return this.#generateJavascriptExpression(condition);\n }\n };\n #generateJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\n const { field, value } = condition;\n // Convert thành syntax ${field}\n const { operator } = condition;\n if (!operator) {\n return undefined;\n }\n if (operator === 'NULL') {\n return `${field} == null`;\n }\n if (operator === 'NOT_NULL') {\n return `${field} != null`;\n }\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n if (operator === 'EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} == '${value}'`;\n }\n return `${field} == ${value}`;\n }\n if (operator === 'GREATER_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} > '${value}'`;\n }\n return `${field} > ${value}`;\n }\n if (operator === 'LESS_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} < '${value}'`;\n }\n return `${field} < ${value}`;\n }\n if (operator === 'NOT_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} != '${value}'`;\n }\n return `${field} != ${value}`;\n }\n if (operator === 'GREATER_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} >= '${value}'`;\n }\n return `${field} >= ${value}`;\n }\n if (operator === 'LESS_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} <= '${value}'`;\n }\n return `${field} <= ${value}`;\n }\n return undefined;\n };\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition): string | undefined {\n const result = this.#generateQuery(condition);\n if (result) {\n return '${' + result + '}';\n }\n return result;\n }\n}\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { StringUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { SdFormGenericHtml } from '../models';\n\n@Pipe({\n name: 'htmlPipe',\n standalone: true,\n})\n// Pipe xử lý hiển thị detail cho component\nexport class HtmlPipe implements PipeTransform {\n constructor(private readonly sanitizer: DomSanitizer) {}\n // Hash component để pipe nhận biết được content hay variables có thay đổi render lại\n transform = (hashed: string | undefined | null, content: string, component: SdFormGenericHtml) => {\n if (!content) {\n return '';\n }\n const variables: Record<string, any> = {};\n if (component.properties?.variables?.length) {\n component.properties.variables.forEach(variable => (variables[variable.key] = variable.value));\n }\n const renderedHtml = StringUtilities.templateToDisplay(content, variables);\n return this.sanitizer.sanitize(SecurityContext.HTML, renderedHtml) || '';\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { StringUtilities } from '@sdcorejs/angular/utilities/extensions';\n\n@Pipe({\n name: 'hyperlink',\n standalone: true,\n})\n// Pipe xử lý hiển thị detail cho component\nexport class HyperlinkPipe implements PipeTransform {\n constructor() {}\n transform = (hyperlink: string | undefined | null, entity: Record<string, any>): string => {\n if (!hyperlink) {\n return '';\n }\n return StringUtilities.templateToDisplay(hyperlink, entity);\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdInput } from '@sdcorejs/angular/forms';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericTextfield } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\n\n@Component({\n selector: 'lib-textfield',\n templateUrl: './textfield.component.html',\n styleUrl: './textfield.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdInput,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n ],\n})\nexport class TextfieldComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n this.#applyDefaultValue(); // Áp dụng defaultValue khi entity thay đổi\n }\n }\n\n component?: SdFormGenericTextfield;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericTextfield) {\n this.component = val;\n this.#applyDefaultValue(); // Áp dụng defaultValue khi component thay đổi\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n this.#disabledChanges.next(this.disabled);\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n validator?: SdCustomValidator;\n @Input('validator') set _validator(validator: SdCustomValidator | undefined | null) {\n if (validator && this.validator !== validator) {\n this.validator = validator;\n }\n }\n\n #subscription = new Subscription();\n #disabledChanges = new Subject<boolean>();\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.#applyDefaultValue(); // Áp dụng defaultValue khi component khởi tạo\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n /**\n * Áp dụng defaultValue nếu:\n * - Không ở trạng thái viewed\n * - Không bị disabled\n * - entity[key] chưa có giá trị (null, undefined, hoặc empty string)\n * - component có defaultValue\n */\n #applyDefaultValue = () => {\n if (!this.component?.key || !this.entity) {\n return;\n }\n const isViewed = this.viewed || this.component.properties?.viewed;\n // Chỉ gán default value nếu undefined\n const isUndefined = this.entity[this.component.key] === undefined;\n const hasDefaultValue = this.component.defaultValue !== undefined && this.component.defaultValue !== null;\n // Chỉ gán defaultValue khi:\n // 1. Không ở trạng thái viewed\n // 2. Không bị disabled\n // 3. Giá trị hiện tại chưa được set (null, undefined hoặc empty string)\n // 4. Component có defaultValue\n if (!isViewed && hasDefaultValue && isUndefined) {\n this.entity[this.component.key] = this.component.defaultValue;\n this.ref.markForCheck();\n }\n };\n}\n","@if (component && entity) {\n <sd-input\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [helperText]=\"component.helperText\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [validator]=\"validator\"\n [maxlength]=\"component.validate?.maxlength\"\n [pattern]=\"component.validate?.pattern\"\n [patternErrorMessage]=\"component.validate?.patternErrorMessage\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed || component.properties?.viewed\"></sd-input>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\nimport { SdFormGenericTextarea } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\nimport { filter, Subject, Subscription } from 'rxjs';\n\n@Component({\n selector: 'lib-textarea',\n templateUrl: './textarea.component.html',\n styleUrl: './textarea.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdTextarea,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n ],\n})\nexport class TextareaComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n component?: SdFormGenericTextarea;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericTextarea) {\n this.component = val;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component && entity) {\n <sd-textarea\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [helperText]=\"component.helperText\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [maxlength]=\"component.validate?.maxlength\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed || component.properties?.viewed\"></sd-textarea>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdChip } from '@sdcorejs/angular/forms';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericChipString } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\n\n@Component({\n selector: 'lib-chip-string',\n templateUrl: './chip-string.component.html',\n styleUrl: './chip-string.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdChip,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n ],\n})\nexport class ChipStringComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n component?: SdFormGenericChipString;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericChipString) {\n this.component = val;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component && entity) {\n @if (viewed || component.properties?.viewed) {\n <div class=\"text-black400\">{{ component.label || component.key }}</div>\n <div class=\"T14M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\n } @else {\n <sd-chip\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [disabled]=\"disabled\"></sd-chip>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdChipCalendar } from '@sdcorejs/angular/forms';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericChipCalendar } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\n\n@Component({\n selector: 'lib-chip-calendar',\n templateUrl: './chip-calendar.component.html',\n styleUrl: './chip-calendar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdChipCalendar,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n ],\n})\nexport class ChipCalendarComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n component?: SdFormGenericChipCalendar;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericChipCalendar) {\n this.component = val;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component && entity) {\n @if (viewed || component.properties?.viewed) {\n <div class=\"text-black400\">{{ component.label || component.key }}</div>\n <div class=\"T14M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\n } @else {\n <sd-chip-calendar\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [disabled]=\"disabled\"></sd-chip-calendar>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdFormGenericNumber } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { filter, Subject, Subscription } from 'rxjs';\n\n@Component({\n selector: 'lib-number',\n templateUrl: './number.component.html',\n styleUrl: './number.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdInputNumber,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n ],\n})\nexport class NumberComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n component?: SdFormGenericNumber;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericNumber) {\n this.component = val;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component && entity) {\n @if (viewed || component.properties?.viewed) {\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\n } @else {\n <sd-input-number\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [helperText]=\"component.helperText\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [max]=\"component.validate?.max\"\n [min]=\"component.validate?.min\"\n [viewed]=\"viewed || component.properties?.viewed\"></sd-input-number>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { SdFormGenericDatetime } from '../../../../../../models';\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { Router } from '@angular/router';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Component({\n selector: 'lib-datetime',\n templateUrl: './datetime.component.html',\n styleUrl: './datetime.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdDate,\n SdDatetime,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n HyperlinkPipe,\n ],\n})\nexport class DatetimeComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n // Mặc định là date\n subtype?: SdFormGenericDatetime['subtype'] = 'date';\n component?: SdFormGenericDatetime;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericDatetime) {\n this.component = val;\n this.subtype = this.component?.subtype || 'date';\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n constructor(\n private router: Router,\n private ref: ChangeDetectorRef\n ) {}\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n onNavigate = (url: string) => {\n if (!url) {\n return;\n }\n if (url.startsWith('http')) {\n window.open(url);\n } else {\n const [path, queryString] = url.split('?');\n const queryParams = Utilities.parseQueryParams(queryString);\n this.router.navigate([path], { queryParams });\n }\n };\n}\n","@if (component && entity) {\n @if (subtype === 'date') {\n <sd-date\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [helperText]=\"component.helperText\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [min]=\"component.validate?.min\"\n [max]=\"component.validate?.max\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed || component.properties?.viewed\"></sd-date>\n } @else {\n <sd-datetime\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [helperText]=\"component.helperText\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [min]=\"component.validate?.min\"\n [max]=\"component.validate?.max\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed || component.properties?.viewed\"></sd-datetime>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdAutocomplete, SdSearch, SdSelect } from '@sdcorejs/angular/forms';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { Utilities, StringUtilities } from '@sdcorejs/utils/fns';\n// import { sha1 } from 'object-hash';\nimport { debounceTime, filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericSelect, SdFormGenericSelectionItem } from '../../../../../../models';\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\nimport { FormGenericService } from '../../../../../../services';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-select',\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdSelect,\n SdAutocomplete,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n HyperlinkPipe,\n ],\n})\nexport class SelectComponent implements AfterViewInit, OnDestroy, OnInit {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n form = new FormGroup({});\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\n if (this.form !== form) {\n this.form = form;\n this.#inputChanges.next();\n }\n }\n entity: Record<string, any> = {};\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n this.#inputChanges.next();\n }\n }\n\n component!: SdFormGenericSelect;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericSelect) {\n this.component = val;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n validator?: SdCustomValidator;\n @Input('validator') set _validator(validator: SdCustomValidator | undefined) {\n if (validator && this.validator !== validator) {\n this.validator = validator;\n }\n }\n\n items: SdFormGenericSelectionItem[] | SdSearch = [];\n\n #subscription = new Subscription();\n #inputChanges = new Subject<void>();\n constructor(\n private router: Router,\n private ref: ChangeDetectorRef,\n private readonly formRenderService: FormGenericService\n ) {}\n\n #hashedQuery?: string;\n hashedValues?: string;\n #generateQuery = (query: string | Record<string, any> | undefined, data: Record<string, any>): Record<string, any> => {\n let result: Record<string, any> = {};\n // Nếu query được cấu hình từ Form Builder của Camunda thì JSON nó sẽ là string, cần thực hiện parse\n if (typeof query === 'string') {\n try {\n result = JSON.parse(query);\n } catch (err) {\n console.error(err);\n return result;\n }\n } else if (Array.isArray(query)) {\n return result;\n } else {\n result = { ...query };\n }\n // Xử lý query,\n // Ví dụ: {\"a\": \"1\", \"b\": \"true\", \"c\": \"${key}\"} => {\"a\": \"1\", \"b\": true, \"c\": \"Dữ liệu tương ứng với key trong data\"}\n for (const key of Object.keys({ ...result })) {\n // Xử ly\n result[key] = StringUtilities.templateToDisplay(result[key], data);\n if (result[key] === 'true') {\n result[key] = true;\n }\n if (result[key] === 'false') {\n result[key] = false;\n }\n if (result[key] === '') {\n delete result[key];\n }\n }\n return result;\n };\n\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n\n ngAfterViewInit() {\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\n const hashedValues = Utilities.hash(values);\n if (this.hashedValues !== hashedValues) {\n this.hashedValues = hashedValues;\n this.#inputChanges.next();\n }\n })\n );\n this.#subscription.add(\n this.#inputChanges.pipe(startWith('')).subscribe(async () => {\n // Trạng thái viewed thì không cần check\n if (!this.viewed && this.component && !this.component?.properties?.viewed) {\n const values = { ...this.entity, ...this.form.value };\n const query = this.#generateQuery(this.component?.properties?.query, values);\n const hashedQuery = Utilities.hash(query);\n // Nếu query có thay đổi thì thực hiện gán lại items\n if (hashedQuery !== this.#hashedQuery) {\n this.#hashedQuery = hashedQuery;\n this.items = await this.formRenderService.selection.items(this.component?.valuesKey, {\n entity: values,\n component: this.component,\n query,\n });\n this.ref.markForCheck();\n }\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChanges = async () => {\n const setVariables = this.component.properties?.setVariables;\n // Nếu có cấu hình gán giá trị khi trường dữ liệu thay đổi thì thực hiện gán giá trị\n if (this.component.valuesKey && setVariables) {\n // Lấy thông tin detail\n const values = { ...this.entity, ...this.form.value };\n const query = this.#generateQuery(this.component?.properties?.query, values);\n const detail = await this.formRenderService.selection.variables.detail(this.component.valuesKey, this.entity[this.component.key], {\n entity: this.entity,\n component: this.component,\n query,\n });\n // Nếu có detail thì thực hiện setVariables\n if (detail) {\n // Đi qua từng key của component sẽ gán giá trị\n for (const key of Object.keys(setVariables)) {\n try {\n const value = StringUtilities.parseExpression(setVariables[key], detail);\n // Thực hiện gán giá trị\n this.entity[key] = value;\n // Thông báo setVariables để component (nếu đang hiển thị) biết và thực hiện re-render hay markForCheck()\n this.setVariables.next({ key, value });\n } catch (err) {\n console.error(err);\n }\n }\n }\n }\n };\n\n onNavigate = (url: string) => {\n if (!url) {\n return;\n }\n if (url.startsWith('http')) {\n window.open(url);\n } else {\n const [path, queryString] = url.split('?');\n const queryParams = Utilities.parseQueryParams(queryString);\n this.router.navigate([path], { queryParams });\n }\n };\n}\n","@if (entity && component) {\n <sd-select\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key]\"\n [required]=\"required\"\n [validator]=\"validator\"\n [disabled]=\"disabled\"\n [items]=\"items\"\n valueField=\"value\"\n displayField=\"display\"\n disabledField=\"disabled\"\n (sdChange)=\"onChanges()\"\n [multiple]=\"component.properties?.multiple\"\n [viewed]=\"viewed || component.properties?.viewed\"\n [hyperlink]=\"component.properties?.hyperlink | hyperlink: entity\"></sd-select>\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdRadio } from '@sdcorejs/angular/forms';\nimport { filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericRadio, SdFormGenericSelectionItem } from '../../../../../../models';\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\nimport { FormGenericService } from '../../../../../../services';\nimport { Router } from '@angular/router';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Component({\n selector: 'lib-radio',\n templateUrl: './radio.component.html',\n styleUrl: './radio.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdRadio,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n HyperlinkPipe,\n ],\n})\nexport class RadioComponent implements AfterViewInit, OnDestroy, OnInit {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n form = new FormGroup({});\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\n if (this.form !== form) {\n this.form = form;\n this.#changes.next();\n }\n }\n value: any;\n entity: Record<string, any> = {};\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n this.#changes.next();\n }\n }\n\n component!: SdFormGenericRadio;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericRadio) {\n if (this.component !== val) {\n this.component = val;\n this.#changes.next();\n }\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n const viewed = val === '' || !!val;\n if (this.viewed !== viewed) {\n this.viewed = viewed;\n this.#changes.next();\n }\n }\n\n items: SdFormGenericSelectionItem[] = [];\n\n #subscription = new Subscription();\n #changes = new Subject<void>();\n constructor(\n private router: Router,\n private ref: ChangeDetectorRef,\n private readonly formGenericService: FormGenericService\n ) {}\n\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(startWith('')).subscribe(async () => {\n // Trạng thái viewed thì không cần check\n if (!this.viewed && this.component && !this.component?.properties?.viewed) {\n const values = { ...this.entity, ...this.form.value };\n const items = await this.formGenericService.selection.items(this.component.valuesKey, {\n entity: values,\n component: this.component,\n });\n // Với radio thì selection buộc phải là values, không phải là lazyValues\n if (Array.isArray(items)) {\n this.items = items;\n } else {\n this.items = [];\n }\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onNavigate = (url: string) => {\n if (!url) {\n return;\n }\n if (url.startsWith('http')) {\n window.open(url);\n } else {\n const [path, queryString] = url.split('?');\n const queryParams = Utilities.parseQueryParams(queryString);\n this.router.navigate([path], { queryParams });\n }\n };\n}\n","@if (entity && component) {\n <sd-radio\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [items]=\"items\"\n valueField=\"value\"\n displayField=\"display\"\n [display]=\"component.properties?.direction\"\n [viewed]=\"viewed || component.properties?.viewed\"\n [hyperlink]=\"component.properties?.hyperlink | hyperlink: entity\"></sd-radio>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, ViewChild, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdUploadFile } from '@sdcorejs/angular/components/upload-file';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericUpload } from '../../../../../../models';\n\n@Component({\n selector: 'lib-upload',\n templateUrl: './upload.component.html',\n styleUrl: './upload.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, SdUploadFile],\n})\nexport class UploadComponent implements OnDestroy, OnInit {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @ViewChild(SdUploadFile) sdUploadFile?: SdUploadFile;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n this.#changes.next();\n }\n }\n\n component?: SdFormGenericUpload;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericUpload) {\n this.component = val;\n this.#changes.next();\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n validator?: SdCustomValidator;\n @Input('validator') set _validator(validator: SdCustomValidator | undefined | null) {\n if (validator && this.validator !== validator) {\n this.validator = validator;\n }\n }\n\n #changes = new Subject<void>();\n #subscription = new Subscription();\n constructor(private readonly ref: ChangeDetectorRef) {}\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n\n upload = async () => {\n return await this.sdUploadFile?.upload();\n };\n}\n","@if (component && entity) {\n @if (viewed || component.properties?.viewed) {\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\n <sd-upload-file\n [type]=\"component.properties?.type\"\n [form]=\"form\"\n [model]=\"entity[component.key!]\"\n align=\"left\"\n [args]=\"component.properties?.args\"\n disabled\n previewWidth=\"50px\"\n previewHeight=\"50px\"></sd-upload-file>\n } @else {\n <sd-upload-file\n [type]=\"component.properties?.type\"\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [(model)]=\"entity[component.key!]\"\n [max]=\"component.properties?.max\"\n [maxSize]=\"component.properties?.maxSize\"\n [extensions]=\"component.properties?.extensions\"\n [args]=\"component.properties?.args\"\n align=\"left\"\n [required]=\"component.validate?.required || required\"\n [disabled]=\"disabled\"\n previewWidth=\"50px\"\n previewHeight=\"50px\"></sd-upload-file>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n OnInit,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdSideDrawer } from '@sdcorejs/angular/components/side-drawer';\nimport { SdTableCellDefDirective, SdTable, SdTableColumn, SdTableOption } from '@sdcorejs/angular/components/table';\nimport { SdUploadFile } from '@sdcorejs/angular/components/upload-file';\nimport { SdAutocomplete, SdInput, SdInputNumber, SdRadio, SdSearch } from '@sdcorejs/angular/forms';\nimport { filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericTableColumn, SdFormGenericSelectionItem, SdFormGenericTable } from '../../../../../../models';\nimport { FormGenericService } from '../../../../../../services';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'lib-table',\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdInput,\n SdInputNumber,\n SdAutocomplete,\n SdUploadFile,\n SdTable,\n SdTableCellDefDirective,\n SdSideDrawer,\n SdButton,\n SdUploadFile,\n SdRadio,\n SdDate,\n SdDatetime,\n // Pipe cho phần viewed\n TranslatePipe,\n ],\n})\nexport class TableComponent implements AfterViewInit, OnDestroy, OnInit {\n @ViewChildren(SdUploadFile) uploadFiles?: QueryList<SdUploadFile>;\n @ViewChild(SdTable) table?: SdTable;\n @ViewChild(SdSideDrawer) sideDrawer?: SdSideDrawer;\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n component?: SdFormGenericTable;\n col = 'col-6 px-8';\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericTable) {\n this.component = val;\n this.col = `col-${this.component?.layout?.columns || '6'} px-8`;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '') {\n this.required = val === '' || val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n this.#tableChanges.next();\n }\n\n model: any[] = [];\n @Input('model') set _model(val: any[] | undefined | null) {\n val = val || [];\n if (this.model !== val) {\n this.model = val;\n this.#modelChanges.next(val);\n }\n }\n @Output() modelChange = new EventEmitter<any[]>();\n\n #tableChanges = new Subject<void>();\n #modelChanges = new Subject<string[]>();\n #subscription = new Subscription();\n tableOption?: SdTableOption;\n row: any = {};\n columnValues: Record<string, SdFormGenericSelectionItem[] | SdSearch> = {};\n formRenderColumn: Record<string, SdFormGenericTableColumn> = {};\n // Lấy những fileColumns để định nghĩa cellDef tương ứng\n fileKeys: string[] = [];\n imageKeys: string[] = [];\n\n #selectedIndex = -1;\n constructor(\n private ref: ChangeDetectorRef,\n private readonly formGenericService: FormGenericService\n ) {}\n\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.model = variable.value;\n this.#modelChanges.next(this.model);\n this.ref.markForCheck();\n })\n );\n }\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#tableChanges.pipe(startWith('')).subscribe(async () => {\n await this.#initTable();\n this.ref.markForCheck();\n })\n );\n // Khi giá trị thay đổi thì reload lại\n this.#subscription.add(\n this.#modelChanges.pipe(startWith(this.model)).subscribe(async () => {\n await this.#reload();\n this.ref.markForCheck();\n })\n );\n }\n\n #initTable = async () => {\n // Xử lý columns\n const columns: SdTableColumn[] = [];\n for (const column of this.component?.columns || []) {\n // 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\n this.formRenderColumn[column.key] = column;\n const { type, key, label, width } = column;\n if (type === 'string') {\n columns.push({\n type: 'string',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'number') {\n columns.push({\n type: 'number',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'boolean') {\n columns.push({\n type: 'boolean',\n field: key,\n title: label,\n width,\n option: {\n displayOnTrue: column.displayOnTrue,\n displayOnFalse: column.displayOnFalse,\n },\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'date') {\n columns.push({\n type: 'date',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'datetime') {\n columns.push({\n type: 'datetime',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'radio') {\n const { values } = column;\n columns.push({\n type: 'values',\n field: key,\n title: label,\n width: width,\n filter: {\n disabled: true, // Không cần filter\n },\n option: {\n items: values || [],\n valueField: 'value',\n displayField: 'display',\n },\n });\n } else if (type === 'values') {\n const { valuesKey } = column;\n this.columnValues[key] = await this.formGenericService.selection.items(valuesKey, {\n component: this.component,\n column,\n entity: this.form.value,\n });\n if (this.columnValues[key]) {\n if (Array.isArray(this.columnValues[key])) {\n const items = this.columnValues[key];\n columns.push({\n type: 'values',\n field: key,\n title: label,\n width: width,\n filter: {\n disabled: true, // Không cần filter\n },\n option: {\n items: this.columnValues[key],\n valueField: 'value',\n displayField: 'display',\n },\n transform: value => {\n return items.find(t => t.value === value)?.display || '--';\n },\n });\n } else {\n columns.push({\n type: 'lazy-values',\n field: key,\n title: label,\n width: width,\n filter: {\n disabled: true, // Không cần filter\n },\n option: {\n items: this.columnValues[key],\n valueField: 'value',\n displayField: 'display',\n },\n });\n }\n }\n } else if (type === 'image') {\n // Ảnh hay file thì đều là string, nhưng sẽ dùng cellDef để can thiệp hiển thị\n this.imageKeys.push(key); // Ghi nhận lại cột nào là image để can thiệp cellDef\n columns.push({\n type: 'string',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'file') {\n // Ảnh hay file thì đều là string, nhưng sẽ dùng cellDef để can thiệp hiển thị\n this.fileKeys.push(key); // Ghi nhận lại cột nào là file để can thiệp cellDef\n columns.push({\n type: 'string',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n }\n }\n // await this.#onLoaded();\n this.tableOption = {\n type: 'local',\n key: this.component?.key,\n reload: { visible: false },\n config: { visible: false },\n paginate: {\n hidden: true,\n pageSize: 100,\n },\n style: {\n maxHeight: '400px',\n },\n filter: {\n disabled: true,\n },\n items: () => {\n return this.model || [];\n },\n commands: [\n {\n icon: 'edit',\n click: rowData => {\n this.onDetail(rowData);\n },\n hidden: !!this.viewed || !!this.component?.properties?.viewed,\n },\n {\n icon: 'delete',\n click: rowData => {\n const idx = this.model?.indexOf(rowData);\n this.model?.splice(idx, 1);\n this.table?.reload().then(() => this.ref.markForCheck());\n },\n hidden: !!this.viewed || !!this.component?.properties?.viewed,\n },\n ],\n columns,\n };\n };\n\n #reload = () => {\n return this.table?.reload?.();\n };\n\n // #onLoaded = async () => {\n // for (const item of this.model || []) {\n // for (const column of this.fileColumns) {\n // const values = item?.[column.key];\n // if (Array.isArray(values) && values.length) {\n // const res = await this.documentService.downloadUrls(values);\n // item[column.key] = res.map((e) => e.pre_signed_url);\n // }\n // }\n // }\n // };\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onDetail = (row?: any) => {\n if (row) {\n this.#selectedIndex = this.model.indexOf(row);\n this.row = row;\n } else {\n this.#selectedIndex = -1;\n this.row = {};\n }\n this.form.markAsUntouched();\n this.form.markAsPristine();\n this.sideDrawer?.open();\n };\n\n onCancel = () => {\n this.sideDrawer?.close();\n };\n\n onAccept = (addable?: boolean) => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n // Nếu là cập nhật thì cập nhật vào trường tương ứng\n if (this.#selectedIndex >= 0) {\n this.model[this.#selectedIndex] = this.row;\n } else {\n this.model = [...(this.model || []), this.row];\n }\n\n this.modelChange.emit(this.model);\n this.table?.reload();\n this.ref.markForCheck();\n if (!addable) {\n // Nếu không thêm dòng nữa thì đóng luôn\n this.sideDrawer?.close();\n } else {\n // Thêm dòng nữa nhanh\n this.onDetail();\n }\n };\n\n onFileUploadChange(item: any, key: string, newValue: any) {\n item[key] = newValue;\n this.modelChange.emit(this.model);\n }\n\n getArgs(key: string): Record<string, any> | undefined {\n const col = this.formRenderColumn[key];\n if (col?.type === 'file' || col?.type === 'image') {\n return col.args;\n }\n return undefined;\n }\n\n upload = async () => {\n if (this.uploadFiles?.length) {\n // Thực hiện upload tất cả các file đã chọn\n await Promise.all(this.uploadFiles.map(uploadFile => uploadFile.upload()));\n }\n };\n}\n","@if(component && tableOption) {\n <div style=\"width: 100%\">\n <sd-table [option]=\"tableOption\">\n @for(key of imageKeys; track key) {\n <ng-template [sdTableCellDef]=\"key\" let-item=\"item\">\n <sd-upload-file\n type=\"image\"\n [model]=\"item[key]\"\n [args]=\"getArgs(key)\"\n (modelChange)=\"onFileUploadChange(item, key, $event)\"\n align=\"left\"\n disabled\n previewWidth=\"50px\"\n previewHeight=\"50px\"></sd-upload-file>\n </ng-template>\n }\n @for(key of fileKeys; track key) {\n <ng-template [sdTableCellDef]=\"key\" let-item=\"item\">\n <sd-upload-file\n [model]=\"item[key]\"\n [args]=\"getArgs(key)\"\n (modelChange)=\"onFileUploadChange(item, key, $event)\"\n align=\"left\"\n disabled\n previewWidth=\"50px\"\n previewHeight=\"50px\"></sd-upload-file>\n </ng-template>\n }\n </sd-table>\n @if(!viewed && !component.properties?.viewed) {\n <sd-button\n prefixIcon=\"add\"\n color=\"primary\"\n (click)=\"onDetail()\"\n [title]=\"component.properties?.titleButtonCreate || ('core.component.form-builder.add-new' | translate)\"></sd-button>\n }\n @if(!viewed && !component.properties?.viewed) {\n <sd-side-drawer [title]=\"'core.component.form-builder.detail' | translate\" width=\"500px\">\n <div sdTitle>\n <span>{{ 'core.component.form-builder.create-update' | translate }}</span>\n </div>\n <div sdBody class=\"c-table-create-update\">\n @if(!!component.columns?.length) {\n <div class=\"row mx-0\">\n @for(column of component.columns;track column.key) {\n @let validate = formRenderColumn[column.key].validate;\n <div class=\"col-12 px-0 mt-16\">\n @if(column.type === 'string') {\n <sd-input\n [form]=\"form\"\n [label]=\"column.label\"\n [(model)]=\"row[column.key]\"\n [required]=\"validate?.required\"\n [pattern]=\"column.validate?.pattern\"\n [patternErrorMessage]=\"column.validate?.patternErrorMessage\"></sd-input>\n }@else if(column.type === 'number') {\n <sd-input-number\n [form]=\"form\"\n [label]=\"column.label\"\n [(model)]=\"row[column.key]\"\n [required]=\"validate?.required\"\n [min]=\"column.validate?.min\"></sd-input-number>\n }@else if(column.type === 'radio') {\n <sd-radio\n [form]=\"form\"\n [label]=\"column.label\"\n [name]=\"column.key\"\n [items]=\"column.values\"\n valueField=\"value\"\n displayField=\"display\"\n [required]=\"validate?.required\"></sd-radio>\n }@else if(column.type === 'values') {\n <sd-autocomplete\n [form]=\"form\"\n [label]=\"column.label\"\n [(model)]=\"row[column.key]\"\n [items]=\"columnValues[column.key]\"\n valueField=\"value\"\n displayField=\"display\"\n [required]=\"validate?.required\"></sd-autocomplete>\n }@else if(column.type === 'date') {\n <sd-date\n [form]=\"form\"\n [label]=\"column.label\"\n [(model)]=\"row[column.key]\"\n [required]=\"validate?.required\"></sd-date>\n }@else if(column.type === 'datetime') {\n <sd-datetime\n [form]=\"form\"\n [label]=\"column.label\"\n [(model)]=\"row[column.key]\"\n [required]=\"validate?.required\"></sd-datetime>\n }@else if(column.type === 'image') {\n <sd-upload-file\n [label]=\"column.label\"\n type=\"image\"\n [(model)]=\"row[column.key]\"\n [args]=\"column.args\"\n previewWidth=\"50px\"\n previewHeight=\"50px\"\n align=\"left\"></sd-upload-file>\n }@else if (column.type === 'file') {\n <sd-upload-file\n [label]=\"column.label\"\n type=\"file\"\n [(model)]=\"row[column.key]\"\n [args]=\"column.args\"\n previewWidth=\"50px\"\n previewHeight=\"50px\"\n align=\"left\"></sd-upload-file>\n }\n </div>\n }\n </div>\n }\n \n </div>\n <div sdFooter class=\"text-right pr-16\">\n <sd-button [title]=\"'core.component.form-builder.save' | translate\" prefixIcon=\"save\" color=\"primary\" type=\"fill\" (click)=\"onAccept()\"></sd-button>\n </div>\n </sd-side-drawer>\n }\n </div>\n}\n\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Utilities, StringUtilities } from '@sdcorejs/utils/fns';\n// import { sha1 } from 'object-hash';\nimport { debounceTime, filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericHtml } from '../../../../../../models';\nimport { HtmlPipe } from '../../../../../../pipes';\nimport { FormGenericService } from '../../../../../../services';\n\n@Component({\n selector: 'lib-html',\n templateUrl: './html.component.html',\n styleUrl: './html.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [HtmlPipe],\n})\nexport class HtmlComponent implements AfterViewInit, OnDestroy, OnInit {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n\n form = new FormGroup({});\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\n if (this.form !== form) {\n this.form = form;\n this.#inputChanges.next();\n }\n }\n\n entity: Record<string, any> = {};\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n this.#inputChanges.next();\n }\n }\n\n // Khi 1 giá trị trong entity thay đổi thì hashedValues sẽ thay đổi\n // Mong muốn khi hashedValues thay đổi thì trigger changes để trigger lại hàm lấy thông tin items\n @Input('hashedValues') set _hashedValues(val: string | undefined) {\n this.#inputChanges.next();\n }\n component!: SdFormGenericHtml;\n key!: string;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\n this.component = component;\n this.key = component.key || component.id;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n #inputChanges = new Subject<void>();\n constructor(\n private ref: ChangeDetectorRef,\n private readonly formRenderService: FormGenericService\n ) {}\n\n #hashedQuery?: string;\n hashedValues?: string;\n #generateQuery = (query: string | Record<string, any> | undefined, data: Record<string, any>): Record<string, any> => {\n let result: Record<string, any> = {};\n // Nếu query được cấu hình từ Form Builder của Camunda thì JSON nó sẽ là string, cần thực hiện parse\n if (typeof query === 'string') {\n try {\n result = JSON.parse(query);\n } catch (err) {\n console.error(err);\n return result;\n }\n } else if (Array.isArray(query)) {\n return result;\n } else {\n result = { ...query };\n }\n // Xử lý query,\n // Ví dụ: {\"a\": \"1\", \"b\": \"true\", \"c\": \"${key}\"} => {\"a\": \"1\", \"b\": true, \"c\": \"Dữ liệu tương ứng với key trong data\"}\n for (const key of Object.keys({ ...result })) {\n // Xử ly\n result[key] = StringUtilities.templateToDisplay(result[key], data);\n if (result[key] === 'true') {\n result[key] = true;\n }\n if (result[key] === 'false') {\n result[key] = false;\n }\n if (result[key] === '') {\n delete result[key];\n }\n }\n return result;\n };\n\n async ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n if (!this.component.template) {\n // Nếu HTML không phải từ template thì giá trị = content\n this.entity[this.key] = this.component.content;\n } else if (!this.component.properties?.queries?.length) {\n // Nếu HTML từ static template (không có queries)\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template);\n this.ref.markForCheck();\n } else if (this.viewed || this.component?.properties?.viewed) {\n // Đây là trạng thái view của HTML từ template có query\n // Nếu ở trạng thái viewed thì lấy entity hiển thị, nếu không có thì dùng content của component\n this.entity[this.key] = this.entity[this.key] || this.component.content;\n /* const values = { ...this.entity, ...this.form.value };\n const query = this.#generateQuery(this.component?.properties?.query, values);\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template, query);\n this.ref.markForCheck(); */\n } else {\n // Nếu có queries thì lắng nghe thay đổi của form\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\n const hashedValues = Utilities.hash(values);\n if (this.hashedValues !== hashedValues) {\n this.hashedValues = hashedValues;\n this.#inputChanges.next();\n }\n })\n );\n this.#subscription.add(\n this.#inputChanges.pipe(startWith('')).subscribe(async () => {\n const values = { ...this.entity, ...this.form.value };\n const query = this.#generateQuery(this.component?.properties?.query, values);\n const hashedQuery = Utilities.hash(query);\n // Nếu query có thay đổi thì thực hiện gán lại items\n if (hashedQuery !== this.#hashedQuery) {\n this.#hashedQuery = hashedQuery;\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template!, query);\n this.ref.markForCheck();\n }\n })\n );\n }\n }\n\n ngAfterViewInit() {}\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component && entity) {\n <div [innerHTML]=\"entity[key] | htmlPipe: entity[key] : component\"></div>\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { SdFormGenericComponent } from '../../../../models';\nimport {\n ChipCalendarComponent,\n ChipStringComponent,\n DatetimeComponent,\n NumberComponent,\n RadioComponent,\n SelectComponent,\n TableComponent,\n TextareaComponent,\n TextfieldComponent,\n UploadComponent,\n} from './components';\nimport { Subject } from 'rxjs';\nimport { HtmlComponent } from './components/html/html.component';\n\n@Component({\n selector: 'lib-item',\n templateUrl: './item.component.html',\n styleUrl: './item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TextfieldComponent,\n TextareaComponent,\n ChipStringComponent,\n ChipCalendarComponent,\n NumberComponent,\n DatetimeComponent,\n SelectComponent,\n RadioComponent,\n TableComponent,\n UploadComponent,\n HtmlComponent,\n ],\n})\nexport class LibItemComponent {\n @ViewChild(UploadComponent) itemUpload?: UploadComponent;\n @ViewChild(TableComponent) itemTable?: TableComponent;\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n col = 'col-6 px-8 py-8';\n component?: SdFormGenericComponent;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericComponent) {\n this.component = val;\n this.col = `col-${this.component?.layout?.columns || '6'} px-8 py-8`;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined) {\n this.viewed = val === '' || !!val;\n }\n\n validator?: SdCustomValidator;\n @Input('validator') set _validator(validator: SdCustomValidator) {\n if (validator && this.validator !== validator) {\n this.validator = validator;\n }\n }\n\n // Thực hiện upload nếu có component upload\n // TODO: Bổ sung logic upload cho table\n upload = async () => {\n await this.itemUpload?.upload?.();\n await this.itemTable?.upload?.();\n };\n\n // items: SdSearch = (args)=> {\n // const { } = args;\n // }\n\n // onSelect = (data: BaseEntity | BaseEntity[]) => {\n // if (Array.isArray(data)) {\n // this.entity[this.component.key] = data.map(selected => selected?.id).filter(val => !!val);\n // } else {\n // this.entity[this.component.key] = data?.id;\n // }\n // };\n}\n","@if (entity && component) {\n @if (component.type === 'textfield') {\n <div [class]=\"col\">\n <lib-textfield\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [validator]=\"validator\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-textfield>\n </div>\n } @else if (component.type === 'textarea') {\n <div [class]=\"col\">\n <lib-textarea\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-textarea>\n </div>\n } @else if (component.type === 'chip-string') {\n <div [class]=\"col\">\n <lib-chip-string\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-chip-string>\n </div>\n } @else if (component.type === 'chip-calendar') {\n <div [class]=\"col\">\n <lib-chip-calendar\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-chip-calendar>\n </div>\n } @else if (component.type === 'number') {\n <div [class]=\"col\">\n <lib-number\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-number>\n </div>\n }\n @if (component.type === 'select') {\n <div [class]=\"col\">\n <lib-select\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [component]=\"component\"\n [entity]=\"entity\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [validator]=\"validator\"\n [viewed]=\"viewed\"></lib-select>\n </div>\n } @else if (component.type === 'radio') {\n <div [class]=\"col\">\n <lib-radio\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [component]=\"component\"\n [entity]=\"entity\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-radio>\n </div>\n } @else if (component.type === 'datetime') {\n <div [class]=\"col\">\n <lib-datetime\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-datetime>\n </div>\n } @else if (component.type === 'upload') {\n <div [class]=\"col\">\n <lib-upload\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [component]=\"component\"\n [entity]=\"entity\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [validator]=\"validator\"\n [viewed]=\"viewed\">\n </lib-upload>\n </div>\n } @else if (component.type === 'table') {\n <div [class]=\"col\">\n <lib-table [setVariables]=\"setVariables\" [component]=\"component\" [(model)]=\"entity[component.key!]\" [viewed]=\"viewed\"></lib-table>\n </div>\n } @else if (component.type === 'html') {\n <div [class]=\"col\">\n <lib-html [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" [component]=\"component\" [viewed]=\"viewed\"> </lib-html>\n </div>\n } @else if (component.type === 'break') {\n <!-- Break: empty 12-col placeholder ép xuống dòng. Không render gì runtime. -->\n <div class=\"col-12\" style=\"height: 0;\"></div>\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericVariable } from '../../../../models';\n\n@Component({\n selector: 'variable',\n templateUrl: './variable.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VariableComponent implements OnInit, OnDestroy {\n @Input({ required: true }) variables?: SdFormGenericVariable[];\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup<any>({});\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n ngOnInit() {\n if (this.variables) {\n // Kiểm tra xem variable có trong form chưa, nếu có thì push vào form\n // Mục đích là khi variable bị thay đổi thì trigger được valueChanges và nơi khác lấy được variables\n for (const variable of this.variables) {\n if (!this.form.controls[variable.key]) {\n this.form.addControl(variable.key, new FormControl(this.entity?.[variable.key]));\n }\n }\n // Khi nhận được tín hiệu setVariables từ nơi khác, nếu variable này thuộc ds variables thì thực hiện gán variable\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => !!this.variables?.some(e => e.key === variable.key))).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n if (this.form.controls[variable.key]) {\n this.form.patchValue({ [variable.key]: variable.value });\n }\n this.form.controls['sdRaw']?.setValue({ ...this.entity });\n this.ref.markForCheck();\n })\n );\n }\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n}\n","","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnDestroy,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SdSection } from '@sdcorejs/angular/components/section';\n// import { sha1 } from 'object-hash';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport { debounceTime, startWith } from 'rxjs/operators';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../configurations';\nimport { EvaluateExpression, SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormRenderConfiguration } from '../../models';\nimport { SdFormGenericValidation } from '../../models/form-generic-validation.model';\nimport { WhenExpressionPipe } from '../../pipes';\nimport { LibItemComponent, VariableComponent } from './components';\n\n@Component({\n selector: 'sd-form-render',\n templateUrl: './form-render.component.html',\n styleUrl: './form-render.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdSection, LibItemComponent, WhenExpressionPipe, VariableComponent],\n})\nexport class SdFormRender implements OnDestroy, AfterViewInit {\n @ViewChildren(LibItemComponent) formRenderItems: QueryList<LibItemComponent> = new QueryList<LibItemComponent>();\n @Input() form: FormGroup = new FormGroup({});\n configuration!: SdFormRenderConfiguration;\n @Input({ alias: 'configuration', required: true }) set _configuration(val: SdFormRenderConfiguration) {\n this.configuration = this.#cloneAndFormatConfiguration(val);\n // Luôn format lại component trước khi render\n this.#configurationChanges.next(this.configuration);\n }\n\n // Dựa vào giá trị default sẽ gán cho entity\n #defaultEntity: Record<string, any> = {};\n @Input('defaultEntity') set _default(defaultEntity: Record<string, any>) {\n this.#defaultEntity = defaultEntity;\n this.#defaultEntityChanges.next(defaultEntity);\n }\n\n entity: Record<string, any> = {};\n @Input('entity') set _entity(val: Record<string, any>) {\n this.entity = val;\n this.#entityChanges.next(this.entity);\n }\n\n properties: string[] = [];\n @Input('properties') set _properties(val: string[]) {\n this.properties = val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '') {\n this.viewed = val === '' || val;\n }\n #subscription = new Subscription();\n #configurationChanges = new Subject<SdFormRenderConfiguration>();\n #defaultEntityChanges = new Subject<Record<string, any>>();\n #entityChanges = new Subject<Record<string, any>>();\n #renderScheduled = false;\n #destroyed = false;\n loadCompleted = false;\n hashedValues?: string;\n formValue: Record<string, any> = {};\n\n // Các component item của form-render sẽ lắng nghe thay đổi\n setVariables = new Subject<{ key: string; value: any }>();\n private readonly ref = inject(ChangeDetectorRef);\n private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n combineLatest([this.#configurationChanges, this.#entityChanges])\n .pipe(startWith([]))\n .subscribe(async () => {\n if (this.entity && this.configuration?.components?.length) {\n this.loadCompleted = true;\n this.#scheduleRender();\n if (this.configuration?.onLoaded) {\n try {\n this.configuration.onLoaded();\n } catch (err) {\n console.error(err);\n }\n }\n }\n })\n );\n this.#subscription.add(\n this.#defaultEntityChanges.pipe(startWith(this.#defaultEntity)).subscribe(defaultEntity => {\n for (const key of Object.keys({ ...defaultEntity })) {\n this.entity[key] = this.entity[key] ?? defaultEntity[key];\n }\n this.#patchRegisteredControls(this.entity);\n this.#syncRawControl(this.entity);\n })\n );\n this.#subscription.add(\n this.#entityChanges.pipe(startWith(this.entity)).subscribe(entity => {\n this.#syncRawControl(entity);\n })\n );\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\n const hashedValues = Utilities.hash(values);\n if (this.hashedValues !== hashedValues) {\n this.hashedValues = hashedValues;\n // Ở trạng thái view thì không có FormControl nên phải binding entity mới có dữ liệu cho formValue\n this.formValue = { ...this.entity, ...values };\n this.#scheduleRender();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#destroyed = true;\n this.#subscription.unsubscribe();\n }\n\n // Hàm này sẽ đi qua các components và các columns trong table để xử lý upload file\n // Trước khi thực hiện lưu thì cần gọi hàm này trước để mapping giá trị đúng\n upload = async () => {\n for (const formRenderItem of this.formRenderItems || []) {\n await formRenderItem.upload();\n }\n };\n\n // Nên gọi hàm này trước khi save/submit\n // Hàm này trả về mảng string error\n // Nếu không có error nào thì trả về mảng rỗng\n getValidationMessages = async (alert: SdFormGenericValidation['alert']) => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n const messages: string[] = [];\n for (const validation of this.configuration?.validations?.filter(e => e.alert === alert) || []) {\n if (validation.type === 'expression') {\n const result = EvaluateExpression(validation.expression, this.entity);\n if (result) {\n messages.push(validation.message);\n }\n } else if (validation.type === 'function') {\n const func = this.formGenericConfiguration?.form?.validation?.functions?.find(e => e.value === validation.code);\n if (func?.validate) {\n const message = await func.validate({\n entity: this.entity,\n });\n if (message) {\n messages.push(message);\n }\n }\n }\n }\n return messages;\n };\n\n #cloneAndFormatConfiguration(configuration: SdFormRenderConfiguration): SdFormRenderConfiguration {\n return {\n ...configuration,\n components: (configuration?.components || []).map(component => this.#cloneAndFormatComponent(component)),\n };\n }\n\n #patchRegisteredControls(entity: Record<string, any>): void {\n const registeredValue: Record<string, any> = {};\n for (const key of Object.keys(entity)) {\n if (key !== 'sdRaw' && this.form.controls[key]) {\n registeredValue[key] = entity[key];\n }\n }\n\n if (Object.keys(registeredValue).length) {\n this.form.patchValue(registeredValue);\n }\n }\n\n #syncRawControl(entity: Record<string, any>): void {\n if (!this.form.controls['sdRaw']) {\n this.form.addControl('sdRaw', new FormControl({ ...entity }));\n } else {\n this.form.controls['sdRaw'].setValue({ ...entity });\n }\n }\n\n #cloneAndFormatComponent(component: SdFormGenericComponent | SdFormGenericGroup): SdFormGenericComponent | SdFormGenericGroup {\n const clonedComponent = JSON.parse(JSON.stringify(component)) as SdFormGenericComponent | SdFormGenericGroup;\n SdFormatComponent(clonedComponent);\n\n if (clonedComponent.type === 'group') {\n clonedComponent.components = clonedComponent.components.map(child => this.#cloneAndFormatComponent(child) as SdFormGenericComponent);\n }\n\n return clonedComponent;\n }\n\n #scheduleRender(): void {\n if (this.#renderScheduled || this.#destroyed) {\n return;\n }\n\n this.#renderScheduled = true;\n queueMicrotask(() => {\n this.#renderScheduled = false;\n if (!this.#destroyed) {\n this.ref.detectChanges();\n }\n });\n }\n}\n","@if (form && loadCompleted && hashedValues) {\n <div class=\"row mx-0\">\n @for (component of configuration.components; track component.id) {\n @let expression = hashedValues | whenExpression: component : formValue;\n @if (!expression.hidden) {\n @if (component.type === 'group') {\n @if (!!component.components.length) {\n <div class=\"col-12 mt-16\">\n <sd-section [title]=\"component.label\" [icon]=\"component.properties.icon\">\n <div class=\"row mx-0\">\n @for (childComponent of component.components; track childComponent.id) {\n @let childExpression = hashedValues | whenExpression: childComponent : formValue;\n @if (!childExpression.hidden) {\n <lib-item\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"childComponent\"\n [required]=\"childExpression.required\"\n [disabled]=\"childExpression.disabled\"\n [viewed]=\"viewed\"></lib-item>\n }\n }\n </div>\n </sd-section>\n </div>\n }\n } @else {\n <lib-item\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"expression.required\"\n [disabled]=\"expression.disabled\"\n [viewed]=\"viewed\"></lib-item>\n }\n }\n }\n <variable [variables]=\"configuration.variables\" [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" ></variable>\n </div>\n}\n","import { SdQueryBuilderField } from '@sdcorejs/angular/components/query-builder';\nimport { Filter, Operator } from '@sdcorejs/utils/models';\nimport { Attribute, AttributeOperators, DayInfo, SdFormGenericExpression, SdFormGenericExpressionCondition } from '../../../../models';\n\nlet expressionId = 0;\n\nexport function formAttributesToQueryFields(attributes: Attribute[]): SdQueryBuilderField[] {\n return attributes.map(attribute => ({\n key: attribute.value,\n label: attribute.display,\n type: attribute.type === 'datetime' ? 'datetime' : attribute.type,\n operators: AttributeOperators[attribute.type].map(operator => operator.value as Operator),\n values: attribute.type === 'values' ? attribute.values : undefined,\n trueLabel: attribute.type === 'boolean' ? attribute.displayOnTrue : undefined,\n falseLabel: attribute.type === 'boolean' ? attribute.displayOnFalse : undefined,\n }));\n}\n\nexport function formExpressionToFilter(expression: SdFormGenericExpression | undefined | null): Filter | null {\n if (!expression?.conditions?.length) return null;\n\n const data = expression.conditions\n .map(condition => (condition.type === 'combinator' ? formExpressionToFilter(condition) : conditionToFilter(condition)))\n .filter((filter): filter is Filter => !!filter);\n\n if (!data.length) return null;\n\n return {\n operator: expression.combinator === '||' ? 'OR' : 'AND',\n data,\n } as Filter;\n}\n\nexport function filterToFormExpression(filter: Filter | null | undefined): SdFormGenericExpression {\n const root = newExpression(filter && isAndOrFilter(filter) && filter.operator === 'OR' ? '||' : '&&');\n if (!filter) return root;\n\n if (isAndOrFilter(filter)) {\n root.conditions = filter.data.map(filterToExpressionNode);\n return root;\n }\n\n root.conditions = [filterToCondition(filter)];\n return root;\n}\n\nfunction conditionToFilter(condition: SdFormGenericExpressionCondition): Filter | null {\n if (!condition.field || !condition.operator) return null;\n\n if (condition.operator === 'NULL' || condition.operator === 'NOT_NULL') {\n return {\n field: condition.field as never,\n operator: condition.operator,\n } as Filter;\n }\n\n if (condition.value === undefined || condition.value === null || condition.value === '') return null;\n\n return {\n field: condition.field as never,\n operator: condition.operator,\n data: condition.value,\n } as Filter;\n}\n\nfunction filterToExpressionNode(filter: Filter): SdFormGenericExpression | SdFormGenericExpressionCondition {\n return isAndOrFilter(filter) ? filterToGroupExpression(filter) : filterToCondition(filter);\n}\n\nfunction filterToGroupExpression(filter: { operator: 'AND' | 'OR'; data: Filter[] }): SdFormGenericExpression {\n return {\n ...newExpression(filter.operator === 'OR' ? '||' : '&&'),\n conditions: filter.data.map(filterToExpressionNode),\n };\n}\n\nfunction filterToCondition(filter: Filter): SdFormGenericExpressionCondition {\n const raw = filter as Record<string, any>;\n const relative = readRelativeDate(raw);\n\n return {\n key: nextExpressionId('condition'),\n type: 'condition',\n field: raw['field'],\n operator: raw['operator'],\n value: relative.value,\n dayInfo: relative.dayInfo,\n };\n}\n\nfunction readRelativeDate(filter: Record<string, any>): { value: any; dayInfo: DayInfo } {\n if (filter['dataType'] === 'date-today') {\n return { value: 'now', dayInfo: { type: 'NOW' } };\n }\n\n if (filter['dataType'] === 'date-relative') {\n const data = filter['data'];\n if (data?.unit === 'day' && typeof data.amount === 'number') {\n const related = data.direction === 'next' ? 'NEXTDAY' : 'LASTDAY';\n const suffix = related === 'NEXTDAY' ? 'NextDay' : 'LastDay';\n\n return {\n value: `${data.amount}${suffix}`,\n dayInfo: {\n type: 'RELATED',\n related,\n relatedValue: data.amount,\n },\n };\n }\n }\n\n return { value: filter['data'], dayInfo: {} };\n}\n\nfunction newExpression(combinator: '&&' | '||'): SdFormGenericExpression {\n return {\n key: nextExpressionId('group'),\n type: 'combinator',\n combinator,\n conditions: [],\n };\n}\n\nfunction nextExpressionId(prefix: string): string {\n expressionId += 1;\n return `${prefix}-${expressionId}`;\n}\n\nfunction isAndOrFilter(filter: any): filter is { operator: 'AND' | 'OR'; data: Filter[] } {\n return !!filter && (filter.operator === 'AND' || filter.operator === 'OR') && Array.isArray(filter.data);\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, viewChild } from '@angular/core';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdQueryBuilder, SdQueryBuilderField } from '@sdcorejs/angular/components/query-builder';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { Filter } from '@sdcorejs/utils/models';\nimport {\n Attribute,\n GetAttributes,\n SdFormGenericComponent,\n SdFormGenericExpression,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../models';\nimport { ExpressionQueryPipe } from '../../../../pipes';\nimport { FormGenericService } from '../../../../services';\nimport { filterToFormExpression, formAttributesToQueryFields, formExpressionToFilter } from './form-expression-query-adapter';\n\n@Component({\n selector: 'attribute-expression',\n templateUrl: './attribute-expression.component.html',\n styleUrl: './attribute-expression.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdButton, SdModal, SdQueryBuilder, ExpressionQueryPipe, TranslatePipe],\n})\nexport class AttributeExpression {\n readonly modal = viewChild(SdModal);\n\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n @Input() label?: string;\n\n queryFields: SdQueryBuilderField[] = [];\n draftFilter: Filter | null = null;\n model?: SdFormGenericExpression;\n\n @Input({ alias: 'model', required: true }) set _model(model: SdFormGenericExpression | undefined) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n\n @Output() modelChange = new EventEmitter<SdFormGenericExpression>();\n @Output() sdChange = new EventEmitter<SdFormGenericExpression>();\n\n constructor(\n private readonly ref: ChangeDetectorRef,\n private readonly formGenericService: FormGenericService\n ) {}\n\n onEdit = async () => {\n const attributes = await this.#getAttributes(this.components, this.variables);\n this.queryFields = formAttributesToQueryFields(attributes);\n this.draftFilter = formExpressionToFilter(this.model);\n this.modal()?.open();\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n const nextModel = filterToFormExpression(this.draftFilter);\n this.model = nextModel;\n this.modelChange.emit(nextModel);\n this.sdChange.emit(nextModel);\n this.modal()?.close();\n this.ref.markForCheck();\n };\n\n #getAttributes = async (\n components: (SdFormGenericComponent | SdFormGenericGroup)[],\n variables: SdFormGenericVariable[]\n ): Promise<Attribute[]> => {\n const attributes: Attribute[] = [];\n if (components?.length) {\n for (const component of components) {\n if (component.type === 'group') {\n attributes.push(...GetAttributes(component.components));\n } else if (component.type === 'textfield' || component.type === 'textarea') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n } else if (component.type === 'number') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'number',\n });\n } else if (component.type === 'datetime') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'datetime',\n });\n } else if (component.type === 'checkbox') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'boolean',\n displayOnTrue: 'YES',\n displayOnFalse: 'NO',\n });\n } else if (component.type === 'radio' || component.type === 'select') {\n if (component.values?.length) {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'values',\n values: component.values.map(e => ({\n value: e.value,\n display: e.label,\n })),\n });\n } else {\n const values = await this.formGenericService.selection.items(component.valuesKey, {\n entity: {},\n component,\n });\n if (Array.isArray(values)) {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'values',\n values,\n });\n } else {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n }\n }\n }\n }\n }\n\n if (variables?.length) {\n for (const variable of variables) {\n attributes.push({\n value: variable.key,\n display: `[VARIABLE] ${variable.label}`,\n type: 'string',\n });\n }\n }\n return attributes;\n };\n}\n","<div class=\"fb-field\">\n @if (label) {\n <div class=\"fb-field__label\">{{ label }}</div>\n }\n @let exprText = model | expressionQuery;\n <div class=\"fb-expr\" (click)=\"onEdit()\" role=\"button\" tabindex=\"0\" (keydown.enter)=\"onEdit()\" (keydown.space)=\"onEdit()\">\n <span class=\"fb-expr__badge\">QB</span>\n @if (exprText) {\n <span class=\"fb-expr__code mono\">{{ exprText }}</span>\n } @else {\n <span class=\"empty\">{{ 'core.component.form-builder.set-expression' | translate }}</span>\n }\n <button type=\"button\" class=\"fb-icon-btn\" (click)=\"onEdit(); $event.stopPropagation()\" aria-label=\"edit expression\">\n <span class=\"msi\">account_tree</span>\n </button>\n </div>\n</div>\n\n<sd-modal [title]=\"'core.component.form-builder.set-expression' | translate\" width=\"920px\">\n <div class=\"fb-expression-query\">\n <sd-query-builder [fields]=\"queryFields\" [(value)]=\"draftFilter\"></sd-query-builder>\n </div>\n <ng-container sdFooter>\n <sd-button\n prefixIcon=\"check\"\n [title]=\"'core.component.form-builder.confirm' | translate\"\n (click)=\"onAccept()\"\n color=\"primary\"\n type=\"fill\"></sd-button>\n </ng-container>\n</sd-modal>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\n\n@Component({\n selector: 'attribute-input-number',\n templateUrl: './attribute-input-number.component.html',\n imports: [SdInputNumber],\n})\nexport class AttributeInputNumber {\n label?: string | null;\n @Input('label') set _label(label: string | undefined | null) {\n this.label = label;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n model?: number | null;\n @Input('model') set _model(model: number | undefined | null) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n @Output() modelChange = new EventEmitter<number>();\n\n onChange = (value: any) => {\n this.modelChange.emit(value);\n };\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <sd-input-number\n style=\"width: 200px\"\n size=\"sm\"\n [(model)]=\"model\"\n [disabled]=\"disabled\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-input-number>\n</div> -->\n<sd-input-number\n class=\"py-8\"\n size=\"sm\"\n [label]=\"label!\"\n [(model)]=\"model\"\n [disabled]=\"disabled\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-input-number>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\n\n@Component({\n selector: 'attribute-input',\n templateUrl: './attribute-input.component.html',\n imports: [SdInput],\n})\nexport class AttributeInput {\n @Input() form?: FormGroup;\n\n label?: string | null;\n @Input('label') set _label(label: string | undefined | null) {\n this.label = label;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n model?: string | null;\n @Input('model') set _model(model: string | undefined | null) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n @Output() modelChange = new EventEmitter<string>();\n @Output() sdChange = new EventEmitter<string>();\n\n onChange = (value: any) => {\n this.modelChange.emit(value);\n this.sdChange.emit(value);\n };\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <sd-input style=\"width: 200px\" size=\"sm\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-input>\n</div> -->\n<sd-input class=\"py-8\" size=\"sm\" [label]=\"label!\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-input>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'attribute-switch',\n templateUrl: './attribute-switch.component.html',\n imports: [SdSelect, TranslatePipe],\n})\nexport class AttributeSwitch {\n @Input() form?: FormGroup;\n\n label?: string | null;\n @Input('label') set _label(label: string | undefined | null) {\n this.label = label;\n }\n\n model?: boolean;\n @Input('model') set _model(val: boolean | undefined | null) {\n if (this.model !== !!val) {\n this.model = !!val;\n }\n }\n @Output() modelChange = new EventEmitter<boolean>();\n\n onChange = (value: any) => {\n this.modelChange.emit(!!value);\n };\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <sd-switch size=\"sm\" [form]=\"form\" [(model)]=\"model\" (sdChange)=\"onChange($event)\" hideInlineError></sd-switch>\n</div> -->\n<sd-select\n class=\"py-8\"\n size=\"sm\"\n [label]=\"label!\"\n [form]=\"form\"\n [(model)]=\"model\"\n valueField=\"value\"\n displayField=\"display\"\n [items]=\"[\n { value: true, display: ('core.confirm.yes-short' | translate) },\n { value: false, display: ('core.confirm.no-short' | translate) }\n ]\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-select>\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../../../configurations';\nimport { SdFormGenericComponent, SdFormGenericTemplate } from '../../../../models';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n selector: 'attribute-template',\n templateUrl: './attribute-template.component.html',\n imports: [SdAutocomplete, TranslatePipe],\n})\nexport class AttributeTemplate {\n templates: SdFormGenericTemplate[] = [];\n component!: SdFormGenericComponent;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericComponent) {\n this.component = component;\n this.templates = this.formGenericConfiguration?.form?.templates?.filter(e => e.component?.type === this.component?.type) || [];\n }\n @Output() sdChange = new EventEmitter<SdFormGenericComponent>();\n private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n onChange = (value: string | number | null) => {\n if (typeof value === 'string') {\n const template = this.templates?.find(e => e.value === value);\n if (template?.component) {\n this.sdChange.emit(JSON.parse(JSON.stringify(template.component)));\n }\n }\n };\n}\n","@if (templates.length) {\n <!-- <div class=\"d-flex align-items-center py-4\">\n <div class=\"T14M\" style=\"flex: 1\">Dữ liệu mẫu</div>\n <sd-autocomplete\n style=\"width: 200px\"\n size=\"sm\"\n [(model)]=\"component.template\"\n [items]=\"templates\"\n valueField=\"value\"\n displayField=\"display\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-autocomplete>\n </div> -->\n <sd-autocomplete\n class=\"py-8\"\n size=\"sm\"\n [label]=\"'core.component.form-builder.template-data' | translate\"\n [(model)]=\"component.template\"\n [items]=\"templates\"\n valueField=\"value\"\n displayField=\"display\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-autocomplete>\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\n\n@Component({\n selector: 'attribute-textarea',\n templateUrl: './attribute-textarea.component.html',\n imports: [SdTextarea],\n})\nexport class AttributeTextarea {\n @Input() form?: FormGroup;\n\n label?: string | null;\n @Input('label') set _label(label: string | undefined | null) {\n this.label = label;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n model?: string | null;\n @Input('model') set _model(model: string | undefined | null) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n @Output() modelChange = new EventEmitter<string>();\n @Output() sdChange = new EventEmitter<string>();\n\n onChange = (value: any) => {\n this.modelChange.emit(value);\n this.sdChange.emit(value);\n };\n}\n","<sd-textarea class=\"py-8\" size=\"sm\" [label]=\"label!\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-textarea>","import { Injectable } from '@angular/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { SdFormGenericComponent, SdFormGenericGroup } from '../../../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BuilderService {\n constructor() {}\n\n // Khi component change attribute, mong muốn re-render control để người dùng nhìn trực quan\n // Ví dụ:\n // Khi content html thay đổi (attribute), mong muốn bố cục (control) cũng sẽ hiển thị\n // Khi columns của table thay đổi, cập nhật bố cục\n #componentChanges = new Subject<SdFormGenericComponent | SdFormGenericGroup>();\n get componentEmitters() {\n return this.#componentChanges;\n }\n\n get componentListeners() {\n // Debound 0.2s để tránh trigger liên tục\n return this.#componentChanges.pipe(debounceTime(200));\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericTextfield,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'textfield-attribute',\n templateUrl: './textfield-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AttributeTemplate,\n AttributeExpression,\n AttributeInput,\n AttributeInputNumber,\n AttributeSwitch,\n AttributeTextarea,\n TranslatePipe,\n ],\n})\nexport class TextfieldAttribute implements AfterViewInit, OnDestroy {\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n component!: SdFormGenericTextfield;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextfield) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'textfield') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.default-value' | translate\" [(model)]=\"component.defaultValue\"></attribute-input>\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n <attribute-input-number [label]=\"'core.component.form-builder.maxlength' | translate\" [(model)]=\"component.validate!.maxlength\"></attribute-input-number>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n <attribute-input label=\"Expression\" [(model)]=\"component.validate!.pattern\"></attribute-input>\n <attribute-input label=\"Expression message\" [(model)]=\"component.validate!.patternErrorMessage\"></attribute-input>\n </div>\n </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericTextfield } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'textfield-control',\n templateUrl: './textfield-control.component.html',\n styleUrl: './textfield-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextFieldControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericTextfield;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextfield) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">\n Your input text\n </div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input\">{{component.defaultValue}}</div>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericTextarea,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'textarea-attribute',\n templateUrl: './textarea-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AttributeTemplate,\n AttributeInput,\n AttributeInputNumber,\n AttributeSwitch,\n AttributeExpression,\n AttributeTextarea,\n TranslatePipe,\n ],\n})\nexport class TextareaAttribute implements AfterViewInit, OnDestroy {\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n component!: SdFormGenericTextarea;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextarea) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'textarea') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n <attribute-input-number [label]=\"'core.component.form-builder.maxlength' | translate\" [(model)]=\"component.validate!.maxlength\"></attribute-input-number>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericTextarea } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\n\n@Component({\n selector: 'textarea-control',\n templateUrl: './textarea-control.component.html',\n styleUrl: './textarea-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextareaControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericTextarea;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextarea) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">Your input text</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-textarea\"></div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericChipString } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'chip-string-control',\n templateUrl: './chip-string-control.component.html',\n styleUrl: './chip-string-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n})\nexport class ChipStringControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericChipString;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipString) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n // Vì đã đúng theo id nên có thể ép kiểu any\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">One, Two, Three</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input\">\n <span class=\"c-chip\">One</span>\n <span class=\"c-chip\">Two</span>\n <span class=\"c-chip\">Three</span>\n </div>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport {\n SdFormatComponent,\n SdFormGenericChipString,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'chip-string-attribute',\n templateUrl: './chip-string-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class ChipStringAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericChipString;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipString) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n #changes = new Subject<void>();\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'chip-string') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n\n onChanges = () => {\n this.#changes.next();\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n @if (component.properties!.viewed) {\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n }\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n @if (!component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericChipCalendar } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'chip-calendar-control',\n templateUrl: './chip-calendar-control.component.html',\n styleUrl: './chip-calendar-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n})\nexport class ChipCalendarControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericChipCalendar;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipCalendar) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n // Vì đã đúng theo id nên có thể ép kiểu any\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">One, Two, Three</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input\">\n <span class=\"c-chip\">One</span>\n <span class=\"c-chip\">Two</span>\n <span class=\"c-chip\">Three</span>\n </div>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport {\n SdFormatComponent,\n SdFormGenericChipCalendar,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'chip-calendar-attribute',\n templateUrl: './chip-calendar-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class ChipCalendarAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericChipCalendar;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipCalendar) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n #changes = new Subject<void>();\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'chip-string') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n\n onChanges = () => {\n this.#changes.next();\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n @if (component.properties!.viewed) {\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n }\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n @if (!component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericNumber,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'number-attribute',\n templateUrl: './number-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AttributeTemplate,\n AttributeInput,\n AttributeInputNumber,\n AttributeSwitch,\n AttributeExpression,\n AttributeTextarea,\n TranslatePipe,\n ],\n})\nexport class NumberAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericNumber;\n isTemplate = false;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericNumber) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'number') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.isTemplate = true;\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n </div>\n</details>\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n <attribute-input-number [label]=\"'core.component.form-builder.min' | translate\" [(model)]=\"component.validate!.min\"></attribute-input-number>\n <attribute-input-number [label]=\"'core.component.form-builder.max' | translate\" [(model)]=\"component.validate!.max\"></attribute-input-number>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericNumber } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { NumberUtilities } from '@sdcorejs/angular/utilities/extensions';\n\n@Component({\n selector: 'number-control',\n templateUrl: './number-control.component.html',\n styleUrl: './number-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumberControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericNumber;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericNumber) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n number = NumberUtilities.toISO(new Date().getTime());\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n // Vì đã đúng theo id nên có thể ép kiểu any\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">{{number}}</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input\"></div>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { DateUtilities } from '@sdcorejs/angular/utilities';\nimport { filter, Subscription } from 'rxjs';\nimport { SdFormGenericDatetime } from '../../../../../models';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'datetime-control',\n templateUrl: './datetime-control.component.html',\n styleUrl: './datetime-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n})\nexport class DatetimeControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericDatetime;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericDatetime) {\n this.component = component;\n }\n\n date = DateUtilities.toFormat(new Date(), 'dd/MM/yyyy');\n datetime = DateUtilities.toFormat(new Date(), 'dd/MM/yyyy HH:mm');\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">{{ component.subtype === 'datetime' ? datetime : date }}</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input\">\n <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n <path\n d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"></path>\n </svg>\n </div>\n </div>\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\n\n@Component({\n selector: 'attribute-select',\n templateUrl: './attribute-select.component.html',\n imports: [SdSelect],\n})\nexport class AttributeSelect {\n @Input() form?: FormGroup;\n\n label?: string | null;\n @Input('label') set _label(label: string | undefined | null) {\n this.label = label;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n multiple = false;\n @Input('multiple') set _multiple(val: '' | boolean | undefined | null) {\n this.multiple = val === '' || !!val;\n }\n\n items: Item[] = [];\n @Input({ alias: 'items', required: true }) set _items(items: Item[] | undefined | null) {\n if (Array.isArray(items) && this.items !== items) {\n this.items = items || [];\n } else {\n items = [];\n }\n }\n\n model?: any | any[];\n @Input('model') set _model(model: any | any[] | undefined | null) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n @Output() modelChange = new EventEmitter<string>();\n @Output() sdChange = new EventEmitter<string>();\n\n onChange = (value: any) => {\n this.modelChange.emit(value);\n this.sdChange.emit(value);\n };\n}\n\ninterface Item {\n value: string;\n display: string;\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <sd-select\n style=\"width: 200px\"\n size=\"sm\"\n [form]=\"form\"\n [(model)]=\"model\"\n [items]=\"items\"\n valueField=\"value\"\n displayField=\"display\"\n [disabled]=\"disabled\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-select>\n</div> -->\n<sd-select\n class=\"py-8\"\n size=\"sm\"\n [label]=\"label!\"\n [form]=\"form\"\n [(model)]=\"model\"\n [items]=\"items\"\n valueField=\"value\"\n displayField=\"display\"\n [disabled]=\"disabled\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-select>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericDatetime,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'datetime-attribute',\n templateUrl: './datetime-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeSelect, AttributeExpression, AttributeTextarea, TranslatePipe],\n})\nexport class DatetimeAttribute implements AfterViewInit, OnDestroy {\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n component!: SdFormGenericDatetime;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericDatetime) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'datetime') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-select\n [label]=\"'core.component.form-builder.format' | translate\"\n [(model)]=\"component.subtype\"\n [items]=\"[\n { value: 'date', display: 'dd/MM/yyyy' },\n { value: 'datetime', display: 'dd/MM/yyyy HH:mm' }\n ]\"></attribute-select>\n <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n </div>\n</details>\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport {\n GetComponentAttributes,\n GetVariableAttributes,\n SdFormGenericComponent,\n SdFormGenericDefinitionSelection,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../../models';\nimport { startWith, Subject, Subscription } from 'rxjs';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'build-queries',\n templateUrl: './build-queries.component.html',\n styleUrl: './build-queries.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdAutocomplete, SdButton, SdModal, TranslatePipe],\n})\nexport class BuildQueries implements OnInit, OnDestroy {\n @ViewChild(SdModal) modal?: SdModal;\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n @Input() label?: string;\n @Input({ required: true }) selections: SdFormGenericDefinitionSelection[] = [];\n valuesKey?: string | null;\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\n this.valuesKey = valuesKey;\n this.#inputChanges.next();\n }\n selection?: SdFormGenericDefinitionSelection;\n\n leftProperties?: Property[];\n rightProperties?: Property[];\n\n queryString?: string;\n model?: Record<string, any>;\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n this.model = JSON.parse(JSON.stringify({ ...model }));\n // Parse JSON -> STRING để hiển thị trên UI\n this.queryString = JSON.stringify(this.model);\n }\n @Output() modelChange = new EventEmitter<Record<string, string>>();\n\n // Mỗi lần inputChanges thì tính lại selection\n #inputChanges = new Subject<void>();\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.#subscription.add(\n this.#inputChanges.pipe(startWith('')).subscribe(() => {\n this.selection = this.selections?.find?.(e => e.value === this.valuesKey);\n })\n );\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n edit = async () => {\n this.leftProperties = this.selection?.queries?.items || [];\n this.rightProperties = [...GetComponentAttributes(this.components), ...GetVariableAttributes(this.variables)].map(e => ({\n value: '${' + e.value + '}',\n display: e.display,\n }));\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n const result: Record<string, string> = {};\n for (const key of Object.keys(this.model!)) {\n const value = this.model?.[key];\n if (value !== undefined && value !== null && value !== '') {\n result[key] = value;\n }\n }\n this.modelChange.emit(result);\n this.modal?.close();\n this.ref.markForCheck();\n };\n}\n\nexport interface Property {\n value: string;\n display: string;\n}\n","@if (!!selection?.queries?.items?.length) {\n <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n </div>\n </div>\n <sd-modal [title]=\"'core.component.form-builder.set-query-value' | translate\" width=\"400px\">\n <div class=\"c-builder\">\n @for (property of leftProperties; track property.value) {\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n <div style=\"width: 150px\">\n <div class=\"text-secondary\">{{ property.value }}</div>\n <div class=\"T16M\">{{ property.display }}</div>\n </div>\n <sd-autocomplete\n [label]=\"'core.component.form-builder.value-source-field' | translate\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"model![property.value]\"\n [items]=\"rightProperties\"\n valueField=\"value\"\n displayField=\"display\"\n hideInlineError></sd-autocomplete>\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n </sd-modal>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport {\n GetComponentAttributes,\n GetVariableAttributes,\n SdFormGenericComponent,\n SdFormGenericDefinitionSelection,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../../models';\nimport { startWith, Subject, Subscription } from 'rxjs';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'build-variables',\n templateUrl: './build-variables.component.html',\n styleUrl: './build-variables.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdAutocomplete, SdButton, SdModal, TranslatePipe],\n})\nexport class BuildVariables implements OnInit, OnDestroy {\n @ViewChild(SdModal) modal?: SdModal;\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n @Input() label?: string;\n @Input({ required: true }) selections: SdFormGenericDefinitionSelection[] = [];\n valuesKey?: string | null;\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\n this.valuesKey = valuesKey;\n this.#inputChanges.next();\n }\n selection?: SdFormGenericDefinitionSelection;\n\n leftProperties?: Property[];\n rightProperties?: Property[];\n\n items: {\n id: string;\n key: string;\n value: any;\n }[] = [];\n queryString?: string;\n #model!: Record<string, any>;\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n this.#model = JSON.parse(JSON.stringify({ ...model }));\n // Parse JSON -> STRING để hiển thị trên UI\n this.queryString = JSON.stringify(this.#model);\n this.items = Object.keys(this.#model).map(key => ({\n id: Utilities.randomId(),\n key,\n value: this.#model?.[key],\n }));\n }\n @Output() modelChange = new EventEmitter<Record<string, string>>();\n\n // Mỗi lần inputChanges thì tính lại selection\n #inputChanges = new Subject<void>();\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.#subscription.add(\n this.#inputChanges.pipe(startWith('')).subscribe(() => {\n this.selection = this.selections?.find?.(e => e.value === this.valuesKey);\n })\n );\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n edit = async () => {\n this.leftProperties = [...GetComponentAttributes(this.components), ...GetVariableAttributes(this.variables)];\n this.rightProperties =\n this.selection?.variables?.items?.map(e => ({\n value: '${' + e.value + '}',\n display: e.display,\n })) || [];\n this.modal?.open?.();\n this.ref.markForCheck();\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n addField = () => {\n this.items.push({\n id: Utilities.randomId(),\n key: '',\n value: '',\n });\n this.ref.markForCheck();\n };\n\n remove = (idx: number) => {\n this.items.splice(idx, 1);\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n const result: Record<string, string> = {};\n for (const { key, value } of this.items) {\n if (value !== undefined && value !== null && value !== '') {\n result[key] = value;\n }\n }\n this.modelChange.emit(result);\n this.modal?.close();\n this.ref.markForCheck();\n };\n}\n\nexport interface Property {\n value: string;\n display: string;\n}\n","@if (!!selection?.variables?.items?.length) {\n <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n </div>\n </div>\n <sd-modal [title]=\"'core.component.form-builder.set-on-change-assign' | translate\" width=\"500px\">\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.add-field' | translate\" color=\"primary\" (click)=\"addField()\"></sd-button>\n </div>\n <!-- Cấp 1 -->\n @for (item of items; track item.id; let idx = $index) {\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n <sd-autocomplete\n [label]=\"'core.component.form-builder.target-field' | translate\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"item.key\"\n [items]=\"leftProperties\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n <sd-autocomplete\n [label]=\"'core.component.form-builder.target-value' | translate\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"item.value\"\n [items]=\"rightProperties\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n </sd-modal>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, OnInit } from '@angular/core';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdSection } from '@sdcorejs/angular/components/section';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport {\n SdFormGenericComponent,\n SdFormGenericDefinitionSelection,\n SdFormGenericGroup,\n SdFormGenericSelectionStaticItem,\n SdFormGenericTableColumn,\n SdFormGenericValues,\n SdFormGenericVariable,\n} from '../../../../models';\nimport { FormGenericService } from '../../../../services';\nimport { BuildQueries } from './components/build-queries/build-queries.component';\nimport { BuildVariables } from './components/build-variables/build-variables.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n selector: 'attribute-selection',\n templateUrl: './attribute-selection.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdInput, SdAutocomplete, SdButton, SdSection, BuildQueries, BuildVariables, TranslatePipe],\n})\nexport class AttributeSelection implements OnInit {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n @Input({ required: true }) component!: SdFormGenericValues | SdFormGenericTableColumn;\n // ValuesKey\n valuesKey?: string;\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\n if (this.valuesKey !== valuesKey) {\n this.valuesKey = valuesKey?.toString();\n }\n }\n @Output() valuesKeyChange = new EventEmitter<string>();\n selections: SdFormGenericDefinitionSelection[] = [];\n\n // Values\n values: SdFormGenericSelectionStaticItem[] = [];\n @Input({ alias: 'values', required: true }) set _values(values: SdFormGenericSelectionStaticItem[] | undefined | null) {\n if (this.values !== values) {\n this.values = values || [];\n }\n }\n @Output() valuesChange = new EventEmitter<SdFormGenericSelectionStaticItem[]>();\n @Output() sdChange = new EventEmitter<SdFormGenericComponent>();\n constructor(\n private ref: ChangeDetectorRef,\n private formGenericService: FormGenericService\n ) {}\n\n ngOnInit(): void {\n this.formGenericService.selection.definitions().then(selections => {\n // Nếu không phải là type select thì không hiển thị các lựa chọn lazyValues\n // Vì radio, checklist không thể load lazy\n if (this.component.type !== 'select') {\n this.selections = selections.filter(selection => !('lazyValues' in selection) && !('lazyValuesKey' in selection));\n } else {\n this.selections = selections;\n }\n this.ref.markForCheck();\n });\n }\n\n onChangeValuesKey = (value: any) => {\n this.valuesKeyChange.emit(value);\n // Gán values rỗng nếu đã sử dụng valuesKey\n this.values = [];\n this.valuesChange.emit(this.values);\n this.ref.markForCheck();\n };\n\n onChangeValues = () => {\n this.valuesChange.emit(this.values);\n };\n\n addItem = () => {\n this.values.push({\n value: `value_${new Date().getTime().toString(36)}`,\n label: `Label ${new Date().getTime().toString(36)}`,\n });\n this.valuesChange.emit(this.values);\n this.ref.markForCheck();\n };\n\n removeItem = (idx: number) => {\n this.values.splice(idx, 1);\n this.valuesChange.emit(this.values);\n this.ref.markForCheck();\n };\n}\n","<sd-section class=\"mt-8\" [title]=\"'core.component.form-builder.data' | translate\" icon=\"format_list_bulleted\">\n @if (selections.length) {\n <div class=\"d-flex align-items-center py-4\">\n <div class=\"T14M\" style=\"flex: 1\">{{ 'core.component.form-builder.data-api' | translate }}</div>\n <sd-autocomplete\n style=\"width: 200px\"\n size=\"sm\"\n [(model)]=\"valuesKey\"\n [items]=\"selections\"\n valueField=\"value\"\n displayField=\"display\"\n (sdChange)=\"onChangeValuesKey($event)\"\n hideInlineError></sd-autocomplete>\n </div>\n <!-- Nếu là select từ API thì cho phép truyền thêm Query -->\n\n @if (component.type === 'select' && !!valuesKey) {\n <build-queries\n [label]=\"'core.component.form-builder.query-condition' | translate\"\n [selections]=\"selections\"\n [valuesKey]=\"valuesKey\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.query\"></build-queries>\n <build-variables\n [label]=\"'core.component.form-builder.assign-value' | translate\"\n [selections]=\"selections\"\n [valuesKey]=\"valuesKey\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.setVariables\"></build-variables>\n <!-- <div class=\"d-flex align-items-center py-4\">\n <div class=\"T14M\" style=\"flex: 1\">Điều kiện truy vấn</div>\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"component.properties!.query\" hideInlineError></sd-input>\n </div> -->\n }\n }\n @if (!valuesKey) {\n <div class=\"d-flex flex-column\" style=\"gap: 4px\">\n <div class=\"T14M\">{{ 'core.component.form-builder.data-static' | translate }}</div>\n @for (item of values; track item.value; let idx = $index) {\n <div class=\"d-flex align-items-end py-4\" style=\"gap: 4px\">\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"item.value\" (sdChange)=\"onChangeValues()\" hideInlineError></sd-input>\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"item.label\" (sdChange)=\"onChangeValues()\" hideInlineError></sd-input>\n <sd-button prefixIcon=\"delete\" (click)=\"removeItem(idx)\" color=\"error\"></sd-button>\n </div>\n }\n <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.add-data' | translate\" (click)=\"addItem()\" color=\"primary\"></sd-button>\n </div>\n }\n</sd-section>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericSelect,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeSelection } from '../../attribute-selection/attribute-selection.component';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'select-attribute',\n templateUrl: './select-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeSelection, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class SelectAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericSelect;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericSelect) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #changes = new Subject<void>();\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChanges = () => {\n this.#changes.next();\n };\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'select') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-switch [label]=\"'core.component.form-builder.multiple' | translate\" [(model)]=\"component.properties!.multiple\"></attribute-switch>\n @if (component.properties!.viewed) {\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n }\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <attribute-selection\n [components]=\"components\"\n [component]=\"component\"\n [variables]=\"variables\"\n [(valuesKey)]=\"component.valuesKey\"\n [(values)]=\"component.values\"\n (valuesKeyChange)=\"onChanges()\"\n (valuesChange)=\"onChanges()\"></attribute-selection>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericSelect } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'select-control',\n templateUrl: './select-control.component.html',\n styleUrl: './select-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n})\nexport class SelectControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericSelect;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericSelect) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">Your dropdown selection</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input c-select\">\n <svg width=\"8\" height=\"8\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n stroke-width=\".5\"\n d=\"M7.75 1.336L4 6.125.258 1.335 0 1.54l4 5.125L8 1.54zm0 0\"></path>\n </svg>\n </div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericRadio } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'radio-control',\n templateUrl: './radio-control.component.html',\n styleUrl: './radio-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n})\nexport class RadioControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericRadio;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericRadio) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n // Vì đã đúng theo id nên có thể ép kiểu any\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">Your radio selection</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"c-radio-item d-flex flex-wrap align-items-center\">\n @if (component.values?.length) {\n <div class=\"d-flex\" [class.flex-column]=\"component.properties?.direction === 'column'\" style=\"gap: 8px\">\n @for (item of component.values; track item.value) {\n <div class=\"d-flex align-items-center my-4\">\n <div class=\"c-rd-ip mr-4\"></div>\n <div class=\"T12M\">{{ item.label }}</div>\n </div>\n }\n </div>\n } @else if (component.valuesKey) {\n <div class=\"T12R text-secondary\">{{ component.valuesKey }}</div>\n }\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericRadio,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSelection } from '../../attribute-selection/attribute-selection.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'radio-attribute',\n templateUrl: './radio-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeSelection, AttributeInput, AttributeSwitch, AttributeSelect, AttributeExpression, TranslatePipe],\n})\nexport class RadioAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericRadio;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericRadio) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n #changes = new Subject<void>();\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'radio') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n\n onChanges = () => {\n this.#changes.next();\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n @if (component.properties!.viewed) {\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n }\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n <attribute-select\n [form]=\"form\"\n [label]=\"'core.component.form-builder.layout' | translate\"\n [(model)]=\"component.properties!.direction\"\n [items]=\"[\n { value: 'row', display: 'Ngang' },\n { value: 'column', display: ('core.component.form-builder.vertical' | translate) }\n ]\"></attribute-select>\n </div>\n </details>\n @if (!component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n }\n <attribute-selection\n [components]=\"components\"\n [variables]=\"variables\"\n [component]=\"component\"\n [(valuesKey)]=\"component.valuesKey\"\n [(values)]=\"component.values\"\n (valuesKeyChange)=\"onChanges()\"\n (valuesChange)=\"onChanges()\"></attribute-selection>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { SdFormGenericCheckbox } from '../../../../../models';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'checkbox-control',\n templateUrl: './checkbox-control.component.html',\n styleUrl: './checkbox-control.component.scss',\n imports: [CommonModule, TranslatePipe],\n})\nexport class CheckboxControl {\n component!: SdFormGenericCheckbox;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericCheckbox) {\n this.component = component;\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">{{ 'core.component.form-builder.yes-no' | translate }}</div>\n} @else {\n <div class=\"c-checkbox\">\n <div class=\"d-flex align-items-center\">\n <div class=\"c-box mr-4\"></div>\n <div class=\"T14R\">{{ component.label }}</div>\n </div>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericCheckbox,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { FormGroup } from '@angular/forms';\nimport { BuilderService } from '../../../services';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'checkbox-attribute',\n templateUrl: './checkbox-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class CheckboxAttribute implements AfterViewInit, OnDestroy {\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n component!: SdFormGenericCheckbox;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericCheckbox) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'checkbox') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n </div>\n</details>\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport {\n GetComponentAttributes,\n GetVariableAttributes,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../../../models';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'build-queries',\n templateUrl: './build-queries.component.html',\n styleUrl: './build-queries.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdAutocomplete, SdButton, SdModal, TranslatePipe],\n})\nexport class BuildQueries implements OnInit, OnDestroy {\n @ViewChild(SdModal) modal?: SdModal;\n form = new FormGroup({});\n @Input() label?: string;\n leftProperties?: Property[];\n @Input({ alias: 'queries', required: true }) set _queries(queries: { key: string; label: string }[] | undefined | null) {\n this.leftProperties =\n queries?.map(e => ({\n value: e.key,\n display: e.label,\n })) || [];\n }\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n rightProperties?: Property[];\n queryString?: string;\n model?: Record<string, any>;\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n this.model = JSON.parse(JSON.stringify({ ...model }));\n // Parse JSON -> STRING để hiển thị trên UI\n this.queryString = JSON.stringify(this.model);\n }\n @Output() modelChange = new EventEmitter<Record<string, string>>();\n\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnDestroy() {}\n\n edit = () => {\n this.rightProperties =\n [...GetComponentAttributes(this.components), ...GetVariableAttributes(this.variables)].map(e => ({\n value: '${' + e.value + '}',\n display: e.display,\n })) || [];\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n const result: Record<string, string> = {};\n for (const key of Object.keys(this.model!)) {\n const value = this.model?.[key];\n if (value !== undefined && value !== null && value !== '') {\n result[key] = value;\n }\n }\n this.modelChange.emit(result);\n this.modal?.close();\n this.ref.markForCheck();\n };\n}\n\ninterface Property {\n value: string;\n display: string;\n}\n","@if (!!leftProperties?.length) {\n <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n </div>\n </div>\n <sd-modal [title]=\"'core.component.form-builder.set-query-value' | translate\" width=\"400px\">\n <div class=\"c-builder\">\n @for (property of leftProperties; track property.value) {\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n <div class=\"T14M\" style=\"width: 150px\">{{ property.display }}</div>\n <sd-autocomplete\n [label]=\"'core.component.form-builder.value-source-field' | translate\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"model![property.value]\"\n [items]=\"rightProperties\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n </sd-modal>\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport {\n GetComponentAttributes,\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericDefinitionHtml,\n SdFormGenericGroup,\n SdFormGenericHtml,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { FormGenericService } from '../../../../../services';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { BuildQueries } from './components/build-queries/build-queries.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'html-attribute',\n templateUrl: './html-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeInput, AttributeSelect, AttributeExpression, AttributeTextarea, BuildQueries, TranslatePipe],\n})\nexport class HtmlAttribute implements OnInit, AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n\n component!: SdFormGenericHtml;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n form = new FormGroup({});\n definitionHtmls: SdFormGenericDefinitionHtml[] = [];\n // Mong muốn là khi attribute changes thông báo cho control biết để control render content tương ứng\n @Output() attributeChanges = new EventEmitter();\n\n #subscription = new Subscription();\n rightProperties: { value: string; display: string }[] = [];\n constructor(\n private ref: ChangeDetectorRef,\n private formGenericService: FormGenericService,\n private builderService: BuilderService\n ) {}\n\n ngOnInit(): void {\n this.formGenericService.html.definitions().then(htmls => {\n this.definitionHtmls = htmls;\n this.ref.markForCheck();\n });\n this.rightProperties =\n GetComponentAttributes(this.components).map(e => ({\n value: '${' + e.value + '}',\n display: e.display,\n })) || [];\n }\n\n ngAfterViewInit(): void {\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeDefinition = async (value: string) => {\n const definition = this.definitionHtmls.find(e => e.value === value);\n if (definition) {\n this.component.content = await this.formGenericService.html.getContent(value);\n this.component.properties!.variables = JSON.parse(JSON.stringify(definition.variables || []));\n if (definition.type === 'query') {\n this.component.properties!.queries = JSON.parse(JSON.stringify(definition.queries || []));\n } else {\n this.component.properties!.queries = [];\n }\n delete this.component.properties?.query;\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n } else {\n this.component.properties!.variables = [];\n this.component.properties!.queries = [];\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","@if (!component.properties!.hidden) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-select\n [label]=\"'core.component.form-builder.template-data' | translate\"\n [(model)]=\"component.template\"\n [items]=\"definitionHtmls\"\n (sdChange)=\"onChangeDefinition($event)\"></attribute-select>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\"></attribute-input>\n <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.content' | translate\" [(model)]=\"component.content\"></attribute-textarea>\n @if (component.properties?.queries?.length) {\n <build-queries\n [label]=\"'core.component.form-builder.query-condition' | translate\"\n [queries]=\"component.properties?.queries\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.query\"></build-queries>\n }\n </div>\n </details>\n @if (component.properties?.variables?.length) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">format_list_bulleted</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n @for (variable of component.properties?.variables; track variable.key) {\n <attribute-input [form]=\"form\" [label]=\"variable.label\" [(model)]=\"variable.value\"></attribute-input>\n }\n </div>\n </details>\n }\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n </div>\n </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericHtml } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\nimport { HtmlPipe } from '../../../../../pipes';\nimport { FormGenericService } from '../../../../../services';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Component({\n selector: 'html-control',\n templateUrl: './html-control.component.html',\n styleUrl: './html-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [HtmlPipe],\n})\nexport class HtmlControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericHtml;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\n this.component = component;\n SdFormatComponent(this.component);\n this.content = this.component.content;\n }\n content?: string;\n hashed?: string; // Dùng để ép Angular nhận diện sự thay đổi của HTML khi content/variables\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService,\n private formGenericService: FormGenericService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(async () => {\n if (this.component.template) {\n this.content = await this.formGenericService.html.getContent(this.component.template);\n } else {\n this.content = this.component.content;\n }\n this.hashed = Utilities.hash({\n content: this.content,\n variables: this.component.properties?.variables?.reduce(\n (current, next) => ({\n ...current,\n [next.key]: next.value,\n }),\n {}\n ),\n });\n this.ref.markForCheck();\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (!content) {\n <div class=\"c-html d-flex align-items-center justify-content-center\">\n <span class=\"material-icons\"> html </span>\n </div>\n} @else {\n <div [innerHTML]=\"hashed | htmlPipe: content: component\"></div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdFormGenericComponent, SdFormGenericGroup } from '../../../../models';\nimport { SdInput } from '@sdcorejs/angular/forms';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'attribute-parameter',\n templateUrl: './attribute-parameter.component.html',\n styleUrl: './attribute-parameter.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdButton, SdModal, SdInput, TranslatePipe],\n})\nexport class AttributeParameter implements OnInit {\n @ViewChild(SdModal) modal?: SdModal;\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n form = new FormGroup({});\n @Input() label?: string;\n\n items: {\n id: string;\n key: string;\n value: any;\n }[] = [];\n queryString?: string;\n #model!: Record<string, any>;\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n this.#model = JSON.parse(JSON.stringify({ ...model }));\n // Parse JSON -> STRING để hiển thị trên UI\n this.queryString = JSON.stringify(this.#model);\n this.items = Object.keys(this.#model).map(key => ({\n id: Utilities.randomId(),\n key,\n value: this.#model?.[key],\n }));\n }\n @Output() modelChange = new EventEmitter<Record<string, string>>();\n\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n edit = async () => {\n this.modal?.open?.();\n this.ref.markForCheck();\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n addField = () => {\n this.items.push({\n id: Utilities.randomId(),\n key: '',\n value: '',\n });\n this.ref.markForCheck();\n };\n\n remove = (idx: number) => {\n this.items.splice(idx, 1);\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n const result: Record<string, string> = {};\n for (const { key, value } of this.items) {\n if (value !== undefined && value !== null && value !== '') {\n result[key] = value;\n }\n }\n this.modelChange.emit(result);\n this.modal?.close();\n this.ref.markForCheck();\n };\n}\n\nexport interface Property {\n value: string;\n display: string;\n}\n","<div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n </div>\n</div>\n<sd-modal [title]=\"'core.component.form-builder.assign-parameter-value' | translate\" width=\"500px\">\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.add-field' | translate\" color=\"primary\" (click)=\"addField()\"></sd-button>\n </div>\n <!-- Cấp 1 -->\n @for (item of items; track item.id; let idx = $index) {\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n <sd-input [label]=\"'core.component.form-builder.parameter-name' | translate\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"item.key\" required hideInlineError></sd-input>\n <sd-input [label]=\"'core.component.form-builder.parameter-value' | translate\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"item.value\" required hideInlineError></sd-input>\n <div style=\"width: 32px; min-width: 32px\">\n <sd-button\n prefixIcon=\"delete\"\n [tooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"remove(idx)\"\n size=\"sm\"\n class=\"p-0\"\n ></sd-button>\n </div>\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n</sd-modal>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, inject, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericUpload,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeParameter } from '../../attribute-parameter/attribute-parameter.component';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'upload-attribute',\n templateUrl: './upload-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AttributeTemplate,\n AttributeInput,\n AttributeInputNumber,\n AttributeSwitch,\n AttributeSelect,\n AttributeExpression,\n AttributeParameter,\n TranslatePipe,\n ],\n})\nexport class UploadAttribute implements AfterViewInit, OnDestroy {\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n component!: SdFormGenericUpload;\n extension?: string;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericUpload) {\n this.component = component;\n SdFormatComponent(this.component);\n this.extension = this.component.properties!.extensions?.join(',') || '';\n }\n\n #subscription = new Subscription();\n readonly #i18n = inject(I18nService);\n // Dropdown nguồn upload (mobile); display dịch qua i18n để hỗ trợ EN\n sources: {\n value: 'ALL' | 'PHOTO_LIBRARY' | 'CAPTURE';\n display: string;\n }[] = [\n {\n value: 'ALL',\n display: this.#i18n.t('core.component.form-builder.upload-source.all'),\n },\n {\n value: 'PHOTO_LIBRARY',\n display: this.#i18n.t('core.component.form-builder.upload-source.photo-library'),\n },\n {\n value: 'CAPTURE',\n display: this.#i18n.t('core.component.form-builder.upload-source.capture'),\n },\n ];\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'upload') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.component.properties!.type = this.component.properties!.type || 'file';\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n\n onChangeExtension = (extension: string) => {\n this.extension = extension;\n this.component.properties!.extensions =\n extension\n ?.split(',')\n ?.map(val => val?.trim())\n ?.filter(val => !!val) || [];\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-select\n [label]=\"'core.component.form-builder.type' | translate\"\n [(model)]=\"component.properties!.type\"\n [items]=\"[\n { value: 'file', display: ('core.component.form-builder.file' | translate) },\n { value: 'image', display: ('core.component.form-builder.image' | translate) }\n ]\"></attribute-select>\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n <attribute-input-number [label]=\"'core.component.form-builder.max-files' | translate\" [(model)]=\"component.properties!.max\"></attribute-input-number>\n <attribute-input-number [label]=\"'core.component.form-builder.size-mb' | translate\" [(model)]=\"component.properties!.maxSize\"></attribute-input-number>\n @if (component.properties!.type === 'file') {\n <attribute-input [label]=\"'core.component.form-builder.format-example' | translate\" [model]=\"extension\" (modelChange)=\"onChangeExtension($event)\"></attribute-input>\n }\n @if (component.properties!.type === 'image') {\n <attribute-select [label]=\"'core.component.form-builder.source-mobile' | translate\" [(model)]=\"component.properties!.source\" [items]=\"sources\"></attribute-select>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">settings</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-parameter [label]=\"'core.component.form-builder.assign-parameter' | translate\" [components]=\"components\" [(model)]=\"component.properties!.args\"></attribute-parameter>\n </div>\n </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericUpload } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\n\n@Component({\n selector: 'upload-control',\n templateUrl: './upload-control.component.html',\n styleUrl: './upload-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UploadControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericUpload;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericUpload) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 1280 1280\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n stroke-linejoin=\"round\"\n stroke-miterlimit=\"2\"\n alt=\"This is an image placeholder\">\n <path fill=\"#e5e9ed\" d=\"M0 0h1280v1280H0z\"></path>\n <path d=\"M910 410H370v470h540V410zm-57.333 57.333v355.334H427.333V467.333h425.334z\" fill=\"#cad3db\"></path>\n <path d=\"M810 770H480v-60l100-170 130 170 100-65v125z\" fill=\"#cad3db\"></path>\n <circle cx=\"750\" cy=\"550\" r=\"50\" fill=\"#cad3db\" transform=\"translate(10 10)\"></circle>\n </svg>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"c-upload-file d-flex align-items-center justify-content-between\">\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 1280 1280\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n stroke-linejoin=\"round\"\n stroke-miterlimit=\"2\"\n alt=\"This is an image placeholder\">\n <path fill=\"#e5e9ed\" d=\"M0 0h1280v1280H0z\"></path>\n <path d=\"M910 410H370v470h540V410zm-57.333 57.333v355.334H427.333V467.333h425.334z\" fill=\"#cad3db\"></path>\n <path d=\"M810 770H480v-60l100-170 130 170 100-65v125z\" fill=\"#cad3db\"></path>\n <circle cx=\"750\" cy=\"550\" r=\"50\" fill=\"#cad3db\" transform=\"translate(10 10)\"></circle>\n </svg>\n </div>\n}\n","import { Component, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../../../configurations';\nimport {\n SdFormGenericComponent,\n SdFormGenericDefinitionTable,\n SdFormGenericGroup,\n SdFormGenericTableColumn,\n SdFormGenericVariable,\n TableColumnTypes,\n} from '../../../../models';\nimport { AttributeInput } from '../attribute-input/attribute-input.component';\nimport { AttributeSelect } from '../attribute-select/attribute-select.component';\nimport { AttributeSelection } from '../attribute-selection/attribute-selection.component';\nimport { AttributeSwitch } from '../attribute-switch/attribute-switch.component';\nimport { AttributeParameter } from '../attribute-parameter/attribute-parameter.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n selector: 'attribute-table',\n templateUrl: './attribute-table.component.html',\n imports: [\n MatDividerModule,\n SdLabel,\n SdAutocomplete,\n SdButton,\n SdModal,\n AttributeSelection,\n AttributeInput,\n AttributeSelect,\n AttributeSwitch,\n AttributeParameter,\n TranslatePipe,\n ],\n})\nexport class AttributeTable {\n @ViewChild(SdModal) modal?: SdModal;\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n // ColumnsKey\n columnsKey?: string;\n @Input({ alias: 'columnsKey', required: true }) set _columnsKey(columnsKey: string | undefined | null) {\n if (this.columnsKey !== columnsKey) {\n this.columnsKey = columnsKey?.toString();\n }\n }\n @Output() columnsKeyChange = new EventEmitter<string>();\n private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n tables: SdFormGenericDefinitionTable[] = this.formGenericConfiguration?.form?.tables || [];\n\n // Columns\n types = TableColumnTypes;\n columns: SdFormGenericTableColumn[] = [];\n @Input({ alias: 'columns', required: true }) set _columns(columns: SdFormGenericTableColumn[] | undefined | null) {\n if (this.columns !== columns) {\n this.columns = columns || [];\n }\n }\n @Output() columnsChange = new EventEmitter<SdFormGenericTableColumn[]>();\n column?: SdFormGenericTableColumn;\n\n onChangeColumnsKey = (value: any) => {\n this.columnsKeyChange.emit(value);\n const table = this.tables.find(e => e.value === value);\n if (table) {\n this.columns = table.columns();\n } else {\n this.columns = [];\n }\n this.columnsChange.emit(this.columns);\n };\n\n addColumn = () => {\n this.selectedIdx = undefined;\n this.column = {\n key: Utilities.randomId('key'),\n label: Utilities.randomId('label'),\n type: 'string',\n width: '100px',\n validate: {},\n };\n this.modal?.open();\n };\n\n // Map column type → Material Symbol icon (per design handoff form-builder redesign).\n readonly columnTypeIcons: Record<string, string> = {\n string: 'text_fields',\n number: '123',\n boolean: 'check_box',\n bool: 'check_box',\n date: 'event',\n datetime: 'calendar_month',\n radio: 'radio_button_checked',\n values: 'arrow_drop_down_circle',\n image: 'image',\n file: 'attach_file',\n };\n columnTypeSymbol = (type: string | undefined): string => this.columnTypeIcons[type || 'string'] ?? 'text_fields';\n\n selectedIdx? = 0;\n editColumn = (idx: number) => {\n if (this.columns[idx]) {\n this.selectedIdx = idx;\n this.column = JSON.parse(JSON.stringify(this.columns[idx]));\n this.column!.validate = this.column?.validate || {};\n this.modal?.open();\n }\n };\n\n removeColumn = (idx: number) => {\n this.columns.splice(idx, 1);\n this.columnsChange.emit(this.columns);\n };\n\n onConfirm = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n if (this.column) {\n if (this.selectedIdx! >= 0) {\n this.columns.splice(this.selectedIdx!, 1, this.column);\n } else {\n this.columns.push(this.column);\n }\n this.columnsChange.emit(this.columns);\n }\n this.modal?.close();\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">view_column</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.column-list' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n @if (tables.length) {\n <sd-autocomplete\n class=\"py-8\"\n [label]=\"'core.component.form-builder.column-data' | translate\"\n [(model)]=\"columnsKey\"\n [items]=\"tables\"\n valueField=\"value\"\n displayField=\"display\"\n (sdChange)=\"onChangeColumnsKey($event)\"\n hideInlineError></sd-autocomplete>\n }\n @if (!columnsKey) {\n <div class=\"fb-columns-list\">\n @for (item of columns; track item.key; let idx = $index) {\n <div class=\"fb-column-row\" [class.is-active]=\"idx === selectedIdx\">\n <span class=\"fb-column-row__type-icon\"><span class=\"msi\">{{ columnTypeSymbol(item.type) }}</span></span>\n <div class=\"fb-column-row__meta\">\n <div class=\"fb-column-row__label\">\n {{ item.label }}\n @if (item.validate?.required) {\n <span class=\"fb-column-row__req\">*</span>\n }\n </div>\n <div class=\"fb-column-row__sub mono\">{{ item.key }} · {{ item.type }}</div>\n </div>\n <button type=\"button\" class=\"fb-icon-btn\" [attr.aria-label]=\"'core.component.form-builder.column-config' | translate\" (click)=\"editColumn(idx)\">\n <span class=\"msi\">edit</span>\n </button>\n <button type=\"button\" class=\"fb-icon-btn danger\" [attr.aria-label]=\"'core.component.form-builder.delete' | translate\" (click)=\"removeColumn(idx)\">\n <span class=\"msi\">delete</span>\n </button>\n </div>\n }\n <a class=\"fb-add-link\" (click)=\"addColumn()\">\n <span class=\"msi\">add</span>\n {{ 'core.component.form-builder.add-column' | translate }}\n </a>\n </div>\n }\n </div>\n</details>\n\n<sd-modal [title]=\"'core.component.form-builder.column-config' | translate\" width=\"600px\">\n @if (column) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"column.key\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.column-name' | translate\" [(model)]=\"column.label\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.width' | translate\" [(model)]=\"column.width\"></attribute-input>\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"column.validate!.required\"></attribute-switch>\n <attribute-select [form]=\"form\" [label]=\"'core.component.form-builder.data-type' | translate\" [(model)]=\"column.type\" [items]=\"types\"></attribute-select>\n </div>\n </details>\n @if (column.type === 'boolean') {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.show-when-true' | translate\" [(model)]=\"column.displayOnTrue\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.show-when-false' | translate\" [(model)]=\"column.displayOnFalse\"></attribute-input>\n </div>\n </details>\n } @else if (column.type === 'values') {\n <attribute-selection\n [components]=\"components\"\n [variables]=\"variables\"\n [component]=\"column\"\n [(valuesKey)]=\"column.valuesKey\"\n [(values)]=\"column.values\"></attribute-selection>\n } @else if (column.type === 'file' || column.type === 'image') {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">settings</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-parameter [label]=\"'core.component.form-builder.assign-parameter' | translate\" [components]=\"components\" [(model)]=\"column!.args\"></attribute-parameter>\n </div>\n </details>\n }\n }\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.save' | translate\" (click)=\"onConfirm()\" color=\"primary\"></sd-button>\n </ng-container>\n</sd-modal>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericTable,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeTable } from '../../attribute-table/attribute-table.component';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'table-attribute',\n templateUrl: './table-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeTable, AttributeExpression, TranslatePipe],\n})\nexport class TableAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericTable;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTable) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #changes = new Subject<void>();\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'table') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n\n onChanges = () => {\n this.#changes.next();\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <attribute-table\n [components]=\"components\"\n [variables]=\"variables\"\n [(columnsKey)]=\"component.columnsKey\"\n [(columns)]=\"component.columns\"\n (columnsKeyChange)=\"onChanges()\"\n (columnsChange)=\"onChanges()\"></attribute-table>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericTable } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\n\n@Component({\n selector: 'table-control',\n templateUrl: './table-control.component.html',\n styleUrl: './table-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n})\nexport class TableControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericTable;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTable) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n columnIcon = (type: string) => {\n switch (type) {\n case 'number':\n return '123';\n case 'date':\n case 'datetime':\n return 'calendar_month';\n case 'boolean':\n return 'check_box';\n case 'file':\n return 'attach_file';\n case 'image':\n return 'image';\n case 'values':\n case 'radio':\n return 'radio_button_checked';\n case 'string':\n default:\n return 'text_fields';\n }\n };\n\n sampleRows = () => [0, 1, 2];\n\n cellPreview = (column: any, rowIndex: number) => {\n if (rowIndex === 0) return column.key || column.label || '-';\n if (column.type === 'number') return rowIndex + 1;\n if (column.type === 'boolean') return rowIndex === 1 ? '✓' : '—';\n if (column.type === 'date' || column.type === 'datetime') return '12/06/2026';\n if (column.type === 'file') return '—';\n return rowIndex === 1 ? 'Sample value' : '—';\n };\n}\n","<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","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, effect, inject, input, untracked } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { COMPONENT_ICONS, SdFormGenericComponent, SdFormGenericGroup } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\n\nconst ICON_PRESETS = ['category', 'folder', 'inventory_2', 'group_work', 'workspaces', 'view_quilt'] as const;\nconst COLOR_PRESETS = ['primary', 'secondary', 'success', 'warning', 'error'] as const;\n\n@Component({\n selector: 'group-attribute',\n templateUrl: './group-attribute.component.html',\n styleUrl: './group-attribute.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeInput, AttributeExpression, TranslatePipe],\n})\nexport class GroupAttribute {\n // ── constants ────────────────────────────────────────────────────────\n readonly iconPresets = ICON_PRESETS;\n readonly colorPresets = COLOR_PRESETS;\n readonly componentIcons = COMPONENT_ICONS;\n\n form = new FormGroup({});\n\n // ── signal input ─────────────────────────────────────────────────────\n /** Required group reference. Mutated in place khi user pick icon/color/expression. */\n readonly group = input.required<SdFormGenericGroup>();\n\n // ── injected services ────────────────────────────────────────────────\n readonly #builderService = inject(BuilderService);\n readonly #ref = inject(ChangeDetectorRef);\n\n constructor() {\n // Bảo đảm group có properties + defaults khi input ref thay đổi.\n // untracked() vì ta mutate group (không phải read signal) — tránh tạo cycle.\n effect(() => {\n const g = this.group();\n untracked(() => {\n if (!g.properties) {\n g.properties = { icon: 'category', color: 'primary' };\n } else {\n g.properties.icon = g.properties.icon || 'category';\n g.properties.color = g.properties.color || ('primary' as any);\n }\n });\n });\n }\n\n pickIcon = (icon: string) => {\n this.group().properties.icon = icon;\n this.#builderService.componentEmitters.next(this.group());\n this.#ref.markForCheck();\n };\n\n pickColor = (color: (typeof COLOR_PRESETS)[number]) => {\n this.group().properties.color = color as any;\n this.#builderService.componentEmitters.next(this.group());\n this.#ref.markForCheck();\n };\n\n symbolForChild = (c: SdFormGenericComponent): string => {\n return this.componentIcons[c.type]?.symbol ?? 'help';\n };\n}\n","@let _group = group();\n\n<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-input [form]=\"form\" [(model)]=\"_group.label\" [label]=\"'core.component.form-builder.label' | translate\"></attribute-input>\n\n <div class=\"fb-field\">\n <div class=\"fb-field__label\">{{ 'core.component.form-builder.group-icon' | translate }}</div>\n <div class=\"fb-icon-picker\">\n @for (icon of iconPresets; track icon) {\n <button type=\"button\" class=\"fb-icon-picker__btn\"\n [class.is-active]=\"_group.properties.icon === icon\"\n (click)=\"pickIcon(icon)\">\n <span class=\"msi\">{{ icon }}</span>\n </button>\n }\n </div>\n </div>\n\n <div class=\"fb-field\">\n <div class=\"fb-field__label\">{{ 'core.component.form-builder.group-accent-color' | translate }}</div>\n <div class=\"fb-color-swatches\">\n @for (color of colorPresets; track color) {\n <span class=\"fb-color-swatch\"\n [class]=\"color\"\n [class.is-active]=\"_group.properties.color === color\"\n (click)=\"pickColor(color)\"\n [attr.aria-label]=\"color\"></span>\n }\n </div>\n </div>\n </div>\n</details>\n\n<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">account_tree</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.group-children' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n @if (!_group.components?.length) {\n <div class=\"fb-children-empty\">{{ 'core.component.form-builder.group-no-children' | translate }}</div>\n } @else {\n <div class=\"fb-children-list\">\n @for (child of _group.components; track child.id) {\n <div class=\"fb-child-row\">\n <span class=\"fb-child-row__icon\"><span class=\"msi\">{{ symbolForChild(child) }}</span></span>\n <span class=\"fb-child-row__label\">{{ child.label }}</span>\n <span class=\"fb-child-row__key\">{{ child.key }}</span>\n </div>\n }\n </div>\n }\n </div>\n</details>\n\n<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-expression\n [components]=\"[]\"\n [variables]=\"[]\"\n [(model)]=\"_group.properties.visibleWhenExpression\"\n [label]=\"'core.component.form-builder.visible-when' | translate\">\n </attribute-expression>\n <attribute-expression\n [components]=\"[]\"\n [variables]=\"[]\"\n [(model)]=\"_group.properties.hiddenWhenExpression\"\n [label]=\"'core.component.form-builder.hidden-when' | translate\">\n </attribute-expression>\n </div>\n</details>\n","// Định nghĩa các Components của Form Render\nimport { SdFormGenericExpression } from './form-generic-expression.model';\n\nexport type SdFormGenericValidation = ValidationExpression | ValidationFunction;\n\ninterface ValidationBase {\n alert: 'warning' | 'error'; //\n}\n\nexport const ValidationAlerts = [\n {\n value: 'error',\n display: 'Lỗi',\n },\n {\n value: 'warning',\n display: 'Cảnh báo',\n },\n];\n\ninterface ValidationExpression extends ValidationBase {\n type: 'expression';\n expression: SdFormGenericExpression;\n message: string; // Có thể là html\n}\n\ninterface ValidationFunction extends ValidationBase {\n type: 'function';\n code: string; // Lấy từ value của SdFormGenericValidationFunction\n}\n\ninterface ValidateArgs {\n entity: Record<string, any>;\n}\n\nexport interface SdFormGenericValidationFunction {\n value: string;\n display: string;\n validate: (args: ValidateArgs) => Promise<string | undefined | null>; // Hàm trả về string message nếu có lỗi, message có thể là html\n}\n\nexport interface SdFormGenericValidationConfiguration {\n // Danh sách các functions validate được cấu hình sẵn để làm dữ liêu cho dropdown\n functions?: SdFormGenericValidationFunction[];\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ArrayUtilities, DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport {\n Attribute,\n AttributeOperators,\n DayInfoPreviouses,\n DayInfoTypes,\n SdFormGenericExpression,\n SdFormGenericExpressionCondition,\n} from '../../../../models';\nimport { ExpressionQueryPipe } from '../../../../pipes';\nimport { SdSuffixDefDirective } from '@sdcorejs/angular/forms/directives';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Component xây dựng Expression dựa vào SdFormGenericExpression\n@Component({\n selector: 'expression-builder',\n templateUrl: './expression-builder.component.html',\n styleUrl: './expression-builder.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n SdInput,\n SdInputNumber,\n SdSelect,\n SdAutocomplete,\n SdButton,\n SdSelect,\n SdModal,\n ExpressionQueryPipe,\n SdDatetime,\n SdSuffixDefDirective,\n TranslatePipe,\n ],\n})\nexport class ExpressionBuilderComponent implements OnInit {\n @ViewChild(SdModal) modal?: SdModal;\n form = new FormGroup({});\n attributeOperators = AttributeOperators;\n attributes: Attribute[] = [];\n numberAttributes: Attribute[] = [];\n dateAttributes: Attribute[] = [];\n attribute: Record<string, Attribute> = {};\n types = DayInfoTypes;\n previouses = DayInfoPreviouses;\n\n @Input() label?: string;\n\n @Input('attributes') set _attributes(attributes: Attribute[]) {\n this.attributes = attributes || [];\n this.numberAttributes = this.attributes\n .filter(e => e.type === 'number')\n .map(e => ({\n ...e,\n value: '${' + e.value + '}',\n }));\n this.dateAttributes = this.attributes\n .filter(e => e.type === 'datetime')\n .map(e => ({\n ...e,\n value: '${' + e.value + '}',\n }));\n this.attribute = ArrayUtilities.toObject('value', this.attributes);\n }\n\n expression?: SdFormGenericExpression = {\n key: Utilities.randomId(),\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n };\n model?: SdFormGenericExpression = {\n key: Utilities.randomId(),\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n };\n @Input({ alias: 'model', required: true }) set _model(model: SdFormGenericExpression | undefined) {\n if (this.model !== model) {\n this.model = model;\n }\n this.model = this.model || {\n key: Utilities.randomId(),\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n };\n }\n @Output() modelChange = new EventEmitter<SdFormGenericExpression>();\n @Output() sdChange = new EventEmitter<SdFormGenericExpression>();\n @Output() edit = new EventEmitter<void>();\n\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit(): void {}\n\n onEdit = async () => {\n // Khi cập nhật expression thì clone ra\n this.expression = JSON.parse(JSON.stringify(this.model));\n // Thông báo cho component cha có sự kiện edit trong trường hợp attributes có thay đổi\n this.edit.next();\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n addCondition = (conditions: SdFormGenericExpression['conditions']) => {\n conditions.push({\n key: Utilities.randomId(),\n type: 'condition',\n field: undefined,\n operator: 'EQUAL',\n value: undefined,\n dayInfo: {},\n });\n this.ref.markForCheck();\n };\n\n addCombinator = (conditions: SdFormGenericExpression['conditions']) => {\n conditions.push({\n key: Utilities.randomId(),\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n });\n this.ref.markForCheck();\n };\n\n remove = (conditions: SdFormGenericExpression['conditions'], idx: number) => {\n conditions.splice(idx, 1);\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n this.model = this.expression;\n this.modelChange.emit(this.model);\n this.sdChange.emit(this.model);\n this.modal?.close();\n this.ref.markForCheck();\n };\n\n onChangeAttribute = (condition: SdFormGenericExpressionCondition) => {\n const fieldAttribute = this.attribute[condition.field!];\n if (fieldAttribute.type === 'datetime') {\n condition.dayInfo = condition.dayInfo || {};\n }\n };\n\n onChangeDateInfo = (condition: SdFormGenericExpressionCondition) => {\n // Xử lý giá trị\n if (condition.dayInfo?.type === 'NOW') {\n condition.value = 'now';\n } else if (condition.dayInfo?.type === 'RELATED' && condition.dayInfo.relatedValue) {\n condition.value = DayInfoPreviouses.find(e => e.value === condition.dayInfo.related)?.format(condition.dayInfo.relatedValue) ?? null;\n } else if (condition.value?.type === 'DATETIME' && condition.value) {\n condition.value = DateUtilities.toFormat(condition.value, 'yyyy/MM/dd HH:mm:00');\n }\n };\n}\n","<!--\n FEEL-style expression trigger pill (M3 redesign).\n Bấm vào pill mở modal builder hiện tại (onEdit).\n-->\n<div class=\"fb-field\">\n @if (label) {\n <div class=\"fb-field__label\">{{ label }}</div>\n }\n @let exprText = model | expressionQuery;\n <div class=\"fb-expr\" (click)=\"onEdit()\" role=\"button\" tabindex=\"0\">\n <span class=\"fb-expr__badge\">FEEL</span>\n @if (exprText) {\n <span class=\"fb-expr__code mono\">{{ exprText }}</span>\n } @else {\n <span class=\"empty\">{{ 'core.component.form-builder.set-expression' | translate }}</span>\n }\n <button type=\"button\" class=\"fb-icon-btn\" (click)=\"onEdit(); $event.stopPropagation()\" aria-label=\"edit expression\">\n <span class=\"msi\">functions</span>\n </button>\n </div>\n</div>\n@if (expression) {\n <sd-modal [title]=\"'core.component.form-builder.set-expression' | translate\">\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button\n prefixIcon=\"calculate\"\n class=\"mr-4\"\n [title]=\"'core.component.form-builder.condition-group' | translate\"\n color=\"primary\"\n (click)=\"addCombinator(expression.conditions)\"></sd-button>\n <sd-button\n prefixIcon=\"add\"\n [title]=\"'core.component.form-builder.condition' | translate\"\n color=\"primary\"\n (click)=\"addCondition(expression.conditions)\"\n type=\"fill\"></sd-button>\n </div>\n <!-- Cấp 1 -->\n @for (conditionLv1 of expression.conditions; track conditionLv1.key; let idxLv1 = $index) {\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px\">\n <div class=\"c-condition\">\n <!-- Dòng 1 chỉ hiện WHERE -->\n @if (idxLv1 === 0) {\n <div class=\"c-where\">WHERE</div>\n }\n <!-- Dòng 2 hiển thị combinator -->\n @if (idxLv1 === 1) {\n <div class=\"c-select\">\n <sd-select\n size=\"sm\"\n [(model)]=\"expression.combinator\"\n [items]=\"[\n { value: '&&', display: 'AND' },\n { value: '||', display: 'OR' }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError=\"\"></sd-select>\n </div>\n }\n </div>\n @if (conditionLv1.type === 'condition') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 200px\"\n [(model)]=\"conditionLv1.field\"\n [items]=\"attributes\"\n (sdChange)=\"onChangeAttribute(conditionLv1)\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n @let fieldAttribute = attribute[conditionLv1.field!];\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 100px\"\n [(model)]=\"conditionLv1.operator\"\n [items]=\"attributeOperators[fieldAttribute?.type || 'string']\"\n valueField=\"value\"\n displayField=\"display\"\n [disabled]=\"!fieldAttribute?.type\"\n required\n hideInlineError></sd-select>\n @if (\n !!fieldAttribute?.type && conditionLv1.operator && conditionLv1.operator !== 'NULL' && conditionLv1.operator !== 'NOT_NULL'\n ) {\n @if (fieldAttribute.type === 'string') {\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input>\n } @else if (fieldAttribute.type === 'number') {\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"conditionLv1.value\" hideInlineError></sd-input-number>\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv1.value\"\n [items]=\"numberAttributes\"\n valueField=\"value\"\n displayField=\"display\"\n hideInlineError></sd-autocomplete>\n } @else if (fieldAttribute.type === 'datetime' && conditionLv1.dayInfo) {\n <sd-select\n size=\"sm\"\n [placeholder]=\"'core.component.form-builder.time' | translate\"\n [form]=\"form\"\n style=\"width: 150px\"\n [items]=\"types\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"conditionLv1.dayInfo.type\"\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n required\n hideInlineError>\n </sd-select>\n @if (conditionLv1.dayInfo.type === 'RELATED') {\n <sd-input-number\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 80px\"\n [(model)]=\"conditionLv1.dayInfo.relatedValue\"\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n [min]=\"1\"\n required\n hideInlineError>\n </sd-input-number>\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [items]=\"previouses\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"conditionLv1.dayInfo.related\"\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n required\n hideInlineError>\n </sd-select>\n } @else if (conditionLv1.dayInfo.type === 'DATETIME') {\n <sd-datetime\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv1.value\"\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n required\n hideInlineError>\n </sd-datetime>\n } @else if (conditionLv1.dayInfo.type === 'ATTRIBUTE') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv1.value\"\n [items]=\"dateAttributes\"\n valueField=\"value\"\n displayField=\"display\"\n hideInlineError></sd-autocomplete>\n }\n } @else if (fieldAttribute.type === 'boolean') {\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv1.value\"\n [items]=\"[\n { value: true, display: fieldAttribute.displayOnTrue },\n { value: false, display: fieldAttribute.displayOnFalse }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-select>\n } @else if (fieldAttribute.type === 'values') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv1.value\"\n [items]=\"fieldAttribute.values\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n }\n }\n <sd-button class=\"ml-auto\" prefixIcon=\"delete\" [tooltip]=\"'core.component.form-builder.delete' | translate\" (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n } @else if (conditionLv1.type === 'combinator') {\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button class=\"mr-4\" prefixIcon=\"delete\" [tooltip]=\"'core.component.form-builder.delete' | translate\" (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n <sd-button\n prefixIcon=\"add\"\n [title]=\"'core.component.form-builder.condition' | translate\"\n size=\"sm\"\n color=\"primary\"\n (click)=\"addCondition(conditionLv1.conditions)\"\n type=\"fill\"></sd-button>\n </div>\n <!-- Cấp 2 -->\n @for (conditionLv2 of conditionLv1.conditions; track conditionLv2.key; let idxLv2 = $index) {\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px\">\n <div class=\"c-condition\">\n <!-- Dòng 1 chỉ hiện WHERE -->\n @if (idxLv2 === 0) {\n <div class=\"c-where\">WHERE</div>\n }\n <!-- Dòng 2 hiển thị combinator -->\n @if (idxLv2 === 1) {\n <div class=\"c-select\">\n <sd-select\n size=\"sm\"\n [(model)]=\"conditionLv1.combinator\"\n [items]=\"[\n { value: '&&', display: 'AND' },\n { value: '||', display: 'OR' }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError=\"\"></sd-select>\n </div>\n }\n </div>\n @if (conditionLv2.type === 'condition') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 200px\"\n [(model)]=\"conditionLv2.field\"\n [items]=\"attributes\"\n (sdChange)=\"onChangeAttribute(conditionLv2)\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n @let fieldAttribute = attribute[conditionLv2.field!];\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 100px\"\n [(model)]=\"conditionLv2.operator\"\n [items]=\"attributeOperators[fieldAttribute?.type || 'string']\"\n valueField=\"value\"\n displayField=\"display\"\n [disabled]=\"!fieldAttribute?.type\"\n required\n hideInlineError></sd-select>\n @if (\n !!fieldAttribute?.type &&\n conditionLv2.operator &&\n conditionLv2.operator !== 'NULL' &&\n conditionLv2.operator !== 'NOT_NULL'\n ) {\n @if (fieldAttribute.type === 'string') {\n <sd-input\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n required\n hideInlineError></sd-input>\n } @else if (fieldAttribute.type === 'number') {\n <sd-input-number\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n hideInlineError></sd-input-number>\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n [items]=\"numberAttributes\"\n valueField=\"value\"\n displayField=\"display\"\n hideInlineError></sd-autocomplete>\n } @else if (fieldAttribute.type === 'datetime' && conditionLv2.dayInfo) {\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n [placeholder]=\"'core.component.form-builder.time' | translate\"\n style=\"width: 150px\"\n [items]=\"types\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"conditionLv2.dayInfo.type\"\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n required\n hideInlineError>\n </sd-select>\n @if (conditionLv2.dayInfo.type === 'RELATED') {\n <sd-input-number\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 80px\"\n [(model)]=\"conditionLv2.dayInfo.relatedValue\"\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n [min]=\"1\"\n required\n hideInlineError>\n </sd-input-number>\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [items]=\"previouses\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"conditionLv2.dayInfo.related\"\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n required\n hideInlineError>\n </sd-select>\n } @else if (conditionLv2.dayInfo.type === 'DATETIME') {\n <sd-datetime\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n required\n hideInlineError>\n </sd-datetime>\n } @else if (conditionLv2.dayInfo.type === 'ATTRIBUTE') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n [items]=\"dateAttributes\"\n valueField=\"value\"\n displayField=\"display\"\n hideInlineError></sd-autocomplete>\n }\n } @else if (fieldAttribute.type === 'boolean') {\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n [items]=\"[\n { value: true, display: fieldAttribute.displayOnTrue },\n { value: false, display: fieldAttribute.displayOnFalse }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-select>\n } @else if (fieldAttribute.type === 'values') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n [items]=\"fieldAttribute.values\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n }\n }\n <sd-button\n class=\"ml-auto\"\n prefixIcon=\"delete\"\n [tooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"remove(conditionLv1.conditions, idxLv1)\"></sd-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n </sd-modal>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n Output,\n ViewChild,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdInput, SdSelect } from '@sdcorejs/angular/forms';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../../../configurations';\nimport { Attribute, GetAttributes } from '../../../../models';\nimport {\n SdFormGenericValidation,\n SdFormGenericValidationFunction,\n ValidationAlerts,\n} from '../../../../models/form-generic-validation.model';\nimport { SdFormGeneric } from '../../../../models/form-generic.model';\nimport { ExpressionBuilderComponent } from '../expression-builder/expression-builder.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\n@Component({\n selector: 'configure-validation',\n templateUrl: './configure-validation.component.html',\n styleUrl: './configure-validation.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdIcon, MatMenuModule, SdModal, SdButton, SdInput, SdSelect, ExpressionBuilderComponent, TranslatePipe],\n})\nexport class ConfigureValidationComponent implements AfterViewInit, OnDestroy {\n @ViewChild(SdModal) modal?: SdModal;\n form = new FormGroup({});\n attributes: Attribute[] = [];\n validations: SdFormGenericValidation[] = [];\n functions: SdFormGenericValidationFunction[] = [];\n alerts = ValidationAlerts;\n @Output() accept = new EventEmitter<SdFormGenericValidation[]>();\n private readonly ref = inject(ChangeDetectorRef);\n private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n constructor() {\n this.functions = this.formGenericConfiguration?.form?.validation?.functions || [];\n }\n\n ngAfterViewInit(): void {\n // this.#subscription.add(\n // this.#validationsChanges.pipe(debounceTime(200), startWith(this.validations)).subscribe(() => {\n // // Khi component thay đổi thì sync lại\n // this.ref.markForCheck();\n // })\n // );\n }\n\n ngOnDestroy(): void {}\n\n open = (formGeneric: SdFormGeneric) => {\n // Xử lý gán validations\n if (Array.isArray(formGeneric?.validations)) {\n this.validations = JSON.parse(JSON.stringify(formGeneric?.validations));\n } else {\n this.validations = [];\n }\n this.attributes = GetAttributes(formGeneric.components);\n if (formGeneric) {\n this.modal?.open();\n this.ref.markForCheck();\n }\n };\n\n addValidation = (type: SdFormGenericValidation['type']) => {\n if (type === 'expression') {\n this.validations.push({\n alert: 'error',\n type,\n expression: {\n key: Utilities.randomId(),\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n },\n message: '',\n });\n } else if (type === 'function') {\n this.validations.push({\n alert: 'error',\n type,\n code: '',\n });\n }\n this.ref.markForCheck();\n };\n\n removaValidation = (index: number) => {\n this.validations.splice(index, 1);\n this.ref.markForCheck();\n };\n\n updateValidations = () => {\n this.accept.emit(this.validations);\n this.modal?.close();\n };\n}\n","<sd-modal [title]=\"'core.component.form-builder.config-validation-error-warning' | translate\" view=\"dialog\" width=\"800px\" #popupConfigureVariables>\n @for (validation of validations; track $index; let idx = $index) {\n <div class=\"mat-elevation-z2 position-relative p-8 mb-16\" style=\"border-radius: 8px;\">\n <div class=\"row mx-0\">\n <sd-select\n class=\"col-3\"\n [label]=\"'core.component.form-builder.message-type' | translate\"\n [(model)]=\"validation.alert\"\n [items]=\"alerts\"\n valueField=\"value\"\n displayField=\"display\"\n required></sd-select>\n @if (validation.type === 'expression') {\n <sd-input class=\"col-9\" [form]=\"form\" [label]=\"'core.component.form-builder.message-display' | translate\" [(model)]=\"validation.message\" required></sd-input>\n <expression-builder class=\"col-12\" [label]=\"'core.component.form-builder.condition-expression' | translate\" [(model)]=\"validation.expression\" [attributes]=\"attributes\"></expression-builder>\n } @else if (validation.type === 'function') {\n <sd-select\n class=\"col-9\"\n [form]=\"form\"\n [(model)]=\"validation.code\"\n [items]=\"functions\"\n valueField=\"value\"\n displayField=\"display\"\n required></sd-select>\n }\n <sd-icon class=\"c-close-icon\" (click)=\"removaValidation(idx)\" name=\"delete\"></sd-icon>\n <!-- <sd-button\n\n prefixIcon=\"delete\"\n (click)=\"removaValidation(idx)\"\n color=\"error\"\n type=\"link\"></sd-button> -->\n </div>\n </div>\n }\n <sd-button [title]=\"'core.component.form-builder.add-validation' | translate\" [matMenuTriggerFor]=\"menu\" prefixIcon=\"add\" color=\"primary\" type=\"link\"></sd-button>\n <mat-menu #menu=\"matMenu\">\n <button (click)=\"addValidation('expression')\" mat-menu-item type=\"button\">\n <!-- <sd-icon fontIcon=\"warning\"></sd-icon> -->\n <span>{{ 'core.component.form-builder.expression' | translate }}</span>\n </button>\n <button (click)=\"addValidation('function')\" mat-menu-item type=\"button\">\n <!-- <sd-icon fontIcon=\"error\"></sd-icon> -->\n <span>{{ 'core.component.form-builder.available-methods' | translate }}</span>\n </button>\n </mat-menu>\n <ng-container sdFooter>\n <sd-button type=\"fill\" [title]=\"'core.component.form-builder.save' | translate\" (click)=\"updateValidations()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\n </ng-container>\n</sd-modal>\n","import { SdFormGenericComponent, SdFormGenericGroup } from '../../models';\n\nexport type FormBuilderLayoutItem = SdFormGenericComponent | SdFormGenericGroup;\n\nexport interface FormBuilderLayoutRow {\n id: string;\n items: FormBuilderLayoutItem[];\n columns: number;\n}\n\nexport interface MoveItemToRowRequest {\n itemId: string;\n targetRowId: string;\n targetIndex?: number;\n}\n\nexport interface MoveItemToRowResult {\n rows: FormBuilderLayoutRow[];\n moved: boolean;\n reason?: 'item-not-found' | 'target-row-not-found' | 'row-overflow';\n}\n\nexport function normalizeColumns(item: FormBuilderLayoutItem): number {\n const raw = Number(item.layout?.columns ?? 12);\n if (!Number.isFinite(raw)) return 12;\n return Math.min(12, Math.max(1, Math.round(raw)));\n}\n\nexport function buildFormBuilderRows(components: FormBuilderLayoutItem[]): FormBuilderLayoutRow[] {\n const rows: FormBuilderLayoutRow[] = [];\n\n for (const component of components) {\n const columns = normalizeColumns(component);\n let row = rows[rows.length - 1];\n\n if (!row || row.columns + columns > 12) {\n row = { id: '', items: [], columns: 0 };\n rows.push(row);\n }\n\n row.items.push(component);\n row.columns += columns;\n }\n\n return rows.map(row => ({\n ...row,\n id: createRowId(row),\n }));\n}\n\nexport function flattenFormBuilderRows(rows: FormBuilderLayoutRow[]): FormBuilderLayoutItem[] {\n return rows.flatMap(row => row.items);\n}\n\nexport function canPlaceInRow(row: FormBuilderLayoutRow, item: FormBuilderLayoutItem, ignoredItemId?: string): boolean {\n const currentColumns = row.items\n .filter(rowItem => rowItem.id !== ignoredItemId)\n .reduce((sum, rowItem) => sum + normalizeColumns(rowItem), 0);\n\n return currentColumns + normalizeColumns(item) <= 12;\n}\n\nexport function moveItemToRow(rows: FormBuilderLayoutRow[], request: MoveItemToRowRequest): MoveItemToRowResult {\n const source = findItem(rows, request.itemId);\n if (!source) {\n return { rows, moved: false, reason: 'item-not-found' };\n }\n\n const targetRow = rows.find(row => row.id === request.targetRowId);\n if (!targetRow) {\n return { rows, moved: false, reason: 'target-row-not-found' };\n }\n\n if (!canPlaceInRow(targetRow, source.item, request.itemId)) {\n return { rows, moved: false, reason: 'row-overflow' };\n }\n\n const nextRows = rows.map(row => ({ ...row, items: [...row.items] }));\n const nextSource = findItem(nextRows, request.itemId);\n const nextTarget = nextRows.find(row => row.id === request.targetRowId);\n if (!nextSource || !nextTarget) {\n return { rows, moved: false, reason: 'item-not-found' };\n }\n\n const [item] = nextRows[nextSource.rowIndex].items.splice(nextSource.itemIndex, 1);\n const insertAt = clampIndex(request.targetIndex ?? nextTarget.items.length, nextTarget.items.length);\n nextTarget.items.splice(insertAt, 0, item);\n\n return {\n rows: buildFormBuilderRows(flattenFormBuilderRows(nextRows)),\n moved: true,\n };\n}\n\nfunction createRowId(row: Pick<FormBuilderLayoutRow, 'items'>): string {\n const firstId = row.items[0]?.id || 'empty';\n return `row-${firstId}`;\n}\n\nfunction clampIndex(index: number, length: number): number {\n return Math.max(0, Math.min(index, length));\n}\n\nfunction findItem(\n rows: FormBuilderLayoutRow[],\n itemId: string\n): { rowIndex: number; itemIndex: number; item: FormBuilderLayoutItem } | undefined {\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {\n const itemIndex = rows[rowIndex].items.findIndex(item => item.id === itemId);\n if (itemIndex >= 0) {\n return {\n rowIndex,\n itemIndex,\n item: rows[rowIndex].items[itemIndex],\n };\n }\n }\n return undefined;\n}\n","import { CdkDrag, CdkDragDrop, CdkDragMove, CdkDropList, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\nimport { SdConfirmService, SdNotifyService } from '@sdcorejs/angular/services';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { debounceTime, startWith, Subject, Subscription } from 'rxjs';\nimport {\n COMPONENT_ICONS,\n FormBuilderComponent,\n FormBuilderComponentGroup,\n FormBuilderComponents,\n GenerateId,\n GenerateKey,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../models';\nimport { SdFormGenericValidation } from '../../models/form-generic-validation.model';\nimport { SdFormGeneric } from '../../models/form-generic.model';\nimport { SdFormRender } from '../form-render/form-render.component';\nimport {\n CheckboxAttribute,\n CheckboxControl,\n ChipCalendarAttribute,\n ChipCalendarControl,\n ChipStringAttribute,\n ChipStringControl,\n DatetimeAttribute,\n DatetimeControl,\n GroupAttribute,\n HtmlAttribute,\n HtmlControl,\n NumberAttribute,\n NumberControl,\n RadioAttribute,\n RadioControl,\n SelectAttribute,\n SelectControl,\n TableAttribute,\n TableControl,\n TextareaAttribute,\n TextareaControl,\n TextfieldAttribute,\n TextFieldControl,\n UploadAttribute,\n UploadControl,\n} from './components';\nimport { ConfigureValidationComponent } from './components/configure-validation/configure-validation.component';\nimport { buildFormBuilderRows, canPlaceInRow, flattenFormBuilderRows, FormBuilderLayoutRow, moveItemToRow } from './form-builder-layout';\nimport { BuilderService } from './services';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\n\ninterface DragDropRowItem extends FormBuilderLayoutRow {\n rowIndex?: number;\n}\n\ninterface ResizeState {\n itemId: string;\n rowId: string;\n columns: string;\n}\n\n@Component({\n selector: 'sd-form-builder',\n templateUrl: './form-builder.component.html',\n styleUrl: './form-builder.component.scss',\n imports: [\n CommonModule,\n MatTooltipModule,\n DragDropModule,\n // Controls\n TextFieldControl,\n TextfieldAttribute,\n TextareaControl,\n TextareaAttribute,\n ChipStringControl,\n ChipStringAttribute,\n ChipCalendarControl,\n ChipCalendarAttribute,\n NumberControl,\n NumberAttribute,\n SelectControl,\n SelectAttribute,\n DatetimeControl,\n DatetimeAttribute,\n RadioControl,\n RadioAttribute,\n CheckboxControl,\n CheckboxAttribute,\n HtmlControl,\n HtmlAttribute,\n UploadControl,\n UploadAttribute,\n TableControl,\n TableAttribute,\n GroupAttribute,\n SdModal,\n SdInput,\n SdTextarea,\n SdButton,\n SdFormRender,\n ConfigureValidationComponent,\n TranslatePipe,\n ],\n})\nexport class SdFormBuilder implements OnInit, OnDestroy {\n // ── viewChild signals (Angular 17+) ────────────────────────────────────\n readonly popupViewJSON = viewChild<SdModal>('popupViewJSON');\n readonly popupConfigureVariables = viewChild<SdModal>('popupConfigureVariables');\n readonly configureValidation = viewChild(ConfigureValidationComponent);\n readonly formRender = viewChild(SdFormRender);\n\n // ── injected services ──────────────────────────────────────────────────\n readonly #ref = inject(ChangeDetectorRef);\n readonly #notifyService = inject(SdNotifyService);\n readonly #confirmService = inject(SdConfirmService);\n readonly #builderService = inject(BuilderService);\n readonly #i18n = inject(I18nService);\n\n form = new FormGroup({});\n\n // ── signal inputs ──────────────────────────────────────────────────────\n /** Input chính: schema form. Mỗi lần ref thay đổi → effect sẽ clone về local arrays. */\n readonly formGeneric = input<SdFormGeneric | undefined>(undefined);\n\n // ── component registry (immutable) ─────────────────────────────────────\n readonly formBuilderComponents = FormBuilderComponents;\n readonly componentIcons = COMPONENT_ICONS;\n\n // ── palette state (signal + computed group buckets) ────────────────────\n readonly paletteSearch = signal('');\n readonly paletteGroups = computed<{ key: FormBuilderComponentGroup; label: string; items: FormBuilderComponent[] }[]>(() => {\n const term = this.paletteSearch().trim().toLowerCase();\n // why: trong chế độ Detail group, ẩn item 'group' khỏi palette — không cho group lồng group.\n const inGroup = !!this.editingGroupId();\n const match = (c: FormBuilderComponent) =>\n (!inGroup || c.type !== 'group') && (!term || c.name.toLowerCase().includes(term) || c.type.toLowerCase().includes(term));\n const buckets: Record<FormBuilderComponentGroup, FormBuilderComponent[]> = { basic: [], choice: [], advanced: [], layout: [] };\n for (const c of this.formBuilderComponents) {\n if (match(c)) buckets[c.group].push(c);\n }\n return [\n { key: 'basic' as const, label: 'Basic', items: buckets.basic },\n { key: 'choice' as const, label: 'Choice', items: buckets.choice },\n { key: 'advanced' as const, label: 'Advanced', items: buckets.advanced },\n { key: 'layout' as const, label: 'Layout', items: buckets.layout },\n ].filter(g => g.items.length > 0);\n });\n\n // ── local mutable state ────────────────────────────────────────────────\n // Components/variables/validations giữ là plain arrays vì code hiện tại\n // mutate in-place rất nhiều chỗ (push, splice, forEach …). Đổi sang signal\n // tốn rủi ro với rất ít lợi ích — chỉ markForCheck() khi cần.\n components: Required<SdFormGeneric>['components'] = [];\n variables: Required<SdFormGeneric>['variables'] = [];\n validations: Required<SdFormGeneric>['validations'] = [];\n\n /** Cloned variables — dùng cho modal \"Configure variables\" (huỷ thì discard, ok thì gán ngược). */\n clonedVariables: SdFormGenericVariable[] = [];\n\n readonly selectedComponent = signal<SdFormGenericComponent | SdFormGenericGroup | undefined>(undefined);\n readonly isPreview = signal(false);\n\n // ── group drill-in (Detail) ─────────────────────────────────────────────\n // why: bỏ hẳn drag/drop trong group. Thay vào đó \"Detail\" 1 group → mở canvas\n // riêng chỉ thiết kế children của group đó (cùng tooling: palette/reorder/resize/\n // attribute), KHÔNG cho group lồng group. OK = giữ, Cancel = revert. Depth tối đa\n // 1 (group không chứa group) nên chỉ cần 1 con trỏ editingGroupId, không cần stack.\n readonly editingGroupId = signal<string | undefined>(undefined);\n /** Group đang được Detail (tìm ở TOP-LEVEL theo id), undefined = đang ở canvas chính. */\n readonly editingGroup = computed<SdFormGenericGroup | undefined>(() => {\n const id = this.editingGroupId();\n if (!id) return undefined;\n return this.components.find(c => c.id === id && c.type === 'group') as SdFormGenericGroup | undefined;\n });\n /** Snapshot (deep clone JSON) của group.components khi vào Detail — phục vụ Cancel. */\n #groupSnapshot?: string;\n\n /** Mảng components đang được canvas thao tác: children của group khi Detail, ngược lại là top-level. */\n #scope = (): (SdFormGenericComponent | SdFormGenericGroup)[] => this.editingGroup()?.components ?? this.components;\n\n /** Signal toàn cục: TRUE khi BẤT KỲ cdkDrag nào đang active (palette, canvas, group, resize).\n * Trigger class `.fb-shell--dragging` để ẩn hover/actions/resize toàn diện, không phụ thuộc :has(). */\n readonly isAnyDragging = signal(false);\n readonly dragSource = signal<'palette' | 'row' | 'canvas' | 'resize' | undefined>(undefined);\n readonly resizeState = signal<ResizeState | undefined>(undefined);\n readonly isResizing = computed(() => !!this.resizeState());\n\n expand = true;\n dragDropRows: DragDropRowItem[] = [];\n isDragging = false;\n targetItem?: DragDropRowItem = undefined;\n private lastDragPointer?: { x: number; y: number };\n\n /** Handler chung cho mọi cdkDragStarted — set signal global true. */\n onAnyDragStarted = () => {\n this.isAnyDragging.set(true);\n };\n\n onPaletteDragStarted = () => {\n this.dragSource.set('palette');\n this.onAnyDragStarted();\n };\n\n onRowDragStarted = () => {\n this.dragSource.set('row');\n this.onAnyDragStarted();\n };\n\n onAnyDragMoved = (event: CdkDragMove<any>) => {\n this.lastDragPointer = event.pointerPosition;\n const rowEl = document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y)?.closest('.fb-row') as HTMLElement | null;\n const row = rowEl?.id ? this.dragDropRows.find(t => t.id === rowEl.id) : undefined;\n if (row && this.targetItem !== row) {\n this.targetItem = row;\n this.#ref.markForCheck();\n }\n };\n\n /** Handler chung cho mọi cdkDragEnded — set signal global false (dùng setTimeout 0\n * để chờ CDK xử lý xong drop event trước khi UI re-enable). */\n onAnyDragEnded = () => {\n setTimeout(() => {\n this.isAnyDragging.set(false);\n this.dragSource.set(undefined);\n this.lastDragPointer = undefined;\n this.targetItem = undefined;\n this.#ref.markForCheck();\n }, 0);\n };\n\n startResizeControl = (item: SdFormGenericComponent | SdFormGenericGroup, row: DragDropRowItem) => {\n this.dragSource.set('resize');\n this.isAnyDragging.set(true);\n this.resizeState.set({ itemId: item.id, rowId: row.id, columns: `${item.layout?.columns || '12'}` });\n this.#ref.markForCheck();\n };\n\n endResizeControl = (event: any) => {\n this.dragEndChangeSizeControl(event);\n this.resizeState.set(undefined);\n this.onAnyDragEnded();\n };\n\n #componentsChanges = new Subject<void>();\n #variablesChanges = new Subject<void>();\n #validationsChanges = new Subject<void>();\n #subscription = new Subscription();\n\n constructor() {\n // Khi input `formGeneric` ref thay đổi: clone components/variables/validations\n // sang local arrays và bắn subject tương ứng cho stream debounced (syncRows).\n // untracked() bao bọc các mutation để không tạo cycle (effect chỉ tracks formGeneric()).\n effect(() => {\n const fg = this.formGeneric();\n untracked(() => {\n this.components = Array.isArray(fg?.components) ? JSON.parse(JSON.stringify(fg!.components)) : [];\n this.variables = Array.isArray(fg?.variables) ? JSON.parse(JSON.stringify(fg!.variables)) : [];\n this.validations = Array.isArray(fg?.validations) ? JSON.parse(JSON.stringify(fg!.validations)) : [];\n this.#componentsChanges.next();\n this.#variablesChanges.next();\n this.#validationsChanges.next();\n });\n });\n }\n\n ngOnInit() {\n this.#subscription.add(\n this.#componentsChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\n this.#syncComponentsToRows();\n this.#ref.markForCheck();\n })\n );\n this.#subscription.add(\n this.#variablesChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\n this.#ref.markForCheck();\n })\n );\n this.#subscription.add(\n this.#validationsChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\n this.#ref.markForCheck();\n })\n );\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n addComponent = (item: FormBuilderComponent, index?: number, layoutColumns = '12') => {\n // why: không cho thêm group khi đang Detail trong 1 group (tránh group lồng group).\n if (item.type === 'group' && this.editingGroupId()) return;\n const id = GenerateId();\n const columns = item.type === 'break' ? '12' : layoutColumns;\n let newComponent: SdFormGenericComponent | SdFormGenericGroup;\n if (item.type === 'group') {\n // Group là layout container, không có key/validate; có nested components[] + properties{icon,color}.\n newComponent = {\n id,\n type: 'group',\n label: 'Group',\n layout: { columns },\n components: [],\n properties: {\n icon: item.symbol || 'category',\n color: 'primary',\n },\n } as SdFormGenericGroup;\n } else if (item.type === 'break') {\n // Break: 12-col luôn, đóng vai trò row separator cố định. Extend base nên có key\n // (auto-gen cho stability) nhưng không hiển thị trong attribute panel.\n newComponent = {\n id,\n key: GenerateKey(),\n type: 'break',\n label: 'Break',\n layout: { columns: '12' },\n validate: {},\n disabled: false,\n properties: {},\n } as any;\n } else {\n newComponent = {\n id,\n key: GenerateKey(),\n type: item.type as any,\n label: item.type,\n layout: { columns },\n validate: { required: false },\n disabled: false,\n properties: {},\n } as SdFormGenericComponent;\n }\n const scope = this.#scope();\n if (index !== undefined) {\n scope.splice(index, 0, newComponent);\n } else {\n scope.push(newComponent);\n }\n\n this.#recountTabIndex();\n const created = scope.find(component => component.id === id);\n this.selectedComponent.set(created);\n this.selectComponent(created);\n this.#ref.markForCheck();\n };\n\n // ── Helpers cho UI mới ────────────────────────────────────────\n /** Symbol Material để render trên canvas item / attribute header. */\n symbolFor = (item: SdFormGenericComponent | SdFormGenericGroup): string => {\n if (item.type === 'group') return (item as SdFormGenericGroup).properties?.icon || 'category';\n return this.componentIcons[item.type]?.symbol ?? 'help';\n };\n\n /** Human-readable type label (e.g. \"Text field\", \"Date\"). */\n typeLabelFor = (item: SdFormGenericComponent | SdFormGenericGroup): string => {\n return this.componentIcons[item.type]?.label ?? item.type;\n };\n\n placeholderSymbolFor = (\n item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined\n ): string => {\n if (!item) return 'add';\n if (this.#isPaletteComponent(item)) return item.symbol;\n if ('items' in item) return 'view_week';\n return this.symbolFor(item);\n };\n\n placeholderTitleFor = (\n item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined\n ): string => {\n if (!item) return 'Component';\n if (this.#isPaletteComponent(item)) return item.name;\n if ('items' in item) return 'Row';\n return ('label' in item && item.label) || this.typeLabelFor(item);\n };\n\n placeholderMetaFor = (item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined): string => {\n if (!item) return '';\n if (this.#isPaletteComponent(item)) return 'New field';\n if ('items' in item) return `${item.items.length} field${item.items.length === 1 ? '' : 's'}`;\n return this.typeLabelFor(item);\n };\n\n /** True nếu component có expression điều kiện — drives the \"conditional\" status chip. */\n hasConditional = (item: SdFormGenericComponent | SdFormGenericGroup): boolean => {\n const p: any = item.properties || {};\n return !!(p.visibleWhenExpression || p.hiddenWhenExpression || p.disabledWhenExpression || p.requiredWhenExpression);\n };\n\n /** Map SdColor preset → 2 CSS var names cho header-bg và header-fg của group card. */\n groupColorVars = (color: string | undefined | null): { bg: string; fg: string } => {\n switch (color) {\n case 'secondary':\n return { bg: 'var(--md-sys-color-secondary-container)', fg: 'var(--md-sys-color-on-secondary-container)' };\n case 'success':\n return { bg: 'var(--md-sys-color-success-container)', fg: 'var(--md-sys-color-success)' };\n case 'warning':\n return { bg: 'var(--md-sys-color-warning-container)', fg: 'var(--md-sys-color-warning)' };\n case 'error':\n return { bg: 'var(--md-sys-color-error-container)', fg: 'var(--md-sys-color-error)' };\n case 'primary':\n default:\n return { bg: 'var(--md-sys-color-primary-container)', fg: 'var(--md-sys-color-primary)' };\n }\n };\n\n /** Segmented Design/Preview toggle (replaces play_circle/stop_circle). */\n setMode = (preview: boolean) => {\n this.isPreview.set(preview);\n };\n\n // ── Group drill-in (Detail) navigation ──────────────────────────────────\n /** Mở canvas thiết kế riêng cho 1 group (chỉ children của nó). Snapshot để Cancel revert. */\n enterGroupEdit = (group: SdFormGenericGroup) => {\n this.#groupSnapshot = JSON.stringify(group.components ?? []);\n this.editingGroupId.set(group.id);\n this.selectedComponent.set(undefined);\n this.#recountTabIndex();\n this.#ref.markForCheck();\n };\n\n /** OK: giữ thay đổi children, quay về canvas chính. */\n confirmGroupEdit = () => {\n this.#groupSnapshot = undefined;\n this.editingGroupId.set(undefined);\n this.selectedComponent.set(undefined);\n this.#syncComponentsToRows();\n this.#ref.markForCheck();\n };\n\n /** Cancel: revert children về snapshot lúc vào Detail, rồi quay về canvas chính. */\n cancelGroupEdit = () => {\n const g = this.editingGroup();\n if (g && this.#groupSnapshot !== undefined) {\n g.components = JSON.parse(this.#groupSnapshot);\n }\n this.#groupSnapshot = undefined;\n this.editingGroupId.set(undefined);\n this.selectedComponent.set(undefined);\n this.#syncComponentsToRows();\n this.#ref.markForCheck();\n };\n\n /** Quick-add break sau row chỉ định (theo scope hiện tại — top-level hoặc group).\n * Tính component index cuối cùng của row đó trong scope, splice break vào sau.\n */\n insertBreakAfter = (row: DragDropRowItem) => {\n const scope = this.#scope();\n const lastItemId = row.items[row.items.length - 1]?.id;\n const insertAfter = lastItemId ? scope.findIndex(c => c.id === lastItemId) : scope.length - 1;\n const newBreak: any = {\n id: GenerateId(),\n key: GenerateKey(),\n type: 'break',\n label: 'Break',\n layout: { columns: '12' },\n validate: {},\n disabled: false,\n properties: {},\n };\n scope.splice(insertAfter + 1, 0, newBreak);\n this.#recountTabIndex();\n this.#ref.markForCheck();\n };\n\n /** Xoá component theo scope hiện tại (top-level hoặc children của group đang Detail). */\n removeComponent = (id: string) => {\n const g = this.editingGroup();\n if (g) {\n g.components = g.components.filter((t: { id: string }) => t.id !== id);\n } else {\n this.components = this.components.filter((t: { id: string }) => t.id !== id);\n }\n if (this.selectedComponent()?.id === id) this.selectedComponent.set(undefined);\n this.#recountTabIndex();\n };\n\n selectComponent = (item?: SdFormGenericComponent | SdFormGenericGroup) => {\n this.selectedComponent.set(item);\n this.#ref.markForCheck();\n };\n\n onClickedOutside = (e: any) => {\n const classList = (e.target as Element).classList;\n if (!classList.length || classList.contains('components') || classList.contains('cdk-drop-list')) {\n this.selectedComponent.set(undefined);\n }\n };\n\n clickFormContentEmpty = () => {\n if (!this.dragDropRows?.length) {\n this.selectedComponent.set(undefined);\n }\n };\n\n drop = (event: CdkDragDrop<any[]>) => {\n if (event.previousContainer === event.container) {\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n this.#syncRowsToComponents();\n // Xử lý kéo chéo giữa các row khi pointer rời khỏi container hiện tại.\n if (!event.isPointerOverContainer) {\n const dragItemId = event.item.element.nativeElement.id;\n if (dragItemId) {\n const dragItem = this.#scope().find((t: { id: string }) => t.id === dragItemId);\n this.xuLyKeoCheo(dragItem);\n }\n }\n } else {\n const draggedData = this.#draggedDataFromDropEvent(event);\n if (this.#isPaletteComponent(draggedData)) {\n // transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\n const placement = this.#paletteDropPlacement(event.container.data, event.currentIndex, draggedData);\n this.addComponent(draggedData, placement.index, placement.columns);\n } else {\n const movedItem = event.previousContainer.data[event.previousIndex] as SdFormGenericComponent | SdFormGenericGroup;\n const targetRow = this.#rowForItems(event.container.data);\n if (targetRow && !canPlaceInRow(targetRow, movedItem, movedItem.id)) {\n this.#notifyService.warning(this.#i18n.t('core.component.form-builder.row-overflow'));\n return;\n }\n\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\n this.#syncRowsToComponents();\n }\n }\n this.#recountTabIndex();\n };\n\n dragStartComponentItem = (event: any) => {\n void event;\n this.dragSource.set('canvas');\n this.onAnyDragStarted();\n this.isDragging = true;\n };\n\n dragEndComponentItem = (event: any) => {\n this.isDragging = false;\n };\n\n onMouseover = (event: MouseEvent, rowItem: DragDropRowItem) => {\n if (this.isDragging && this.targetItem !== rowItem) {\n this.targetItem = rowItem;\n this.#ref.markForCheck();\n }\n };\n\n isRowFull = (row: DragDropRowItem): boolean => this.#usedColumns(row) >= 12;\n\n isRowInlineDropLocked = (row: DragDropRowItem): boolean => this.#availableColumns(row) < 2;\n\n canEnterRowDropList = (\n drag: CdkDrag<FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup>,\n drop: CdkDropList<(SdFormGenericComponent | SdFormGenericGroup)[]>\n ): boolean => {\n const row = this.#rowForItems(drop.data);\n if (!row) return true;\n\n const data = drag.data;\n if (!data) return true;\n if (this.#isPaletteComponent(data)) {\n return data.type === 'break' || this.#availableColumns(row) >= 2;\n }\n if ('layout' in data && 'id' in data) {\n return canPlaceInRow(row, data, data.id);\n }\n\n return true;\n };\n\n onFocus = (event: FocusEvent) => {\n void event;\n };\n\n xuLyKeoCheo = (dragItem?: SdFormGenericComponent | SdFormGenericGroup) => {\n if (dragItem && this.targetItem) {\n const result = moveItemToRow(this.dragDropRows, {\n itemId: dragItem.id,\n targetRowId: this.targetItem.id,\n });\n if (result.moved) {\n this.dragDropRows = this.#withRowIndexes(result.rows);\n this.#syncRowsToComponents();\n } else if (result.reason === 'row-overflow') {\n this.#notifyService.warning(this.#i18n.t('core.component.form-builder.row-overflow'));\n }\n }\n this.targetItem = undefined;\n };\n noReturnPredicate = () => {\n return false;\n };\n\n #recountTabIndex = () => {\n const scope = this.#scope();\n scope.forEach((item, index) => {\n if (item.layout) {\n item.layout!.row = `${index + 1}`;\n item.layout!.columns = item.layout?.columns || '12';\n } else {\n item.layout = {\n row: `${index + 1}`,\n columns: '12',\n };\n }\n });\n const sel = this.selectedComponent();\n if (sel && sel?.layout?.row) {\n sel.layout.row = scope.find(t => t.id === sel.id)?.layout?.row;\n }\n this.#syncComponentsToRows();\n };\n\n // Hàm xử lý chuyển đổi components (scope hiện tại) -> dragDropRows\n #syncComponentsToRows = () => {\n this.dragDropRows = this.#withRowIndexes(buildFormBuilderRows(this.#scope()));\n };\n\n #syncRowsToComponents = () => {\n const flat = flattenFormBuilderRows(this.dragDropRows);\n const g = this.editingGroup();\n if (g) {\n g.components = flat as SdFormGenericComponent[];\n } else {\n this.components = flat;\n }\n };\n\n changeSizeControl = async (\n event: CdkDragMove<SdFormGenericComponent | SdFormGenericGroup>,\n item: SdFormGenericComponent | SdFormGenericGroup,\n items: (SdFormGenericComponent | SdFormGenericGroup)[],\n currentIndex: number\n ) => {\n // const totalColumnInRow = items.map(k => k.layout.columns).reduce((acc, curr) => acc + parseInt(curr, 0), 0);\n const totalColumnBeforeItem = items\n .map(k => +k.layout!.columns || 12)\n .reduce((acc, curr, index) => {\n if (index < currentIndex) {\n acc = acc + curr;\n }\n return acc;\n }, 0);\n const rect = document.getElementById('frmComponent')?.getBoundingClientRect() as DOMRect;\n const left = rect.left;\n const right = rect.right - left;\n const mouse = event.pointerPosition.x - left!;\n const t = Math.round(12 / (100 / ((100 * mouse) / right))) - totalColumnBeforeItem;\n // Clamp + skip-if-unchanged để tránh re-render mỗi pixel mouse di chuyển.\n const newCols = t > 12 ? '12' : t < 2 ? '2' : `${t}`;\n if (item.layout!.columns !== newCols) {\n item.layout!.columns = newCols as any;\n }\n const currentResizeState = this.resizeState();\n if (currentResizeState?.itemId !== item.id || currentResizeState?.columns !== newCols) {\n this.resizeState.set({\n itemId: item.id,\n rowId: currentResizeState?.rowId ?? this.#rowForItems(items)?.id ?? `row-${item.id}`,\n columns: newCols,\n });\n this.#ref.markForCheck();\n }\n\n // document.getElementById('test').innerHTML = `<pre>\n // left: ${left}\n // right: ${document.getElementById('frmComponent').getBoundingClientRect().right}\n // right-left: ${right}\n // mouse: ${event.pointerPosition.x}\n // mouse-left: ${mouse}\n // t: ${t}\n // columns: ${item.layout.columns}\n // </pre>`;\n };\n\n dragEndChangeSizeControl = (event: any) => {\n this.#recountTabIndex();\n };\n\n onChangeViewed = (component: SdFormGenericComponent) => {\n component.properties!.viewed = !component.properties!.viewed;\n // Emit khi có sự thay đổi để control và attribute lắng nghe và render lại\n this.#builderService.componentEmitters.next(component);\n };\n\n onChangeHidden = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n component.properties!.hidden = !component.properties!.hidden;\n // Emit khi có sự thay đổi để control và attribute lắng nghe và render lại\n this.#builderService.componentEmitters.next(component);\n };\n\n // Duplicate component nhưng sẽ clear id và key để tránh trùng lặp (theo scope hiện tại)\n onDuplicate = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n const clonedComponent = this.#cloneComponentWithNewIdentity(component);\n const scope = this.#scope();\n scope.push(clonedComponent);\n this.#recountTabIndex();\n const created = scope.find(t => t.id === clonedComponent.id);\n this.selectedComponent.set(created);\n this.selectComponent(created);\n this.#ref.markForCheck();\n };\n\n // Copy form hiện tại\n jsonString?: string;\n viewJSON = () => {\n this.jsonString = JSON.stringify({ components: this.components });\n this.popupViewJSON()?.open();\n this.#ref.markForCheck();\n };\n\n updateJSON = () => {\n try {\n if (this.jsonString) {\n const json: Record<string, any> = JSON.parse(this.jsonString);\n if ('components' in json) {\n this.components = json['components'];\n this.popupViewJSON()?.close();\n this.#syncComponentsToRows();\n this.#ref.markForCheck();\n } else {\n throw new Error('Invalid JSON');\n }\n }\n } catch (err: any) {\n console.error(err);\n this.#notifyService.warning(err?.message);\n }\n };\n\n configureVariables = () => {\n this.clonedVariables = JSON.parse(JSON.stringify(this.variables || []));\n this.popupConfigureVariables()?.open();\n this.#ref.markForCheck();\n };\n\n addVariables = () => {\n this.clonedVariables.push({\n id: Utilities.randomId(),\n key: '',\n label: '',\n });\n };\n\n removeVariables = (id: string) => {\n const idx = this.clonedVariables.findIndex(e => e.id === id);\n this.clonedVariables.splice(idx, 1);\n };\n\n updateVariables = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.#ref.markForCheck();\n return;\n }\n this.variables = this.clonedVariables;\n this.popupConfigureVariables()?.close();\n this.#ref.markForCheck();\n };\n\n // Chìa ra cho bên ngoài lấy components hiện tại\n getComponents = (): (SdFormGenericComponent | SdFormGenericGroup)[] => {\n this.#syncRowsToComponents();\n return JSON.parse(JSON.stringify(this.components || []));\n };\n\n // Chìa ra cho bên ngoài lấy variables hiện tại\n getVariables = (): SdFormGenericVariable[] => {\n return JSON.parse(JSON.stringify(this.variables || []));\n };\n\n #getValidations = (): SdFormGenericValidation[] => {\n return JSON.parse(JSON.stringify(this.validations || []));\n };\n\n getForm = (): SdFormGeneric => {\n return {\n components: this.getComponents(),\n variables: this.getVariables(),\n validations: this.#getValidations(),\n };\n };\n\n openConfigureValidation = () => {\n this.configureValidation()?.open(this.getForm());\n };\n\n onUpdateValidations = (validations: SdFormGenericValidation[]) => {\n this.validations = validations;\n };\n\n onValidate = async () => {\n const errorMessages = await this.formRender()?.getValidationMessages('error');\n if (errorMessages?.length) {\n this.#notifyService.error(errorMessages);\n return;\n }\n const warningMessages = await this.formRender()?.getValidationMessages('warning');\n if (warningMessages?.length) {\n this.#confirmService.confirm(warningMessages.join(', ')).then(() => {\n this.#notifyService.success('Submit success');\n });\n } else {\n this.#notifyService.success('Submit success');\n }\n };\n\n #withRowIndexes = (rows: FormBuilderLayoutRow[]): DragDropRowItem[] => {\n return rows.map((row, index) => ({\n ...row,\n rowIndex: index,\n }));\n };\n\n #rowForItems = (items: any[]): DragDropRowItem | undefined => {\n return this.dragDropRows.find(row => row.items === items);\n };\n\n #isPaletteComponent = (item: unknown): item is FormBuilderComponent => {\n return !!item && typeof item === 'object' && 'symbol' in item && 'type' in item;\n };\n\n #draggedDataFromDropEvent = (event: CdkDragDrop<any[]>): unknown => {\n return event.item.data ?? event.previousContainer.data[event.previousIndex];\n };\n\n #usedColumns = (row: DragDropRowItem): number => {\n return row.items.reduce((sum, item) => sum + +(item.layout?.columns || 12), 0);\n };\n\n #availableColumns = (row: DragDropRowItem): number => {\n return Math.max(0, 12 - this.#usedColumns(row));\n };\n\n #scopeIndexAfterRow = (row: DragDropRowItem): number => {\n const scope = this.#scope();\n const lastItem = row.items[row.items.length - 1];\n const lastIndex = lastItem ? scope.findIndex(component => component.id === lastItem.id) : -1;\n return lastIndex >= 0 ? lastIndex + 1 : scope.length;\n };\n\n #paletteDropPlacement = (\n containerData: any[],\n currentIndex: number,\n item: FormBuilderComponent\n ): { index?: number; columns?: string } => {\n const row = this.#rowForItems(containerData);\n if (!row || item.type === 'break') {\n return { index: this.#scopeIndexFromDrop(containerData, currentIndex) };\n }\n\n const availableColumns = this.#availableColumns(row);\n if (availableColumns >= 2) {\n return {\n index: this.#scopeIndexFromDrop(containerData, currentIndex),\n columns: `${availableColumns}`,\n };\n }\n\n return { index: this.#scopeIndexAfterRow(row), columns: '12' };\n };\n\n #scopeIndexFromDrop = (containerData: any[], currentIndex: number): number | undefined => {\n const scope = this.#scope();\n const row = this.#rowForItems(containerData);\n if (row) {\n const anchor = row.items[currentIndex] ?? row.items[row.items.length - 1];\n if (!anchor) return scope.length;\n\n const anchorIndex = scope.findIndex(component => component.id === anchor.id);\n if (anchorIndex < 0) return scope.length;\n return currentIndex >= row.items.length ? anchorIndex + 1 : anchorIndex;\n }\n\n if (containerData === this.dragDropRows) {\n const rowAtIndex = this.dragDropRows[currentIndex];\n const anchor = rowAtIndex?.items[0];\n if (!anchor) return scope.length;\n\n const anchorIndex = scope.findIndex(component => component.id === anchor.id);\n return anchorIndex >= 0 ? anchorIndex : scope.length;\n }\n\n return undefined;\n };\n\n #cloneComponentWithNewIdentity = <T extends SdFormGenericComponent | SdFormGenericGroup>(component: T): T => {\n const clonedComponent = JSON.parse(JSON.stringify(component)) as T;\n this.#regenerateComponentIdentity(clonedComponent);\n return clonedComponent;\n };\n\n #regenerateComponentIdentity = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n component.id = GenerateId();\n if (component.type === 'group') {\n component.components = component.components.map(child => this.#cloneComponentWithNewIdentity(child));\n return;\n }\n\n component.key = GenerateKey();\n };\n}\n","<!-- cdkDropListGroup: auto-connect tất cả cdkDropList trong palette, canvas rows, group bodies.\n [class.fb-shell--dragging]: JS-driven flag để ẩn hover/actions/resize toàn diện\n trong lúc drag (CSS :has() không bắt 100% trường hợp với CDK preview clone). -->\n<div\n class=\"fb-shell\"\n cdkDropListGroup\n [class.fb-shell--dragging]=\"isAnyDragging()\"\n [class.fb-shell--palette-dragging]=\"dragSource() === 'palette'\"\n [class.fb-shell--resizing]=\"isResizing()\">\n <ng-template #dragPreviewTemplate>\n <span class=\"fb-drag-preview__glyph\" aria-hidden=\"true\"></span>\n <span class=\"fb-drag-preview__body\" aria-hidden=\"true\">\n <span class=\"fb-drag-preview__line is-strong\"></span>\n <span class=\"fb-drag-preview__line\"></span>\n </span>\n </ng-template>\n <ng-template #dropPlaceholderTemplate let-item>\n <span class=\"fb-drop-placeholder__icon\" aria-hidden=\"true\">\n <span class=\"msi\">{{ placeholderSymbolFor(item) }}</span>\n </span>\n <span class=\"fb-drop-placeholder__body\" aria-hidden=\"true\">\n <span class=\"fb-drop-placeholder__title\">{{ placeholderTitleFor(item) }}</span>\n <span class=\"fb-drop-placeholder__meta\">{{ placeholderMetaFor(item) }}</span>\n </span>\n </ng-template>\n\n <!-- ════════════════════════ LEFT PALETTE ════════════════════════ -->\n <aside class=\"fb-palette\">\n <div class=\"fb-panel-header\">\n <div class=\"fb-panel-header__title\">{{ 'core.component.form-builder.components' | translate }}</div>\n </div>\n\n <!-- Search pill -->\n <div class=\"fb-palette__search\">\n <span class=\"msi\" aria-hidden=\"true\">search</span>\n <input\n type=\"text\"\n [placeholder]=\"'core.component.form-builder.search-components' | translate\"\n [value]=\"paletteSearch()\"\n (input)=\"paletteSearch.set($any($event.target).value)\" />\n <span class=\"kbd\">⌘K</span>\n </div>\n\n <div class=\"fb-palette__scroll\">\n @for (group of paletteGroups(); track group.key) {\n <div class=\"fb-palette__group-label\">{{ group.label }}</div>\n <div class=\"fb-palette__list\" cdkDropList [cdkDropListData]=\"group.items\" [cdkDropListEnterPredicate]=\"noReturnPredicate\">\n @for (formBuilderComponent of group.items; track formBuilderComponent.type) {\n <div\n cdkDrag\n [cdkDragData]=\"formBuilderComponent\"\n class=\"fb-palette-item\"\n [matTooltip]=\"formBuilderComponent.name\"\n matTooltipPosition=\"right\"\n (click)=\"addComponent(formBuilderComponent)\"\n (cdkDragStarted)=\"onPaletteDragStarted()\"\n (cdkDragMoved)=\"onAnyDragMoved($event)\"\n (cdkDragEnded)=\"onAnyDragEnded()\"\n aria-hidden=\"true\">\n <span class=\"fb-palette-item__icon\"\n ><span class=\"msi\">{{ formBuilderComponent.symbol }}</span></span\n >\n <span class=\"fb-palette-item__name\">{{ formBuilderComponent.name }}</span>\n <span class=\"fb-palette-item__drag\"><span class=\"msi\">drag_indicator</span></span>\n <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n </div>\n <div *cdkDragPlaceholder class=\"fb-drop-placeholder\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: formBuilderComponent }\"></ng-container>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </aside>\n\n <!-- ════════════════════════ CENTER CANVAS ═══════════════════════ -->\n <section class=\"fb-canvas\">\n @let _editingGroup = editingGroup();\n @if (_editingGroup) {\n <!-- ── Drill-in header: đang thiết kế children của 1 group ── -->\n <header class=\"fb-canvas__header fb-canvas__header--group\">\n <div class=\"fb-canvas__title fb-groupedit__crumb\">\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.back-to-design' | translate\"\n (click)=\"cancelGroupEdit()\">\n <span class=\"msi\">chevron_left</span>\n </button>\n <span class=\"fb-groupedit__icon\"\n ><span class=\"msi\">{{ _editingGroup.properties?.icon || 'category' }}</span></span\n >\n <span>{{ _editingGroup.label || ('core.component.form-builder.edit-group' | translate) }}</span>\n <span class=\"fb-groupedit__hint\">{{ 'core.component.form-builder.edit-group' | translate }}</span>\n </div>\n <div class=\"fb-canvas__actions\">\n <sd-button type=\"outline\" [title]=\"'core.component.form-builder.cancel' | translate\" (click)=\"cancelGroupEdit()\"></sd-button>\n <sd-button\n type=\"fill\"\n color=\"primary\"\n prefixIcon=\"check\"\n [title]=\"'core.component.form-builder.confirm' | translate\"\n (click)=\"confirmGroupEdit()\"></sd-button>\n </div>\n </header>\n } @else {\n <header class=\"fb-canvas__header\">\n <div class=\"fb-canvas__title\">\n <span>{{ 'core.component.form-builder.layout' | translate }}</span>\n </div>\n <div class=\"fb-canvas__actions\">\n <!-- Toolbar cluster: view JSON / variables / validation -->\n <button type=\"button\" class=\"fb-icon-btn\" [matTooltip]=\"'core.component.form-builder.view-json' | translate\" (click)=\"viewJSON()\">\n <span class=\"msi\">data_object</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.config-variable' | translate\"\n (click)=\"configureVariables()\">\n <span class=\"msi\">data_array</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.config-validation-warning-error' | translate\"\n (click)=\"openConfigureValidation()\">\n <span class=\"msi\">rule</span>\n </button>\n\n <span class=\"fb-divider\"></span>\n\n <!-- M3 segmented Design/Preview toggle -->\n <div class=\"fb-mode-toggle\" role=\"tablist\">\n <button type=\"button\" role=\"tab\" [class.is-active]=\"!isPreview()\" [attr.aria-selected]=\"!isPreview()\" (click)=\"setMode(false)\">\n <span class=\"msi\">edit</span>\n <span>{{ 'core.component.form-builder.design' | translate }}</span>\n </button>\n <button type=\"button\" role=\"tab\" [class.is-active]=\"isPreview()\" [attr.aria-selected]=\"isPreview()\" (click)=\"setMode(true)\">\n <span class=\"msi\">visibility</span>\n <span>{{ 'core.component.form-builder.preview' | translate }}</span>\n </button>\n </div>\n </div>\n </header>\n }\n\n <div class=\"fb-canvas__body\" [class.is-preview]=\"isPreview()\" id=\"frmComponent\">\n @if (isPreview()) {\n <!-- ── Preview mode ───────────────────────────────────────────── -->\n <div class=\"fb-preview-card\">\n <div class=\"fb-preview-card__chip\">\n <span class=\"msi\">visibility</span>\n {{ 'core.component.form-builder.preview-runtime' | translate }}\n </div>\n <sd-form-render [configuration]=\"{ components: this.components, validations: this.validations }\"></sd-form-render>\n <div class=\"fb-preview-card__footer\">\n <sd-button type=\"outline\" [title]=\"'core.component.form-builder.cancel' | translate\" (click)=\"setMode(false)\"></sd-button>\n <sd-button\n type=\"fill\"\n color=\"primary\"\n [title]=\"'core.component.form-builder.submit' | translate\"\n (click)=\"onValidate()\"></sd-button>\n </div>\n </div>\n } @else {\n <!-- ── Design mode ────────────────────────────────────────────── -->\n @if (!dragDropRows.length) {\n <div class=\"fb-empty\">\n <div class=\"fb-empty__art\"><span class=\"msi\">dashboard_customize</span></div>\n <div class=\"fb-empty__title\">{{ 'core.component.form-builder.empty-title' | translate }}</div>\n <div class=\"fb-empty__hint\">\n {{ 'core.component.form-builder.empty-hint' | translate }}\n <span class=\"fb-empty__kbd\"><span class=\"msi\">keyboard</span>⌘ K</span>\n </div>\n </div>\n }\n\n <div\n cdkDropList\n cdkDropListOrientation=\"vertical\"\n [cdkDropListData]=\"dragDropRows\"\n (cdkDropListDropped)=\"drop($event)\"\n (click)=\"clickFormContentEmpty()\"\n aria-hidden=\"true\">\n @for (row of dragDropRows; track row.id) {\n <div\n cdkDrag\n [cdkDragData]=\"row\"\n class=\"fb-row\"\n (mouseover)=\"onMouseover($event, row)\"\n (focus)=\"onFocus($event)\"\n (cdkDragStarted)=\"onRowDragStarted()\"\n (cdkDragMoved)=\"onAnyDragMoved($event)\"\n (cdkDragEnded)=\"onAnyDragEnded()\"\n [class.is-drag-target]=\"targetItem === row\"\n [class.is-row-full]=\"isRowFull(row)\"\n [class.is-row-inline-locked]=\"isRowInlineDropLocked(row)\"\n [class.is-resizing-row]=\"resizeState()?.rowId === row.id\"\n [id]=\"row.id\"\n aria-hidden=\"true\">\n <div class=\"fb-row__drag\" [matTooltip]=\"'core.component.form-builder.drag-vertically' | translate\" cdkDragHandle>\n <span class=\"msi\">drag_indicator</span>\n </div>\n <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n </div>\n <div *cdkDragPlaceholder class=\"fb-drop-placeholder fb-drop-placeholder--row\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: row }\"></ng-container>\n </div>\n <!-- Quick-add break button — show on row hover, insert break after this row -->\n <button\n type=\"button\"\n class=\"fb-row-break-btn\"\n [matTooltip]=\"'core.component.form-builder.break' | translate\"\n matTooltipPosition=\"right\"\n (click)=\"insertBreakAfter(row); $event.stopPropagation()\">\n <span class=\"msi\">horizontal_rule</span>\n </button>\n\n <div\n class=\"fb-row__items\"\n style=\"display: flex; flex: 1; gap: var(--gap-2)\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"row.items\"\n [cdkDropListEnterPredicate]=\"canEnterRowDropList\"\n (cdkDropListDropped)=\"drop($event)\">\n @for (item of row.items; track item.id; let i = $index) {\n <!-- Group component renders as outlined card with colored header bar -->\n @if (item.type === 'group') {\n @let g = $any(item);\n @let cv = groupColorVars(g.properties?.color);\n <div\n cdkDrag\n [cdkDragData]=\"item\"\n [id]=\"item.id\"\n class=\"fb-group column-{{ item.layout?.columns || 12 }}\"\n [class.fb-item]=\"false\"\n [class.is-selected]=\"item.id === selectedComponent()?.id\"\n [class.is-hidden]=\"item.properties?.hidden\"\n [style.flex]=\"'0 0 calc(' + +(item.layout?.columns || 12) + '/12 * 100% - var(--gap-2))'\"\n [style.maxWidth]=\"'calc(' + +(item.layout?.columns || 12) + '/12 * 100% - var(--gap-2))'\"\n (click)=\"selectComponent(item); $event.stopPropagation()\"\n (cdkDragStarted)=\"dragStartComponentItem($event)\"\n (cdkDragMoved)=\"onAnyDragMoved($event)\"\n (cdkDragEnded)=\"dragEndComponentItem($event); onAnyDragEnded()\"\n aria-hidden=\"true\">\n <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n </div>\n <div *cdkDragPlaceholder class=\"fb-drop-placeholder\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: item }\"></ng-container>\n </div>\n <!-- cdkDragHandle: chỉ cho phép kéo group qua header — body free cho click vào child. -->\n <div class=\"fb-group__header\" cdkDragHandle [style.background]=\"cv.bg\" [style.color]=\"cv.fg\">\n <span class=\"fb-group__icon\"\n ><span class=\"msi\">{{ g.properties?.icon || 'category' }}</span></span\n >\n <span class=\"fb-group__label\">{{ item.label }}</span>\n @if (hasConditional(item)) {\n <span class=\"fb-group__conditional-chip\">\n <span class=\"msi\" style=\"font-size: 12px\">bolt</span>\n {{ 'core.component.form-builder.conditional' | translate }}\n </span>\n }\n <span class=\"fb-group__count\">{{ g.components?.length || 0 }} fields</span>\n </div>\n <!-- Floating action toolbar -->\n <div class=\"fb-actions\">\n <!-- why: Detail = mở canvas thiết kế riêng cho group (thay cho drag/drop trong group). -->\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.edit-group' | translate\"\n (click)=\"enterGroupEdit(g); $event.stopPropagation()\">\n <span class=\"msi\">open_in_full</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.duplicate' | translate\"\n (click)=\"onDuplicate(item); $event.stopPropagation()\">\n <span class=\"msi\">content_copy</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [class.warning]=\"item.properties?.hidden\"\n [class.on]=\"item.properties?.hidden\"\n [matTooltip]=\"\n item.properties?.hidden\n ? ('core.component.form-builder.show' | translate)\n : ('core.component.form-builder.hide' | translate)\n \"\n (click)=\"onChangeHidden(item); $event.stopPropagation()\">\n <span class=\"msi\">{{ item.properties?.hidden ? 'visibility_off' : 'visibility' }}</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn danger\"\n [matTooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"removeComponent(item.id); $event.stopPropagation()\">\n <span class=\"msi\">delete</span>\n </button>\n </div>\n\n <!-- Static preview: children render read-only (không drag/resize/select).\n Sửa nội dung group qua nút Detail (enterGroupEdit). -->\n <div class=\"fb-group__body fb-group__body--static\" (click)=\"enterGroupEdit(g); $event.stopPropagation()\">\n @if (!g.components?.length) {\n <div class=\"fb-group__empty\">\n <span class=\"msi\" style=\"font-size: 16px; margin-right: 6px\">open_in_full</span>\n {{ 'core.component.form-builder.group-empty-hint' | translate }}\n </div>\n }\n @for (child of g.components; track child.id) {\n <div\n class=\"fb-item is-child fb-item--static column-{{ child.layout?.columns || 12 }}\"\n [class.is-hidden]=\"child.properties?.hidden\">\n <ng-container *ngTemplateOutlet=\"controlTemplate; context: { $implicit: child }\"> </ng-container>\n </div>\n }\n </div>\n </div>\n } @else if (item.type === 'break') {\n <!-- Break: row separator cố định. Render 12-col line, không có resize/edit attribute. -->\n <div\n cdkDrag\n [cdkDragData]=\"item\"\n [id]=\"item.id\"\n class=\"fb-item is-break column-12\"\n [class.is-selected]=\"item.id === selectedComponent()?.id\"\n [class.is-hidden]=\"item.properties?.hidden\"\n (click)=\"selectComponent(item); $event.stopPropagation()\"\n (cdkDragStarted)=\"dragStartComponentItem($event)\"\n (cdkDragMoved)=\"onAnyDragMoved($event)\"\n (cdkDragEnded)=\"dragEndComponentItem($event); onAnyDragEnded()\"\n aria-hidden=\"true\">\n <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n </div>\n <div *cdkDragPlaceholder class=\"fb-drop-placeholder\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: item }\"></ng-container>\n </div>\n <div class=\"fb-break-line\">\n <span class=\"msi\">horizontal_rule</span>\n <span class=\"fb-break-label\">{{ 'core.component.form-builder.break' | translate }}</span>\n </div>\n <div class=\"fb-actions\">\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [class.warning]=\"item.properties?.hidden\"\n [class.on]=\"item.properties?.hidden\"\n [matTooltip]=\"\n item.properties?.hidden\n ? ('core.component.form-builder.show' | translate)\n : ('core.component.form-builder.hide' | translate)\n \"\n (click)=\"onChangeHidden(item); $event.stopPropagation()\">\n <span class=\"msi\">{{ item.properties?.hidden ? 'visibility_off' : 'visibility' }}</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn danger\"\n [matTooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"removeComponent(item.id); $event.stopPropagation()\">\n <span class=\"msi\">delete</span>\n </button>\n </div>\n </div>\n } @else {\n <!-- Regular form component -->\n <div\n cdkDrag\n [cdkDragData]=\"item\"\n [id]=\"item.id\"\n class=\"fb-item column-{{ item.layout?.columns || 12 }}\"\n [class.is-selected]=\"item.id === selectedComponent()?.id\"\n [class.is-hidden]=\"item.properties?.hidden\"\n [class.is-readonly]=\"item.properties?.viewed\"\n [class.is-resizing]=\"resizeState()?.itemId === item.id\"\n (click)=\"selectComponent(item); $event.stopPropagation()\"\n (cdkDragStarted)=\"dragStartComponentItem($event)\"\n (cdkDragMoved)=\"onAnyDragMoved($event)\"\n (cdkDragEnded)=\"dragEndComponentItem($event); onAnyDragEnded()\"\n aria-hidden=\"true\">\n <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n </div>\n <div *cdkDragPlaceholder class=\"fb-drop-placeholder\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: item }\"></ng-container>\n </div>\n\n <!-- Status chip (mutually exclusive priority: hidden > readonly > conditional) -->\n @if (item.properties?.hidden) {\n <span class=\"fb-status-chip hidden\">\n <span class=\"msi\">visibility_off</span>\n {{ 'core.component.form-builder.hidden' | translate }}\n </span>\n } @else if (item.properties?.viewed) {\n <span class=\"fb-status-chip readonly\">\n <span class=\"msi\">edit_off</span>\n {{ 'core.component.form-builder.read-only' | translate }}\n </span>\n } @else if (hasConditional(item)) {\n <span class=\"fb-status-chip conditional\">\n <span class=\"msi\">bolt</span>\n {{ 'core.component.form-builder.conditional' | translate }}\n </span>\n }\n\n <!-- Floating action toolbar pill -->\n <div class=\"fb-actions\">\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [class.warning]=\"item.properties?.viewed\"\n [class.on]=\"item.properties?.viewed\"\n [matTooltip]=\"\n item.properties?.viewed\n ? ('core.component.form-builder.unset-readonly' | translate)\n : ('core.component.form-builder.set-readonly' | translate)\n \"\n (click)=\"onChangeViewed(item); $event.stopPropagation()\">\n <span class=\"msi\">edit_off</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.duplicate' | translate\"\n (click)=\"onDuplicate(item); $event.stopPropagation()\">\n <span class=\"msi\">content_copy</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [class.warning]=\"item.properties?.hidden\"\n [class.on]=\"item.properties?.hidden\"\n [matTooltip]=\"\n item.properties?.hidden\n ? ('core.component.form-builder.show' | translate)\n : ('core.component.form-builder.hide' | translate)\n \"\n (click)=\"onChangeHidden(item); $event.stopPropagation()\">\n <span class=\"msi\">{{ item.properties?.hidden ? 'visibility_off' : 'visibility' }}</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn danger\"\n [matTooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"removeComponent(item.id); $event.stopPropagation()\">\n <span class=\"msi\">delete</span>\n </button>\n </div>\n\n <ng-container *ngTemplateOutlet=\"controlTemplate; context: { $implicit: item }\"> </ng-container>\n\n @if (resizeState()?.itemId === item.id) {\n <span class=\"fb-resize-chip\">{{ resizeState()?.columns }}/12</span>\n }\n\n <!-- Resize handle (pill) — cdkDragLockAxis=\"x\" để chỉ kéo ngang.\n Wrapping cdkDropList có enterPredicate=false, không nhận drop. -->\n <div cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListEnterPredicate]=\"noReturnPredicate\">\n <div\n cdkDrag\n cdkDragLockAxis=\"x\"\n class=\"fb-resize\"\n (cdkDragStarted)=\"startResizeControl(item, row)\"\n (cdkDragMoved)=\"changeSizeControl($event, item, row.items, i)\"\n (cdkDragEnded)=\"endResizeControl($event)\"\n [matTooltip]=\"'core.component.form-builder.flex' | translate\"\n aria-label=\"resize\"></div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n </section>\n\n <!-- ════════════════════════ RIGHT ATTRIBUTES ════════════════════════ -->\n <aside class=\"fb-attrs\">\n <div class=\"fb-panel-header\">\n <div class=\"fb-panel-header__title\">{{ 'core.component.form-builder.attribute' | translate }}</div>\n </div>\n\n @let _selectedComponent = selectedComponent();\n @if (_selectedComponent) {\n <!-- Selection header: type icon + name + key/type -->\n <div class=\"fb-attrs__selection\">\n <span class=\"fb-attrs__sel-icon\"\n ><span class=\"msi\">{{ symbolFor(_selectedComponent) }}</span></span\n >\n <div class=\"fb-attrs__sel-meta\">\n <div class=\"fb-attrs__sel-name\">{{ $any(_selectedComponent).label || ('core.component.form-builder.untitled' | translate) }}</div>\n <div class=\"fb-attrs__sel-key\">\n @if ($any(_selectedComponent).key) {\n {{ $any(_selectedComponent).key }} · {{ typeLabelFor(_selectedComponent) }}\n } @else {\n {{ typeLabelFor(_selectedComponent) }}\n }\n </div>\n </div>\n </div>\n\n <div class=\"fb-attrs__body\" aria-hidden=\"true\">\n @if (_selectedComponent.type === 'textfield') {\n <textfield-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></textfield-attribute>\n } @else if (_selectedComponent.type === 'textarea') {\n <textarea-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></textarea-attribute>\n } @else if (_selectedComponent.type === 'chip-string') {\n <chip-string-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></chip-string-attribute>\n } @else if (_selectedComponent.type === 'chip-calendar') {\n <chip-calendar-attribute\n [components]=\"components\"\n [variables]=\"variables\"\n [component]=\"_selectedComponent\"></chip-calendar-attribute>\n } @else if (_selectedComponent.type === 'number') {\n <number-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></number-attribute>\n } @else if (_selectedComponent.type === 'datetime') {\n <datetime-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></datetime-attribute>\n } @else if (_selectedComponent.type === 'select') {\n <select-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></select-attribute>\n } @else if (_selectedComponent.type === 'radio') {\n <radio-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></radio-attribute>\n } @else if (_selectedComponent.type === 'checkbox') {\n <checkbox-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></checkbox-attribute>\n } @else if (_selectedComponent.type === 'html') {\n <html-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></html-attribute>\n } @else if (_selectedComponent.type === 'upload') {\n <upload-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></upload-attribute>\n } @else if (_selectedComponent.type === 'table') {\n <table-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></table-attribute>\n } @else if (_selectedComponent.type === 'group') {\n <group-attribute [group]=\"$any(_selectedComponent)\"></group-attribute>\n }\n </div>\n } @else {\n <div class=\"fb-attrs__placeholder\">\n <span class=\"msi\">ads_click</span>\n <div class=\"title\">{{ 'core.component.form-builder.no-selection-title' | translate }}</div>\n <div class=\"hint\">{{ 'core.component.form-builder.no-selection-hint' | translate }}</div>\n </div>\n }\n </aside>\n</div>\n\n<!-- ══════════════════ Reusable control template ═════════════════ -->\n<ng-template #controlTemplate let-item>\n @if (item.type === 'textfield') {\n <textfield-control [component]=\"item\"></textfield-control>\n } @else if (item.type === 'textarea') {\n <textarea-control [component]=\"item\"></textarea-control>\n } @else if (item.type === 'chip-string') {\n <chip-string-control [component]=\"item\"></chip-string-control>\n } @else if (item.type === 'chip-calendar') {\n <chip-calendar-control [component]=\"item\"></chip-calendar-control>\n } @else if (item.type === 'number') {\n <number-control [component]=\"item\"></number-control>\n } @else if (item.type === 'datetime') {\n <datetime-control [component]=\"item\"></datetime-control>\n } @else if (item.type === 'select') {\n <select-control [component]=\"item\"></select-control>\n } @else if (item.type === 'radio') {\n <radio-control [component]=\"item\"></radio-control>\n } @else if (item.type === 'checkbox') {\n <checkbox-control [component]=\"item\"></checkbox-control>\n } @else if (item.type === 'html') {\n <html-control [component]=\"item\"></html-control>\n } @else if (item.type === 'upload') {\n <upload-control [component]=\"item\"></upload-control>\n } @else if (item.type === 'table') {\n <table-control [component]=\"item\"></table-control>\n }\n</ng-template>\n\n<!-- ══════════════════════ JSON / variables modals ═══════════════════════ -->\n<sd-modal title=\"JSON\" view=\"dialog\" width=\"80%\" #popupViewJSON>\n <sd-textarea [(model)]=\"jsonString\"></sd-textarea>\n <ng-container sdFooter>\n <sd-button\n type=\"fill\"\n [title]=\"'core.component.form-builder.save' | translate\"\n (click)=\"updateJSON()\"\n prefixIcon=\"save\"\n color=\"primary\"></sd-button>\n </ng-container>\n</sd-modal>\n<sd-modal [title]=\"'core.component.form-builder.config-variable' | translate\" view=\"dialog\" width=\"800px\" #popupConfigureVariables>\n @for (variable of clonedVariables; track variable.id) {\n <div class=\"d-flex align-items-center\" style=\"gap: 8px\">\n <sd-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"variable.key\" required></sd-input>\n <sd-input\n [form]=\"form\"\n [label]=\"'core.component.form-builder.display-label' | translate\"\n [(model)]=\"variable.label\"\n required></sd-input>\n <sd-button prefixIcon=\"delete\" (click)=\"removeVariables(variable.id)\" color=\"error\"></sd-button>\n </div>\n }\n <a href=\"javascript:;\" (click)=\"addVariables()\">{{ 'core.component.form-builder.add-variable' | translate }}</a>\n <ng-container sdFooter>\n <sd-button\n type=\"fill\"\n [title]=\"'core.component.form-builder.save' | translate\"\n (click)=\"updateVariables()\"\n prefixIcon=\"save\"\n color=\"primary\"></sd-button>\n </ng-container>\n</sd-modal>\n<configure-validation (accept)=\"onUpdateValidations($event)\"></configure-validation>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { ArrayUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport {\n Attribute,\n AttributeOperators,\n GetAttributes,\n SdFormGenericComponent,\n SdFormGenericExpression,\n SdFormGenericGroup,\n} from '../../models';\nimport { ExpressionFeelPipe } from '../../pipes';\nimport { FormGenericService } from '../../services';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n selector: 'sd-feel-expression',\n templateUrl: './sd-feel-expression.component.html',\n styleUrl: './sd-feel-expression.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdInput, SdInputNumber, SdSelect, SdAutocomplete, SdButton, SdSelect, SdModal, TranslatePipe],\n})\nexport class SdFeelExpression implements OnInit {\n @ViewChild(SdModal) modal?: SdModal;\n form = new FormGroup({});\n attributeOperators = AttributeOperators;\n attributes: Attribute[] = [];\n attribute: Record<string, Attribute> = {};\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n // ValuesKey\n expression?: SdFormGenericExpression;\n @Input({ alias: 'expression', required: true }) set _expression(expression: SdFormGenericExpression | undefined) {\n if (this.expression !== expression) {\n this.expression = expression;\n }\n this.expression = this.expression || {\n key: `${new Date().getTime().toString(36)}`,\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n };\n }\n @Output() expressionChange = new EventEmitter<SdFormGenericExpression>();\n\n //\n model?: string;\n @Input({ alias: 'model', required: true }) set _model(model: string | undefined) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n @Output() modelChange = new EventEmitter<string>();\n\n @Output() sdChange = new EventEmitter<{ model?: string; expression?: SdFormGenericExpression }>();\n\n constructor(\n private ref: ChangeDetectorRef,\n private expressionFeelPipe: ExpressionFeelPipe,\n private formGenericService: FormGenericService\n ) {}\n\n ngOnInit(): void {}\n\n edit = async () => {\n this.attributes = await this.#getAttributes(this.components);\n this.attribute = ArrayUtilities.toObject('value', this.attributes);\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n addCondition = (conditions: SdFormGenericExpression['conditions']) => {\n conditions.push({\n key: `${new Date().getTime().toString(36)}`,\n type: 'condition',\n field: undefined,\n operator: 'EQUAL',\n value: undefined,\n dayInfo: {},\n });\n this.ref.markForCheck();\n };\n\n addCombinator = (conditions: SdFormGenericExpression['conditions']) => {\n conditions.push({\n key: `${new Date().getTime().toString(36)}`,\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n });\n this.ref.markForCheck();\n };\n\n remove = (conditions: SdFormGenericExpression['conditions'], idx: number) => {\n conditions.splice(idx, 1);\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n if (this.expression) {\n this.model = this.expressionFeelPipe.transform(this.expression!);\n this.expressionChange.emit(this.expression);\n } else {\n this.model = '';\n }\n this.modelChange.emit(this.model);\n this.sdChange.emit({\n model: this.model,\n expression: this.expression,\n });\n this.modal?.close();\n this.ref.markForCheck();\n };\n\n // Từ components map thành các attributes\n #getAttributes = async (components: (SdFormGenericComponent | SdFormGenericGroup)[]): Promise<Attribute[]> => {\n const attributes: Attribute[] = [];\n if (components.length) {\n for (const component of components) {\n if (component.type === 'group') {\n attributes.push(...GetAttributes(component.components));\n } else if (component.type === 'textfield' || component.type === 'textarea') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n } else if (component.type === 'number') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'number',\n });\n } else if (component.type === 'checkbox') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'boolean',\n displayOnTrue: 'YES',\n displayOnFalse: 'NO',\n });\n } else if (component.type === 'radio' || component.type === 'select') {\n if (component.values?.length) {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'values',\n values: component.values.map(e => ({\n value: e.value,\n display: e.label,\n })),\n });\n } else {\n const values = await this.formGenericService.selection.items(component.valuesKey, {\n entity: {},\n component,\n });\n // Nếu là mảng thì push vào\n if (Array.isArray(values)) {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'values',\n values,\n });\n } else {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n }\n }\n }\n }\n }\n return attributes;\n };\n}\n","<a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{model || '--'}}</a>\n@if (expression) {\n<sd-modal [title]=\"'core.component.form-builder.set-expression' | translate\">\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button prefixIcon=\"calculate\" class=\"mr-4\" [title]=\"'core.component.form-builder.condition-group' | translate\" color=\"primary\" (click)=\"addCombinator(expression.conditions)\"></sd-button>\n <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.condition' | translate\" color=\"primary\" (click)=\"addCondition(expression.conditions)\" type=\"fill\"></sd-button>\n </div>\n <!-- Cấp 1 -->\n @for (conditionLv1 of expression.conditions; track conditionLv1.key; let idxLv1 = $index) {\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px;\">\n <div class=\"c-condition\">\n <!-- Dòng 1 chỉ hiện WHERE -->\n @if (idxLv1 === 0) {\n <div class=\"c-where\">WHERE</div>\n }\n <!-- Dòng 2 hiển thị combinator -->\n @if (idxLv1 === 1) {\n <div class=\"c-select\">\n <sd-select\n size=\"sm\"\n [(model)]=\"expression.combinator\"\n [items]=\"[\n { value: '&&', display: 'AND' },\n { value: '||', display: 'OR' }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError=\"\"></sd-select>\n </div>\n }\n </div>\n @if (conditionLv1.type === 'condition') {\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"width: 200px;\" [(model)]=\"conditionLv1.field\" [items]=\"attributes\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n @let fieldAttribute = attribute[conditionLv1.field!];\n <sd-select size=\"sm\" [form]=\"form\" style=\"width: 100px;\" [(model)]=\"conditionLv1.operator\" [items]=\"attributeOperators[fieldAttribute?.type || 'string']\" valueField=\"value\" displayField=\"display\" [disabled]=\"!fieldAttribute?.type\" required hideInlineError></sd-select>\n @if(!!fieldAttribute?.type && conditionLv1.operator && conditionLv1.operator !== 'NULL' && conditionLv1.operator !== 'NOT_NULL') {\n @if(fieldAttribute.type === 'string') {\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input>\n } @else if(fieldAttribute.type === 'number') {\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input-number>\n } @else if(fieldAttribute.type === 'boolean') {\n <sd-select size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" [items]=\"[{value: true, display: fieldAttribute.displayOnTrue}, {value: false, display: fieldAttribute.displayOnFalse}]\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-select>\n }@else if(fieldAttribute.type === 'values') {\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" [items]=\"fieldAttribute.values\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n }\n }\n <sd-button\n class=\"ml-auto\"\n prefixIcon=\"delete\"\n [tooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n \n } @else if (conditionLv1.type === 'combinator') {\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button\n class=\"mr-4\"\n prefixIcon=\"delete\"\n [tooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.condition' | translate\" size=\"sm\" color=\"primary\" (click)=\"addCondition(conditionLv1.conditions)\" type=\"fill\"></sd-button>\n </div>\n <!-- Cấp 2 -->\n @for (conditionLv2 of conditionLv1.conditions; track conditionLv2.key; let idxLv2 = $index) {\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px;\">\n <div class=\"c-condition\">\n <!-- Dòng 1 chỉ hiện WHERE -->\n @if (idxLv2 === 0) {\n <div class=\"c-where\">WHERE</div>\n }\n <!-- Dòng 2 hiển thị combinator -->\n @if (idxLv2 === 1) {\n <div class=\"c-select\">\n <sd-select\n size=\"sm\"\n [(model)]=\"conditionLv1.combinator\"\n [items]=\"[\n { value: '&&', display: 'AND' },\n { value: '||', display: 'OR' }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError=\"\"></sd-select>\n </div>\n }\n </div>\n @if (conditionLv2.type === 'condition') {\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"width: 200px;\" [(model)]=\"conditionLv2.field\" [items]=\"attributes\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n @let fieldAttribute = attribute[conditionLv2.field!];\n <sd-select size=\"sm\" [form]=\"form\" style=\"width: 100px;\" [(model)]=\"conditionLv2.operator\" [items]=\"attributeOperators[fieldAttribute?.type || 'string']\" valueField=\"value\" displayField=\"display\" [disabled]=\"!fieldAttribute?.type\" required hideInlineError></sd-select>\n @if(!!fieldAttribute?.type && conditionLv2.operator && conditionLv2.operator !== 'NULL' && conditionLv2.operator !== 'NOT_NULL') {\n @if(fieldAttribute.type === 'string') {\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" required hideInlineError></sd-input>\n } @else if(fieldAttribute.type === 'number') {\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" required hideInlineError></sd-input-number>\n } @else if(fieldAttribute.type === 'boolean') {\n <sd-select size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" [items]=\"[{value: true, display: fieldAttribute.displayOnTrue}, {value: false, display: fieldAttribute.displayOnFalse}]\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-select>\n }@else if(fieldAttribute.type === 'values') {\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" [items]=\"fieldAttribute.values\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n }\n }\n <sd-button\n class=\"ml-auto\"\n prefixIcon=\"delete\"\n [tooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"remove(conditionLv1.conditions, idxLv1)\"></sd-button>\n \n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n</sd-modal>\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ComponentViewedPipe","DateUtilities","i2.FormGenericService","i1","StringUtilities","i1.FormGenericService","SdInputNumber","startWith","debounceTime","SdInput","SdSelect","SdAutocomplete","i1.BuilderService","BuildQueries","i2.BuilderService","i1.ExpressionFeelPipe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sdcorejs-angular-components-form-generic.mjs","sources":["../../../projects/sdcorejs-angular/components/form-generic/src/configurations/form-generic.configuration.ts","../../../projects/sdcorejs-angular/components/form-generic/src/models/form-generic-component.model.ts","../../../projects/sdcorejs-angular/components/form-generic/src/models/form-generic-expression.model.ts","../../../projects/sdcorejs-angular/components/form-generic/src/services/form-generic.service.ts","../../../projects/sdcorejs-angular/components/form-generic/src/services/form-render.service.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/component-viewed.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/when-expression.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/expression-query.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/expression-view.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/expression-feel.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/html.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/pipes/hyperlink.pipe.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textfield/textfield.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textfield/textfield.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textarea/textarea.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/textarea/textarea.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-string/chip-string.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-string/chip-string.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/number/number.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/number/number.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/datetime/datetime.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/datetime/datetime.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/select/select.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/select/select.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/radio/radio.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/radio/radio.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/upload/upload.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/upload/upload.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/table/table.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/table/table.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/html/html.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/components/html/html.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/item.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/item/item.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/variable/variable.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/components/variable/variable.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/form-render.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-render/form-render.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-expression/form-expression-query-adapter.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-expression/attribute-expression.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-expression/attribute-expression.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input/attribute-input.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-input/attribute-input.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-switch/attribute-switch.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-switch/attribute-switch.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/services/builder.service.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/control/textfield-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textfield/control/textfield-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/control/textarea-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/textarea/control/textarea-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/control/chip-string-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/control/chip-string-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/attribute/number-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/attribute/number-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/control/number-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/number/control/number-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/control/datetime-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/control/datetime-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-select/attribute-select.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-select/attribute-select.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/attribute-selection.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-selection/attribute-selection.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/attribute/select-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/attribute/select-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/control/select-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/select/control/select-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/control/radio-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/control/radio-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/attribute/radio-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/radio/attribute/radio-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/control/checkbox-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/control/checkbox-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/html-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/attribute/html-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/control/html-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/html/control/html-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/attribute/upload-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/attribute/upload-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/control/upload-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/upload/control/upload-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/attribute/table-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/attribute/table-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/control/table-control.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/table/control/table-control.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/group/attribute/group-attribute.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/group/attribute/group-attribute.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/models/form-generic-validation.model.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/form-builder-layout.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/form-builder.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/form-builder/form-builder.component.html","../../../projects/sdcorejs-angular/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.ts","../../../projects/sdcorejs-angular/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.html","../../../projects/sdcorejs-angular/components/form-generic/sdcorejs-angular-components-form-generic.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IWorkflowConfigurationForm } from './form.configuration';\n\nexport interface ISdFormGenericConfiguration {\n form?: IWorkflowConfigurationForm;\n}\n\nexport const SD_FORM_GENERIC_CONFIGURATION = new InjectionToken<ISdFormGenericConfiguration>('sd.form-generic.configuration');\n","// Định nghĩa các Components của Form Render\nimport { SdTableColumn, SdTableOption } from '@sdcorejs/angular/components/table';\nimport { SdUploadFile } from '@sdcorejs/angular/components/upload-file';\nimport { Color, ValidationPatternType } from '@sdcorejs/utils/models';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdFormGenericSelectionStaticItem } from './form-generic-definition-selection.model';\nimport { SdFormGenericExpression } from './form-generic-expression.model';\nimport { SdFormGeneric } from './form-generic.model';\nimport { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';\n\nexport interface SdFormRenderConfiguration {\n onLoaded?: () => void;\n components: SdFormGeneric['components'];\n validations?: SdFormGeneric['validations'];\n variables?: SdFormGenericVariable[];\n beforeSubmit?: (entity: Record<string, any>) => Promise<Record<string, any>>;\n}\n\nexport interface SdFormGenericLayout {\n row?: string;\n columns: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n mobileColumns?:\n | '1'\n | '2'\n | '3'\n | '4'\n | '5'\n | '6'\n | '7'\n | '8'\n | '9'\n | '10'\n | '11'\n | '12'\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6\n | 7\n | 8\n | 9\n | 10\n | 11\n | 12;\n}\n\nexport const GenerateId = () => {\n return Utilities.randomId('id');\n};\n\nexport const GenerateKey = () => {\n return Utilities.randomId('key');\n};\n\nexport const SdFormatComponent = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n if (component) {\n if (!component.id) {\n component.id = GenerateId();\n }\n // Html và Group không có key và validate\n if (component.type !== 'group') {\n if (!component.key) {\n component.key = GenerateKey();\n }\n if (!component.validate) {\n component.validate = {};\n }\n }\n if (!component.layout) {\n component.layout = {\n columns: '12',\n };\n }\n\n if (!component.properties) {\n component.properties = {};\n }\n\n if (component.type === 'datetime') {\n // Nếu là datetime thì gán mặc định subtype là date\n component.subtype = component.subtype || 'date';\n } else if (component.type === 'table') {\n // Nếu là table thì lấy columns mẫu\n if (!component.columns?.length) {\n component.columns = [\n {\n key: 'key_1',\n label: 'Cột 1',\n type: 'string',\n },\n {\n key: 'key_2',\n label: 'Cột 2',\n type: 'string',\n },\n {\n key: 'key_3',\n label: 'Cột 3',\n type: 'string',\n },\n ];\n }\n } else if (component.type === 'radio') {\n // Nếu là radio thì lấy values mẫu\n if (!component.values?.length) {\n component.values = [\n {\n value: 'value_1',\n label: 'Label 1',\n },\n {\n value: 'value_2',\n label: 'Label 2',\n },\n ];\n }\n // Mặc định trải ngang các lựa chọn\n component.properties.direction = component.properties.direction || 'row';\n } else if (component.type === 'upload') {\n component.properties!.type = component.properties!.type || 'file';\n component.properties!.source = component.properties!.source || 'ALL';\n }\n }\n};\n\nexport interface SdFormGenericVariable {\n id: string;\n key: string;\n label: string;\n}\n\nexport type SdFormGenericComponent =\n | SdFormGenericTextfield\n | SdFormGenericChipString\n | SdFormGenericChipCalendar\n | SdFormGenericTextarea\n | SdFormGenericNumber\n | SdFormGenericCheckbox\n | SdFormGenericDatetime\n | SdFormGenericValues\n | SdFormGenericUpload\n | SdFormGenericTable\n | SdFormGenericHtml\n | SdFormGenericBreak;\n\nexport type SdFormGenericValues = SdFormGenericRadio | SdFormGenericSelect | SdFormGenericChecklist;\nexport interface SdFormGenericComponentBase {\n template?: string;\n id: string;\n key: string;\n label: string;\n helperText?: string;\n layout?: SdFormGenericLayout;\n validate?: {\n required?: boolean;\n };\n disabled?: boolean;\n properties?: {\n viewed?: boolean; // true nếu muốn hiển thị dạng view (view khác với disable)\n hyperlink?: string; // Hyperlink khi ở trạng thái viewed\n hidden?: boolean;\n hiddenWhenExpression?: SdFormGenericExpression;\n visibleWhenExpression?: SdFormGenericExpression;\n disabledWhenExpression?: SdFormGenericExpression;\n requiredWhenExpression?: SdFormGenericExpression;\n onChange?: {\n // Thực tế khi sử dụng sẽ có mong muốn trigger sự kiện change sẽ làm gì đó\n // Nếu muốn setValues thì cú pháp sẽ là \"key\": \"${otherKey}\" hoặc \"key\": true, \"key\": \"value\"\n setValues?: Record<string, any>;\n };\n } & Record<string, any>;\n}\nexport interface SdFormGenericTextfield extends SdFormGenericComponentBase {\n type: 'textfield';\n defaultValue?: string;\n validate?: {\n maxlength?: number;\n minlength?: number;\n pattern?: ValidationPatternType | string; // Regex\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\n } & SdFormGenericComponentBase['validate'];\n}\n\nexport interface SdFormGenericChipString extends SdFormGenericComponentBase {\n type: 'chip-string';\n defaultValue?: string[];\n validate?: {\n maxlength?: number;\n minlength?: number;\n pattern?: ValidationPatternType | string; // Regex\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\n maxOfItems?: number; // Số lượng item tối đa\n } & SdFormGenericComponentBase['validate'];\n}\nexport interface SdFormGenericChipCalendar extends SdFormGenericComponentBase {\n type: 'chip-calendar';\n defaultValue?: string[];\n validate?: {\n maxlength?: number;\n minlength?: number;\n pattern?: ValidationPatternType | string; // Regex\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\n maxOfItems?: number; // Số lượng item tối đa\n } & SdFormGenericComponentBase['validate'];\n}\nexport interface SdFormGenericTextarea extends SdFormGenericComponentBase {\n type: 'textarea';\n defaultValue?: string;\n validate?: {\n maxlength?: number;\n minlength?: number;\n } & SdFormGenericComponentBase['validate'];\n}\n\nexport interface SdFormGenericNumber extends SdFormGenericComponentBase {\n type: 'number';\n defaultValue?: number;\n validate?: {\n min?: number;\n max?: number;\n } & SdFormGenericComponentBase['validate'];\n}\n\nexport interface SdFormGenericCheckbox extends SdFormGenericComponentBase {\n type: 'checkbox';\n defaultValue?: boolean;\n}\n\nexport interface SdFormGenericDatetime extends SdFormGenericComponentBase {\n type: 'datetime';\n subtype: 'date' | 'datetime';\n defaultValue?: string;\n validate?: {\n min?: 'TODAY' | string;\n max?: 'TODAY' | string;\n } & SdFormGenericComponentBase['validate'];\n}\nexport interface SdFormGenericRadio extends SdFormGenericComponentBase {\n type: 'radio';\n values?: SdFormGenericSelectionStaticItem[];\n valuesKey?: string; // Mapping từ form-render-values\n defaultValue?: string;\n properties?: {\n direction?: 'row' | 'column';\n } & SdFormGenericComponentBase['properties'];\n}\nexport interface SdFormGenericSelect extends SdFormGenericComponentBase {\n type: 'select';\n values?: SdFormGenericSelectionStaticItem[];\n valuesKey?: string; // Mapping từ form-render-values\n defaultValue?: string | string[];\n properties?: {\n query?: Record<string, any>;\n multiple?: boolean;\n setVariables?: Record<string, string>; // Chỉ đối với dữ liệu từ API\n } & SdFormGenericComponentBase['properties'];\n}\nexport interface SdFormGenericChecklist extends SdFormGenericComponentBase {\n type: 'checklist';\n values?: SdFormGenericSelectionStaticItem[];\n valuesKey?: string; // Mapping từ form-render-values\n defaultValue?: string[];\n properties?: {\n query?: Record<string, any>;\n } & SdFormGenericComponentBase['properties'];\n}\nexport interface SdFormGenericGroup {\n id: string;\n type: 'group';\n label: string;\n layout: SdFormGenericLayout;\n components: SdFormGenericComponent[];\n properties: {\n icon: string;\n color: Color;\n hidden?: boolean;\n hiddenWhenExpression?: SdFormGenericExpression;\n visibleWhenExpression?: SdFormGenericExpression;\n };\n}\n\n// CUSTOM\nexport interface SdFormGenericUpload extends SdFormGenericComponentBase {\n type: 'upload';\n properties?: {\n type?: SdUnwrapSignal<SdUploadFile['type']>;\n maxSize?: SdUnwrapSignal<SdUploadFile['maxSize']>; // Dung lượng tối đa\n max?: SdUnwrapSignal<SdUploadFile['max']>; // Số lượng file tối đa\n extensions?: SdUnwrapSignal<SdUploadFile['extensions']>;\n args?: Record<string, any>; //.tham số\n // Dành cho mobile\n source?: 'ALL' | 'PHOTO_LIBRARY' | 'CAPTURE'; // Mặc định là ALL\n } & SdFormGenericComponentBase['properties'];\n}\n\nexport interface FormRenderComponentTableColumnValues {\n valuesKey: string;\n query?: Record<string, any>;\n}\n\nexport type SdFormGenericTableColumn<T = any> =\n | TableColumnString<T>\n | TableColumnNumber<T>\n | TableColumnBool<T>\n | TableColumnDate<T>\n | TableColumnDatetime<T>\n | TableColumnRadio<T>\n | TableColumnValues<T>\n | TableColumnImage<T>\n | TableColumnFile<T>;\n\nexport const TableColumnTypes = [\n {\n value: 'string',\n display: 'Chuỗi',\n },\n {\n value: 'number',\n display: 'Số',\n },\n {\n value: 'date',\n display: 'Ngày',\n },\n {\n value: 'datetime',\n display: 'Ngày giờ',\n },\n {\n value: 'values',\n display: 'Chọn giá trị',\n },\n {\n value: 'boolean',\n display: 'True/False',\n },\n {\n value: 'file',\n display: 'Tệp',\n },\n {\n value: 'image',\n display: 'Ảnh',\n },\n];\n\ninterface TableColumnBase<T = any> {\n key: Extract<keyof T, string>;\n label: string;\n width?: SdTableColumn['width'];\n validate?: {\n required?: boolean;\n };\n}\n\ninterface TableColumnString<T = any> extends TableColumnBase<T> {\n type: 'string';\n validate?: { minlength?: number; maxlength?: number; pattern?: string; patternErrorMessage?: string } & TableColumnBase['validate'];\n}\n\ninterface TableColumnNumber<T = any> extends TableColumnBase<T> {\n type: 'number';\n validate?: { min?: number; max?: number } & TableColumnBase['validate'];\n}\n\ninterface TableColumnDate<T = any> extends TableColumnBase<T> {\n type: 'date';\n validate?: { min?: 'TODAY' | string; max?: 'TODAY' | string } & TableColumnBase['validate'];\n}\n\ninterface TableColumnDatetime<T = any> extends TableColumnBase<T> {\n type: 'datetime';\n validate?: { min?: 'TODAY' | string; max?: 'TODAY' | string } & TableColumnBase['validate'];\n}\n\ninterface TableColumnBool<T = any> extends TableColumnBase<T> {\n type: 'boolean';\n displayOnTrue?: string;\n displayOnFalse?: string;\n}\n\ninterface TableColumnRadio<T = any> extends TableColumnBase<T> {\n type: 'radio';\n values?: SdFormGenericSelectionStaticItem[];\n}\n\ninterface TableColumnValues<T = any> extends TableColumnBase<T> {\n type: 'values';\n valuesKey: string;\n query?: Record<string, any>;\n values?: SdFormGenericSelectionStaticItem[];\n}\ninterface TableColumnImage<T = any> extends TableColumnBase<T> {\n type: 'image';\n args?: Record<string, any>;\n validate?: { max?: number; maxSize?: number } & TableColumnBase['validate'];\n}\n\ninterface TableColumnFile<T = any> extends TableColumnBase<T> {\n type: 'file';\n args?: Record<string, any>;\n validate?: { max?: number; maxSize?: number } & TableColumnBase['validate'];\n}\n\nexport interface SdFormGenericTable extends SdFormGenericComponentBase {\n type: 'table';\n columnsKey?: string;\n columns?: SdFormGenericTableColumn[];\n properties?: {\n type?: SdTableOption['type'];\n titleButtonCreate?: string; // Tiêu đề nút tạo mới\n } & SdFormGenericComponentBase['properties'];\n}\n\n/**\n * Break component — invisible runtime element ép xuống dòng mới. Dùng khi layout có\n * vùng cố định và việc ẩn/hiện trường khác không nên xáo trộn vị trí các trường còn lại.\n * Ở canvas (design) render thanh ngang mảnh; ở runtime render empty 12-col cell.\n *\n * Extend SdFormGenericComponentBase để tương thích với union narrowing trong các pipe/render\n * (key, validate, disabled, properties full) — runtime sẽ ignore mọi field ngoài id/type/layout.\n */\nexport interface SdFormGenericBreak extends SdFormGenericComponentBase {\n type: 'break';\n}\n\nexport interface SdFormGenericHtml {\n template?: string;\n id: string;\n key?: string;\n type: 'html';\n content: string;\n validate?: {\n required?: boolean;\n };\n layout?: SdFormGenericLayout;\n properties?: {\n viewed?: boolean;\n hyperlink?: string; // Hyperlink khi ở trạng thái viewed\n hidden?: boolean;\n hiddenWhenExpression?: SdFormGenericExpression;\n visibleWhenExpression?: SdFormGenericExpression;\n variables?: { key: string; label: string; value?: string }[];\n queries?: { key: string; label: string }[];\n query?: Record<string, any>;\n };\n}\n\nexport type FormBuilderComponentGroup = 'basic' | 'choice' | 'advanced' | 'layout';\n\nexport interface FormBuilderComponent {\n type: string;\n /** Material Icons Outlined icon name. Rendered via the builder icon alias. */\n symbol: string;\n /** Category group for the left palette grouping. */\n group: FormBuilderComponentGroup;\n name: string;\n}\n\nexport const FormBuilderComponents: FormBuilderComponent[] = [\n // ── Basic ───────────────────────────────────────────────────\n { type: 'textfield', symbol: 'text_fields', group: 'basic', name: 'Text field' },\n { type: 'textarea', symbol: 'notes', group: 'basic', name: 'Text area' },\n { type: 'number', symbol: '123', group: 'basic', name: 'Number' },\n { type: 'datetime', symbol: 'calendar_month', group: 'basic', name: 'Date' },\n // ── Choice ──────────────────────────────────────────────────\n { type: 'select', symbol: 'arrow_drop_down_circle', group: 'choice', name: 'Select' },\n { type: 'radio', symbol: 'radio_button_checked', group: 'choice', name: 'Radio' },\n { type: 'checkbox', symbol: 'check_box', group: 'choice', name: 'Check box' },\n // ── Advanced ────────────────────────────────────────────────\n { type: 'chip-string', symbol: 'label', group: 'advanced', name: 'Chip string' },\n { type: 'chip-calendar', symbol: 'event_note', group: 'advanced', name: 'Chip calendar' },\n { type: 'upload', symbol: 'upload_file', group: 'advanced', name: 'Upload' },\n { type: 'table', symbol: 'table_rows', group: 'advanced', name: 'Table' },\n // ── Layout ──────────────────────────────────────────────────\n // Break KHÔNG có trong palette — thêm qua per-row \"+ Break\" quick-add button.\n { type: 'group', symbol: 'category', group: 'layout', name: 'Group' },\n { type: 'html', symbol: 'code', group: 'layout', name: 'HTML' },\n];\n\n/** Lookup: component type → Material icon + label, used by attribute panel header. */\nexport const COMPONENT_ICONS: Record<string, { symbol: string; label: string }> = FormBuilderComponents.reduce(\n (acc, c) => ({ ...acc, [c.type]: { symbol: c.symbol, label: c.name } }),\n {} as Record<string, { symbol: string; label: string }>\n);\n\nexport const GetComponentAttributes = (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => {\n const attributes: { value: string; display: string }[] = [];\n if (components.length) {\n for (const component of components) {\n if (component.type === 'group') {\n attributes.push(...GetComponentAttributes(component.components));\n } else if (component.type !== 'html') {\n attributes.push({\n value: component.key,\n display: component.label,\n });\n }\n }\n }\n return attributes;\n};\n\nexport const GetVariableAttributes = (variables: SdFormGenericVariable[]) => {\n const attributes: { value: string; display: string }[] = [];\n if (variables.length) {\n for (const variable of variables) {\n attributes.push({\n value: variable.key,\n display: `[VARIABLE] ${variable.label}`,\n });\n }\n }\n return attributes;\n};\n","import { Operator as SdOperator } from '@sdcorejs/utils/models';\nimport { SdFormGenericComponent, SdFormGenericGroup } from './form-generic-component.model';\nimport { DateUtilities } from '@sdcorejs/angular/utilities';\n\nexport interface SdFormGenericExpression {\n key: string; // Random, phục vụ cho @for ở attribute-expression\n type: 'combinator';\n combinator: '&&' | '||';\n conditions: (SdFormGenericExpression | SdFormGenericExpressionCondition)[];\n}\n\nexport interface SdFormGenericExpressionCondition {\n key: string; // Random, phục vụ cho @for ở attribute-expression\n type: 'condition';\n field?: string;\n operator: SdOperator;\n value: any;\n dayInfo: DayInfo;\n}\n\nexport type Operator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';\nexport const Operators: {\n value: Operator;\n symbol?: string;\n display: string;\n}[] = [\n {\n value: 'EQUAL',\n symbol: '=',\n display: 'Bằng',\n },\n {\n value: 'NOT_EQUAL',\n symbol: '≠',\n display: 'Không bằng',\n },\n {\n value: 'GREATER_THAN',\n symbol: '>',\n display: 'Lớn hơn',\n },\n {\n value: 'LESS_THAN',\n symbol: '<',\n display: 'Nhỏ hơn',\n },\n {\n value: 'GREATER_OR_EQUAL',\n symbol: '≥',\n display: 'Lớn hơn, hoặc bằng',\n },\n {\n value: 'LESS_OR_EQUAL',\n symbol: '≤',\n display: 'Nhỏ hơn, hoặc bằng',\n },\n {\n value: 'NULL',\n symbol: 'motion_photos_off',\n display: 'Là rỗng',\n },\n {\n value: 'NOT_NULL',\n symbol: 'adjust',\n display: 'Không rỗng',\n },\n];\n\nexport type Attribute = AttributeBase | AttributeBoolean | AttributeDate | AttributeValues;\n\ninterface AttributeBase {\n value: string;\n display: string;\n type: 'string' | 'number';\n}\n\ninterface AttributeBoolean {\n value: string;\n display: string;\n type: 'boolean';\n displayOnTrue: string;\n displayOnFalse: string;\n}\n\ninterface AttributeDate {\n value: string;\n display: string;\n type: 'datetime';\n}\n\nexport interface DayInfo {\n type?: 'RELATED' | 'NOW' | 'DATETIME' | 'ATTRIBUTE';\n related?: 'LASTDAY' | 'NEXTDAY' | 'LASTWEEK' | 'NEXTWEEK' | 'LASTMONTH' | 'NEXTMONTH';\n relatedValue?: number;\n}\n\nexport const DayInfoTypes = [\n { value: 'RELATED', display: 'Ngày liên quan' },\n { value: 'NOW', display: 'Ngày hiện tại' },\n { value: 'DATETIME', display: 'Ngày cụ thể' },\n { value: 'ATTRIBUTE', display: 'Trường dữ liệu' },\n];\n\nexport const DayInfoPreviouses = [\n { value: 'LASTDAY', display: 'Ngày trước', format: (n: number) => `${n || 1}LastDay` },\n { value: 'NEXTDAY', display: 'Ngày tới', format: (n: number) => `${n || 1}NextDay` },\n // { value: 'LASTWEEK', display: 'Tuần trước', format: (n: number) => `${n || 1}LastWeek` },\n // { value: 'NEXTWEEK', display: 'Tuần tới', format: (n: number) => `${n || 1}NextWeek` },\n // { value: 'LASTMONTH', display: 'Tháng trước', format: (n: number) => `${n || 1}LastMonth` },\n // { value: 'NEXTMONTH', display: 'Tháng tới', format: (n: number) => `${n || 1}NextMonth` },\n];\n\nexport const GetDatetimeValue = (value: string) => {\n if (!value || typeof value !== 'string') {\n return undefined;\n }\n if (value === 'now') {\n return DateUtilities.toFormat(new Date(), 'yyyy/MM/dd HH:mm:ss');\n }\n if (value?.endsWith('LastDay')) {\n const relatedValue = +value.replace('LastDay', '');\n if (relatedValue) {\n return DateUtilities.toFormat(DateUtilities.addDays(new Date(), -relatedValue), 'yyyy/MM/dd HH:mm:ss');\n }\n }\n if (value?.endsWith('NextDay')) {\n const relatedValue = +value.replace('LastDay', '');\n if (relatedValue) {\n return DateUtilities.toFormat(DateUtilities.addDays(new Date(), relatedValue), 'yyyy/MM/dd HH:mm:ss');\n }\n }\n return undefined;\n};\n\ninterface AttributeValues {\n value: string;\n display: string;\n type: 'values';\n values: { value: string; display: string }[];\n}\n\nexport const AttributeOperators: Record<\n Attribute['type'],\n {\n value: Operator;\n symbol?: string;\n display: string;\n }[]\n> = {\n string: [\n {\n value: 'EQUAL',\n symbol: '=',\n display: 'Bằng',\n },\n {\n value: 'NOT_EQUAL',\n symbol: '≠',\n display: 'Không bằng',\n },\n {\n value: 'NULL',\n symbol: 'motion_photos_off',\n display: 'Là rỗng',\n },\n {\n value: 'NOT_NULL',\n symbol: 'adjust',\n display: 'Không rỗng',\n },\n ],\n number: Operators,\n datetime: Operators,\n boolean: [\n {\n value: 'EQUAL',\n symbol: '=',\n display: 'Bằng',\n },\n {\n value: 'NOT_EQUAL',\n symbol: '≠',\n display: 'Không bằng',\n },\n ],\n values: [\n {\n value: 'EQUAL',\n symbol: '=',\n display: 'Bằng',\n },\n {\n value: 'NOT_EQUAL',\n symbol: '≠',\n display: 'Không bằng',\n },\n {\n value: 'NULL',\n symbol: 'motion_photos_off',\n display: 'Là rỗng',\n },\n {\n value: 'NOT_NULL',\n symbol: 'adjust',\n display: 'Không rỗng',\n },\n ],\n};\n\n// Từ components map thành các attributes\nexport const GetAttributes = (components: (SdFormGenericComponent | SdFormGenericGroup)[]): Attribute[] => {\n const attributes: Attribute[] = [];\n if (components.length) {\n for (const component of components) {\n if (component.type === 'group') {\n attributes.push(...GetAttributes(component.components));\n } else if (component.type === 'textfield' || component.type === 'textarea') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n } else if (component.type === 'number') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'number',\n });\n } else if (component.type === 'datetime') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'datetime',\n });\n } else if (component.type === 'checkbox') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'boolean',\n displayOnTrue: 'YES',\n displayOnFalse: 'NO',\n });\n } else if (component.type === 'radio' || component.type === 'select') {\n if (component.values?.length) {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'values',\n values: component.values.map(e => ({\n value: e.value,\n display: e.label,\n })),\n });\n } else {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n }\n }\n }\n }\n return attributes;\n};\n\nexport const TemplateToCondition = (template: string | undefined | null, entity: Record<string, any>) => {\n if (!template) {\n return undefined;\n }\n const regex = /\\$\\{([A-Za-z0-9._-]*)\\}/g;\n const matches = template.match(regex) || [];\n for (const match of matches) {\n const key = match.slice(2, match.length - 1);\n if (key) {\n // Xử lý trong trường hợp key có định dạng a.b.c ...\n let val: any = entity;\n const strs = key.split('.');\n for (const str of strs) {\n val = val?.[str];\n }\n if (typeof val === 'string') {\n // Xử lý đối với trường hợp string là 'datetime' thì cần format thành string đồng nhất để compare chính xác\n if (DateUtilities.isDate(val)) {\n template = template.replace(match, `'${DateUtilities.toFormat(val, 'yyyy/MM/dd HH:mm:ss')}'`);\n } else {\n // Nếu là chuỗi thì thêm dấu nháy khi replace giá trị để so sánh, ví dụ 'a' === 'a'\n // Nếu là số hay boolean thì không cần, ví dụ 121 === 121\n template = template.replace(match, `'${val}'`);\n }\n } else {\n template = template.replace(match, val ?? `undefined`);\n }\n }\n }\n return template;\n};\n\nconst GetEntityValue = (entity: Record<string, any>, key: string | undefined) => {\n if (!key) {\n return undefined;\n }\n\n let value: any = entity;\n for (const part of key.split('.')) {\n value = value?.[part];\n }\n return value;\n};\n\nconst NormalizeExpressionValue = (value: any) => {\n if (typeof value === 'string' && DateUtilities.isDate(value)) {\n return DateUtilities.toFormat(value, 'yyyy/MM/dd HH:mm:ss');\n }\n return value;\n};\n\nconst EvaluateExpressionCondition = (condition: SdFormGenericExpressionCondition, entity: Record<string, any>) => {\n const actualValue = NormalizeExpressionValue(GetEntityValue(entity, condition.field));\n const { operator } = condition;\n if (!operator) {\n return undefined;\n }\n if (operator === 'NULL') {\n return !actualValue;\n }\n if (operator === 'NOT_NULL') {\n return !!actualValue;\n }\n\n const expectedValue = typeof condition.value === 'string' ? GetDatetimeValue(condition.value) || condition.value : condition.value;\n if (expectedValue === undefined || expectedValue === null || expectedValue === '') {\n return undefined;\n }\n\n const normalizedExpectedValue = NormalizeExpressionValue(expectedValue);\n if (operator === 'EQUAL') {\n return actualValue === normalizedExpectedValue;\n }\n if (operator === 'GREATER_THAN') {\n return actualValue > normalizedExpectedValue;\n }\n if (operator === 'LESS_THAN') {\n return actualValue < normalizedExpectedValue;\n }\n if (operator === 'NOT_EQUAL') {\n return actualValue !== normalizedExpectedValue;\n }\n if (operator === 'GREATER_OR_EQUAL') {\n return actualValue >= normalizedExpectedValue;\n }\n if (operator === 'LESS_OR_EQUAL') {\n return actualValue <= normalizedExpectedValue;\n }\n return undefined;\n};\n\nexport const EvaluateExpression = (\n condition: SdFormGenericExpression | SdFormGenericExpressionCondition,\n entity: Record<string, any>\n): boolean | undefined => {\n if (condition.type === 'combinator') {\n if (!condition.conditions?.length) {\n return undefined;\n }\n\n const results = condition.conditions.map(child => EvaluateExpression(child, entity));\n if (results.some(result => typeof result !== 'boolean')) {\n return undefined;\n }\n\n if (condition.combinator === '&&') {\n return results.every(result => result === true);\n }\n return results.some(result => result === true);\n }\n\n return EvaluateExpressionCondition(condition, entity);\n};\n\nexport const ExpressionToJavascriptExpression = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\n const queries: string[] = [];\n if (condition.type === 'combinator') {\n if (condition.conditions?.length) {\n for (const child of condition.conditions) {\n queries.push(`(${ExpressionToJavascriptExpression(child)})`);\n }\n }\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\n const query = queries.join(` ${condition.combinator} `);\n if (queries.length > 1) {\n return `(${query})`;\n } else {\n return query;\n }\n } else {\n return ConvertToJavascriptExpression(condition);\n }\n};\nconst ConvertToJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\n const { value } = condition;\n // Convert thành syntax ${field}\n const field = '${' + condition.field + '}';\n const { operator } = condition;\n if (!operator) {\n return undefined;\n }\n if (operator === 'NULL') {\n return `!${field}`;\n }\n if (operator === 'NOT_NULL') {\n return `!!${field}`;\n }\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n // Xử lý đối với trường hợp string là 'datetime' thì value sẽ có thể là 'now', '1LastDay' ....\n const datetimeValue = GetDatetimeValue(value);\n if (operator === 'EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} === '${datetimeValue || value}'`;\n }\n return `${field} === ${value}`;\n }\n if (operator === 'GREATER_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} > '${datetimeValue || value}'`;\n }\n return `${field} > ${value}`;\n }\n if (operator === 'LESS_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} < '${datetimeValue || value}'`;\n }\n return `${field} < ${value}`;\n }\n if (operator === 'NOT_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} !== '${datetimeValue || value}'`;\n }\n return `${field} !== ${value}`;\n }\n if (operator === 'GREATER_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} >= '${datetimeValue || value}'`;\n }\n return `${field} >= ${value}`;\n }\n if (operator === 'LESS_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} <= '${datetimeValue || value}'`;\n }\n return `${field} <= ${value}`;\n }\n return undefined;\n};\n","import { inject, Injectable } from '@angular/core';\nimport { SdSearch } from '@sdcorejs/angular/forms';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../configurations';\nimport { SdFormGenericArgs, SdFormGenericDefinitionHtml, SdFormGenericDefinitionSelection, SdFormGenericSelectionItem } from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormGenericService {\n #selections?: SdFormGenericDefinitionSelection[];\n #definitionHtmls?: SdFormGenericDefinitionHtml[];\n private readonly configuration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n get selections() {\n return this.configuration?.form?.selections || [];\n }\n\n get tables() {\n return this.configuration?.form?.tables || [];\n }\n\n getSelection = async (valuesKey: string | undefined | null) => {\n if (!valuesKey) {\n return undefined;\n }\n const selections = await this.selection.definitions();\n return selections.find(e => e.value === valuesKey);\n };\n\n selection = {\n definitions: async (): Promise<SdFormGenericDefinitionSelection[]> => {\n // Nếu chưa xử lý lấy trước đó thì thực hiện xử lý lấy data cho selections\n if (!this.#selections) {\n const selections = this.configuration?.form?.selections;\n if (!selections) {\n this.#selections = [];\n } else if (Array.isArray(selections)) {\n this.#selections = selections;\n } else {\n const results = selections();\n if (results instanceof Promise) {\n this.#selections = (await results) || [];\n } else {\n this.#selections = results || [];\n }\n }\n }\n return this.#selections || [];\n },\n getDefinition: async (valuesKey: string | undefined | null) => {\n if (!valuesKey) {\n return undefined;\n }\n const selections = await this.selection.definitions();\n return selections.find(e => e.value === valuesKey);\n },\n // Lấy dữ liệu items cho dropdown, radio, checklist\n // Dữ liệu có thể là 1 mảng hoặc hàm\n items: async (\n valuesKey: string | undefined | null,\n args: SdFormGenericArgs\n ): Promise<SdFormGenericSelectionItem[] | SdSearch<SdFormGenericSelectionItem>> => {\n try {\n const { component, column } = args;\n // Nếu có values thì xử lý trả về mảng tĩnh\n if (component && 'values' in component && Array.isArray(component.values) && component.values.length) {\n return component.values.map(e => ({\n value: e.value,\n display: e.label,\n data: e,\n }));\n }\n // Nếu component là table và có thông tin column\n if (component?.type === 'table' && column && 'values' in column && Array.isArray(column.values) && column.values.length) {\n return column.values.map(e => ({\n value: e.value,\n display: e.label,\n data: e,\n }));\n }\n // Ngoài ra nếu không có valuesKey thì trả về mảng rỗng\n if (!valuesKey) {\n return [];\n }\n // Tìm cấu hình dựa vào valuesKey\n const selection = await this.selection.getDefinition(valuesKey);\n if (!selection) {\n return [];\n }\n if ('values' in selection) {\n return await selection.values(args);\n } else if ('valuesKey' in selection && selection?.valuesKey && !!this.configuration?.form?.getValues) {\n return (await this.configuration?.form?.getValues?.(selection.valuesKey, selection.args)) || [];\n } else if ('lazyValues' in selection) {\n return searchArgs => {\n return selection.lazyValues(searchArgs, args);\n };\n } else if ('lazyValuesKey' in selection && selection?.lazyValuesKey && !!this.configuration?.form?.getLazyValues) {\n const getLazyValues = this.configuration?.form?.getLazyValues?.(selection.lazyValuesKey, selection.args);\n return searchArgs => {\n return getLazyValues(searchArgs, args);\n };\n }\n return [];\n } catch (err) {\n console.error(err);\n return [];\n }\n },\n variables: {\n detail: async (valuesKey: string, values: string | number | string[] | number[], args: SdFormGenericArgs) => {\n const selection = await this.selection.getDefinition(valuesKey);\n return selection?.variables?.detail?.(values, args);\n },\n },\n };\n\n html = {\n definitions: async (): Promise<SdFormGenericDefinitionHtml[]> => {\n // Nếu chưa xử lý lấy trước đó thì thực hiện xử lý lấy data cho htmls\n if (!this.#definitionHtmls) {\n const htmls = this.configuration?.form?.htmls;\n if (!htmls) {\n this.#definitionHtmls = [];\n } else if (Array.isArray(htmls)) {\n this.#definitionHtmls = htmls;\n } else {\n const results = htmls();\n if (results instanceof Promise) {\n this.#definitionHtmls = (await results) || [];\n } else {\n this.#definitionHtmls = results || [];\n }\n }\n }\n return this.#definitionHtmls || [];\n },\n getContent: async (template: string, query?: Record<string, any>): Promise<string> => {\n const definitions = await this.html.definitions();\n const html = definitions.find(e => e.value === template);\n if (html) {\n if (typeof html.content === 'string') {\n return html.content;\n }\n if (typeof html.content === 'function') {\n return await html.content(query).catch(err => {\n console.error(err);\n return '';\n });\n }\n return '';\n }\n return '';\n },\n };\n}\n","import { Injectable } from '@angular/core';\nimport { SdFormGeneric } from '../models/form-generic.model';\nimport { ComponentViewedPipe } from '../pipes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdFormRenderService {\n constructor(private readonly componentViewedPipe: ComponentViewedPipe) {}\n\n viewEntities = async (form: SdFormGeneric, entities: Record<string, any>[]): Promise<Record<string, any>[]> => {\n const reuslts: Record<string, any>[] = [];\n for (const entity of entities || []) {\n const result: Record<string, any> = {};\n for (const component of form?.components || []) {\n // Group và upload thì k cần lấy view\n if (\n component.type !== 'table' &&\n component.type !== 'group' &&\n component.type !== 'upload' &&\n component.type !== 'html' &&\n component.key\n ) {\n result[component.key] = await this.componentViewedPipe.transform(entity?.[component.key], entity, component);\n }\n }\n reuslts.push(result);\n }\n return reuslts;\n };\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport { DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { EMPTY_STR } from '@sdcorejs/utils/constants';\nimport { SdFormGenericComponent, SdFormGenericHtml } from '../models';\nimport { FormGenericService } from '../services';\nimport { SdFormatNumberPipe } from '@sdcorejs/angular/pipes';\n\n@Pipe({\n name: 'componentViewed',\n standalone: true,\n})\n@Injectable({\n providedIn: 'root',\n})\n// Pipe xử lý hiển thị detail cho component\nexport class ComponentViewedPipe implements PipeTransform {\n constructor(\n private readonly formatNumberPipe: SdFormatNumberPipe,\n private readonly formGenericService: FormGenericService\n ) {}\n transform = async (\n value: any,\n entity: Record<string, any>,\n component: Exclude<SdFormGenericComponent, SdFormGenericHtml>\n ): Promise<string> => {\n if (!component?.key) {\n return '';\n }\n const val = entity?.[component.key];\n if (val === undefined || val === null) {\n return EMPTY_STR;\n }\n if (component.type === 'textfield' || component.type === 'textarea') {\n return val || EMPTY_STR;\n }\n if (component.type === 'number') {\n return this.formatNumberPipe.transform(value)?.toString() ?? EMPTY_STR;\n }\n if (component.type === 'datetime') {\n if (component.subtype === 'datetime') {\n return DateUtilities.toFormat(val, 'dd/MM/yyyy HH:mm') || EMPTY_STR;\n } else {\n return DateUtilities.toFormat(val, 'dd/MM/yyyy') || EMPTY_STR;\n }\n }\n if (component.type === 'select' || component.type === 'radio' || component.type === 'checklist') {\n const values = (Array.isArray(val) ? val : [val]).filter(value => value !== undefined && value !== null && value !== '');\n if (!values.length) {\n return EMPTY_STR;\n }\n const selection = await this.formGenericService.selection.getDefinition(component?.valuesKey);\n // Nếu có cấu hình view tương ứng với selection thì sử dụng viewed\n if (selection?.viewed) {\n return (\n (await selection.viewed(values, {\n entity,\n component,\n })) || EMPTY_STR\n );\n }\n // Ngoài ra xử lý lấy thông tin items\n const items = await this.formGenericService.selection.items(component?.valuesKey, {\n entity,\n component,\n });\n if (!items) {\n return EMPTY_STR;\n }\n // Nếu items là Array thì kiểm tra value và hiển thị display\n if (Array.isArray(items)) {\n return (\n items\n .filter(e => values.includes(e.value))\n .map(e => e.display)\n .join(', ') || EMPTY_STR\n );\n }\n // items là Function (lazyValues) thì thực hiện gọi API\n return await items({\n type: 'VALUE',\n value: values,\n }).then(results => {\n return (\n results\n .filter(e => values.includes(e.value))\n .map(e => e.display)\n .join(', ') || EMPTY_STR\n );\n });\n }\n return '';\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { EvaluateExpression, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericHtml } from '../models';\n\n@Pipe({\n name: 'whenExpression',\n standalone: true,\n})\n// Xử lý thông tin required, disabled, hidden của component\nexport class WhenExpressionPipe implements PipeTransform {\n #hidden = (component: SdFormGenericComponent | SdFormGenericGroup, variables: Record<string, any>) => {\n if (component.properties?.hidden) {\n return true;\n }\n const hiddenWhenExpression = component.properties?.hiddenWhenExpression;\n if (hiddenWhenExpression) {\n const result = EvaluateExpression(hiddenWhenExpression, variables);\n if (typeof result === 'boolean') {\n return result;\n }\n return true;\n }\n const visibleWhenExpression = component.properties?.visibleWhenExpression;\n if (visibleWhenExpression) {\n const result = EvaluateExpression(visibleWhenExpression, variables);\n if (typeof result === 'boolean') {\n return !result;\n }\n return true;\n }\n return false;\n };\n #disabled = (component: Exclude<SdFormGenericComponent, SdFormGenericHtml>, variables: Record<string, any>) => {\n const disabledWhenExpression = component.properties?.disabledWhenExpression;\n if (disabledWhenExpression) {\n const result = EvaluateExpression(disabledWhenExpression, variables);\n if (typeof result === 'boolean') {\n return result;\n }\n return true;\n }\n return false;\n };\n #required = (component: Exclude<SdFormGenericComponent, SdFormGenericHtml>, variables: Record<string, any>) => {\n const requiredWhenExpression = component.properties?.requiredWhenExpression;\n if (requiredWhenExpression) {\n const result = EvaluateExpression(requiredWhenExpression, variables);\n if (typeof result === 'boolean') {\n return result;\n }\n return false;\n }\n return false;\n };\n transform(\n hashed: string | undefined,\n component: SdFormGenericComponent | SdFormGenericGroup,\n entity: Record<string, any>\n ): {\n hidden: boolean;\n disabled: boolean;\n required: boolean;\n } {\n // Group và html chỉ xử lý ẩn/hiện\n if (component.type === 'group' || component.type === 'html' || component.type === 'break') {\n // Break/html/group: chỉ tính hidden (validate/disabled không áp dụng).\n return {\n hidden: this.#hidden(component, entity),\n disabled: false,\n required: false,\n };\n }\n return {\n hidden: this.#hidden(component, entity),\n disabled: component?.disabled || this.#disabled(component, entity),\n required: component?.validate?.required || this.#required(component, entity),\n };\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport { SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\n\n// Từ Expression JSON build thành Expression String\n@Pipe({\n name: 'expressionQuery',\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ExpressionQueryPipe implements PipeTransform {\n #generateQuery = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\n const queries: string[] = [];\n if (condition.type === 'combinator') {\n if (condition.conditions?.length) {\n for (const child of condition.conditions) {\n queries.push(`(${this.#generateQuery(child)})`);\n }\n }\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\n const query = queries.join(` ${condition.combinator} `);\n if (queries.length > 1) {\n return `(${query})`;\n } else {\n return query;\n }\n } else {\n return this.#generateJavascriptExpression(condition);\n }\n };\n #generateJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\n const { value } = condition;\n // Convert thành syntax ${field}\n const field = '${' + condition.field + '}';\n const { operator } = condition;\n if (!operator) {\n return undefined;\n }\n if (operator === 'NULL') {\n return `!${field}`;\n }\n if (operator === 'NOT_NULL') {\n return `!!${field}`;\n }\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n if (operator === 'EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} === '${value}'`;\n }\n return `${field} === ${value}`;\n }\n if (operator === 'GREATER_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} > '${value}'`;\n }\n return `${field} > ${value}`;\n }\n if (operator === 'LESS_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} < '${value}'`;\n }\n return `${field} < ${value}`;\n }\n if (operator === 'NOT_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} !== '${value}'`;\n }\n return `${field} !== ${value}`;\n }\n if (operator === 'GREATER_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} >= '${value}'`;\n }\n return `${field} >= ${value}`;\n }\n if (operator === 'LESS_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} <= '${value}'`;\n }\n return `${field} <= ${value}`;\n }\n return undefined;\n };\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition | undefined): string | undefined {\n if (!condition) {\n return undefined;\n }\n return this.#generateQuery(condition);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Attribute, Operators, SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\n\n@Pipe({\n name: 'expressionView',\n})\nexport class ExpressionViewPipe implements PipeTransform {\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition, attributes: Attribute[]): string {\n if (condition.type === 'combinator') {\n return '';\n }\n const { field, operator, value } = condition;\n const containerStyle = `style=\"border: 1px solid #e6e6e6; border-radius: 4px; background-color: #e6e6e6; padding: 4px 8px;\"`;\n const results: string[] = [];\n // Wording field\n results.push(`<div ${containerStyle}>${attributes.find(e => e.value === field)?.display || field}</div>`);\n // Wording operator\n if (operator) {\n results.push(`<div>${Operators.find(e => e.value === operator)?.display || operator}</div>`);\n }\n // Wording value\n if (operator && value !== undefined) {\n results.push(`<div ${containerStyle}>${value}</div>`);\n }\n return `<div class=\"d-flex flex-row align-items-center\" style=\"gap:8px ;flex-wrap: wrap ;word-wrap: break-word\">${results.join(\n ''\n )}</div>`;\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport { SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\n\n// Từ Expression JSON build thành Expression String theo cú pháp của FEEL mà Camunda sử dụng\n@Pipe({\n name: 'expressionFeel',\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ExpressionFeelPipe implements PipeTransform {\n #generateQuery = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\n const queries: string[] = [];\n if (condition.type === 'combinator') {\n if (condition.conditions?.length) {\n for (const child of condition.conditions) {\n queries.push(`${this.#generateQuery(child)}`);\n }\n }\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\n const query = queries.join(` ${condition.combinator === '||' ? 'or' : 'and'} `);\n if (queries.length > 1) {\n return `(${query})`;\n } else {\n return query;\n }\n } else {\n return this.#generateJavascriptExpression(condition);\n }\n };\n #generateJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\n const { field, value } = condition;\n // Convert thành syntax ${field}\n const { operator } = condition;\n if (!operator) {\n return undefined;\n }\n if (operator === 'NULL') {\n return `${field} == null`;\n }\n if (operator === 'NOT_NULL') {\n return `${field} != null`;\n }\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n if (operator === 'EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} == '${value}'`;\n }\n return `${field} == ${value}`;\n }\n if (operator === 'GREATER_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} > '${value}'`;\n }\n return `${field} > ${value}`;\n }\n if (operator === 'LESS_THAN') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} < '${value}'`;\n }\n return `${field} < ${value}`;\n }\n if (operator === 'NOT_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} != '${value}'`;\n }\n return `${field} != ${value}`;\n }\n if (operator === 'GREATER_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} >= '${value}'`;\n }\n return `${field} >= ${value}`;\n }\n if (operator === 'LESS_OR_EQUAL') {\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\n if (typeof value === 'string') {\n return `${field} <= '${value}'`;\n }\n return `${field} <= ${value}`;\n }\n return undefined;\n };\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition): string | undefined {\n const result = this.#generateQuery(condition);\n if (result) {\n return '${' + result + '}';\n }\n return result;\n }\n}\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { StringUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { SdFormGenericHtml } from '../models';\n\n@Pipe({\n name: 'htmlPipe',\n standalone: true,\n})\n// Pipe xử lý hiển thị detail cho component\nexport class HtmlPipe implements PipeTransform {\n constructor(private readonly sanitizer: DomSanitizer) {}\n // Hash component để pipe nhận biết được content hay variables có thay đổi render lại\n transform = (hashed: string | undefined | null, content: string, component: SdFormGenericHtml) => {\n if (!content) {\n return '';\n }\n const variables: Record<string, any> = {};\n if (component.properties?.variables?.length) {\n component.properties.variables.forEach(variable => (variables[variable.key] = variable.value));\n }\n const renderedHtml = StringUtilities.templateToDisplay(content, variables);\n return this.sanitizer.sanitize(SecurityContext.HTML, renderedHtml) || '';\n };\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { StringUtilities } from '@sdcorejs/angular/utilities/extensions';\n\n@Pipe({\n name: 'hyperlink',\n standalone: true,\n})\n// Pipe xử lý hiển thị detail cho component\nexport class HyperlinkPipe implements PipeTransform {\n constructor() {}\n transform = (hyperlink: string | undefined | null, entity: Record<string, any>): string => {\n if (!hyperlink) {\n return '';\n }\n return StringUtilities.templateToDisplay(hyperlink, entity);\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdInput } from '@sdcorejs/angular/forms';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericTextfield } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\n\n@Component({\n selector: 'lib-textfield',\n templateUrl: './textfield.component.html',\n styleUrl: './textfield.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdInput,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n ],\n})\nexport class TextfieldComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n this.#applyDefaultValue(); // Áp dụng defaultValue khi entity thay đổi\n }\n }\n\n component?: SdFormGenericTextfield;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericTextfield) {\n this.component = val;\n this.#applyDefaultValue(); // Áp dụng defaultValue khi component thay đổi\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n this.#disabledChanges.next(this.disabled);\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n validator?: SdCustomValidator;\n @Input('validator') set _validator(validator: SdCustomValidator | undefined | null) {\n if (validator && this.validator !== validator) {\n this.validator = validator;\n }\n }\n\n #subscription = new Subscription();\n #disabledChanges = new Subject<boolean>();\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.#applyDefaultValue(); // Áp dụng defaultValue khi component khởi tạo\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n /**\n * Áp dụng defaultValue nếu:\n * - Không ở trạng thái viewed\n * - Không bị disabled\n * - entity[key] chưa có giá trị (null, undefined, hoặc empty string)\n * - component có defaultValue\n */\n #applyDefaultValue = () => {\n if (!this.component?.key || !this.entity) {\n return;\n }\n const isViewed = this.viewed || this.component.properties?.viewed;\n // Chỉ gán default value nếu undefined\n const isUndefined = this.entity[this.component.key] === undefined;\n const hasDefaultValue = this.component.defaultValue !== undefined && this.component.defaultValue !== null;\n // Chỉ gán defaultValue khi:\n // 1. Không ở trạng thái viewed\n // 2. Không bị disabled\n // 3. Giá trị hiện tại chưa được set (null, undefined hoặc empty string)\n // 4. Component có defaultValue\n if (!isViewed && hasDefaultValue && isUndefined) {\n this.entity[this.component.key] = this.component.defaultValue;\n this.ref.markForCheck();\n }\n };\n}\n","@if (component && entity) {\n <sd-input\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [helperText]=\"component.helperText\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [validator]=\"validator\"\n [maxlength]=\"component.validate?.maxlength\"\n [pattern]=\"component.validate?.pattern\"\n [patternErrorMessage]=\"component.validate?.patternErrorMessage\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed || component.properties?.viewed\"></sd-input>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\nimport { SdFormGenericTextarea } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\nimport { filter, Subject, Subscription } from 'rxjs';\n\n@Component({\n selector: 'lib-textarea',\n templateUrl: './textarea.component.html',\n styleUrl: './textarea.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdTextarea,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n ],\n})\nexport class TextareaComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n component?: SdFormGenericTextarea;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericTextarea) {\n this.component = val;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component && entity) {\n <sd-textarea\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [helperText]=\"component.helperText\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [maxlength]=\"component.validate?.maxlength\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed || component.properties?.viewed\"></sd-textarea>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdChip } from '@sdcorejs/angular/forms';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericChipString } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\n\n@Component({\n selector: 'lib-chip-string',\n templateUrl: './chip-string.component.html',\n styleUrl: './chip-string.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdChip,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n ],\n})\nexport class ChipStringComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n component?: SdFormGenericChipString;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericChipString) {\n this.component = val;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component && entity) {\n @if (viewed || component.properties?.viewed) {\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\n <div class=\"T14M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\n } @else {\n <sd-chip\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [disabled]=\"disabled\"></sd-chip>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdChipCalendar } from '@sdcorejs/angular/forms';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericChipCalendar } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\n\n@Component({\n selector: 'lib-chip-calendar',\n templateUrl: './chip-calendar.component.html',\n styleUrl: './chip-calendar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdChipCalendar,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n ],\n})\nexport class ChipCalendarComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n component?: SdFormGenericChipCalendar;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericChipCalendar) {\n this.component = val;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component && entity) {\n @if (viewed || component.properties?.viewed) {\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\n <div class=\"T14M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\n } @else {\n <sd-chip-calendar\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [disabled]=\"disabled\"></sd-chip-calendar>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdFormGenericNumber } from '../../../../../../models';\nimport { ComponentViewedPipe } from '../../../../../../pipes';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { filter, Subject, Subscription } from 'rxjs';\n\n@Component({\n selector: 'lib-number',\n templateUrl: './number.component.html',\n styleUrl: './number.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdInputNumber,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n ],\n})\nexport class NumberComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n component?: SdFormGenericNumber;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericNumber) {\n this.component = val;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component && entity) {\n @if (viewed || component.properties?.viewed) {\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\n } @else {\n <sd-input-number\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [helperText]=\"component.helperText\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [max]=\"component.validate?.max\"\n [min]=\"component.validate?.min\"\n [viewed]=\"viewed || component.properties?.viewed\"></sd-input-number>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { SdFormGenericDatetime } from '../../../../../../models';\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { Router } from '@angular/router';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Component({\n selector: 'lib-datetime',\n templateUrl: './datetime.component.html',\n styleUrl: './datetime.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdDate,\n SdDatetime,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n HyperlinkPipe,\n ],\n})\nexport class DatetimeComponent implements OnInit, OnDestroy {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n // Mặc định là date\n subtype?: SdFormGenericDatetime['subtype'] = 'date';\n component?: SdFormGenericDatetime;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericDatetime) {\n this.component = val;\n this.subtype = this.component?.subtype || 'date';\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n constructor(\n private router: Router,\n private ref: ChangeDetectorRef\n ) {}\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n onNavigate = (url: string) => {\n if (!url) {\n return;\n }\n if (url.startsWith('http')) {\n window.open(url);\n } else {\n const [path, queryString] = url.split('?');\n const queryParams = Utilities.parseQueryParams(queryString);\n this.router.navigate([path], { queryParams });\n }\n };\n}\n","@if (component && entity) {\n @if (subtype === 'date') {\n <sd-date\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [helperText]=\"component.helperText\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [min]=\"component.validate?.min\"\n [max]=\"component.validate?.max\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed || component.properties?.viewed\"></sd-date>\n } @else {\n <sd-datetime\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [helperText]=\"component.helperText\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [min]=\"component.validate?.min\"\n [max]=\"component.validate?.max\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed || component.properties?.viewed\"></sd-datetime>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdAutocomplete, SdSearch, SdSelect } from '@sdcorejs/angular/forms';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { Utilities, StringUtilities } from '@sdcorejs/utils/fns';\n// import { sha1 } from 'object-hash';\nimport { debounceTime, filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericSelect, SdFormGenericSelectionItem } from '../../../../../../models';\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\nimport { FormGenericService } from '../../../../../../services';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'lib-select',\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdSelect,\n SdAutocomplete,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n HyperlinkPipe,\n ],\n})\nexport class SelectComponent implements AfterViewInit, OnDestroy, OnInit {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n form = new FormGroup({});\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\n if (this.form !== form) {\n this.form = form;\n this.#inputChanges.next();\n }\n }\n entity: Record<string, any> = {};\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n this.#inputChanges.next();\n }\n }\n\n component!: SdFormGenericSelect;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericSelect) {\n this.component = val;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n validator?: SdCustomValidator;\n @Input('validator') set _validator(validator: SdCustomValidator | undefined) {\n if (validator && this.validator !== validator) {\n this.validator = validator;\n }\n }\n\n items: SdFormGenericSelectionItem[] | SdSearch = [];\n\n #subscription = new Subscription();\n #inputChanges = new Subject<void>();\n constructor(\n private router: Router,\n private ref: ChangeDetectorRef,\n private readonly formRenderService: FormGenericService\n ) {}\n\n #hashedQuery?: string;\n hashedValues?: string;\n #generateQuery = (query: string | Record<string, any> | undefined, data: Record<string, any>): Record<string, any> => {\n let result: Record<string, any> = {};\n // Nếu query được cấu hình từ Form Builder của Camunda thì JSON nó sẽ là string, cần thực hiện parse\n if (typeof query === 'string') {\n try {\n result = JSON.parse(query);\n } catch (err) {\n console.error(err);\n return result;\n }\n } else if (Array.isArray(query)) {\n return result;\n } else {\n result = { ...query };\n }\n // Xử lý query,\n // Ví dụ: {\"a\": \"1\", \"b\": \"true\", \"c\": \"${key}\"} => {\"a\": \"1\", \"b\": true, \"c\": \"Dữ liệu tương ứng với key trong data\"}\n for (const key of Object.keys({ ...result })) {\n // Xử ly\n result[key] = StringUtilities.templateToDisplay(result[key], data);\n if (result[key] === 'true') {\n result[key] = true;\n }\n if (result[key] === 'false') {\n result[key] = false;\n }\n if (result[key] === '') {\n delete result[key];\n }\n }\n return result;\n };\n\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n\n ngAfterViewInit() {\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\n const hashedValues = Utilities.hash(values);\n if (this.hashedValues !== hashedValues) {\n this.hashedValues = hashedValues;\n this.#inputChanges.next();\n }\n })\n );\n this.#subscription.add(\n this.#inputChanges.pipe(startWith('')).subscribe(async () => {\n // Trạng thái viewed thì không cần check\n if (!this.viewed && this.component && !this.component?.properties?.viewed) {\n const values = { ...this.entity, ...this.form.value };\n const query = this.#generateQuery(this.component?.properties?.query, values);\n const hashedQuery = Utilities.hash(query);\n // Nếu query có thay đổi thì thực hiện gán lại items\n if (hashedQuery !== this.#hashedQuery) {\n this.#hashedQuery = hashedQuery;\n this.items = await this.formRenderService.selection.items(this.component?.valuesKey, {\n entity: values,\n component: this.component,\n query,\n });\n this.ref.markForCheck();\n }\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChanges = async () => {\n const setVariables = this.component.properties?.setVariables;\n // Nếu có cấu hình gán giá trị khi trường dữ liệu thay đổi thì thực hiện gán giá trị\n if (this.component.valuesKey && setVariables) {\n // Lấy thông tin detail\n const values = { ...this.entity, ...this.form.value };\n const query = this.#generateQuery(this.component?.properties?.query, values);\n const detail = await this.formRenderService.selection.variables.detail(this.component.valuesKey, this.entity[this.component.key], {\n entity: this.entity,\n component: this.component,\n query,\n });\n // Nếu có detail thì thực hiện setVariables\n if (detail) {\n // Đi qua từng key của component sẽ gán giá trị\n for (const key of Object.keys(setVariables)) {\n try {\n const value = StringUtilities.parseExpression(setVariables[key], detail);\n // Thực hiện gán giá trị\n this.entity[key] = value;\n // Thông báo setVariables để component (nếu đang hiển thị) biết và thực hiện re-render hay markForCheck()\n this.setVariables.next({ key, value });\n } catch (err) {\n console.error(err);\n }\n }\n }\n }\n };\n\n onNavigate = (url: string) => {\n if (!url) {\n return;\n }\n if (url.startsWith('http')) {\n window.open(url);\n } else {\n const [path, queryString] = url.split('?');\n const queryParams = Utilities.parseQueryParams(queryString);\n this.router.navigate([path], { queryParams });\n }\n };\n}\n","@if (entity && component) {\n <sd-select\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key]\"\n [required]=\"required\"\n [validator]=\"validator\"\n [disabled]=\"disabled\"\n [items]=\"items\"\n valueField=\"value\"\n displayField=\"display\"\n disabledField=\"disabled\"\n (sdChange)=\"onChanges()\"\n [multiple]=\"component.properties?.multiple\"\n [viewed]=\"viewed || component.properties?.viewed\"\n [hyperlink]=\"component.properties?.hyperlink | hyperlink: entity\"></sd-select>\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdRadio } from '@sdcorejs/angular/forms';\nimport { filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericRadio, SdFormGenericSelectionItem } from '../../../../../../models';\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\nimport { FormGenericService } from '../../../../../../services';\nimport { Router } from '@angular/router';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Component({\n selector: 'lib-radio',\n templateUrl: './radio.component.html',\n styleUrl: './radio.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdRadio,\n // Pipe cho phần viewed\n ComponentViewedPipe,\n HyperlinkPipe,\n ],\n})\nexport class RadioComponent implements AfterViewInit, OnDestroy, OnInit {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n form = new FormGroup({});\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\n if (this.form !== form) {\n this.form = form;\n this.#changes.next();\n }\n }\n value: any;\n entity: Record<string, any> = {};\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n this.#changes.next();\n }\n }\n\n component!: SdFormGenericRadio;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericRadio) {\n if (this.component !== val) {\n this.component = val;\n this.#changes.next();\n }\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n const viewed = val === '' || !!val;\n if (this.viewed !== viewed) {\n this.viewed = viewed;\n this.#changes.next();\n }\n }\n\n items: SdFormGenericSelectionItem[] = [];\n\n #subscription = new Subscription();\n #changes = new Subject<void>();\n constructor(\n private router: Router,\n private ref: ChangeDetectorRef,\n private readonly formGenericService: FormGenericService\n ) {}\n\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(startWith('')).subscribe(async () => {\n // Trạng thái viewed thì không cần check\n if (!this.viewed && this.component && !this.component?.properties?.viewed) {\n const values = { ...this.entity, ...this.form.value };\n const items = await this.formGenericService.selection.items(this.component.valuesKey, {\n entity: values,\n component: this.component,\n });\n // Với radio thì selection buộc phải là values, không phải là lazyValues\n if (Array.isArray(items)) {\n this.items = items;\n } else {\n this.items = [];\n }\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onNavigate = (url: string) => {\n if (!url) {\n return;\n }\n if (url.startsWith('http')) {\n window.open(url);\n } else {\n const [path, queryString] = url.split('?');\n const queryParams = Utilities.parseQueryParams(queryString);\n this.router.navigate([path], { queryParams });\n }\n };\n}\n","@if (entity && component) {\n <sd-radio\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [name]=\"component.key\"\n [autoId]=\"component.key\"\n [(model)]=\"entity[component.key!]\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [items]=\"items\"\n valueField=\"value\"\n displayField=\"display\"\n [display]=\"component.properties?.direction\"\n [viewed]=\"viewed || component.properties?.viewed\"\n [hyperlink]=\"component.properties?.hyperlink | hyperlink: entity\"></sd-radio>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, ViewChild, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdUploadFile } from '@sdcorejs/angular/components/upload-file';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericUpload } from '../../../../../../models';\n\n@Component({\n selector: 'lib-upload',\n templateUrl: './upload.component.html',\n styleUrl: './upload.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, SdUploadFile],\n})\nexport class UploadComponent implements OnDestroy, OnInit {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @ViewChild(SdUploadFile) sdUploadFile?: SdUploadFile;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n this.#changes.next();\n }\n }\n\n component?: SdFormGenericUpload;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericUpload) {\n this.component = val;\n this.#changes.next();\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined | null) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n validator?: SdCustomValidator;\n @Input('validator') set _validator(validator: SdCustomValidator | undefined | null) {\n if (validator && this.validator !== validator) {\n this.validator = validator;\n }\n }\n\n #changes = new Subject<void>();\n #subscription = new Subscription();\n constructor(private readonly ref: ChangeDetectorRef) {}\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n }\n\n upload = async () => {\n return await this.sdUploadFile?.upload();\n };\n}\n","@if (component && entity) {\n @if (viewed || component.properties?.viewed) {\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\n <sd-upload-file\n [type]=\"component.properties?.type\"\n [form]=\"form\"\n [model]=\"entity[component.key!]\"\n align=\"left\"\n [args]=\"component.properties?.args\"\n disabled\n previewWidth=\"50px\"\n previewHeight=\"50px\"></sd-upload-file>\n } @else {\n <sd-upload-file\n [type]=\"component.properties?.type\"\n [form]=\"form\"\n [label]=\"component.label || component.key\"\n [(model)]=\"entity[component.key!]\"\n [max]=\"component.properties?.max\"\n [maxSize]=\"component.properties?.maxSize\"\n [extensions]=\"component.properties?.extensions\"\n [args]=\"component.properties?.args\"\n align=\"left\"\n [required]=\"component.validate?.required || required\"\n [disabled]=\"disabled\"\n previewWidth=\"50px\"\n previewHeight=\"50px\"></sd-upload-file>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewChild,\n ViewChildren,\n OnInit,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdSideDrawer } from '@sdcorejs/angular/components/side-drawer';\nimport { SdTableCellDefDirective, SdTable, SdTableColumn, SdTableOption } from '@sdcorejs/angular/components/table';\nimport { SdUploadFile } from '@sdcorejs/angular/components/upload-file';\nimport { SdAutocomplete, SdInput, SdInputNumber, SdRadio, SdSearch } from '@sdcorejs/angular/forms';\nimport { filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericTableColumn, SdFormGenericSelectionItem, SdFormGenericTable } from '../../../../../../models';\nimport { FormGenericService } from '../../../../../../services';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'lib-table',\n templateUrl: './table.component.html',\n styleUrl: './table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n SdInput,\n SdInputNumber,\n SdAutocomplete,\n SdUploadFile,\n SdTable,\n SdTableCellDefDirective,\n SdSideDrawer,\n SdButton,\n SdUploadFile,\n SdRadio,\n SdDate,\n SdDatetime,\n // Pipe cho phần viewed\n TranslatePipe,\n ],\n})\nexport class TableComponent implements AfterViewInit, OnDestroy, OnInit {\n @ViewChildren(SdUploadFile) uploadFiles?: QueryList<SdUploadFile>;\n @ViewChild(SdTable) table?: SdTable;\n @ViewChild(SdSideDrawer) sideDrawer?: SdSideDrawer;\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n component?: SdFormGenericTable;\n col = 'col-6 px-8';\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericTable) {\n this.component = val;\n this.col = `col-${this.component?.layout?.columns || '6'} px-8`;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '') {\n this.required = val === '' || val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n this.#tableChanges.next();\n }\n\n model: any[] = [];\n @Input('model') set _model(val: any[] | undefined | null) {\n val = val || [];\n if (this.model !== val) {\n this.model = val;\n this.#modelChanges.next(val);\n }\n }\n @Output() modelChange = new EventEmitter<any[]>();\n\n #tableChanges = new Subject<void>();\n #modelChanges = new Subject<string[]>();\n #subscription = new Subscription();\n tableOption?: SdTableOption;\n row: any = {};\n columnValues: Record<string, SdFormGenericSelectionItem[] | SdSearch> = {};\n formRenderColumn: Record<string, SdFormGenericTableColumn> = {};\n // Lấy những fileColumns để định nghĩa cellDef tương ứng\n fileKeys: string[] = [];\n imageKeys: string[] = [];\n\n #selectedIndex = -1;\n constructor(\n private ref: ChangeDetectorRef,\n private readonly formGenericService: FormGenericService\n ) {}\n\n ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.model = variable.value;\n this.#modelChanges.next(this.model);\n this.ref.markForCheck();\n })\n );\n }\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#tableChanges.pipe(startWith('')).subscribe(async () => {\n await this.#initTable();\n this.ref.markForCheck();\n })\n );\n // Khi giá trị thay đổi thì reload lại\n this.#subscription.add(\n this.#modelChanges.pipe(startWith(this.model)).subscribe(async () => {\n await this.#reload();\n this.ref.markForCheck();\n })\n );\n }\n\n #initTable = async () => {\n // Xử lý columns\n const columns: SdTableColumn[] = [];\n for (const column of this.component?.columns || []) {\n // 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\n this.formRenderColumn[column.key] = column;\n const { type, key, label, width } = column;\n if (type === 'string') {\n columns.push({\n type: 'string',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'number') {\n columns.push({\n type: 'number',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'boolean') {\n columns.push({\n type: 'boolean',\n field: key,\n title: label,\n width,\n option: {\n displayOnTrue: column.displayOnTrue,\n displayOnFalse: column.displayOnFalse,\n },\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'date') {\n columns.push({\n type: 'date',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'datetime') {\n columns.push({\n type: 'datetime',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'radio') {\n const { values } = column;\n columns.push({\n type: 'values',\n field: key,\n title: label,\n width: width,\n filter: {\n disabled: true, // Không cần filter\n },\n option: {\n items: values || [],\n valueField: 'value',\n displayField: 'display',\n },\n });\n } else if (type === 'values') {\n const { valuesKey } = column;\n this.columnValues[key] = await this.formGenericService.selection.items(valuesKey, {\n component: this.component,\n column,\n entity: this.form.value,\n });\n if (this.columnValues[key]) {\n if (Array.isArray(this.columnValues[key])) {\n const items = this.columnValues[key];\n columns.push({\n type: 'values',\n field: key,\n title: label,\n width: width,\n filter: {\n disabled: true, // Không cần filter\n },\n option: {\n items: this.columnValues[key],\n valueField: 'value',\n displayField: 'display',\n },\n transform: value => {\n return items.find(t => t.value === value)?.display || '--';\n },\n });\n } else {\n columns.push({\n type: 'lazy-values',\n field: key,\n title: label,\n width: width,\n filter: {\n disabled: true, // Không cần filter\n },\n option: {\n items: this.columnValues[key],\n valueField: 'value',\n displayField: 'display',\n },\n });\n }\n }\n } else if (type === 'image') {\n // Ảnh hay file thì đều là string, nhưng sẽ dùng cellDef để can thiệp hiển thị\n this.imageKeys.push(key); // Ghi nhận lại cột nào là image để can thiệp cellDef\n columns.push({\n type: 'string',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n } else if (type === 'file') {\n // Ảnh hay file thì đều là string, nhưng sẽ dùng cellDef để can thiệp hiển thị\n this.fileKeys.push(key); // Ghi nhận lại cột nào là file để can thiệp cellDef\n columns.push({\n type: 'string',\n field: key,\n title: label,\n width,\n filter: {\n disabled: true, // Không cần filter\n },\n });\n }\n }\n // await this.#onLoaded();\n this.tableOption = {\n type: 'local',\n key: this.component?.key,\n reload: { visible: false },\n config: { visible: false },\n paginate: {\n hidden: true,\n pageSize: 100,\n },\n style: {\n maxHeight: '400px',\n },\n filter: {\n disabled: true,\n },\n items: () => {\n return this.model || [];\n },\n commands: [\n {\n icon: 'edit',\n click: rowData => {\n this.onDetail(rowData);\n },\n hidden: !!this.viewed || !!this.component?.properties?.viewed,\n },\n {\n icon: 'delete',\n click: rowData => {\n const idx = this.model?.indexOf(rowData);\n this.model?.splice(idx, 1);\n this.table?.reload().then(() => this.ref.markForCheck());\n },\n hidden: !!this.viewed || !!this.component?.properties?.viewed,\n },\n ],\n columns,\n };\n };\n\n #reload = () => {\n return this.table?.reload?.();\n };\n\n // #onLoaded = async () => {\n // for (const item of this.model || []) {\n // for (const column of this.fileColumns) {\n // const values = item?.[column.key];\n // if (Array.isArray(values) && values.length) {\n // const res = await this.documentService.downloadUrls(values);\n // item[column.key] = res.map((e) => e.pre_signed_url);\n // }\n // }\n // }\n // };\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onDetail = (row?: any) => {\n if (row) {\n this.#selectedIndex = this.model.indexOf(row);\n this.row = row;\n } else {\n this.#selectedIndex = -1;\n this.row = {};\n }\n this.form.markAsUntouched();\n this.form.markAsPristine();\n this.sideDrawer?.open();\n };\n\n onCancel = () => {\n this.sideDrawer?.close();\n };\n\n onAccept = (addable?: boolean) => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n // Nếu là cập nhật thì cập nhật vào trường tương ứng\n if (this.#selectedIndex >= 0) {\n this.model[this.#selectedIndex] = this.row;\n } else {\n this.model = [...(this.model || []), this.row];\n }\n\n this.modelChange.emit(this.model);\n this.table?.reload();\n this.ref.markForCheck();\n if (!addable) {\n // Nếu không thêm dòng nữa thì đóng luôn\n this.sideDrawer?.close();\n } else {\n // Thêm dòng nữa nhanh\n this.onDetail();\n }\n };\n\n onFileUploadChange(item: any, key: string, newValue: any) {\n item[key] = newValue;\n this.modelChange.emit(this.model);\n }\n\n getArgs(key: string): Record<string, any> | undefined {\n const col = this.formRenderColumn[key];\n if (col?.type === 'file' || col?.type === 'image') {\n return col.args;\n }\n return undefined;\n }\n\n upload = async () => {\n if (this.uploadFiles?.length) {\n // Thực hiện upload tất cả các file đã chọn\n await Promise.all(this.uploadFiles.map(uploadFile => uploadFile.upload()));\n }\n };\n}\n","@if(component && tableOption) {\n <div style=\"width: 100%\">\n <sd-table [option]=\"tableOption\">\n @for(key of imageKeys; track key) {\n <ng-template [sdTableCellDef]=\"key\" let-item=\"item\">\n <sd-upload-file\n type=\"image\"\n [model]=\"item[key]\"\n [args]=\"getArgs(key)\"\n (modelChange)=\"onFileUploadChange(item, key, $event)\"\n align=\"left\"\n disabled\n previewWidth=\"50px\"\n previewHeight=\"50px\"></sd-upload-file>\n </ng-template>\n }\n @for(key of fileKeys; track key) {\n <ng-template [sdTableCellDef]=\"key\" let-item=\"item\">\n <sd-upload-file\n [model]=\"item[key]\"\n [args]=\"getArgs(key)\"\n (modelChange)=\"onFileUploadChange(item, key, $event)\"\n align=\"left\"\n disabled\n previewWidth=\"50px\"\n previewHeight=\"50px\"></sd-upload-file>\n </ng-template>\n }\n </sd-table>\n @if(!viewed && !component.properties?.viewed) {\n <sd-button\n prefixIcon=\"add\"\n color=\"primary\"\n (click)=\"onDetail()\"\n [title]=\"component.properties?.titleButtonCreate || ('core.component.form-builder.add-new' | translate)\"></sd-button>\n }\n @if(!viewed && !component.properties?.viewed) {\n <sd-side-drawer [title]=\"'core.component.form-builder.detail' | translate\" width=\"500px\">\n <div sdTitle>\n <span>{{ 'core.component.form-builder.create-update' | translate }}</span>\n </div>\n <div sdBody class=\"c-table-create-update\">\n @if(!!component.columns?.length) {\n <div class=\"row mx-0\">\n @for(column of component.columns;track column.key) {\n @let validate = formRenderColumn[column.key].validate;\n <div class=\"col-12 px-0 mt-16\">\n @if(column.type === 'string') {\n <sd-input\n [form]=\"form\"\n [label]=\"column.label\"\n [(model)]=\"row[column.key]\"\n [required]=\"validate?.required\"\n [pattern]=\"column.validate?.pattern\"\n [patternErrorMessage]=\"column.validate?.patternErrorMessage\"></sd-input>\n }@else if(column.type === 'number') {\n <sd-input-number\n [form]=\"form\"\n [label]=\"column.label\"\n [(model)]=\"row[column.key]\"\n [required]=\"validate?.required\"\n [min]=\"column.validate?.min\"></sd-input-number>\n }@else if(column.type === 'radio') {\n <sd-radio\n [form]=\"form\"\n [label]=\"column.label\"\n [name]=\"column.key\"\n [items]=\"column.values\"\n valueField=\"value\"\n displayField=\"display\"\n [required]=\"validate?.required\"></sd-radio>\n }@else if(column.type === 'values') {\n <sd-autocomplete\n [form]=\"form\"\n [label]=\"column.label\"\n [(model)]=\"row[column.key]\"\n [items]=\"columnValues[column.key]\"\n valueField=\"value\"\n displayField=\"display\"\n [required]=\"validate?.required\"></sd-autocomplete>\n }@else if(column.type === 'date') {\n <sd-date\n [form]=\"form\"\n [label]=\"column.label\"\n [(model)]=\"row[column.key]\"\n [required]=\"validate?.required\"></sd-date>\n }@else if(column.type === 'datetime') {\n <sd-datetime\n [form]=\"form\"\n [label]=\"column.label\"\n [(model)]=\"row[column.key]\"\n [required]=\"validate?.required\"></sd-datetime>\n }@else if(column.type === 'image') {\n <sd-upload-file\n [label]=\"column.label\"\n type=\"image\"\n [(model)]=\"row[column.key]\"\n [args]=\"column.args\"\n previewWidth=\"50px\"\n previewHeight=\"50px\"\n align=\"left\"></sd-upload-file>\n }@else if (column.type === 'file') {\n <sd-upload-file\n [label]=\"column.label\"\n type=\"file\"\n [(model)]=\"row[column.key]\"\n [args]=\"column.args\"\n previewWidth=\"50px\"\n previewHeight=\"50px\"\n align=\"left\"></sd-upload-file>\n }\n </div>\n }\n </div>\n }\n \n </div>\n <div sdFooter class=\"text-right pr-16\">\n <sd-button [title]=\"'core.component.form-builder.save' | translate\" prefixIcon=\"save\" color=\"primary\" type=\"fill\" (click)=\"onAccept()\"></sd-button>\n </div>\n </sd-side-drawer>\n }\n </div>\n}\n\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Utilities, StringUtilities } from '@sdcorejs/utils/fns';\n// import { sha1 } from 'object-hash';\nimport { debounceTime, filter, startWith, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericHtml } from '../../../../../../models';\nimport { HtmlPipe } from '../../../../../../pipes';\nimport { FormGenericService } from '../../../../../../services';\n\n@Component({\n selector: 'lib-html',\n templateUrl: './html.component.html',\n styleUrl: './html.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [HtmlPipe],\n})\nexport class HtmlComponent implements AfterViewInit, OnDestroy, OnInit {\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n\n form = new FormGroup({});\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\n if (this.form !== form) {\n this.form = form;\n this.#inputChanges.next();\n }\n }\n\n entity: Record<string, any> = {};\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n this.#inputChanges.next();\n }\n }\n\n // Khi 1 giá trị trong entity thay đổi thì hashedValues sẽ thay đổi\n // Mong muốn khi hashedValues thay đổi thì trigger changes để trigger lại hàm lấy thông tin items\n @Input('hashedValues') set _hashedValues(val: string | undefined) {\n this.#inputChanges.next();\n }\n component!: SdFormGenericHtml;\n key!: string;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\n this.component = component;\n this.key = component.key || component.id;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\n this.viewed = val === '' || !!val;\n }\n\n #subscription = new Subscription();\n #inputChanges = new Subject<void>();\n constructor(\n private ref: ChangeDetectorRef,\n private readonly formRenderService: FormGenericService\n ) {}\n\n #hashedQuery?: string;\n hashedValues?: string;\n #generateQuery = (query: string | Record<string, any> | undefined, data: Record<string, any>): Record<string, any> => {\n let result: Record<string, any> = {};\n // Nếu query được cấu hình từ Form Builder của Camunda thì JSON nó sẽ là string, cần thực hiện parse\n if (typeof query === 'string') {\n try {\n result = JSON.parse(query);\n } catch (err) {\n console.error(err);\n return result;\n }\n } else if (Array.isArray(query)) {\n return result;\n } else {\n result = { ...query };\n }\n // Xử lý query,\n // Ví dụ: {\"a\": \"1\", \"b\": \"true\", \"c\": \"${key}\"} => {\"a\": \"1\", \"b\": true, \"c\": \"Dữ liệu tương ứng với key trong data\"}\n for (const key of Object.keys({ ...result })) {\n // Xử ly\n result[key] = StringUtilities.templateToDisplay(result[key], data);\n if (result[key] === 'true') {\n result[key] = true;\n }\n if (result[key] === 'false') {\n result[key] = false;\n }\n if (result[key] === '') {\n delete result[key];\n }\n }\n return result;\n };\n\n async ngOnInit() {\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n this.ref.markForCheck();\n })\n );\n if (!this.component.template) {\n // Nếu HTML không phải từ template thì giá trị = content\n this.entity[this.key] = this.component.content;\n } else if (!this.component.properties?.queries?.length) {\n // Nếu HTML từ static template (không có queries)\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template);\n this.ref.markForCheck();\n } else if (this.viewed || this.component?.properties?.viewed) {\n // Đây là trạng thái view của HTML từ template có query\n // Nếu ở trạng thái viewed thì lấy entity hiển thị, nếu không có thì dùng content của component\n this.entity[this.key] = this.entity[this.key] || this.component.content;\n /* const values = { ...this.entity, ...this.form.value };\n const query = this.#generateQuery(this.component?.properties?.query, values);\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template, query);\n this.ref.markForCheck(); */\n } else {\n // Nếu có queries thì lắng nghe thay đổi của form\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\n const hashedValues = Utilities.hash(values);\n if (this.hashedValues !== hashedValues) {\n this.hashedValues = hashedValues;\n this.#inputChanges.next();\n }\n })\n );\n this.#subscription.add(\n this.#inputChanges.pipe(startWith('')).subscribe(async () => {\n const values = { ...this.entity, ...this.form.value };\n const query = this.#generateQuery(this.component?.properties?.query, values);\n const hashedQuery = Utilities.hash(query);\n // Nếu query có thay đổi thì thực hiện gán lại items\n if (hashedQuery !== this.#hashedQuery) {\n this.#hashedQuery = hashedQuery;\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template!, query);\n this.ref.markForCheck();\n }\n })\n );\n }\n }\n\n ngAfterViewInit() {}\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component && entity) {\n <div [innerHTML]=\"entity[key] | htmlPipe: entity[key] : component\"></div>\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdCustomValidator } from '@sdcorejs/angular/forms/models';\nimport { SdFormGenericComponent } from '../../../../models';\nimport {\n ChipCalendarComponent,\n ChipStringComponent,\n DatetimeComponent,\n NumberComponent,\n RadioComponent,\n SelectComponent,\n TableComponent,\n TextareaComponent,\n TextfieldComponent,\n UploadComponent,\n} from './components';\nimport { Subject } from 'rxjs';\nimport { HtmlComponent } from './components/html/html.component';\n\n@Component({\n selector: 'lib-item',\n templateUrl: './item.component.html',\n styleUrl: './item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TextfieldComponent,\n TextareaComponent,\n ChipStringComponent,\n ChipCalendarComponent,\n NumberComponent,\n DatetimeComponent,\n SelectComponent,\n RadioComponent,\n TableComponent,\n UploadComponent,\n HtmlComponent,\n ],\n})\nexport class LibItemComponent {\n @ViewChild(UploadComponent) itemUpload?: UploadComponent;\n @ViewChild(TableComponent) itemTable?: TableComponent;\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup({});\n value: any;\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n col = 'col-6 px-8 py-8';\n component?: SdFormGenericComponent;\n @Input({\n alias: 'component',\n required: true,\n })\n set _component(val: SdFormGenericComponent) {\n this.component = val;\n this.col = `col-${this.component?.layout?.columns || '6'} px-8 py-8`;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: boolean | '' | undefined) {\n this.disabled = val === '' || !!val;\n }\n\n required = false;\n @Input('required') set _required(val: boolean | '' | undefined) {\n this.required = val === '' || !!val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '' | undefined) {\n this.viewed = val === '' || !!val;\n }\n\n validator?: SdCustomValidator;\n @Input('validator') set _validator(validator: SdCustomValidator) {\n if (validator && this.validator !== validator) {\n this.validator = validator;\n }\n }\n\n // Thực hiện upload nếu có component upload\n // TODO: Bổ sung logic upload cho table\n upload = async () => {\n await this.itemUpload?.upload?.();\n await this.itemTable?.upload?.();\n };\n\n // items: SdSearch = (args)=> {\n // const { } = args;\n // }\n\n // onSelect = (data: BaseEntity | BaseEntity[]) => {\n // if (Array.isArray(data)) {\n // this.entity[this.component.key] = data.map(selected => selected?.id).filter(val => !!val);\n // } else {\n // this.entity[this.component.key] = data?.id;\n // }\n // };\n}\n","@if (entity && component) {\n @if (component.type === 'textfield') {\n <div [class]=\"col\">\n <lib-textfield\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [validator]=\"validator\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-textfield>\n </div>\n } @else if (component.type === 'textarea') {\n <div [class]=\"col\">\n <lib-textarea\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-textarea>\n </div>\n } @else if (component.type === 'chip-string') {\n <div [class]=\"col\">\n <lib-chip-string\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-chip-string>\n </div>\n } @else if (component.type === 'chip-calendar') {\n <div [class]=\"col\">\n <lib-chip-calendar\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-chip-calendar>\n </div>\n } @else if (component.type === 'number') {\n <div [class]=\"col\">\n <lib-number\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-number>\n </div>\n }\n @if (component.type === 'select') {\n <div [class]=\"col\">\n <lib-select\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [component]=\"component\"\n [entity]=\"entity\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [validator]=\"validator\"\n [viewed]=\"viewed\"></lib-select>\n </div>\n } @else if (component.type === 'radio') {\n <div [class]=\"col\">\n <lib-radio\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [component]=\"component\"\n [entity]=\"entity\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-radio>\n </div>\n } @else if (component.type === 'datetime') {\n <div [class]=\"col\">\n <lib-datetime\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [viewed]=\"viewed\"></lib-datetime>\n </div>\n } @else if (component.type === 'upload') {\n <div [class]=\"col\">\n <lib-upload\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [component]=\"component\"\n [entity]=\"entity\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [validator]=\"validator\"\n [viewed]=\"viewed\">\n </lib-upload>\n </div>\n } @else if (component.type === 'table') {\n <div [class]=\"col\">\n <lib-table [setVariables]=\"setVariables\" [component]=\"component\" [(model)]=\"entity[component.key!]\" [viewed]=\"viewed\"></lib-table>\n </div>\n } @else if (component.type === 'html') {\n <div [class]=\"col\">\n <lib-html [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" [component]=\"component\" [viewed]=\"viewed\"> </lib-html>\n </div>\n } @else if (component.type === 'break') {\n <!-- Break: empty 12-col placeholder ép xuống dòng. Không render gì runtime. -->\n <div class=\"col-12\" style=\"height: 0;\"></div>\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { filter, Subject, Subscription } from 'rxjs';\nimport { SdFormGenericVariable } from '../../../../models';\n\n@Component({\n selector: 'variable',\n templateUrl: './variable.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VariableComponent implements OnInit, OnDestroy {\n @Input({ required: true }) variables?: SdFormGenericVariable[];\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\n @Input() form = new FormGroup<any>({});\n entity: Record<string, any> = {};\n @Input({\n alias: 'entity',\n required: true,\n })\n set _entity(val: Record<string, any>) {\n if (this.entity !== val) {\n this.entity = val;\n }\n }\n\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n ngOnInit() {\n if (this.variables) {\n // Kiểm tra xem variable có trong form chưa, nếu có thì push vào form\n // Mục đích là khi variable bị thay đổi thì trigger được valueChanges và nơi khác lấy được variables\n for (const variable of this.variables) {\n if (!this.form.controls[variable.key]) {\n this.form.addControl(variable.key, new FormControl(this.entity?.[variable.key]));\n }\n }\n // Khi nhận được tín hiệu setVariables từ nơi khác, nếu variable này thuộc ds variables thì thực hiện gán variable\n this.#subscription.add(\n this.setVariables.pipe(filter(variable => !!this.variables?.some(e => e.key === variable.key))).subscribe(variable => {\n this.entity[variable.key] = variable.value;\n if (this.form.controls[variable.key]) {\n this.form.patchValue({ [variable.key]: variable.value });\n }\n this.form.controls['sdRaw']?.setValue({ ...this.entity });\n this.ref.markForCheck();\n })\n );\n }\n }\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n}\n","","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnDestroy,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { SdSection } from '@sdcorejs/angular/components/section';\n// import { sha1 } from 'object-hash';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport { debounceTime, startWith } from 'rxjs/operators';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../configurations';\nimport { EvaluateExpression, SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormRenderConfiguration } from '../../models';\nimport { SdFormGenericValidation } from '../../models/form-generic-validation.model';\nimport { WhenExpressionPipe } from '../../pipes';\nimport { LibItemComponent, VariableComponent } from './components';\n\n@Component({\n selector: 'sd-form-render',\n templateUrl: './form-render.component.html',\n styleUrl: './form-render.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdSection, LibItemComponent, WhenExpressionPipe, VariableComponent],\n})\nexport class SdFormRender implements OnDestroy, AfterViewInit {\n @ViewChildren(LibItemComponent) formRenderItems: QueryList<LibItemComponent> = new QueryList<LibItemComponent>();\n @Input() form: FormGroup = new FormGroup({});\n configuration!: SdFormRenderConfiguration;\n @Input({ alias: 'configuration', required: true }) set _configuration(val: SdFormRenderConfiguration) {\n this.configuration = this.#cloneAndFormatConfiguration(val);\n // Luôn format lại component trước khi render\n this.#configurationChanges.next(this.configuration);\n }\n\n // Dựa vào giá trị default sẽ gán cho entity\n #defaultEntity: Record<string, any> = {};\n @Input('defaultEntity') set _default(defaultEntity: Record<string, any>) {\n this.#defaultEntity = defaultEntity;\n this.#defaultEntityChanges.next(defaultEntity);\n }\n\n entity: Record<string, any> = {};\n @Input('entity') set _entity(val: Record<string, any>) {\n this.entity = val;\n this.#entityChanges.next(this.entity);\n }\n\n properties: string[] = [];\n @Input('properties') set _properties(val: string[]) {\n this.properties = val;\n }\n\n viewed = false;\n @Input('viewed') set _viewed(val: boolean | '') {\n this.viewed = val === '' || val;\n }\n #subscription = new Subscription();\n #configurationChanges = new Subject<SdFormRenderConfiguration>();\n #defaultEntityChanges = new Subject<Record<string, any>>();\n #entityChanges = new Subject<Record<string, any>>();\n #renderScheduled = false;\n #destroyed = false;\n loadCompleted = false;\n hashedValues?: string;\n formValue: Record<string, any> = {};\n\n // Các component item của form-render sẽ lắng nghe thay đổi\n setVariables = new Subject<{ key: string; value: any }>();\n private readonly ref = inject(ChangeDetectorRef);\n private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n combineLatest([this.#configurationChanges, this.#entityChanges])\n .pipe(startWith([]))\n .subscribe(async () => {\n if (this.entity && this.configuration?.components?.length) {\n this.loadCompleted = true;\n this.#scheduleRender();\n if (this.configuration?.onLoaded) {\n try {\n this.configuration.onLoaded();\n } catch (err) {\n console.error(err);\n }\n }\n }\n })\n );\n this.#subscription.add(\n this.#defaultEntityChanges.pipe(startWith(this.#defaultEntity)).subscribe(defaultEntity => {\n for (const key of Object.keys({ ...defaultEntity })) {\n this.entity[key] = this.entity[key] ?? defaultEntity[key];\n }\n this.#patchRegisteredControls(this.entity);\n this.#syncRawControl(this.entity);\n })\n );\n this.#subscription.add(\n this.#entityChanges.pipe(startWith(this.entity)).subscribe(entity => {\n this.#syncRawControl(entity);\n })\n );\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\n const hashedValues = Utilities.hash(values);\n if (this.hashedValues !== hashedValues) {\n this.hashedValues = hashedValues;\n // Ở trạng thái view thì không có FormControl nên phải binding entity mới có dữ liệu cho formValue\n this.formValue = { ...this.entity, ...values };\n this.#scheduleRender();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#destroyed = true;\n this.#subscription.unsubscribe();\n }\n\n // Hàm này sẽ đi qua các components và các columns trong table để xử lý upload file\n // Trước khi thực hiện lưu thì cần gọi hàm này trước để mapping giá trị đúng\n upload = async () => {\n for (const formRenderItem of this.formRenderItems || []) {\n await formRenderItem.upload();\n }\n };\n\n // Nên gọi hàm này trước khi save/submit\n // Hàm này trả về mảng string error\n // Nếu không có error nào thì trả về mảng rỗng\n getValidationMessages = async (alert: SdFormGenericValidation['alert']) => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n const messages: string[] = [];\n for (const validation of this.configuration?.validations?.filter(e => e.alert === alert) || []) {\n if (validation.type === 'expression') {\n const result = EvaluateExpression(validation.expression, this.entity);\n if (result) {\n messages.push(validation.message);\n }\n } else if (validation.type === 'function') {\n const func = this.formGenericConfiguration?.form?.validation?.functions?.find(e => e.value === validation.code);\n if (func?.validate) {\n const message = await func.validate({\n entity: this.entity,\n });\n if (message) {\n messages.push(message);\n }\n }\n }\n }\n return messages;\n };\n\n #cloneAndFormatConfiguration(configuration: SdFormRenderConfiguration): SdFormRenderConfiguration {\n return {\n ...configuration,\n components: (configuration?.components || []).map(component => this.#cloneAndFormatComponent(component)),\n };\n }\n\n #patchRegisteredControls(entity: Record<string, any>): void {\n const registeredValue: Record<string, any> = {};\n for (const key of Object.keys(entity)) {\n if (key !== 'sdRaw' && this.form.controls[key]) {\n registeredValue[key] = entity[key];\n }\n }\n\n if (Object.keys(registeredValue).length) {\n this.form.patchValue(registeredValue);\n }\n }\n\n #syncRawControl(entity: Record<string, any>): void {\n if (!this.form.controls['sdRaw']) {\n this.form.addControl('sdRaw', new FormControl({ ...entity }));\n } else {\n this.form.controls['sdRaw'].setValue({ ...entity });\n }\n }\n\n #cloneAndFormatComponent(component: SdFormGenericComponent | SdFormGenericGroup): SdFormGenericComponent | SdFormGenericGroup {\n const clonedComponent = JSON.parse(JSON.stringify(component)) as SdFormGenericComponent | SdFormGenericGroup;\n SdFormatComponent(clonedComponent);\n\n if (clonedComponent.type === 'group') {\n clonedComponent.components = clonedComponent.components.map(child => this.#cloneAndFormatComponent(child) as SdFormGenericComponent);\n }\n\n return clonedComponent;\n }\n\n #scheduleRender(): void {\n if (this.#renderScheduled || this.#destroyed) {\n return;\n }\n\n this.#renderScheduled = true;\n queueMicrotask(() => {\n this.#renderScheduled = false;\n if (!this.#destroyed) {\n this.ref.detectChanges();\n }\n });\n }\n}\n","@if (form && loadCompleted && hashedValues) {\n <div class=\"row mx-0\">\n @for (component of configuration.components; track component.id) {\n @let expression = hashedValues | whenExpression: component : formValue;\n @if (!expression.hidden) {\n @if (component.type === 'group') {\n @if (!!component.components.length) {\n <div class=\"col-12 mt-16\">\n <sd-section [title]=\"component.label\" [icon]=\"component.properties.icon\">\n <div class=\"row mx-0\">\n @for (childComponent of component.components; track childComponent.id) {\n @let childExpression = hashedValues | whenExpression: childComponent : formValue;\n @if (!childExpression.hidden) {\n <lib-item\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"childComponent\"\n [required]=\"childExpression.required\"\n [disabled]=\"childExpression.disabled\"\n [viewed]=\"viewed\"></lib-item>\n }\n }\n </div>\n </sd-section>\n </div>\n }\n } @else {\n <lib-item\n [setVariables]=\"setVariables\"\n [form]=\"form\"\n [entity]=\"entity\"\n [component]=\"component\"\n [required]=\"expression.required\"\n [disabled]=\"expression.disabled\"\n [viewed]=\"viewed\"></lib-item>\n }\n }\n }\n <variable [variables]=\"configuration.variables\" [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" ></variable>\n </div>\n}\n","import { SdQueryBuilderField } from '@sdcorejs/angular/components/query-builder';\nimport { Filter, Operator } from '@sdcorejs/utils/models';\nimport { Attribute, AttributeOperators, DayInfo, SdFormGenericExpression, SdFormGenericExpressionCondition } from '../../../../models';\n\nlet expressionId = 0;\n\nexport function formAttributesToQueryFields(attributes: Attribute[]): SdQueryBuilderField[] {\n return attributes.map(attribute => ({\n key: attribute.value,\n label: attribute.display,\n type: attribute.type === 'datetime' ? 'datetime' : attribute.type,\n operators: AttributeOperators[attribute.type].map(operator => operator.value as Operator),\n values: attribute.type === 'values' ? attribute.values : undefined,\n trueLabel: attribute.type === 'boolean' ? attribute.displayOnTrue : undefined,\n falseLabel: attribute.type === 'boolean' ? attribute.displayOnFalse : undefined,\n }));\n}\n\nexport function formExpressionToFilter(expression: SdFormGenericExpression | undefined | null): Filter | null {\n if (!expression?.conditions?.length) return null;\n\n const data = expression.conditions\n .map(condition => (condition.type === 'combinator' ? formExpressionToFilter(condition) : conditionToFilter(condition)))\n .filter((filter): filter is Filter => !!filter);\n\n if (!data.length) return null;\n\n return {\n operator: expression.combinator === '||' ? 'OR' : 'AND',\n data,\n } as Filter;\n}\n\nexport function filterToFormExpression(filter: Filter | null | undefined): SdFormGenericExpression {\n const root = newExpression(filter && isAndOrFilter(filter) && filter.operator === 'OR' ? '||' : '&&');\n if (!filter) return root;\n\n if (isAndOrFilter(filter)) {\n root.conditions = filter.data.map(filterToExpressionNode);\n return root;\n }\n\n root.conditions = [filterToCondition(filter)];\n return root;\n}\n\nfunction conditionToFilter(condition: SdFormGenericExpressionCondition): Filter | null {\n if (!condition.field || !condition.operator) return null;\n\n if (condition.operator === 'NULL' || condition.operator === 'NOT_NULL') {\n return {\n field: condition.field as never,\n operator: condition.operator,\n } as Filter;\n }\n\n if (condition.value === undefined || condition.value === null || condition.value === '') return null;\n\n return {\n field: condition.field as never,\n operator: condition.operator,\n data: condition.value,\n } as Filter;\n}\n\nfunction filterToExpressionNode(filter: Filter): SdFormGenericExpression | SdFormGenericExpressionCondition {\n return isAndOrFilter(filter) ? filterToGroupExpression(filter) : filterToCondition(filter);\n}\n\nfunction filterToGroupExpression(filter: { operator: 'AND' | 'OR'; data: Filter[] }): SdFormGenericExpression {\n return {\n ...newExpression(filter.operator === 'OR' ? '||' : '&&'),\n conditions: filter.data.map(filterToExpressionNode),\n };\n}\n\nfunction filterToCondition(filter: Filter): SdFormGenericExpressionCondition {\n const raw = filter as Record<string, any>;\n const relative = readRelativeDate(raw);\n\n return {\n key: nextExpressionId('condition'),\n type: 'condition',\n field: raw['field'],\n operator: raw['operator'],\n value: relative.value,\n dayInfo: relative.dayInfo,\n };\n}\n\nfunction readRelativeDate(filter: Record<string, any>): { value: any; dayInfo: DayInfo } {\n if (filter['dataType'] === 'date-today') {\n return { value: 'now', dayInfo: { type: 'NOW' } };\n }\n\n if (filter['dataType'] === 'date-relative') {\n const data = filter['data'];\n if (data?.unit === 'day' && typeof data.amount === 'number') {\n const related = data.direction === 'next' ? 'NEXTDAY' : 'LASTDAY';\n const suffix = related === 'NEXTDAY' ? 'NextDay' : 'LastDay';\n\n return {\n value: `${data.amount}${suffix}`,\n dayInfo: {\n type: 'RELATED',\n related,\n relatedValue: data.amount,\n },\n };\n }\n }\n\n return { value: filter['data'], dayInfo: {} };\n}\n\nfunction newExpression(combinator: '&&' | '||'): SdFormGenericExpression {\n return {\n key: nextExpressionId('group'),\n type: 'combinator',\n combinator,\n conditions: [],\n };\n}\n\nfunction nextExpressionId(prefix: string): string {\n expressionId += 1;\n return `${prefix}-${expressionId}`;\n}\n\nfunction isAndOrFilter(filter: any): filter is { operator: 'AND' | 'OR'; data: Filter[] } {\n return !!filter && (filter.operator === 'AND' || filter.operator === 'OR') && Array.isArray(filter.data);\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, viewChild } from '@angular/core';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdQueryBuilder, SdQueryBuilderField } from '@sdcorejs/angular/components/query-builder';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { Filter } from '@sdcorejs/utils/models';\nimport {\n Attribute,\n GetAttributes,\n SdFormGenericComponent,\n SdFormGenericExpression,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../models';\nimport { ExpressionQueryPipe } from '../../../../pipes';\nimport { FormGenericService } from '../../../../services';\nimport { filterToFormExpression, formAttributesToQueryFields, formExpressionToFilter } from './form-expression-query-adapter';\n\n@Component({\n selector: 'attribute-expression',\n templateUrl: './attribute-expression.component.html',\n styleUrl: './attribute-expression.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdButton, SdModal, SdQueryBuilder, ExpressionQueryPipe, TranslatePipe],\n})\nexport class AttributeExpression {\n readonly modal = viewChild(SdModal);\n\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n @Input() label?: string;\n\n queryFields: SdQueryBuilderField[] = [];\n draftFilter: Filter | null = null;\n model?: SdFormGenericExpression;\n\n @Input({ alias: 'model', required: true }) set _model(model: SdFormGenericExpression | undefined) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n\n @Output() modelChange = new EventEmitter<SdFormGenericExpression>();\n @Output() sdChange = new EventEmitter<SdFormGenericExpression>();\n\n constructor(\n private readonly ref: ChangeDetectorRef,\n private readonly formGenericService: FormGenericService\n ) {}\n\n onEdit = async () => {\n const attributes = await this.#getAttributes(this.components, this.variables);\n this.queryFields = formAttributesToQueryFields(attributes);\n this.draftFilter = formExpressionToFilter(this.model);\n this.modal()?.open();\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n const nextModel = filterToFormExpression(this.draftFilter);\n this.model = nextModel;\n this.modelChange.emit(nextModel);\n this.sdChange.emit(nextModel);\n this.modal()?.close();\n this.ref.markForCheck();\n };\n\n #getAttributes = async (\n components: (SdFormGenericComponent | SdFormGenericGroup)[],\n variables: SdFormGenericVariable[]\n ): Promise<Attribute[]> => {\n const attributes: Attribute[] = [];\n if (components?.length) {\n for (const component of components) {\n if (component.type === 'group') {\n attributes.push(...GetAttributes(component.components));\n } else if (component.type === 'textfield' || component.type === 'textarea') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n } else if (component.type === 'number') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'number',\n });\n } else if (component.type === 'datetime') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'datetime',\n });\n } else if (component.type === 'checkbox') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'boolean',\n displayOnTrue: 'YES',\n displayOnFalse: 'NO',\n });\n } else if (component.type === 'radio' || component.type === 'select') {\n if (component.values?.length) {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'values',\n values: component.values.map(e => ({\n value: e.value,\n display: e.label,\n })),\n });\n } else {\n const values = await this.formGenericService.selection.items(component.valuesKey, {\n entity: {},\n component,\n });\n if (Array.isArray(values)) {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'values',\n values,\n });\n } else {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n }\n }\n }\n }\n }\n\n if (variables?.length) {\n for (const variable of variables) {\n attributes.push({\n value: variable.key,\n display: `[VARIABLE] ${variable.label}`,\n type: 'string',\n });\n }\n }\n return attributes;\n };\n}\n","<div class=\"fb-field\">\n @if (label) {\n <div class=\"fb-field__label\">{{ label }}</div>\n }\n @let exprText = model | expressionQuery;\n <div class=\"fb-expr\" (click)=\"onEdit()\" role=\"button\" tabindex=\"0\" (keydown.enter)=\"onEdit()\" (keydown.space)=\"onEdit()\">\n <span class=\"fb-expr__badge\">QB</span>\n @if (exprText) {\n <span class=\"fb-expr__code mono\">{{ exprText }}</span>\n } @else {\n <span class=\"empty\">{{ 'core.component.form-builder.set-expression' | translate }}</span>\n }\n <button type=\"button\" class=\"fb-icon-btn\" (click)=\"onEdit(); $event.stopPropagation()\" aria-label=\"edit expression\">\n <span class=\"msi\">account_tree</span>\n </button>\n </div>\n</div>\n\n<sd-modal [title]=\"'core.component.form-builder.set-expression' | translate\" width=\"920px\">\n <div class=\"fb-expression-query\">\n <sd-query-builder [fields]=\"queryFields\" [(value)]=\"draftFilter\"></sd-query-builder>\n </div>\n <ng-container sdFooter>\n <sd-button\n prefixIcon=\"check\"\n [title]=\"'core.component.form-builder.confirm' | translate\"\n (click)=\"onAccept()\"\n color=\"primary\"\n type=\"fill\"></sd-button>\n </ng-container>\n</sd-modal>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\n\n@Component({\n selector: 'attribute-input-number',\n templateUrl: './attribute-input-number.component.html',\n imports: [SdInputNumber],\n})\nexport class AttributeInputNumber {\n label?: string | null;\n @Input('label') set _label(label: string | undefined | null) {\n this.label = label;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n model?: number | null;\n @Input('model') set _model(model: number | undefined | null) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n @Output() modelChange = new EventEmitter<number>();\n\n onChange = (value: any) => {\n this.modelChange.emit(value);\n };\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <sd-input-number\n style=\"width: 200px\"\n size=\"sm\"\n [(model)]=\"model\"\n [disabled]=\"disabled\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-input-number>\n</div> -->\n<sd-input-number\n class=\"py-8\"\n size=\"sm\"\n [label]=\"label!\"\n [(model)]=\"model\"\n [disabled]=\"disabled\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-input-number>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\n\n@Component({\n selector: 'attribute-input',\n templateUrl: './attribute-input.component.html',\n imports: [SdInput],\n})\nexport class AttributeInput {\n @Input() form?: FormGroup;\n\n label?: string | null;\n @Input('label') set _label(label: string | undefined | null) {\n this.label = label;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n model?: string | null;\n @Input('model') set _model(model: string | undefined | null) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n @Output() modelChange = new EventEmitter<string>();\n @Output() sdChange = new EventEmitter<string>();\n\n onChange = (value: any) => {\n this.modelChange.emit(value);\n this.sdChange.emit(value);\n };\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <sd-input style=\"width: 200px\" size=\"sm\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-input>\n</div> -->\n<sd-input class=\"py-8\" size=\"sm\" [label]=\"label!\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-input>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'attribute-switch',\n templateUrl: './attribute-switch.component.html',\n imports: [SdSelect, TranslatePipe],\n})\nexport class AttributeSwitch {\n @Input() form?: FormGroup;\n\n label?: string | null;\n @Input('label') set _label(label: string | undefined | null) {\n this.label = label;\n }\n\n model?: boolean;\n @Input('model') set _model(val: boolean | undefined | null) {\n if (this.model !== !!val) {\n this.model = !!val;\n }\n }\n @Output() modelChange = new EventEmitter<boolean>();\n\n onChange = (value: any) => {\n this.modelChange.emit(!!value);\n };\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <sd-switch size=\"sm\" [form]=\"form\" [(model)]=\"model\" (sdChange)=\"onChange($event)\" hideInlineError></sd-switch>\n</div> -->\n<sd-select\n class=\"py-8\"\n size=\"sm\"\n [label]=\"label!\"\n [form]=\"form\"\n [(model)]=\"model\"\n valueField=\"value\"\n displayField=\"display\"\n [items]=\"[\n { value: true, display: ('core.confirm.yes-short' | translate) },\n { value: false, display: ('core.confirm.no-short' | translate) }\n ]\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-select>\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../../../configurations';\nimport { SdFormGenericComponent, SdFormGenericTemplate } from '../../../../models';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n selector: 'attribute-template',\n templateUrl: './attribute-template.component.html',\n imports: [SdAutocomplete, TranslatePipe],\n})\nexport class AttributeTemplate {\n templates: SdFormGenericTemplate[] = [];\n component!: SdFormGenericComponent;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericComponent) {\n this.component = component;\n this.templates = this.formGenericConfiguration?.form?.templates?.filter(e => e.component?.type === this.component?.type) || [];\n }\n @Output() sdChange = new EventEmitter<SdFormGenericComponent>();\n private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n onChange = (value: string | number | null) => {\n if (typeof value === 'string') {\n const template = this.templates?.find(e => e.value === value);\n if (template?.component) {\n this.sdChange.emit(JSON.parse(JSON.stringify(template.component)));\n }\n }\n };\n}\n","@if (templates.length) {\n <!-- <div class=\"d-flex align-items-center py-4\">\n <div class=\"T14M\" style=\"flex: 1\">Dữ liệu mẫu</div>\n <sd-autocomplete\n style=\"width: 200px\"\n size=\"sm\"\n [(model)]=\"component.template\"\n [items]=\"templates\"\n valueField=\"value\"\n displayField=\"display\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-autocomplete>\n </div> -->\n <sd-autocomplete\n class=\"py-8\"\n size=\"sm\"\n [label]=\"'core.component.form-builder.template-data' | translate\"\n [(model)]=\"component.template\"\n [items]=\"templates\"\n valueField=\"value\"\n displayField=\"display\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-autocomplete>\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\n\n@Component({\n selector: 'attribute-textarea',\n templateUrl: './attribute-textarea.component.html',\n imports: [SdTextarea],\n})\nexport class AttributeTextarea {\n @Input() form?: FormGroup;\n\n label?: string | null;\n @Input('label') set _label(label: string | undefined | null) {\n this.label = label;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n model?: string | null;\n @Input('model') set _model(model: string | undefined | null) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n @Output() modelChange = new EventEmitter<string>();\n @Output() sdChange = new EventEmitter<string>();\n\n onChange = (value: any) => {\n this.modelChange.emit(value);\n this.sdChange.emit(value);\n };\n}\n","<sd-textarea class=\"py-8\" size=\"sm\" [label]=\"label!\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-textarea>","import { Injectable } from '@angular/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { SdFormGenericComponent, SdFormGenericGroup } from '../../../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BuilderService {\n constructor() {}\n\n // Khi component change attribute, mong muốn re-render control để người dùng nhìn trực quan\n // Ví dụ:\n // Khi content html thay đổi (attribute), mong muốn bố cục (control) cũng sẽ hiển thị\n // Khi columns của table thay đổi, cập nhật bố cục\n #componentChanges = new Subject<SdFormGenericComponent | SdFormGenericGroup>();\n get componentEmitters() {\n return this.#componentChanges;\n }\n\n get componentListeners() {\n // Debound 0.2s để tránh trigger liên tục\n return this.#componentChanges.pipe(debounceTime(200));\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericTextfield,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'textfield-attribute',\n templateUrl: './textfield-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AttributeTemplate,\n AttributeExpression,\n AttributeInput,\n AttributeInputNumber,\n AttributeSwitch,\n AttributeTextarea,\n TranslatePipe,\n ],\n})\nexport class TextfieldAttribute implements AfterViewInit, OnDestroy {\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n component!: SdFormGenericTextfield;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextfield) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'textfield') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.default-value' | translate\" [(model)]=\"component.defaultValue\"></attribute-input>\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n <attribute-input-number [label]=\"'core.component.form-builder.maxlength' | translate\" [(model)]=\"component.validate!.maxlength\"></attribute-input-number>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n <attribute-input label=\"Expression\" [(model)]=\"component.validate!.pattern\"></attribute-input>\n <attribute-input label=\"Expression message\" [(model)]=\"component.validate!.patternErrorMessage\"></attribute-input>\n </div>\n </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericTextfield } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'textfield-control',\n templateUrl: './textfield-control.component.html',\n styleUrl: './textfield-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextFieldControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericTextfield;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextfield) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">\n Your input text\n </div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input\">{{component.defaultValue}}</div>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericTextarea,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'textarea-attribute',\n templateUrl: './textarea-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AttributeTemplate,\n AttributeInput,\n AttributeInputNumber,\n AttributeSwitch,\n AttributeExpression,\n AttributeTextarea,\n TranslatePipe,\n ],\n})\nexport class TextareaAttribute implements AfterViewInit, OnDestroy {\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n component!: SdFormGenericTextarea;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextarea) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'textarea') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n <attribute-input-number [label]=\"'core.component.form-builder.maxlength' | translate\" [(model)]=\"component.validate!.maxlength\"></attribute-input-number>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericTextarea } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\n\n@Component({\n selector: 'textarea-control',\n templateUrl: './textarea-control.component.html',\n styleUrl: './textarea-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextareaControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericTextarea;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextarea) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">Your input text</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-textarea\"></div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericChipString } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'chip-string-control',\n templateUrl: './chip-string-control.component.html',\n styleUrl: './chip-string-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n})\nexport class ChipStringControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericChipString;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipString) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n // Vì đã đúng theo id nên có thể ép kiểu any\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">One, Two, Three</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input\">\n <span class=\"c-chip\">One</span>\n <span class=\"c-chip\">Two</span>\n <span class=\"c-chip\">Three</span>\n </div>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport {\n SdFormatComponent,\n SdFormGenericChipString,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'chip-string-attribute',\n templateUrl: './chip-string-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class ChipStringAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericChipString;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipString) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n #changes = new Subject<void>();\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'chip-string') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n\n onChanges = () => {\n this.#changes.next();\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n @if (component.properties!.viewed) {\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n }\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n @if (!component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericChipCalendar } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'chip-calendar-control',\n templateUrl: './chip-calendar-control.component.html',\n styleUrl: './chip-calendar-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n})\nexport class ChipCalendarControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericChipCalendar;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipCalendar) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n // Vì đã đúng theo id nên có thể ép kiểu any\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">One, Two, Three</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input\">\n <span class=\"c-chip\">One</span>\n <span class=\"c-chip\">Two</span>\n <span class=\"c-chip\">Three</span>\n </div>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport {\n SdFormatComponent,\n SdFormGenericChipCalendar,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'chip-calendar-attribute',\n templateUrl: './chip-calendar-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class ChipCalendarAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericChipCalendar;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipCalendar) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n #changes = new Subject<void>();\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'chip-string') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n\n onChanges = () => {\n this.#changes.next();\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n @if (component.properties!.viewed) {\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n }\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n @if (!component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericNumber,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'number-attribute',\n templateUrl: './number-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AttributeTemplate,\n AttributeInput,\n AttributeInputNumber,\n AttributeSwitch,\n AttributeExpression,\n AttributeTextarea,\n TranslatePipe,\n ],\n})\nexport class NumberAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericNumber;\n isTemplate = false;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericNumber) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'number') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.isTemplate = true;\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n </div>\n</details>\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n <attribute-input-number [label]=\"'core.component.form-builder.min' | translate\" [(model)]=\"component.validate!.min\"></attribute-input-number>\n <attribute-input-number [label]=\"'core.component.form-builder.max' | translate\" [(model)]=\"component.validate!.max\"></attribute-input-number>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericNumber } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { NumberUtilities } from '@sdcorejs/angular/utilities/extensions';\n\n@Component({\n selector: 'number-control',\n templateUrl: './number-control.component.html',\n styleUrl: './number-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumberControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericNumber;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericNumber) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n number = NumberUtilities.toISO(new Date().getTime());\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n // Vì đã đúng theo id nên có thể ép kiểu any\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">{{number}}</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input\"></div>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { DateUtilities } from '@sdcorejs/angular/utilities';\nimport { filter, Subscription } from 'rxjs';\nimport { SdFormGenericDatetime } from '../../../../../models';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'datetime-control',\n templateUrl: './datetime-control.component.html',\n styleUrl: './datetime-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n})\nexport class DatetimeControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericDatetime;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericDatetime) {\n this.component = component;\n }\n\n date = DateUtilities.toFormat(new Date(), 'dd/MM/yyyy');\n datetime = DateUtilities.toFormat(new Date(), 'dd/MM/yyyy HH:mm');\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">{{ component.subtype === 'datetime' ? datetime : date }}</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input\">\n <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\n <path\n d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"></path>\n </svg>\n </div>\n </div>\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\n\n@Component({\n selector: 'attribute-select',\n templateUrl: './attribute-select.component.html',\n imports: [SdSelect],\n})\nexport class AttributeSelect {\n @Input() form?: FormGroup;\n\n label?: string | null;\n @Input('label') set _label(label: string | undefined | null) {\n this.label = label;\n }\n\n disabled = false;\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\n this.disabled = val === '' || !!val;\n }\n\n multiple = false;\n @Input('multiple') set _multiple(val: '' | boolean | undefined | null) {\n this.multiple = val === '' || !!val;\n }\n\n items: Item[] = [];\n @Input({ alias: 'items', required: true }) set _items(items: Item[] | undefined | null) {\n if (Array.isArray(items) && this.items !== items) {\n this.items = items || [];\n } else {\n items = [];\n }\n }\n\n model?: any | any[];\n @Input('model') set _model(model: any | any[] | undefined | null) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n @Output() modelChange = new EventEmitter<string>();\n @Output() sdChange = new EventEmitter<string>();\n\n onChange = (value: any) => {\n this.modelChange.emit(value);\n this.sdChange.emit(value);\n };\n}\n\ninterface Item {\n value: string;\n display: string;\n}\n","<!-- <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <sd-select\n style=\"width: 200px\"\n size=\"sm\"\n [form]=\"form\"\n [(model)]=\"model\"\n [items]=\"items\"\n valueField=\"value\"\n displayField=\"display\"\n [disabled]=\"disabled\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-select>\n</div> -->\n<sd-select\n class=\"py-8\"\n size=\"sm\"\n [label]=\"label!\"\n [form]=\"form\"\n [(model)]=\"model\"\n [items]=\"items\"\n valueField=\"value\"\n displayField=\"display\"\n [disabled]=\"disabled\"\n (sdChange)=\"onChange($event)\"\n hideInlineError></sd-select>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericDatetime,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'datetime-attribute',\n templateUrl: './datetime-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeSelect, AttributeExpression, AttributeTextarea, TranslatePipe],\n})\nexport class DatetimeAttribute implements AfterViewInit, OnDestroy {\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n component!: SdFormGenericDatetime;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericDatetime) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'datetime') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-select\n [label]=\"'core.component.form-builder.format' | translate\"\n [(model)]=\"component.subtype\"\n [items]=\"[\n { value: 'date', display: 'dd/MM/yyyy' },\n { value: 'datetime', display: 'dd/MM/yyyy HH:mm' }\n ]\"></attribute-select>\n <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.hint' | translate\" [(model)]=\"component.helperText\"></attribute-textarea>\n </div>\n</details>\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport {\n GetComponentAttributes,\n GetVariableAttributes,\n SdFormGenericComponent,\n SdFormGenericDefinitionSelection,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../../models';\nimport { startWith, Subject, Subscription } from 'rxjs';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'build-queries',\n templateUrl: './build-queries.component.html',\n styleUrl: './build-queries.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdAutocomplete, SdButton, SdModal, TranslatePipe],\n})\nexport class BuildQueries implements OnInit, OnDestroy {\n @ViewChild(SdModal) modal?: SdModal;\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n @Input() label?: string;\n @Input({ required: true }) selections: SdFormGenericDefinitionSelection[] = [];\n valuesKey?: string | null;\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\n this.valuesKey = valuesKey;\n this.#inputChanges.next();\n }\n selection?: SdFormGenericDefinitionSelection;\n\n leftProperties?: Property[];\n rightProperties?: Property[];\n\n queryString?: string;\n model?: Record<string, any>;\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n this.model = JSON.parse(JSON.stringify({ ...model }));\n // Parse JSON -> STRING để hiển thị trên UI\n this.queryString = JSON.stringify(this.model);\n }\n @Output() modelChange = new EventEmitter<Record<string, string>>();\n\n // Mỗi lần inputChanges thì tính lại selection\n #inputChanges = new Subject<void>();\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.#subscription.add(\n this.#inputChanges.pipe(startWith('')).subscribe(() => {\n this.selection = this.selections?.find?.(e => e.value === this.valuesKey);\n })\n );\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n edit = async () => {\n this.leftProperties = this.selection?.queries?.items || [];\n this.rightProperties = [...GetComponentAttributes(this.components), ...GetVariableAttributes(this.variables)].map(e => ({\n value: '${' + e.value + '}',\n display: e.display,\n }));\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n const result: Record<string, string> = {};\n for (const key of Object.keys(this.model!)) {\n const value = this.model?.[key];\n if (value !== undefined && value !== null && value !== '') {\n result[key] = value;\n }\n }\n this.modelChange.emit(result);\n this.modal?.close();\n this.ref.markForCheck();\n };\n}\n\nexport interface Property {\n value: string;\n display: string;\n}\n","@if (!!selection?.queries?.items?.length) {\n <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n </div>\n </div>\n <sd-modal [title]=\"'core.component.form-builder.set-query-value' | translate\" width=\"400px\">\n <div class=\"c-builder\">\n @for (property of leftProperties; track property.value) {\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n <div style=\"width: 150px\">\n <div class=\"text-secondary\">{{ property.value }}</div>\n <div class=\"T16M\">{{ property.display }}</div>\n </div>\n <sd-autocomplete\n [label]=\"'core.component.form-builder.value-source-field' | translate\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"model![property.value]\"\n [items]=\"rightProperties\"\n valueField=\"value\"\n displayField=\"display\"\n hideInlineError></sd-autocomplete>\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n </sd-modal>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport {\n GetComponentAttributes,\n GetVariableAttributes,\n SdFormGenericComponent,\n SdFormGenericDefinitionSelection,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../../models';\nimport { startWith, Subject, Subscription } from 'rxjs';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'build-variables',\n templateUrl: './build-variables.component.html',\n styleUrl: './build-variables.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdAutocomplete, SdButton, SdModal, TranslatePipe],\n})\nexport class BuildVariables implements OnInit, OnDestroy {\n @ViewChild(SdModal) modal?: SdModal;\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n @Input() label?: string;\n @Input({ required: true }) selections: SdFormGenericDefinitionSelection[] = [];\n valuesKey?: string | null;\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\n this.valuesKey = valuesKey;\n this.#inputChanges.next();\n }\n selection?: SdFormGenericDefinitionSelection;\n\n leftProperties?: Property[];\n rightProperties?: Property[];\n\n items: {\n id: string;\n key: string;\n value: any;\n }[] = [];\n queryString?: string;\n #model!: Record<string, any>;\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n this.#model = JSON.parse(JSON.stringify({ ...model }));\n // Parse JSON -> STRING để hiển thị trên UI\n this.queryString = JSON.stringify(this.#model);\n this.items = Object.keys(this.#model).map(key => ({\n id: Utilities.randomId(),\n key,\n value: this.#model?.[key],\n }));\n }\n @Output() modelChange = new EventEmitter<Record<string, string>>();\n\n // Mỗi lần inputChanges thì tính lại selection\n #inputChanges = new Subject<void>();\n #subscription = new Subscription();\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.#subscription.add(\n this.#inputChanges.pipe(startWith('')).subscribe(() => {\n this.selection = this.selections?.find?.(e => e.value === this.valuesKey);\n })\n );\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n edit = async () => {\n this.leftProperties = [...GetComponentAttributes(this.components), ...GetVariableAttributes(this.variables)];\n this.rightProperties =\n this.selection?.variables?.items?.map(e => ({\n value: '${' + e.value + '}',\n display: e.display,\n })) || [];\n this.modal?.open?.();\n this.ref.markForCheck();\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n addField = () => {\n this.items.push({\n id: Utilities.randomId(),\n key: '',\n value: '',\n });\n this.ref.markForCheck();\n };\n\n remove = (idx: number) => {\n this.items.splice(idx, 1);\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n const result: Record<string, string> = {};\n for (const { key, value } of this.items) {\n if (value !== undefined && value !== null && value !== '') {\n result[key] = value;\n }\n }\n this.modelChange.emit(result);\n this.modal?.close();\n this.ref.markForCheck();\n };\n}\n\nexport interface Property {\n value: string;\n display: string;\n}\n","@if (!!selection?.variables?.items?.length) {\n <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n </div>\n </div>\n <sd-modal [title]=\"'core.component.form-builder.set-on-change-assign' | translate\" width=\"500px\">\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.add-field' | translate\" color=\"primary\" (click)=\"addField()\"></sd-button>\n </div>\n <!-- Cấp 1 -->\n @for (item of items; track item.id; let idx = $index) {\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n <sd-autocomplete\n [label]=\"'core.component.form-builder.target-field' | translate\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"item.key\"\n [items]=\"leftProperties\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n <sd-autocomplete\n [label]=\"'core.component.form-builder.target-value' | translate\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"item.value\"\n [items]=\"rightProperties\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n </sd-modal>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, OnInit } from '@angular/core';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdSection } from '@sdcorejs/angular/components/section';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport {\n SdFormGenericComponent,\n SdFormGenericDefinitionSelection,\n SdFormGenericGroup,\n SdFormGenericSelectionStaticItem,\n SdFormGenericTableColumn,\n SdFormGenericValues,\n SdFormGenericVariable,\n} from '../../../../models';\nimport { FormGenericService } from '../../../../services';\nimport { BuildQueries } from './components/build-queries/build-queries.component';\nimport { BuildVariables } from './components/build-variables/build-variables.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n selector: 'attribute-selection',\n templateUrl: './attribute-selection.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdInput, SdAutocomplete, SdButton, SdSection, BuildQueries, BuildVariables, TranslatePipe],\n})\nexport class AttributeSelection implements OnInit {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n @Input({ required: true }) component!: SdFormGenericValues | SdFormGenericTableColumn;\n // ValuesKey\n valuesKey?: string;\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\n if (this.valuesKey !== valuesKey) {\n this.valuesKey = valuesKey?.toString();\n }\n }\n @Output() valuesKeyChange = new EventEmitter<string>();\n selections: SdFormGenericDefinitionSelection[] = [];\n\n // Values\n values: SdFormGenericSelectionStaticItem[] = [];\n @Input({ alias: 'values', required: true }) set _values(values: SdFormGenericSelectionStaticItem[] | undefined | null) {\n if (this.values !== values) {\n this.values = values || [];\n }\n }\n @Output() valuesChange = new EventEmitter<SdFormGenericSelectionStaticItem[]>();\n @Output() sdChange = new EventEmitter<SdFormGenericComponent>();\n constructor(\n private ref: ChangeDetectorRef,\n private formGenericService: FormGenericService\n ) {}\n\n ngOnInit(): void {\n this.formGenericService.selection.definitions().then(selections => {\n // Nếu không phải là type select thì không hiển thị các lựa chọn lazyValues\n // Vì radio, checklist không thể load lazy\n if (this.component.type !== 'select') {\n this.selections = selections.filter(selection => !('lazyValues' in selection) && !('lazyValuesKey' in selection));\n } else {\n this.selections = selections;\n }\n this.ref.markForCheck();\n });\n }\n\n onChangeValuesKey = (value: any) => {\n this.valuesKeyChange.emit(value);\n // Gán values rỗng nếu đã sử dụng valuesKey\n this.values = [];\n this.valuesChange.emit(this.values);\n this.ref.markForCheck();\n };\n\n onChangeValues = () => {\n this.valuesChange.emit(this.values);\n };\n\n addItem = () => {\n this.values.push({\n value: `value_${new Date().getTime().toString(36)}`,\n label: `Label ${new Date().getTime().toString(36)}`,\n });\n this.valuesChange.emit(this.values);\n this.ref.markForCheck();\n };\n\n removeItem = (idx: number) => {\n this.values.splice(idx, 1);\n this.valuesChange.emit(this.values);\n this.ref.markForCheck();\n };\n}\n","<sd-section class=\"mt-8\" [title]=\"'core.component.form-builder.data' | translate\" icon=\"format_list_bulleted\">\n @if (selections.length) {\n <div class=\"d-flex align-items-center py-4\">\n <div class=\"T14M\" style=\"flex: 1\">{{ 'core.component.form-builder.data-api' | translate }}</div>\n <sd-autocomplete\n style=\"width: 200px\"\n size=\"sm\"\n [(model)]=\"valuesKey\"\n [items]=\"selections\"\n valueField=\"value\"\n displayField=\"display\"\n (sdChange)=\"onChangeValuesKey($event)\"\n hideInlineError></sd-autocomplete>\n </div>\n <!-- Nếu là select từ API thì cho phép truyền thêm Query -->\n\n @if (component.type === 'select' && !!valuesKey) {\n <build-queries\n [label]=\"'core.component.form-builder.query-condition' | translate\"\n [selections]=\"selections\"\n [valuesKey]=\"valuesKey\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.query\"></build-queries>\n <build-variables\n [label]=\"'core.component.form-builder.assign-value' | translate\"\n [selections]=\"selections\"\n [valuesKey]=\"valuesKey\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.setVariables\"></build-variables>\n <!-- <div class=\"d-flex align-items-center py-4\">\n <div class=\"T14M\" style=\"flex: 1\">Điều kiện truy vấn</div>\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"component.properties!.query\" hideInlineError></sd-input>\n </div> -->\n }\n }\n @if (!valuesKey) {\n <div class=\"d-flex flex-column\" style=\"gap: 4px\">\n <div class=\"T14M\">{{ 'core.component.form-builder.data-static' | translate }}</div>\n @for (item of values; track item.value; let idx = $index) {\n <div class=\"d-flex align-items-end py-4\" style=\"gap: 4px\">\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"item.value\" (sdChange)=\"onChangeValues()\" hideInlineError></sd-input>\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"item.label\" (sdChange)=\"onChangeValues()\" hideInlineError></sd-input>\n <sd-button prefixIcon=\"delete\" (click)=\"removeItem(idx)\" color=\"error\"></sd-button>\n </div>\n }\n <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.add-data' | translate\" (click)=\"addItem()\" color=\"primary\"></sd-button>\n </div>\n }\n</sd-section>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericSelect,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeSelection } from '../../attribute-selection/attribute-selection.component';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'select-attribute',\n templateUrl: './select-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeSelection, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class SelectAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericSelect;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericSelect) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #changes = new Subject<void>();\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChanges = () => {\n this.#changes.next();\n };\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'select') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-switch [label]=\"'core.component.form-builder.multiple' | translate\" [(model)]=\"component.properties!.multiple\"></attribute-switch>\n @if (component.properties!.viewed) {\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n }\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <attribute-selection\n [components]=\"components\"\n [component]=\"component\"\n [variables]=\"variables\"\n [(valuesKey)]=\"component.valuesKey\"\n [(values)]=\"component.values\"\n (valuesKeyChange)=\"onChanges()\"\n (valuesChange)=\"onChanges()\"></attribute-selection>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericSelect } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'select-control',\n templateUrl: './select-control.component.html',\n styleUrl: './select-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n})\nexport class SelectControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericSelect;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericSelect) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">Your dropdown selection</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"d-flex align-items-center\">\n <div class=\"c-input c-select\">\n <svg width=\"8\" height=\"8\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n stroke-width=\".5\"\n d=\"M7.75 1.336L4 6.125.258 1.335 0 1.54l4 5.125L8 1.54zm0 0\"></path>\n </svg>\n </div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericRadio } from '../../../../../models';\nimport { filter, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\n\n@Component({\n selector: 'radio-control',\n templateUrl: './radio-control.component.html',\n styleUrl: './radio-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n})\nexport class RadioControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericRadio;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericRadio) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n // Vì đã đúng theo id nên có thể ép kiểu any\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">Your radio selection</div>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"c-radio-item d-flex flex-wrap align-items-center\">\n @if (component.values?.length) {\n <div class=\"d-flex\" [class.flex-column]=\"component.properties?.direction === 'column'\" style=\"gap: 8px\">\n @for (item of component.values; track item.value) {\n <div class=\"d-flex align-items-center my-4\">\n <div class=\"c-rd-ip mr-4\"></div>\n <div class=\"T12M\">{{ item.label }}</div>\n </div>\n }\n </div>\n } @else if (component.valuesKey) {\n <div class=\"T12R text-secondary\">{{ component.valuesKey }}</div>\n }\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericRadio,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSelection } from '../../attribute-selection/attribute-selection.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'radio-attribute',\n templateUrl: './radio-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeSelection, AttributeInput, AttributeSwitch, AttributeSelect, AttributeExpression, TranslatePipe],\n})\nexport class RadioAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericRadio;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericRadio) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n #changes = new Subject<void>();\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'radio') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n\n onChanges = () => {\n this.#changes.next();\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n @if (component.properties!.viewed) {\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\n }\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n <attribute-select\n [form]=\"form\"\n [label]=\"'core.component.form-builder.layout' | translate\"\n [(model)]=\"component.properties!.direction\"\n [items]=\"[\n { value: 'row', display: 'Ngang' },\n { value: 'column', display: ('core.component.form-builder.vertical' | translate) }\n ]\"></attribute-select>\n </div>\n </details>\n @if (!component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n }\n <attribute-selection\n [components]=\"components\"\n [variables]=\"variables\"\n [component]=\"component\"\n [(valuesKey)]=\"component.valuesKey\"\n [(values)]=\"component.values\"\n (valuesKeyChange)=\"onChanges()\"\n (valuesChange)=\"onChanges()\"></attribute-selection>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { SdFormGenericCheckbox } from '../../../../../models';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'checkbox-control',\n templateUrl: './checkbox-control.component.html',\n styleUrl: './checkbox-control.component.scss',\n imports: [CommonModule, TranslatePipe],\n})\nexport class CheckboxControl {\n component!: SdFormGenericCheckbox;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericCheckbox) {\n this.component = component;\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <div class=\"T14M\">{{ 'core.component.form-builder.yes-no' | translate }}</div>\n} @else {\n <div class=\"c-checkbox\">\n <div class=\"d-flex align-items-center\">\n <div class=\"c-box mr-4\"></div>\n <div class=\"T14R\">{{ component.label }}</div>\n </div>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericCheckbox,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { FormGroup } from '@angular/forms';\nimport { BuilderService } from '../../../services';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'checkbox-attribute',\n templateUrl: './checkbox-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression, TranslatePipe],\n})\nexport class CheckboxAttribute implements AfterViewInit, OnDestroy {\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n component!: SdFormGenericCheckbox;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericCheckbox) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'checkbox') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n </div>\n</details>\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport {\n GetComponentAttributes,\n GetVariableAttributes,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../../../../../../models';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'build-queries',\n templateUrl: './build-queries.component.html',\n styleUrl: './build-queries.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdAutocomplete, SdButton, SdModal, TranslatePipe],\n})\nexport class BuildQueries implements OnInit, OnDestroy {\n @ViewChild(SdModal) modal?: SdModal;\n form = new FormGroup({});\n @Input() label?: string;\n leftProperties?: Property[];\n @Input({ alias: 'queries', required: true }) set _queries(queries: { key: string; label: string }[] | undefined | null) {\n this.leftProperties =\n queries?.map(e => ({\n value: e.key,\n display: e.label,\n })) || [];\n }\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n rightProperties?: Property[];\n queryString?: string;\n model?: Record<string, any>;\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n this.model = JSON.parse(JSON.stringify({ ...model }));\n // Parse JSON -> STRING để hiển thị trên UI\n this.queryString = JSON.stringify(this.model);\n }\n @Output() modelChange = new EventEmitter<Record<string, string>>();\n\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnDestroy() {}\n\n edit = () => {\n this.rightProperties =\n [...GetComponentAttributes(this.components), ...GetVariableAttributes(this.variables)].map(e => ({\n value: '${' + e.value + '}',\n display: e.display,\n })) || [];\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n const result: Record<string, string> = {};\n for (const key of Object.keys(this.model!)) {\n const value = this.model?.[key];\n if (value !== undefined && value !== null && value !== '') {\n result[key] = value;\n }\n }\n this.modelChange.emit(result);\n this.modal?.close();\n this.ref.markForCheck();\n };\n}\n\ninterface Property {\n value: string;\n display: string;\n}\n","@if (!!leftProperties?.length) {\n <div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n </div>\n </div>\n <sd-modal [title]=\"'core.component.form-builder.set-query-value' | translate\" width=\"400px\">\n <div class=\"c-builder\">\n @for (property of leftProperties; track property.value) {\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n <div class=\"T14M\" style=\"width: 150px\">{{ property.display }}</div>\n <sd-autocomplete\n [label]=\"'core.component.form-builder.value-source-field' | translate\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"model![property.value]\"\n [items]=\"rightProperties\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n </sd-modal>\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport {\n GetComponentAttributes,\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericDefinitionHtml,\n SdFormGenericGroup,\n SdFormGenericHtml,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { FormGenericService } from '../../../../../services';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\nimport { BuildQueries } from './components/build-queries/build-queries.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'html-attribute',\n templateUrl: './html-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeInput, AttributeSelect, AttributeExpression, AttributeTextarea, BuildQueries, TranslatePipe],\n})\nexport class HtmlAttribute implements OnInit, AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n\n component!: SdFormGenericHtml;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n form = new FormGroup({});\n definitionHtmls: SdFormGenericDefinitionHtml[] = [];\n // Mong muốn là khi attribute changes thông báo cho control biết để control render content tương ứng\n @Output() attributeChanges = new EventEmitter();\n\n #subscription = new Subscription();\n rightProperties: { value: string; display: string }[] = [];\n constructor(\n private ref: ChangeDetectorRef,\n private formGenericService: FormGenericService,\n private builderService: BuilderService\n ) {}\n\n ngOnInit(): void {\n this.formGenericService.html.definitions().then(htmls => {\n this.definitionHtmls = htmls;\n this.ref.markForCheck();\n });\n this.rightProperties =\n GetComponentAttributes(this.components).map(e => ({\n value: '${' + e.value + '}',\n display: e.display,\n })) || [];\n }\n\n ngAfterViewInit(): void {\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeDefinition = async (value: string) => {\n const definition = this.definitionHtmls.find(e => e.value === value);\n if (definition) {\n this.component.content = await this.formGenericService.html.getContent(value);\n this.component.properties!.variables = JSON.parse(JSON.stringify(definition.variables || []));\n if (definition.type === 'query') {\n this.component.properties!.queries = JSON.parse(JSON.stringify(definition.queries || []));\n } else {\n this.component.properties!.queries = [];\n }\n delete this.component.properties?.query;\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n } else {\n this.component.properties!.variables = [];\n this.component.properties!.queries = [];\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n}\n","@if (!component.properties!.hidden) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-select\n [label]=\"'core.component.form-builder.template-data' | translate\"\n [(model)]=\"component.template\"\n [items]=\"definitionHtmls\"\n (sdChange)=\"onChangeDefinition($event)\"></attribute-select>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\"></attribute-input>\n <attribute-textarea [form]=\"form\" [label]=\"'core.component.form-builder.content' | translate\" [(model)]=\"component.content\"></attribute-textarea>\n @if (component.properties?.queries?.length) {\n <build-queries\n [label]=\"'core.component.form-builder.query-condition' | translate\"\n [queries]=\"component.properties?.queries\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.query\"></build-queries>\n }\n </div>\n </details>\n @if (component.properties?.variables?.length) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">format_list_bulleted</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n @for (variable of component.properties?.variables; track variable.key) {\n <attribute-input [form]=\"form\" [label]=\"variable.label\" [(model)]=\"variable.value\"></attribute-input>\n }\n </div>\n </details>\n }\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n </div>\n </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericHtml } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\nimport { HtmlPipe } from '../../../../../pipes';\nimport { FormGenericService } from '../../../../../services';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\n@Component({\n selector: 'html-control',\n templateUrl: './html-control.component.html',\n styleUrl: './html-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [HtmlPipe],\n})\nexport class HtmlControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericHtml;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\n this.component = component;\n SdFormatComponent(this.component);\n this.content = this.component.content;\n }\n content?: string;\n hashed?: string; // Dùng để ép Angular nhận diện sự thay đổi của HTML khi content/variables\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService,\n private formGenericService: FormGenericService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(async () => {\n if (this.component.template) {\n this.content = await this.formGenericService.html.getContent(this.component.template);\n } else {\n this.content = this.component.content;\n }\n this.hashed = Utilities.hash({\n content: this.content,\n variables: this.component.properties?.variables?.reduce(\n (current, next) => ({\n ...current,\n [next.key]: next.value,\n }),\n {}\n ),\n });\n this.ref.markForCheck();\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (!content) {\n <div class=\"c-html d-flex align-items-center justify-content-center\">\n <span class=\"material-icons\"> html </span>\n </div>\n} @else {\n <div [innerHTML]=\"hashed | htmlPipe: content: component\"></div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdFormGenericComponent, SdFormGenericGroup } from '../../../../models';\nimport { SdInput } from '@sdcorejs/angular/forms';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'attribute-parameter',\n templateUrl: './attribute-parameter.component.html',\n styleUrl: './attribute-parameter.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdButton, SdModal, SdInput, TranslatePipe],\n})\nexport class AttributeParameter implements OnInit {\n @ViewChild(SdModal) modal?: SdModal;\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n form = new FormGroup({});\n @Input() label?: string;\n\n items: {\n id: string;\n key: string;\n value: any;\n }[] = [];\n queryString?: string;\n #model!: Record<string, any>;\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\n this.#model = JSON.parse(JSON.stringify({ ...model }));\n // Parse JSON -> STRING để hiển thị trên UI\n this.queryString = JSON.stringify(this.#model);\n this.items = Object.keys(this.#model).map(key => ({\n id: Utilities.randomId(),\n key,\n value: this.#model?.[key],\n }));\n }\n @Output() modelChange = new EventEmitter<Record<string, string>>();\n\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n edit = async () => {\n this.modal?.open?.();\n this.ref.markForCheck();\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n addField = () => {\n this.items.push({\n id: Utilities.randomId(),\n key: '',\n value: '',\n });\n this.ref.markForCheck();\n };\n\n remove = (idx: number) => {\n this.items.splice(idx, 1);\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n const result: Record<string, string> = {};\n for (const { key, value } of this.items) {\n if (value !== undefined && value !== null && value !== '') {\n result[key] = value;\n }\n }\n this.modelChange.emit(result);\n this.modal?.close();\n this.ref.markForCheck();\n };\n}\n\nexport interface Property {\n value: string;\n display: string;\n}\n","<div class=\"d-flex align-items-center py-4\">\n @if (label) {\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\n }\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\n </div>\n</div>\n<sd-modal [title]=\"'core.component.form-builder.assign-parameter-value' | translate\" width=\"500px\">\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.add-field' | translate\" color=\"primary\" (click)=\"addField()\"></sd-button>\n </div>\n <!-- Cấp 1 -->\n @for (item of items; track item.id; let idx = $index) {\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\n <sd-input [label]=\"'core.component.form-builder.parameter-name' | translate\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"item.key\" required hideInlineError></sd-input>\n <sd-input [label]=\"'core.component.form-builder.parameter-value' | translate\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"item.value\" required hideInlineError></sd-input>\n <div style=\"width: 32px; min-width: 32px\">\n <sd-button\n prefixIcon=\"delete\"\n [tooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"remove(idx)\"\n size=\"sm\"\n class=\"p-0\"\n ></sd-button>\n </div>\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n</sd-modal>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, inject, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericUpload,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { debounceTime, filter, Subscription } from 'rxjs';\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\nimport { AttributeParameter } from '../../attribute-parameter/attribute-parameter.component';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'upload-attribute',\n templateUrl: './upload-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AttributeTemplate,\n AttributeInput,\n AttributeInputNumber,\n AttributeSwitch,\n AttributeSelect,\n AttributeExpression,\n AttributeParameter,\n TranslatePipe,\n ],\n})\nexport class UploadAttribute implements AfterViewInit, OnDestroy {\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n component!: SdFormGenericUpload;\n extension?: string;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericUpload) {\n this.component = component;\n SdFormatComponent(this.component);\n this.extension = this.component.properties!.extensions?.join(',') || '';\n }\n\n #subscription = new Subscription();\n readonly #i18n = inject(I18nService);\n // Dropdown nguồn upload (mobile); display dịch qua i18n để hỗ trợ EN\n sources: {\n value: 'ALL' | 'PHOTO_LIBRARY' | 'CAPTURE';\n display: string;\n }[] = [\n {\n value: 'ALL',\n display: this.#i18n.t('core.component.form-builder.upload-source.all'),\n },\n {\n value: 'PHOTO_LIBRARY',\n display: this.#i18n.t('core.component.form-builder.upload-source.photo-library'),\n },\n {\n value: 'CAPTURE',\n display: this.#i18n.t('core.component.form-builder.upload-source.capture'),\n },\n ];\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'upload') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.component.properties!.type = this.component.properties!.type || 'file';\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n\n onChangeExtension = (extension: string) => {\n this.extension = extension;\n this.component.properties!.extensions =\n extension\n ?.split(',')\n ?.map(val => val?.trim())\n ?.filter(val => !!val) || [];\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n <attribute-select\n [label]=\"'core.component.form-builder.type' | translate\"\n [(model)]=\"component.properties!.type\"\n [items]=\"[\n { value: 'file', display: ('core.component.form-builder.file' | translate) },\n { value: 'image', display: ('core.component.form-builder.image' | translate) }\n ]\"></attribute-select>\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n <attribute-input-number [label]=\"'core.component.form-builder.max-files' | translate\" [(model)]=\"component.properties!.max\"></attribute-input-number>\n <attribute-input-number [label]=\"'core.component.form-builder.size-mb' | translate\" [(model)]=\"component.properties!.maxSize\"></attribute-input-number>\n @if (component.properties!.type === 'file') {\n <attribute-input [label]=\"'core.component.form-builder.format-example' | translate\" [model]=\"extension\" (modelChange)=\"onChangeExtension($event)\"></attribute-input>\n }\n @if (component.properties!.type === 'image') {\n <attribute-select [label]=\"'core.component.form-builder.source-mobile' | translate\" [(model)]=\"component.properties!.source\" [items]=\"sources\"></attribute-select>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">settings</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-parameter [label]=\"'core.component.form-builder.assign-parameter' | translate\" [components]=\"components\" [(model)]=\"component.properties!.args\"></attribute-parameter>\n </div>\n </details>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericUpload } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\n\n@Component({\n selector: 'upload-control',\n templateUrl: './upload-control.component.html',\n styleUrl: './upload-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UploadControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericUpload;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericUpload) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n}\n","@if (component.properties?.viewed) {\n <div class=\"d-block T12R text-secondary\">\n {{ component.label }}\n </div>\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 1280 1280\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n stroke-linejoin=\"round\"\n stroke-miterlimit=\"2\"\n alt=\"This is an image placeholder\">\n <path fill=\"#e5e9ed\" d=\"M0 0h1280v1280H0z\"></path>\n <path d=\"M910 410H370v470h540V410zm-57.333 57.333v355.334H427.333V467.333h425.334z\" fill=\"#cad3db\"></path>\n <path d=\"M810 770H480v-60l100-170 130 170 100-65v125z\" fill=\"#cad3db\"></path>\n <circle cx=\"750\" cy=\"550\" r=\"50\" fill=\"#cad3db\" transform=\"translate(10 10)\"></circle>\n </svg>\n} @else {\n <div class=\"d-block mb-0 T14M\">\n {{ component.label }}\n @if (component.validate?.required) {\n <span class=\"text-error mb-2\">*</span>\n }\n </div>\n <div class=\"c-upload-file d-flex align-items-center justify-content-between\">\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 1280 1280\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n stroke-linejoin=\"round\"\n stroke-miterlimit=\"2\"\n alt=\"This is an image placeholder\">\n <path fill=\"#e5e9ed\" d=\"M0 0h1280v1280H0z\"></path>\n <path d=\"M910 410H370v470h540V410zm-57.333 57.333v355.334H427.333V467.333h425.334z\" fill=\"#cad3db\"></path>\n <path d=\"M810 770H480v-60l100-170 130 170 100-65v125z\" fill=\"#cad3db\"></path>\n <circle cx=\"750\" cy=\"550\" r=\"50\" fill=\"#cad3db\" transform=\"translate(10 10)\"></circle>\n </svg>\n </div>\n}\n","import { Component, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../../../configurations';\nimport {\n SdFormGenericComponent,\n SdFormGenericDefinitionTable,\n SdFormGenericGroup,\n SdFormGenericTableColumn,\n SdFormGenericVariable,\n TableColumnTypes,\n} from '../../../../models';\nimport { AttributeInput } from '../attribute-input/attribute-input.component';\nimport { AttributeSelect } from '../attribute-select/attribute-select.component';\nimport { AttributeSelection } from '../attribute-selection/attribute-selection.component';\nimport { AttributeSwitch } from '../attribute-switch/attribute-switch.component';\nimport { AttributeParameter } from '../attribute-parameter/attribute-parameter.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n selector: 'attribute-table',\n templateUrl: './attribute-table.component.html',\n imports: [\n MatDividerModule,\n SdLabel,\n SdAutocomplete,\n SdButton,\n SdModal,\n AttributeSelection,\n AttributeInput,\n AttributeSelect,\n AttributeSwitch,\n AttributeParameter,\n TranslatePipe,\n ],\n})\nexport class AttributeTable {\n @ViewChild(SdModal) modal?: SdModal;\n form = new FormGroup({});\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n // ColumnsKey\n columnsKey?: string;\n @Input({ alias: 'columnsKey', required: true }) set _columnsKey(columnsKey: string | undefined | null) {\n if (this.columnsKey !== columnsKey) {\n this.columnsKey = columnsKey?.toString();\n }\n }\n @Output() columnsKeyChange = new EventEmitter<string>();\n private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n tables: SdFormGenericDefinitionTable[] = this.formGenericConfiguration?.form?.tables || [];\n\n // Columns\n types = TableColumnTypes;\n columns: SdFormGenericTableColumn[] = [];\n @Input({ alias: 'columns', required: true }) set _columns(columns: SdFormGenericTableColumn[] | undefined | null) {\n if (this.columns !== columns) {\n this.columns = columns || [];\n }\n }\n @Output() columnsChange = new EventEmitter<SdFormGenericTableColumn[]>();\n column?: SdFormGenericTableColumn;\n\n onChangeColumnsKey = (value: any) => {\n this.columnsKeyChange.emit(value);\n const table = this.tables.find(e => e.value === value);\n if (table) {\n this.columns = table.columns();\n } else {\n this.columns = [];\n }\n this.columnsChange.emit(this.columns);\n };\n\n addColumn = () => {\n this.selectedIdx = undefined;\n this.column = {\n key: Utilities.randomId('key'),\n label: Utilities.randomId('label'),\n type: 'string',\n width: '100px',\n validate: {},\n };\n this.modal?.open();\n };\n\n // Map column type → Material Symbol icon (per design handoff form-builder redesign).\n readonly columnTypeIcons: Record<string, string> = {\n string: 'text_fields',\n number: '123',\n boolean: 'check_box',\n bool: 'check_box',\n date: 'event',\n datetime: 'calendar_month',\n radio: 'radio_button_checked',\n values: 'arrow_drop_down_circle',\n image: 'image',\n file: 'attach_file',\n };\n columnTypeSymbol = (type: string | undefined): string => this.columnTypeIcons[type || 'string'] ?? 'text_fields';\n\n selectedIdx? = 0;\n editColumn = (idx: number) => {\n if (this.columns[idx]) {\n this.selectedIdx = idx;\n this.column = JSON.parse(JSON.stringify(this.columns[idx]));\n this.column!.validate = this.column?.validate || {};\n this.modal?.open();\n }\n };\n\n removeColumn = (idx: number) => {\n this.columns.splice(idx, 1);\n this.columnsChange.emit(this.columns);\n };\n\n onConfirm = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n if (this.column) {\n if (this.selectedIdx! >= 0) {\n this.columns.splice(this.selectedIdx!, 1, this.column);\n } else {\n this.columns.push(this.column);\n }\n this.columnsChange.emit(this.columns);\n }\n this.modal?.close();\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">view_column</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.column-list' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n @if (tables.length) {\n <sd-autocomplete\n class=\"py-8\"\n [label]=\"'core.component.form-builder.column-data' | translate\"\n [(model)]=\"columnsKey\"\n [items]=\"tables\"\n valueField=\"value\"\n displayField=\"display\"\n (sdChange)=\"onChangeColumnsKey($event)\"\n hideInlineError></sd-autocomplete>\n }\n @if (!columnsKey) {\n <div class=\"fb-columns-list\">\n @for (item of columns; track item.key; let idx = $index) {\n <div class=\"fb-column-row\" [class.is-active]=\"idx === selectedIdx\">\n <span class=\"fb-column-row__type-icon\"><span class=\"msi\">{{ columnTypeSymbol(item.type) }}</span></span>\n <div class=\"fb-column-row__meta\">\n <div class=\"fb-column-row__label\">\n {{ item.label }}\n @if (item.validate?.required) {\n <span class=\"fb-column-row__req\">*</span>\n }\n </div>\n <div class=\"fb-column-row__sub mono\">{{ item.key }} · {{ item.type }}</div>\n </div>\n <button type=\"button\" class=\"fb-icon-btn\" [attr.aria-label]=\"'core.component.form-builder.column-config' | translate\" (click)=\"editColumn(idx)\">\n <span class=\"msi\">edit</span>\n </button>\n <button type=\"button\" class=\"fb-icon-btn danger\" [attr.aria-label]=\"'core.component.form-builder.delete' | translate\" (click)=\"removeColumn(idx)\">\n <span class=\"msi\">delete</span>\n </button>\n </div>\n }\n <a class=\"fb-add-link\" (click)=\"addColumn()\">\n <span class=\"msi\">add</span>\n {{ 'core.component.form-builder.add-column' | translate }}\n </a>\n </div>\n }\n </div>\n</details>\n\n<sd-modal [title]=\"'core.component.form-builder.column-config' | translate\" width=\"600px\">\n @if (column) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"column.key\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.column-name' | translate\" [(model)]=\"column.label\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.width' | translate\" [(model)]=\"column.width\"></attribute-input>\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"column.validate!.required\"></attribute-switch>\n <attribute-select [form]=\"form\" [label]=\"'core.component.form-builder.data-type' | translate\" [(model)]=\"column.type\" [items]=\"types\"></attribute-select>\n </div>\n </details>\n @if (column.type === 'boolean') {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.show-when-true' | translate\" [(model)]=\"column.displayOnTrue\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.show-when-false' | translate\" [(model)]=\"column.displayOnFalse\"></attribute-input>\n </div>\n </details>\n } @else if (column.type === 'values') {\n <attribute-selection\n [components]=\"components\"\n [variables]=\"variables\"\n [component]=\"column\"\n [(valuesKey)]=\"column.valuesKey\"\n [(values)]=\"column.values\"></attribute-selection>\n } @else if (column.type === 'file' || column.type === 'image') {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">settings</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.parameter' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-parameter [label]=\"'core.component.form-builder.assign-parameter' | translate\" [components]=\"components\" [(model)]=\"column!.args\"></attribute-parameter>\n </div>\n </details>\n }\n }\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.save' | translate\" (click)=\"onConfirm()\" color=\"primary\"></sd-button>\n </ng-container>\n</sd-modal>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport {\n SdFormatComponent,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericTable,\n SdFormGenericVariable,\n} from '../../../../../models';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\nimport { AttributeTable } from '../../attribute-table/attribute-table.component';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport { BuilderService } from '../../../services';\nimport { FormGroup } from '@angular/forms';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n@Component({\n selector: 'table-attribute',\n templateUrl: './table-attribute.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeTemplate, AttributeInput, AttributeSwitch, AttributeTable, AttributeExpression, TranslatePipe],\n})\nexport class TableAttribute implements AfterViewInit, OnDestroy {\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n @Input({ required: true }) variables!: SdFormGenericVariable[];\n form = new FormGroup({});\n component!: SdFormGenericTable;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTable) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n\n #changes = new Subject<void>();\n #subscription = new Subscription();\n\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n // Khi thay đổi, debound 0.5s rồi mới emit output\n this.#subscription.add(\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.builderService.componentEmitters.next(this.component);\n })\n );\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n onChangeTemplate = (template: SdFormGenericComponent) => {\n if (template && template.type === 'table') {\n // Dùng Object Assign để không bị tạo ra reference mới\n Object.assign(this.component, {\n ...template,\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\n });\n SdFormatComponent(this.component);\n this.builderService.componentEmitters.next(this.component);\n this.ref.markForCheck();\n }\n };\n\n onChanges = () => {\n this.#changes.next();\n };\n}\n","<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\n <attribute-input [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\n <attribute-input [form]=\"form\" [label]=\"'core.component.form-builder.label' | translate\" [(model)]=\"component.label\"></attribute-input>\n </div>\n</details>\n\n@if (!component.properties!.hidden && !component.properties!.viewed) {\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [label]=\"'core.component.form-builder.disabled' | translate\" [(model)]=\"component.disabled\"></attribute-switch>\n <attribute-expression\n [label]=\"'core.component.form-builder.visible-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\n <attribute-expression\n [label]=\"'core.component.form-builder.hidden-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\n @if (!component.disabled) {\n <attribute-expression\n [label]=\"'core.component.form-builder.disabled-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">verified</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.validation' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-switch [form]=\"form\" [label]=\"'core.component.form-builder.required' | translate\" [(model)]=\"component.validate!.required\"></attribute-switch>\n @if (!component.validate!.required) {\n <attribute-expression\n [label]=\"'core.component.form-builder.required-when' | translate\"\n [components]=\"components\"\n [variables]=\"variables\"\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\n }\n </div>\n </details>\n <attribute-table\n [components]=\"components\"\n [variables]=\"variables\"\n [(columnsKey)]=\"component.columnsKey\"\n [(columns)]=\"component.columns\"\n (columnsKeyChange)=\"onChanges()\"\n (columnsChange)=\"onChanges()\"></attribute-table>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, AfterViewInit, OnDestroy } from '@angular/core';\nimport { SdFormatComponent, SdFormGenericTable } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { filter, Subscription } from 'rxjs';\n\n@Component({\n selector: 'table-control',\n templateUrl: './table-control.component.html',\n styleUrl: './table-control.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule],\n})\nexport class TableControl implements AfterViewInit, OnDestroy {\n component!: SdFormGenericTable;\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTable) {\n if (this.component !== component) {\n this.component = component;\n SdFormatComponent(this.component);\n }\n }\n\n #subscription = new Subscription();\n constructor(\n private ref: ChangeDetectorRef,\n private builderService: BuilderService\n ) {}\n\n ngAfterViewInit(): void {\n this.#subscription.add(\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\n if (component) {\n this.ref.markForCheck();\n }\n })\n );\n }\n\n ngOnDestroy(): void {\n this.#subscription.unsubscribe();\n }\n\n columnIcon = (type: string) => {\n switch (type) {\n case 'number':\n return '123';\n case 'date':\n case 'datetime':\n return 'calendar_month';\n case 'boolean':\n return 'check_box';\n case 'file':\n return 'attach_file';\n case 'image':\n return 'image';\n case 'values':\n case 'radio':\n return 'radio_button_checked';\n case 'string':\n default:\n return 'text_fields';\n }\n };\n\n sampleRows = () => [0, 1, 2];\n\n cellPreview = (column: any, rowIndex: number) => {\n if (rowIndex === 0) return column.key || column.label || '-';\n if (column.type === 'number') return rowIndex + 1;\n if (column.type === 'boolean') return rowIndex === 1 ? '✓' : '—';\n if (column.type === 'date' || column.type === 'datetime') return '12/06/2026';\n if (column.type === 'file') return '—';\n return rowIndex === 1 ? 'Sample value' : '—';\n };\n}\n","<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","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, effect, inject, input, untracked } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { COMPONENT_ICONS, SdFormGenericComponent, SdFormGenericGroup } from '../../../../../models';\nimport { BuilderService } from '../../../services';\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\n\nconst ICON_PRESETS = ['category', 'folder', 'inventory_2', 'group_work', 'workspaces', 'view_quilt'] as const;\nconst COLOR_PRESETS = ['primary', 'secondary', 'success', 'warning', 'error'] as const;\n\n@Component({\n selector: 'group-attribute',\n templateUrl: './group-attribute.component.html',\n styleUrl: './group-attribute.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AttributeInput, AttributeExpression, TranslatePipe],\n})\nexport class GroupAttribute {\n // ── constants ────────────────────────────────────────────────────────\n readonly iconPresets = ICON_PRESETS;\n readonly colorPresets = COLOR_PRESETS;\n readonly componentIcons = COMPONENT_ICONS;\n\n form = new FormGroup({});\n\n // ── signal input ─────────────────────────────────────────────────────\n /** Required group reference. Mutated in place khi user pick icon/color/expression. */\n readonly group = input.required<SdFormGenericGroup>();\n\n // ── injected services ────────────────────────────────────────────────\n readonly #builderService = inject(BuilderService);\n readonly #ref = inject(ChangeDetectorRef);\n\n constructor() {\n // Bảo đảm group có properties + defaults khi input ref thay đổi.\n // untracked() vì ta mutate group (không phải read signal) — tránh tạo cycle.\n effect(() => {\n const g = this.group();\n untracked(() => {\n if (!g.properties) {\n g.properties = { icon: 'category', color: 'primary' };\n } else {\n g.properties.icon = g.properties.icon || 'category';\n g.properties.color = g.properties.color || ('primary' as any);\n }\n });\n });\n }\n\n pickIcon = (icon: string) => {\n this.group().properties.icon = icon;\n this.#builderService.componentEmitters.next(this.group());\n this.#ref.markForCheck();\n };\n\n pickColor = (color: (typeof COLOR_PRESETS)[number]) => {\n this.group().properties.color = color as any;\n this.#builderService.componentEmitters.next(this.group());\n this.#ref.markForCheck();\n };\n\n symbolForChild = (c: SdFormGenericComponent): string => {\n return this.componentIcons[c.type]?.symbol ?? 'help';\n };\n\n labelForChild = (c: SdFormGenericComponent): string => {\n return 'label' in c ? c.label : c.key || c.id;\n };\n}\n","@let _group = group();\n\n<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">info</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.general' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-input [form]=\"form\" [(model)]=\"_group.label\" [label]=\"'core.component.form-builder.label' | translate\"></attribute-input>\n\n <div class=\"fb-field\">\n <div class=\"fb-field__label\">{{ 'core.component.form-builder.group-icon' | translate }}</div>\n <div class=\"fb-icon-picker\">\n @for (icon of iconPresets; track icon) {\n <button type=\"button\" class=\"fb-icon-picker__btn\"\n [class.is-active]=\"_group.properties.icon === icon\"\n (click)=\"pickIcon(icon)\">\n <span class=\"msi\">{{ icon }}</span>\n </button>\n }\n </div>\n </div>\n\n <div class=\"fb-field\">\n <div class=\"fb-field__label\">{{ 'core.component.form-builder.group-accent-color' | translate }}</div>\n <div class=\"fb-color-swatches\">\n @for (color of colorPresets; track color) {\n <span class=\"fb-color-swatch\"\n [class]=\"color\"\n [class.is-active]=\"_group.properties.color === color\"\n (click)=\"pickColor(color)\"\n [attr.aria-label]=\"color\"></span>\n }\n </div>\n </div>\n </div>\n</details>\n\n<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">account_tree</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.group-children' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n @if (!_group.components?.length) {\n <div class=\"fb-children-empty\">{{ 'core.component.form-builder.group-no-children' | translate }}</div>\n } @else {\n <div class=\"fb-children-list\">\n @for (child of _group.components; track child.id) {\n <div class=\"fb-child-row\">\n <span class=\"fb-child-row__icon\"><span class=\"msi\">{{ symbolForChild(child) }}</span></span>\n <span class=\"fb-child-row__label\">{{ labelForChild(child) }}</span>\n <span class=\"fb-child-row__key\">{{ child.key }}</span>\n </div>\n }\n </div>\n }\n </div>\n</details>\n\n<details class=\"fb-section\" open>\n <summary class=\"fb-section__head\">\n <span class=\"msi\">visibility</span>\n <span class=\"fb-section__title\">{{ 'core.component.form-builder.display' | translate }}</span>\n <span class=\"msi chev\">chevron_right</span>\n </summary>\n <div class=\"fb-section__body\">\n <attribute-expression\n [components]=\"[]\"\n [variables]=\"[]\"\n [(model)]=\"_group.properties.visibleWhenExpression\"\n [label]=\"'core.component.form-builder.visible-when' | translate\">\n </attribute-expression>\n <attribute-expression\n [components]=\"[]\"\n [variables]=\"[]\"\n [(model)]=\"_group.properties.hiddenWhenExpression\"\n [label]=\"'core.component.form-builder.hidden-when' | translate\">\n </attribute-expression>\n </div>\n</details>\n","// Định nghĩa các Components của Form Render\nimport { SdFormGenericExpression } from './form-generic-expression.model';\n\nexport type SdFormGenericValidation = ValidationExpression | ValidationFunction;\n\ninterface ValidationBase {\n alert: 'warning' | 'error'; //\n}\n\nexport const ValidationAlerts = [\n {\n value: 'error',\n display: 'Lỗi',\n },\n {\n value: 'warning',\n display: 'Cảnh báo',\n },\n];\n\ninterface ValidationExpression extends ValidationBase {\n type: 'expression';\n expression: SdFormGenericExpression;\n message: string; // Có thể là html\n}\n\ninterface ValidationFunction extends ValidationBase {\n type: 'function';\n code: string; // Lấy từ value của SdFormGenericValidationFunction\n}\n\ninterface ValidateArgs {\n entity: Record<string, any>;\n}\n\nexport interface SdFormGenericValidationFunction {\n value: string;\n display: string;\n validate: (args: ValidateArgs) => Promise<string | undefined | null>; // Hàm trả về string message nếu có lỗi, message có thể là html\n}\n\nexport interface SdFormGenericValidationConfiguration {\n // Danh sách các functions validate được cấu hình sẵn để làm dữ liêu cho dropdown\n functions?: SdFormGenericValidationFunction[];\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdDatetime } from '@sdcorejs/angular/forms/datetime';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ArrayUtilities, DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport {\n Attribute,\n AttributeOperators,\n DayInfoPreviouses,\n DayInfoTypes,\n SdFormGenericExpression,\n SdFormGenericExpressionCondition,\n} from '../../../../models';\nimport { ExpressionQueryPipe } from '../../../../pipes';\nimport { SdSuffixDefDirective } from '@sdcorejs/angular/forms/directives';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Component xây dựng Expression dựa vào SdFormGenericExpression\n@Component({\n selector: 'expression-builder',\n templateUrl: './expression-builder.component.html',\n styleUrl: './expression-builder.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n SdInput,\n SdInputNumber,\n SdSelect,\n SdAutocomplete,\n SdButton,\n SdSelect,\n SdModal,\n ExpressionQueryPipe,\n SdDatetime,\n SdSuffixDefDirective,\n TranslatePipe,\n ],\n})\nexport class ExpressionBuilderComponent implements OnInit {\n @ViewChild(SdModal) modal?: SdModal;\n form = new FormGroup({});\n attributeOperators = AttributeOperators;\n attributes: Attribute[] = [];\n numberAttributes: Attribute[] = [];\n dateAttributes: Attribute[] = [];\n attribute: Record<string, Attribute> = {};\n types = DayInfoTypes;\n previouses = DayInfoPreviouses;\n\n @Input() label?: string;\n\n @Input('attributes') set _attributes(attributes: Attribute[]) {\n this.attributes = attributes || [];\n this.numberAttributes = this.attributes\n .filter(e => e.type === 'number')\n .map(e => ({\n ...e,\n value: '${' + e.value + '}',\n }));\n this.dateAttributes = this.attributes\n .filter(e => e.type === 'datetime')\n .map(e => ({\n ...e,\n value: '${' + e.value + '}',\n }));\n this.attribute = ArrayUtilities.toObject('value', this.attributes);\n }\n\n expression?: SdFormGenericExpression = {\n key: Utilities.randomId(),\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n };\n model?: SdFormGenericExpression = {\n key: Utilities.randomId(),\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n };\n @Input({ alias: 'model', required: true }) set _model(model: SdFormGenericExpression | undefined) {\n if (this.model !== model) {\n this.model = model;\n }\n this.model = this.model || {\n key: Utilities.randomId(),\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n };\n }\n @Output() modelChange = new EventEmitter<SdFormGenericExpression>();\n @Output() sdChange = new EventEmitter<SdFormGenericExpression>();\n @Output() edit = new EventEmitter<void>();\n\n constructor(private ref: ChangeDetectorRef) {}\n\n ngOnInit(): void {}\n\n onEdit = async () => {\n // Khi cập nhật expression thì clone ra\n this.expression = JSON.parse(JSON.stringify(this.model));\n // Thông báo cho component cha có sự kiện edit trong trường hợp attributes có thay đổi\n this.edit.next();\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n addCondition = (conditions: SdFormGenericExpression['conditions']) => {\n conditions.push({\n key: Utilities.randomId(),\n type: 'condition',\n field: undefined,\n operator: 'EQUAL',\n value: undefined,\n dayInfo: {},\n });\n this.ref.markForCheck();\n };\n\n addCombinator = (conditions: SdFormGenericExpression['conditions']) => {\n conditions.push({\n key: Utilities.randomId(),\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n });\n this.ref.markForCheck();\n };\n\n remove = (conditions: SdFormGenericExpression['conditions'], idx: number) => {\n conditions.splice(idx, 1);\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n this.model = this.expression;\n this.modelChange.emit(this.model);\n this.sdChange.emit(this.model);\n this.modal?.close();\n this.ref.markForCheck();\n };\n\n onChangeAttribute = (condition: SdFormGenericExpressionCondition) => {\n const fieldAttribute = this.attribute[condition.field!];\n if (fieldAttribute.type === 'datetime') {\n condition.dayInfo = condition.dayInfo || {};\n }\n };\n\n onChangeDateInfo = (condition: SdFormGenericExpressionCondition) => {\n // Xử lý giá trị\n if (condition.dayInfo?.type === 'NOW') {\n condition.value = 'now';\n } else if (condition.dayInfo?.type === 'RELATED' && condition.dayInfo.relatedValue) {\n condition.value = DayInfoPreviouses.find(e => e.value === condition.dayInfo.related)?.format(condition.dayInfo.relatedValue) ?? null;\n } else if (condition.value?.type === 'DATETIME' && condition.value) {\n condition.value = DateUtilities.toFormat(condition.value, 'yyyy/MM/dd HH:mm:00');\n }\n };\n}\n","<!--\n FEEL-style expression trigger pill (M3 redesign).\n Bấm vào pill mở modal builder hiện tại (onEdit).\n-->\n<div class=\"fb-field\">\n @if (label) {\n <div class=\"fb-field__label\">{{ label }}</div>\n }\n @let exprText = model | expressionQuery;\n <div class=\"fb-expr\" (click)=\"onEdit()\" role=\"button\" tabindex=\"0\">\n <span class=\"fb-expr__badge\">FEEL</span>\n @if (exprText) {\n <span class=\"fb-expr__code mono\">{{ exprText }}</span>\n } @else {\n <span class=\"empty\">{{ 'core.component.form-builder.set-expression' | translate }}</span>\n }\n <button type=\"button\" class=\"fb-icon-btn\" (click)=\"onEdit(); $event.stopPropagation()\" aria-label=\"edit expression\">\n <span class=\"msi\">functions</span>\n </button>\n </div>\n</div>\n@if (expression) {\n <sd-modal [title]=\"'core.component.form-builder.set-expression' | translate\">\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button\n prefixIcon=\"calculate\"\n class=\"mr-4\"\n [title]=\"'core.component.form-builder.condition-group' | translate\"\n color=\"primary\"\n (click)=\"addCombinator(expression.conditions)\"></sd-button>\n <sd-button\n prefixIcon=\"add\"\n [title]=\"'core.component.form-builder.condition' | translate\"\n color=\"primary\"\n (click)=\"addCondition(expression.conditions)\"\n type=\"fill\"></sd-button>\n </div>\n <!-- Cấp 1 -->\n @for (conditionLv1 of expression.conditions; track conditionLv1.key; let idxLv1 = $index) {\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px\">\n <div class=\"c-condition\">\n <!-- Dòng 1 chỉ hiện WHERE -->\n @if (idxLv1 === 0) {\n <div class=\"c-where\">WHERE</div>\n }\n <!-- Dòng 2 hiển thị combinator -->\n @if (idxLv1 === 1) {\n <div class=\"c-select\">\n <sd-select\n size=\"sm\"\n [(model)]=\"expression.combinator\"\n [items]=\"[\n { value: '&&', display: 'AND' },\n { value: '||', display: 'OR' }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError=\"\"></sd-select>\n </div>\n }\n </div>\n @if (conditionLv1.type === 'condition') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 200px\"\n [(model)]=\"conditionLv1.field\"\n [items]=\"attributes\"\n (sdChange)=\"onChangeAttribute(conditionLv1)\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n @let fieldAttribute = attribute[conditionLv1.field!];\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 100px\"\n [(model)]=\"conditionLv1.operator\"\n [items]=\"attributeOperators[fieldAttribute?.type || 'string']\"\n valueField=\"value\"\n displayField=\"display\"\n [disabled]=\"!fieldAttribute?.type\"\n required\n hideInlineError></sd-select>\n @if (\n !!fieldAttribute?.type && conditionLv1.operator && conditionLv1.operator !== 'NULL' && conditionLv1.operator !== 'NOT_NULL'\n ) {\n @if (fieldAttribute.type === 'string') {\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input>\n } @else if (fieldAttribute.type === 'number') {\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"conditionLv1.value\" hideInlineError></sd-input-number>\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv1.value\"\n [items]=\"numberAttributes\"\n valueField=\"value\"\n displayField=\"display\"\n hideInlineError></sd-autocomplete>\n } @else if (fieldAttribute.type === 'datetime' && conditionLv1.dayInfo) {\n <sd-select\n size=\"sm\"\n [placeholder]=\"'core.component.form-builder.time' | translate\"\n [form]=\"form\"\n style=\"width: 150px\"\n [items]=\"types\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"conditionLv1.dayInfo.type\"\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n required\n hideInlineError>\n </sd-select>\n @if (conditionLv1.dayInfo.type === 'RELATED') {\n <sd-input-number\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 80px\"\n [(model)]=\"conditionLv1.dayInfo.relatedValue\"\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n [min]=\"1\"\n required\n hideInlineError>\n </sd-input-number>\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [items]=\"previouses\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"conditionLv1.dayInfo.related\"\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n required\n hideInlineError>\n </sd-select>\n } @else if (conditionLv1.dayInfo.type === 'DATETIME') {\n <sd-datetime\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv1.value\"\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\n required\n hideInlineError>\n </sd-datetime>\n } @else if (conditionLv1.dayInfo.type === 'ATTRIBUTE') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv1.value\"\n [items]=\"dateAttributes\"\n valueField=\"value\"\n displayField=\"display\"\n hideInlineError></sd-autocomplete>\n }\n } @else if (fieldAttribute.type === 'boolean') {\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv1.value\"\n [items]=\"[\n { value: true, display: fieldAttribute.displayOnTrue },\n { value: false, display: fieldAttribute.displayOnFalse }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-select>\n } @else if (fieldAttribute.type === 'values') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv1.value\"\n [items]=\"fieldAttribute.values\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n }\n }\n <sd-button class=\"ml-auto\" prefixIcon=\"delete\" [tooltip]=\"'core.component.form-builder.delete' | translate\" (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n } @else if (conditionLv1.type === 'combinator') {\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button class=\"mr-4\" prefixIcon=\"delete\" [tooltip]=\"'core.component.form-builder.delete' | translate\" (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n <sd-button\n prefixIcon=\"add\"\n [title]=\"'core.component.form-builder.condition' | translate\"\n size=\"sm\"\n color=\"primary\"\n (click)=\"addCondition(conditionLv1.conditions)\"\n type=\"fill\"></sd-button>\n </div>\n <!-- Cấp 2 -->\n @for (conditionLv2 of conditionLv1.conditions; track conditionLv2.key; let idxLv2 = $index) {\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px\">\n <div class=\"c-condition\">\n <!-- Dòng 1 chỉ hiện WHERE -->\n @if (idxLv2 === 0) {\n <div class=\"c-where\">WHERE</div>\n }\n <!-- Dòng 2 hiển thị combinator -->\n @if (idxLv2 === 1) {\n <div class=\"c-select\">\n <sd-select\n size=\"sm\"\n [(model)]=\"conditionLv1.combinator\"\n [items]=\"[\n { value: '&&', display: 'AND' },\n { value: '||', display: 'OR' }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError=\"\"></sd-select>\n </div>\n }\n </div>\n @if (conditionLv2.type === 'condition') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 200px\"\n [(model)]=\"conditionLv2.field\"\n [items]=\"attributes\"\n (sdChange)=\"onChangeAttribute(conditionLv2)\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n @let fieldAttribute = attribute[conditionLv2.field!];\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 100px\"\n [(model)]=\"conditionLv2.operator\"\n [items]=\"attributeOperators[fieldAttribute?.type || 'string']\"\n valueField=\"value\"\n displayField=\"display\"\n [disabled]=\"!fieldAttribute?.type\"\n required\n hideInlineError></sd-select>\n @if (\n !!fieldAttribute?.type &&\n conditionLv2.operator &&\n conditionLv2.operator !== 'NULL' &&\n conditionLv2.operator !== 'NOT_NULL'\n ) {\n @if (fieldAttribute.type === 'string') {\n <sd-input\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n required\n hideInlineError></sd-input>\n } @else if (fieldAttribute.type === 'number') {\n <sd-input-number\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n hideInlineError></sd-input-number>\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n [items]=\"numberAttributes\"\n valueField=\"value\"\n displayField=\"display\"\n hideInlineError></sd-autocomplete>\n } @else if (fieldAttribute.type === 'datetime' && conditionLv2.dayInfo) {\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n [placeholder]=\"'core.component.form-builder.time' | translate\"\n style=\"width: 150px\"\n [items]=\"types\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"conditionLv2.dayInfo.type\"\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n required\n hideInlineError>\n </sd-select>\n @if (conditionLv2.dayInfo.type === 'RELATED') {\n <sd-input-number\n size=\"sm\"\n [form]=\"form\"\n style=\"width: 80px\"\n [(model)]=\"conditionLv2.dayInfo.relatedValue\"\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n [min]=\"1\"\n required\n hideInlineError>\n </sd-input-number>\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [items]=\"previouses\"\n valueField=\"value\"\n displayField=\"display\"\n [(model)]=\"conditionLv2.dayInfo.related\"\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n required\n hideInlineError>\n </sd-select>\n } @else if (conditionLv2.dayInfo.type === 'DATETIME') {\n <sd-datetime\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\n required\n hideInlineError>\n </sd-datetime>\n } @else if (conditionLv2.dayInfo.type === 'ATTRIBUTE') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n [items]=\"dateAttributes\"\n valueField=\"value\"\n displayField=\"display\"\n hideInlineError></sd-autocomplete>\n }\n } @else if (fieldAttribute.type === 'boolean') {\n <sd-select\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n [items]=\"[\n { value: true, display: fieldAttribute.displayOnTrue },\n { value: false, display: fieldAttribute.displayOnFalse }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-select>\n } @else if (fieldAttribute.type === 'values') {\n <sd-autocomplete\n size=\"sm\"\n [form]=\"form\"\n style=\"flex: 1\"\n [(model)]=\"conditionLv2.value\"\n [items]=\"fieldAttribute.values\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError></sd-autocomplete>\n }\n }\n <sd-button\n class=\"ml-auto\"\n prefixIcon=\"delete\"\n [tooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"remove(conditionLv1.conditions, idxLv1)\"></sd-button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n </sd-modal>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n Output,\n ViewChild,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdInput, SdSelect } from '@sdcorejs/angular/forms';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { ISdFormGenericConfiguration, SD_FORM_GENERIC_CONFIGURATION } from '../../../../configurations';\nimport { Attribute, GetAttributes } from '../../../../models';\nimport {\n SdFormGenericValidation,\n SdFormGenericValidationFunction,\n ValidationAlerts,\n} from '../../../../models/form-generic-validation.model';\nimport { SdFormGeneric } from '../../../../models/form-generic.model';\nimport { ExpressionBuilderComponent } from '../expression-builder/expression-builder.component';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\n@Component({\n selector: 'configure-validation',\n templateUrl: './configure-validation.component.html',\n styleUrl: './configure-validation.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdIcon, MatMenuModule, SdModal, SdButton, SdInput, SdSelect, ExpressionBuilderComponent, TranslatePipe],\n})\nexport class ConfigureValidationComponent implements AfterViewInit, OnDestroy {\n @ViewChild(SdModal) modal?: SdModal;\n form = new FormGroup({});\n attributes: Attribute[] = [];\n validations: SdFormGenericValidation[] = [];\n functions: SdFormGenericValidationFunction[] = [];\n alerts = ValidationAlerts;\n @Output() accept = new EventEmitter<SdFormGenericValidation[]>();\n private readonly ref = inject(ChangeDetectorRef);\n private readonly formGenericConfiguration: ISdFormGenericConfiguration | null = inject(SD_FORM_GENERIC_CONFIGURATION, { optional: true });\n\n constructor() {\n this.functions = this.formGenericConfiguration?.form?.validation?.functions || [];\n }\n\n ngAfterViewInit(): void {\n // this.#subscription.add(\n // this.#validationsChanges.pipe(debounceTime(200), startWith(this.validations)).subscribe(() => {\n // // Khi component thay đổi thì sync lại\n // this.ref.markForCheck();\n // })\n // );\n }\n\n ngOnDestroy(): void {}\n\n open = (formGeneric: SdFormGeneric) => {\n // Xử lý gán validations\n if (Array.isArray(formGeneric?.validations)) {\n this.validations = JSON.parse(JSON.stringify(formGeneric?.validations));\n } else {\n this.validations = [];\n }\n this.attributes = GetAttributes(formGeneric.components);\n if (formGeneric) {\n this.modal?.open();\n this.ref.markForCheck();\n }\n };\n\n addValidation = (type: SdFormGenericValidation['type']) => {\n if (type === 'expression') {\n this.validations.push({\n alert: 'error',\n type,\n expression: {\n key: Utilities.randomId(),\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n },\n message: '',\n });\n } else if (type === 'function') {\n this.validations.push({\n alert: 'error',\n type,\n code: '',\n });\n }\n this.ref.markForCheck();\n };\n\n removaValidation = (index: number) => {\n this.validations.splice(index, 1);\n this.ref.markForCheck();\n };\n\n updateValidations = () => {\n this.accept.emit(this.validations);\n this.modal?.close();\n };\n}\n","<sd-modal [title]=\"'core.component.form-builder.config-validation-error-warning' | translate\" view=\"dialog\" width=\"800px\" #popupConfigureVariables>\n @for (validation of validations; track $index; let idx = $index) {\n <div class=\"mat-elevation-z2 position-relative p-8 mb-16\" style=\"border-radius: 8px;\">\n <div class=\"row mx-0\">\n <sd-select\n class=\"col-3\"\n [label]=\"'core.component.form-builder.message-type' | translate\"\n [(model)]=\"validation.alert\"\n [items]=\"alerts\"\n valueField=\"value\"\n displayField=\"display\"\n required></sd-select>\n @if (validation.type === 'expression') {\n <sd-input class=\"col-9\" [form]=\"form\" [label]=\"'core.component.form-builder.message-display' | translate\" [(model)]=\"validation.message\" required></sd-input>\n <expression-builder class=\"col-12\" [label]=\"'core.component.form-builder.condition-expression' | translate\" [(model)]=\"validation.expression\" [attributes]=\"attributes\"></expression-builder>\n } @else if (validation.type === 'function') {\n <sd-select\n class=\"col-9\"\n [form]=\"form\"\n [(model)]=\"validation.code\"\n [items]=\"functions\"\n valueField=\"value\"\n displayField=\"display\"\n required></sd-select>\n }\n <sd-icon class=\"c-close-icon\" (click)=\"removaValidation(idx)\" name=\"delete\"></sd-icon>\n <!-- <sd-button\n\n prefixIcon=\"delete\"\n (click)=\"removaValidation(idx)\"\n color=\"error\"\n type=\"text\"></sd-button> -->\n </div>\n </div>\n }\n <sd-button [title]=\"'core.component.form-builder.add-validation' | translate\" [matMenuTriggerFor]=\"menu\" prefixIcon=\"add\" color=\"primary\" type=\"text\"></sd-button>\n <mat-menu #menu=\"matMenu\">\n <button (click)=\"addValidation('expression')\" mat-menu-item type=\"button\">\n <!-- <sd-icon fontIcon=\"warning\"></sd-icon> -->\n <span>{{ 'core.component.form-builder.expression' | translate }}</span>\n </button>\n <button (click)=\"addValidation('function')\" mat-menu-item type=\"button\">\n <!-- <sd-icon fontIcon=\"error\"></sd-icon> -->\n <span>{{ 'core.component.form-builder.available-methods' | translate }}</span>\n </button>\n </mat-menu>\n <ng-container sdFooter>\n <sd-button type=\"fill\" [title]=\"'core.component.form-builder.save' | translate\" (click)=\"updateValidations()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\n </ng-container>\n</sd-modal>\n","import { SdFormGenericComponent, SdFormGenericGroup } from '../../models';\n\nexport type FormBuilderLayoutItem = SdFormGenericComponent | SdFormGenericGroup;\n\nexport interface FormBuilderLayoutRow {\n id: string;\n items: FormBuilderLayoutItem[];\n columns: number;\n}\n\nexport interface MoveItemToRowRequest {\n itemId: string;\n targetRowId: string;\n targetIndex?: number;\n}\n\nexport interface MoveItemToRowResult {\n rows: FormBuilderLayoutRow[];\n moved: boolean;\n reason?: 'item-not-found' | 'target-row-not-found' | 'row-overflow';\n}\n\nexport function normalizeColumns(item: FormBuilderLayoutItem): number {\n const raw = Number(item.layout?.columns ?? 12);\n if (!Number.isFinite(raw)) return 12;\n return Math.min(12, Math.max(1, Math.round(raw)));\n}\n\nexport function buildFormBuilderRows(components: FormBuilderLayoutItem[]): FormBuilderLayoutRow[] {\n const rows: FormBuilderLayoutRow[] = [];\n\n for (const component of components) {\n const columns = normalizeColumns(component);\n let row = rows[rows.length - 1];\n\n if (!row || row.columns + columns > 12) {\n row = { id: '', items: [], columns: 0 };\n rows.push(row);\n }\n\n row.items.push(component);\n row.columns += columns;\n }\n\n return rows.map(row => ({\n ...row,\n id: createRowId(row),\n }));\n}\n\nexport function flattenFormBuilderRows(rows: FormBuilderLayoutRow[]): FormBuilderLayoutItem[] {\n return rows.flatMap(row => row.items);\n}\n\nexport function canPlaceInRow(row: FormBuilderLayoutRow, item: FormBuilderLayoutItem, ignoredItemId?: string): boolean {\n const currentColumns = row.items\n .filter(rowItem => rowItem.id !== ignoredItemId)\n .reduce((sum, rowItem) => sum + normalizeColumns(rowItem), 0);\n\n return currentColumns + normalizeColumns(item) <= 12;\n}\n\nexport function moveItemToRow(rows: FormBuilderLayoutRow[], request: MoveItemToRowRequest): MoveItemToRowResult {\n const source = findItem(rows, request.itemId);\n if (!source) {\n return { rows, moved: false, reason: 'item-not-found' };\n }\n\n const targetRow = rows.find(row => row.id === request.targetRowId);\n if (!targetRow) {\n return { rows, moved: false, reason: 'target-row-not-found' };\n }\n\n if (!canPlaceInRow(targetRow, source.item, request.itemId)) {\n return { rows, moved: false, reason: 'row-overflow' };\n }\n\n const nextRows = rows.map(row => ({ ...row, items: [...row.items] }));\n const nextSource = findItem(nextRows, request.itemId);\n const nextTarget = nextRows.find(row => row.id === request.targetRowId);\n if (!nextSource || !nextTarget) {\n return { rows, moved: false, reason: 'item-not-found' };\n }\n\n const [item] = nextRows[nextSource.rowIndex].items.splice(nextSource.itemIndex, 1);\n const insertAt = clampIndex(request.targetIndex ?? nextTarget.items.length, nextTarget.items.length);\n nextTarget.items.splice(insertAt, 0, item);\n\n return {\n rows: buildFormBuilderRows(flattenFormBuilderRows(nextRows)),\n moved: true,\n };\n}\n\nfunction createRowId(row: Pick<FormBuilderLayoutRow, 'items'>): string {\n const firstId = row.items[0]?.id || 'empty';\n return `row-${firstId}`;\n}\n\nfunction clampIndex(index: number, length: number): number {\n return Math.max(0, Math.min(index, length));\n}\n\nfunction findItem(\n rows: FormBuilderLayoutRow[],\n itemId: string\n): { rowIndex: number; itemIndex: number; item: FormBuilderLayoutItem } | undefined {\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {\n const itemIndex = rows[rowIndex].items.findIndex(item => item.id === itemId);\n if (itemIndex >= 0) {\n return {\n rowIndex,\n itemIndex,\n item: rows[rowIndex].items[itemIndex],\n };\n }\n }\n return undefined;\n}\n","import { CdkDrag, CdkDragDrop, CdkDragMove, CdkDropList, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n OnInit,\n OnDestroy,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\nimport { SdConfirmService, SdNotifyService } from '@sdcorejs/angular/services';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { debounceTime, startWith, Subject, Subscription } from 'rxjs';\nimport {\n COMPONENT_ICONS,\n FormBuilderComponent,\n FormBuilderComponentGroup,\n FormBuilderComponents,\n GenerateId,\n GenerateKey,\n SdFormGenericComponent,\n SdFormGenericGroup,\n SdFormGenericVariable,\n} from '../../models';\nimport { SdFormGenericValidation } from '../../models/form-generic-validation.model';\nimport { SdFormGeneric } from '../../models/form-generic.model';\nimport { SdFormRender } from '../form-render/form-render.component';\nimport {\n CheckboxAttribute,\n CheckboxControl,\n ChipCalendarAttribute,\n ChipCalendarControl,\n ChipStringAttribute,\n ChipStringControl,\n DatetimeAttribute,\n DatetimeControl,\n GroupAttribute,\n HtmlAttribute,\n HtmlControl,\n NumberAttribute,\n NumberControl,\n RadioAttribute,\n RadioControl,\n SelectAttribute,\n SelectControl,\n TableAttribute,\n TableControl,\n TextareaAttribute,\n TextareaControl,\n TextfieldAttribute,\n TextFieldControl,\n UploadAttribute,\n UploadControl,\n} from './components';\nimport { ConfigureValidationComponent } from './components/configure-validation/configure-validation.component';\nimport { buildFormBuilderRows, canPlaceInRow, flattenFormBuilderRows, FormBuilderLayoutRow, moveItemToRow } from './form-builder-layout';\nimport { BuilderService } from './services';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\n\ninterface DragDropRowItem extends FormBuilderLayoutRow {\n rowIndex?: number;\n}\n\ninterface ResizeState {\n itemId: string;\n rowId: string;\n columns: string;\n}\n\n@Component({\n selector: 'sd-form-builder',\n templateUrl: './form-builder.component.html',\n styleUrl: './form-builder.component.scss',\n imports: [\n CommonModule,\n MatTooltipModule,\n DragDropModule,\n // Controls\n TextFieldControl,\n TextfieldAttribute,\n TextareaControl,\n TextareaAttribute,\n ChipStringControl,\n ChipStringAttribute,\n ChipCalendarControl,\n ChipCalendarAttribute,\n NumberControl,\n NumberAttribute,\n SelectControl,\n SelectAttribute,\n DatetimeControl,\n DatetimeAttribute,\n RadioControl,\n RadioAttribute,\n CheckboxControl,\n CheckboxAttribute,\n HtmlControl,\n HtmlAttribute,\n UploadControl,\n UploadAttribute,\n TableControl,\n TableAttribute,\n GroupAttribute,\n SdModal,\n SdInput,\n SdTextarea,\n SdButton,\n SdFormRender,\n ConfigureValidationComponent,\n TranslatePipe,\n ],\n})\nexport class SdFormBuilder implements OnInit, OnDestroy {\n // ── viewChild signals (Angular 17+) ────────────────────────────────────\n readonly popupViewJSON = viewChild<SdModal>('popupViewJSON');\n readonly popupConfigureVariables = viewChild<SdModal>('popupConfigureVariables');\n readonly configureValidation = viewChild(ConfigureValidationComponent);\n readonly formRender = viewChild(SdFormRender);\n\n // ── injected services ──────────────────────────────────────────────────\n readonly #ref = inject(ChangeDetectorRef);\n readonly #notifyService = inject(SdNotifyService);\n readonly #confirmService = inject(SdConfirmService);\n readonly #builderService = inject(BuilderService);\n readonly #i18n = inject(I18nService);\n\n form = new FormGroup({});\n\n // ── signal inputs ──────────────────────────────────────────────────────\n /** Input chính: schema form. Mỗi lần ref thay đổi → effect sẽ clone về local arrays. */\n readonly formGeneric = input<SdFormGeneric | undefined>(undefined);\n\n // ── component registry (immutable) ─────────────────────────────────────\n readonly formBuilderComponents = FormBuilderComponents;\n readonly componentIcons = COMPONENT_ICONS;\n\n // ── palette state (signal + computed group buckets) ────────────────────\n readonly paletteSearch = signal('');\n readonly paletteGroups = computed<{ key: FormBuilderComponentGroup; label: string; items: FormBuilderComponent[] }[]>(() => {\n const term = this.paletteSearch().trim().toLowerCase();\n // why: trong chế độ Detail group, ẩn item 'group' khỏi palette — không cho group lồng group.\n const inGroup = !!this.editingGroupId();\n const match = (c: FormBuilderComponent) =>\n (!inGroup || c.type !== 'group') && (!term || c.name.toLowerCase().includes(term) || c.type.toLowerCase().includes(term));\n const buckets: Record<FormBuilderComponentGroup, FormBuilderComponent[]> = { basic: [], choice: [], advanced: [], layout: [] };\n for (const c of this.formBuilderComponents) {\n if (match(c)) buckets[c.group].push(c);\n }\n return [\n { key: 'basic' as const, label: 'Basic', items: buckets.basic },\n { key: 'choice' as const, label: 'Choice', items: buckets.choice },\n { key: 'advanced' as const, label: 'Advanced', items: buckets.advanced },\n { key: 'layout' as const, label: 'Layout', items: buckets.layout },\n ].filter(g => g.items.length > 0);\n });\n\n // ── local mutable state ────────────────────────────────────────────────\n // Components/variables/validations giữ là plain arrays vì code hiện tại\n // mutate in-place rất nhiều chỗ (push, splice, forEach …). Đổi sang signal\n // tốn rủi ro với rất ít lợi ích — chỉ markForCheck() khi cần.\n components: Required<SdFormGeneric>['components'] = [];\n variables: Required<SdFormGeneric>['variables'] = [];\n validations: Required<SdFormGeneric>['validations'] = [];\n\n /** Cloned variables — dùng cho modal \"Configure variables\" (huỷ thì discard, ok thì gán ngược). */\n clonedVariables: SdFormGenericVariable[] = [];\n\n readonly selectedComponent = signal<SdFormGenericComponent | SdFormGenericGroup | undefined>(undefined);\n readonly isPreview = signal(false);\n\n // ── group drill-in (Detail) ─────────────────────────────────────────────\n // why: bỏ hẳn drag/drop trong group. Thay vào đó \"Detail\" 1 group → mở canvas\n // riêng chỉ thiết kế children của group đó (cùng tooling: palette/reorder/resize/\n // attribute), KHÔNG cho group lồng group. OK = giữ, Cancel = revert. Depth tối đa\n // 1 (group không chứa group) nên chỉ cần 1 con trỏ editingGroupId, không cần stack.\n readonly editingGroupId = signal<string | undefined>(undefined);\n /** Group đang được Detail (tìm ở TOP-LEVEL theo id), undefined = đang ở canvas chính. */\n readonly editingGroup = computed<SdFormGenericGroup | undefined>(() => {\n const id = this.editingGroupId();\n if (!id) return undefined;\n return this.components.find(c => c.id === id && c.type === 'group') as SdFormGenericGroup | undefined;\n });\n /** Snapshot (deep clone JSON) của group.components khi vào Detail — phục vụ Cancel. */\n #groupSnapshot?: string;\n\n /** Mảng components đang được canvas thao tác: children của group khi Detail, ngược lại là top-level. */\n #scope = (): (SdFormGenericComponent | SdFormGenericGroup)[] => this.editingGroup()?.components ?? this.components;\n\n /** Signal toàn cục: TRUE khi BẤT KỲ cdkDrag nào đang active (palette, canvas, group, resize).\n * Trigger class `.fb-shell--dragging` để ẩn hover/actions/resize toàn diện, không phụ thuộc :has(). */\n readonly isAnyDragging = signal(false);\n readonly dragSource = signal<'palette' | 'row' | 'canvas' | 'resize' | undefined>(undefined);\n readonly resizeState = signal<ResizeState | undefined>(undefined);\n readonly isResizing = computed(() => !!this.resizeState());\n\n expand = true;\n dragDropRows: DragDropRowItem[] = [];\n isDragging = false;\n targetItem?: DragDropRowItem = undefined;\n private lastDragPointer?: { x: number; y: number };\n\n /** Handler chung cho mọi cdkDragStarted — set signal global true. */\n onAnyDragStarted = () => {\n this.isAnyDragging.set(true);\n };\n\n onPaletteDragStarted = () => {\n this.dragSource.set('palette');\n this.onAnyDragStarted();\n };\n\n onRowDragStarted = () => {\n this.dragSource.set('row');\n this.onAnyDragStarted();\n };\n\n onAnyDragMoved = (event: CdkDragMove<any>) => {\n this.lastDragPointer = event.pointerPosition;\n const rowEl = document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y)?.closest('.fb-row') as HTMLElement | null;\n const row = rowEl?.id ? this.dragDropRows.find(t => t.id === rowEl.id) : undefined;\n if (row && this.targetItem !== row) {\n this.targetItem = row;\n this.#ref.markForCheck();\n }\n };\n\n /** Handler chung cho mọi cdkDragEnded — set signal global false (dùng setTimeout 0\n * để chờ CDK xử lý xong drop event trước khi UI re-enable). */\n onAnyDragEnded = () => {\n setTimeout(() => {\n this.isAnyDragging.set(false);\n this.dragSource.set(undefined);\n this.lastDragPointer = undefined;\n this.targetItem = undefined;\n this.#ref.markForCheck();\n }, 0);\n };\n\n startResizeControl = (item: SdFormGenericComponent | SdFormGenericGroup, row: DragDropRowItem) => {\n this.dragSource.set('resize');\n this.isAnyDragging.set(true);\n this.resizeState.set({ itemId: item.id, rowId: row.id, columns: `${item.layout?.columns || '12'}` });\n this.#ref.markForCheck();\n };\n\n endResizeControl = (event: any) => {\n this.dragEndChangeSizeControl(event);\n this.resizeState.set(undefined);\n this.onAnyDragEnded();\n };\n\n #componentsChanges = new Subject<void>();\n #variablesChanges = new Subject<void>();\n #validationsChanges = new Subject<void>();\n #subscription = new Subscription();\n\n constructor() {\n // Khi input `formGeneric` ref thay đổi: clone components/variables/validations\n // sang local arrays và bắn subject tương ứng cho stream debounced (syncRows).\n // untracked() bao bọc các mutation để không tạo cycle (effect chỉ tracks formGeneric()).\n effect(() => {\n const fg = this.formGeneric();\n untracked(() => {\n this.components = Array.isArray(fg?.components) ? JSON.parse(JSON.stringify(fg!.components)) : [];\n this.variables = Array.isArray(fg?.variables) ? JSON.parse(JSON.stringify(fg!.variables)) : [];\n this.validations = Array.isArray(fg?.validations) ? JSON.parse(JSON.stringify(fg!.validations)) : [];\n this.#componentsChanges.next();\n this.#variablesChanges.next();\n this.#validationsChanges.next();\n });\n });\n }\n\n ngOnInit() {\n this.#subscription.add(\n this.#componentsChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\n this.#syncComponentsToRows();\n this.#ref.markForCheck();\n })\n );\n this.#subscription.add(\n this.#variablesChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\n this.#ref.markForCheck();\n })\n );\n this.#subscription.add(\n this.#validationsChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\n this.#ref.markForCheck();\n })\n );\n }\n\n ngOnDestroy() {\n this.#subscription.unsubscribe();\n }\n\n addComponent = (item: FormBuilderComponent, index?: number, layoutColumns = '12') => {\n // why: không cho thêm group khi đang Detail trong 1 group (tránh group lồng group).\n if (item.type === 'group' && this.editingGroupId()) return;\n const id = GenerateId();\n const columns = item.type === 'break' ? '12' : layoutColumns;\n let newComponent: SdFormGenericComponent | SdFormGenericGroup;\n if (item.type === 'group') {\n // Group là layout container, không có key/validate; có nested components[] + properties{icon,color}.\n newComponent = {\n id,\n type: 'group',\n label: 'Group',\n layout: { columns },\n components: [],\n properties: {\n icon: item.symbol || 'category',\n color: 'primary',\n },\n } as SdFormGenericGroup;\n } else if (item.type === 'break') {\n // Break: 12-col luôn, đóng vai trò row separator cố định. Extend base nên có key\n // (auto-gen cho stability) nhưng không hiển thị trong attribute panel.\n newComponent = {\n id,\n key: GenerateKey(),\n type: 'break',\n label: 'Break',\n layout: { columns: '12' },\n validate: {},\n disabled: false,\n properties: {},\n } as any;\n } else {\n newComponent = {\n id,\n key: GenerateKey(),\n type: item.type as any,\n label: item.type,\n layout: { columns },\n validate: { required: false },\n disabled: false,\n properties: {},\n } as SdFormGenericComponent;\n }\n const scope = this.#scope();\n if (index !== undefined) {\n scope.splice(index, 0, newComponent);\n } else {\n scope.push(newComponent);\n }\n\n this.#recountTabIndex();\n const created = scope.find(component => component.id === id);\n this.selectedComponent.set(created);\n this.selectComponent(created);\n this.#ref.markForCheck();\n };\n\n // ── Helpers cho UI mới ────────────────────────────────────────\n /** Symbol Material để render trên canvas item / attribute header. */\n symbolFor = (item: SdFormGenericComponent | SdFormGenericGroup): string => {\n if (item.type === 'group') return (item as SdFormGenericGroup).properties?.icon || 'category';\n return this.componentIcons[item.type]?.symbol ?? 'help';\n };\n\n /** Human-readable type label (e.g. \"Text field\", \"Date\"). */\n typeLabelFor = (item: SdFormGenericComponent | SdFormGenericGroup): string => {\n return this.componentIcons[item.type]?.label ?? item.type;\n };\n\n placeholderSymbolFor = (\n item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined\n ): string => {\n if (!item) return 'add';\n if (this.#isPaletteComponent(item)) return item.symbol;\n if ('items' in item) return 'view_week';\n return this.symbolFor(item);\n };\n\n placeholderTitleFor = (\n item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined\n ): string => {\n if (!item) return 'Component';\n if (this.#isPaletteComponent(item)) return item.name;\n if ('items' in item) return 'Row';\n return ('label' in item && item.label) || this.typeLabelFor(item);\n };\n\n placeholderMetaFor = (item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined): string => {\n if (!item) return '';\n if (this.#isPaletteComponent(item)) return 'New field';\n if ('items' in item) return `${item.items.length} field${item.items.length === 1 ? '' : 's'}`;\n return this.typeLabelFor(item);\n };\n\n /** True nếu component có expression điều kiện — drives the \"conditional\" status chip. */\n hasConditional = (item: SdFormGenericComponent | SdFormGenericGroup): boolean => {\n const p: any = item.properties || {};\n return !!(p.visibleWhenExpression || p.hiddenWhenExpression || p.disabledWhenExpression || p.requiredWhenExpression);\n };\n\n /** Map SdColor preset → 2 CSS var names cho header-bg và header-fg của group card. */\n groupColorVars = (color: string | undefined | null): { bg: string; fg: string } => {\n switch (color) {\n case 'secondary':\n return { bg: 'var(--md-sys-color-secondary-container)', fg: 'var(--md-sys-color-on-secondary-container)' };\n case 'success':\n return { bg: 'var(--md-sys-color-success-container)', fg: 'var(--md-sys-color-success)' };\n case 'warning':\n return { bg: 'var(--md-sys-color-warning-container)', fg: 'var(--md-sys-color-warning)' };\n case 'error':\n return { bg: 'var(--md-sys-color-error-container)', fg: 'var(--md-sys-color-error)' };\n case 'primary':\n default:\n return { bg: 'var(--md-sys-color-primary-container)', fg: 'var(--md-sys-color-primary)' };\n }\n };\n\n /** Segmented Design/Preview toggle (replaces play_circle/stop_circle). */\n setMode = (preview: boolean) => {\n this.isPreview.set(preview);\n };\n\n // ── Group drill-in (Detail) navigation ──────────────────────────────────\n /** Mở canvas thiết kế riêng cho 1 group (chỉ children của nó). Snapshot để Cancel revert. */\n enterGroupEdit = (group: SdFormGenericGroup) => {\n this.#groupSnapshot = JSON.stringify(group.components ?? []);\n this.editingGroupId.set(group.id);\n this.selectedComponent.set(undefined);\n this.#recountTabIndex();\n this.#ref.markForCheck();\n };\n\n /** OK: giữ thay đổi children, quay về canvas chính. */\n confirmGroupEdit = () => {\n this.#groupSnapshot = undefined;\n this.editingGroupId.set(undefined);\n this.selectedComponent.set(undefined);\n this.#syncComponentsToRows();\n this.#ref.markForCheck();\n };\n\n /** Cancel: revert children về snapshot lúc vào Detail, rồi quay về canvas chính. */\n cancelGroupEdit = () => {\n const g = this.editingGroup();\n if (g && this.#groupSnapshot !== undefined) {\n g.components = JSON.parse(this.#groupSnapshot);\n }\n this.#groupSnapshot = undefined;\n this.editingGroupId.set(undefined);\n this.selectedComponent.set(undefined);\n this.#syncComponentsToRows();\n this.#ref.markForCheck();\n };\n\n /** Quick-add break sau row chỉ định (theo scope hiện tại — top-level hoặc group).\n * Tính component index cuối cùng của row đó trong scope, splice break vào sau.\n */\n insertBreakAfter = (row: DragDropRowItem) => {\n const scope = this.#scope();\n const lastItemId = row.items[row.items.length - 1]?.id;\n const insertAfter = lastItemId ? scope.findIndex(c => c.id === lastItemId) : scope.length - 1;\n const newBreak: any = {\n id: GenerateId(),\n key: GenerateKey(),\n type: 'break',\n label: 'Break',\n layout: { columns: '12' },\n validate: {},\n disabled: false,\n properties: {},\n };\n scope.splice(insertAfter + 1, 0, newBreak);\n this.#recountTabIndex();\n this.#ref.markForCheck();\n };\n\n /** Xoá component theo scope hiện tại (top-level hoặc children của group đang Detail). */\n removeComponent = (id: string) => {\n const g = this.editingGroup();\n if (g) {\n g.components = g.components.filter((t: { id: string }) => t.id !== id);\n } else {\n this.components = this.components.filter((t: { id: string }) => t.id !== id);\n }\n if (this.selectedComponent()?.id === id) this.selectedComponent.set(undefined);\n this.#recountTabIndex();\n };\n\n selectComponent = (item?: SdFormGenericComponent | SdFormGenericGroup) => {\n this.selectedComponent.set(item);\n this.#ref.markForCheck();\n };\n\n onClickedOutside = (e: any) => {\n const classList = (e.target as Element).classList;\n if (!classList.length || classList.contains('components') || classList.contains('cdk-drop-list')) {\n this.selectedComponent.set(undefined);\n }\n };\n\n clickFormContentEmpty = () => {\n if (!this.dragDropRows?.length) {\n this.selectedComponent.set(undefined);\n }\n };\n\n drop = (event: CdkDragDrop<any[]>) => {\n if (event.previousContainer === event.container) {\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n this.#syncRowsToComponents();\n // Xử lý kéo chéo giữa các row khi pointer rời khỏi container hiện tại.\n if (!event.isPointerOverContainer) {\n const dragItemId = event.item.element.nativeElement.id;\n if (dragItemId) {\n const dragItem = this.#scope().find((t: { id: string }) => t.id === dragItemId);\n this.xuLyKeoCheo(dragItem);\n }\n }\n } else {\n const draggedData = this.#draggedDataFromDropEvent(event);\n if (this.#isPaletteComponent(draggedData)) {\n // transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\n const placement = this.#paletteDropPlacement(event.container.data, event.currentIndex, draggedData);\n this.addComponent(draggedData, placement.index, placement.columns);\n } else {\n const movedItem = event.previousContainer.data[event.previousIndex] as SdFormGenericComponent | SdFormGenericGroup;\n const targetRow = this.#rowForItems(event.container.data);\n if (targetRow && !canPlaceInRow(targetRow, movedItem, movedItem.id)) {\n this.#notifyService.warning(this.#i18n.t('core.component.form-builder.row-overflow'));\n return;\n }\n\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\n this.#syncRowsToComponents();\n }\n }\n this.#recountTabIndex();\n };\n\n dragStartComponentItem = (event: any) => {\n void event;\n this.dragSource.set('canvas');\n this.onAnyDragStarted();\n this.isDragging = true;\n };\n\n dragEndComponentItem = (event: any) => {\n this.isDragging = false;\n };\n\n onMouseover = (event: MouseEvent, rowItem: DragDropRowItem) => {\n if (this.isDragging && this.targetItem !== rowItem) {\n this.targetItem = rowItem;\n this.#ref.markForCheck();\n }\n };\n\n isRowFull = (row: DragDropRowItem): boolean => this.#usedColumns(row) >= 12;\n\n isRowInlineDropLocked = (row: DragDropRowItem): boolean => this.#availableColumns(row) < 2;\n\n canEnterRowDropList = (\n drag: CdkDrag<FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup>,\n drop: CdkDropList<(SdFormGenericComponent | SdFormGenericGroup)[]>\n ): boolean => {\n const row = this.#rowForItems(drop.data);\n if (!row) return true;\n\n const data = drag.data;\n if (!data) return true;\n if (this.#isPaletteComponent(data)) {\n return data.type === 'break' || this.#availableColumns(row) >= 2;\n }\n if ('layout' in data && 'id' in data) {\n return canPlaceInRow(row, data, data.id);\n }\n\n return true;\n };\n\n onFocus = (event: FocusEvent) => {\n void event;\n };\n\n xuLyKeoCheo = (dragItem?: SdFormGenericComponent | SdFormGenericGroup) => {\n if (dragItem && this.targetItem) {\n const result = moveItemToRow(this.dragDropRows, {\n itemId: dragItem.id,\n targetRowId: this.targetItem.id,\n });\n if (result.moved) {\n this.dragDropRows = this.#withRowIndexes(result.rows);\n this.#syncRowsToComponents();\n } else if (result.reason === 'row-overflow') {\n this.#notifyService.warning(this.#i18n.t('core.component.form-builder.row-overflow'));\n }\n }\n this.targetItem = undefined;\n };\n noReturnPredicate = () => {\n return false;\n };\n\n #recountTabIndex = () => {\n const scope = this.#scope();\n scope.forEach((item, index) => {\n if (item.layout) {\n item.layout!.row = `${index + 1}`;\n item.layout!.columns = item.layout?.columns || '12';\n } else {\n item.layout = {\n row: `${index + 1}`,\n columns: '12',\n };\n }\n });\n const sel = this.selectedComponent();\n if (sel && sel?.layout?.row) {\n sel.layout.row = scope.find(t => t.id === sel.id)?.layout?.row;\n }\n this.#syncComponentsToRows();\n };\n\n // Hàm xử lý chuyển đổi components (scope hiện tại) -> dragDropRows\n #syncComponentsToRows = () => {\n this.dragDropRows = this.#withRowIndexes(buildFormBuilderRows(this.#scope()));\n };\n\n #syncRowsToComponents = () => {\n const flat = flattenFormBuilderRows(this.dragDropRows);\n const g = this.editingGroup();\n if (g) {\n g.components = flat as SdFormGenericComponent[];\n } else {\n this.components = flat;\n }\n };\n\n changeSizeControl = async (\n event: CdkDragMove<SdFormGenericComponent | SdFormGenericGroup>,\n item: SdFormGenericComponent | SdFormGenericGroup,\n items: (SdFormGenericComponent | SdFormGenericGroup)[],\n currentIndex: number\n ) => {\n // const totalColumnInRow = items.map(k => k.layout.columns).reduce((acc, curr) => acc + parseInt(curr, 0), 0);\n const totalColumnBeforeItem = items\n .map(k => +k.layout!.columns || 12)\n .reduce((acc, curr, index) => {\n if (index < currentIndex) {\n acc = acc + curr;\n }\n return acc;\n }, 0);\n const rect = document.getElementById('frmComponent')?.getBoundingClientRect() as DOMRect;\n const left = rect.left;\n const right = rect.right - left;\n const mouse = event.pointerPosition.x - left!;\n const t = Math.round(12 / (100 / ((100 * mouse) / right))) - totalColumnBeforeItem;\n // Clamp + skip-if-unchanged để tránh re-render mỗi pixel mouse di chuyển.\n const newCols = t > 12 ? '12' : t < 2 ? '2' : `${t}`;\n if (item.layout!.columns !== newCols) {\n item.layout!.columns = newCols as any;\n }\n const currentResizeState = this.resizeState();\n if (currentResizeState?.itemId !== item.id || currentResizeState?.columns !== newCols) {\n this.resizeState.set({\n itemId: item.id,\n rowId: currentResizeState?.rowId ?? this.#rowForItems(items)?.id ?? `row-${item.id}`,\n columns: newCols,\n });\n this.#ref.markForCheck();\n }\n\n // document.getElementById('test').innerHTML = `<pre>\n // left: ${left}\n // right: ${document.getElementById('frmComponent').getBoundingClientRect().right}\n // right-left: ${right}\n // mouse: ${event.pointerPosition.x}\n // mouse-left: ${mouse}\n // t: ${t}\n // columns: ${item.layout.columns}\n // </pre>`;\n };\n\n dragEndChangeSizeControl = (event: any) => {\n this.#recountTabIndex();\n };\n\n onChangeViewed = (component: SdFormGenericComponent) => {\n component.properties!.viewed = !component.properties!.viewed;\n // Emit khi có sự thay đổi để control và attribute lắng nghe và render lại\n this.#builderService.componentEmitters.next(component);\n };\n\n onChangeHidden = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n component.properties!.hidden = !component.properties!.hidden;\n // Emit khi có sự thay đổi để control và attribute lắng nghe và render lại\n this.#builderService.componentEmitters.next(component);\n };\n\n // Duplicate component nhưng sẽ clear id và key để tránh trùng lặp (theo scope hiện tại)\n onDuplicate = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n const clonedComponent = this.#cloneComponentWithNewIdentity(component);\n const scope = this.#scope();\n scope.push(clonedComponent);\n this.#recountTabIndex();\n const created = scope.find(t => t.id === clonedComponent.id);\n this.selectedComponent.set(created);\n this.selectComponent(created);\n this.#ref.markForCheck();\n };\n\n // Copy form hiện tại\n jsonString?: string;\n viewJSON = () => {\n this.jsonString = JSON.stringify({ components: this.components });\n this.popupViewJSON()?.open();\n this.#ref.markForCheck();\n };\n\n updateJSON = () => {\n try {\n if (this.jsonString) {\n const json: Record<string, any> = JSON.parse(this.jsonString);\n if ('components' in json) {\n this.components = json['components'];\n this.popupViewJSON()?.close();\n this.#syncComponentsToRows();\n this.#ref.markForCheck();\n } else {\n throw new Error('Invalid JSON');\n }\n }\n } catch (err: any) {\n console.error(err);\n this.#notifyService.warning(err?.message);\n }\n };\n\n configureVariables = () => {\n this.clonedVariables = JSON.parse(JSON.stringify(this.variables || []));\n this.popupConfigureVariables()?.open();\n this.#ref.markForCheck();\n };\n\n addVariables = () => {\n this.clonedVariables.push({\n id: Utilities.randomId(),\n key: '',\n label: '',\n });\n };\n\n removeVariables = (id: string) => {\n const idx = this.clonedVariables.findIndex(e => e.id === id);\n this.clonedVariables.splice(idx, 1);\n };\n\n updateVariables = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n this.#ref.markForCheck();\n return;\n }\n this.variables = this.clonedVariables;\n this.popupConfigureVariables()?.close();\n this.#ref.markForCheck();\n };\n\n // Chìa ra cho bên ngoài lấy components hiện tại\n getComponents = (): (SdFormGenericComponent | SdFormGenericGroup)[] => {\n this.#syncRowsToComponents();\n return JSON.parse(JSON.stringify(this.components || []));\n };\n\n // Chìa ra cho bên ngoài lấy variables hiện tại\n getVariables = (): SdFormGenericVariable[] => {\n return JSON.parse(JSON.stringify(this.variables || []));\n };\n\n #getValidations = (): SdFormGenericValidation[] => {\n return JSON.parse(JSON.stringify(this.validations || []));\n };\n\n getForm = (): SdFormGeneric => {\n return {\n components: this.getComponents(),\n variables: this.getVariables(),\n validations: this.#getValidations(),\n };\n };\n\n openConfigureValidation = () => {\n this.configureValidation()?.open(this.getForm());\n };\n\n onUpdateValidations = (validations: SdFormGenericValidation[]) => {\n this.validations = validations;\n };\n\n onValidate = async () => {\n const errorMessages = await this.formRender()?.getValidationMessages('error');\n if (errorMessages?.length) {\n this.#notifyService.error(errorMessages);\n return;\n }\n const warningMessages = await this.formRender()?.getValidationMessages('warning');\n if (warningMessages?.length) {\n this.#confirmService.confirm(warningMessages.join(', ')).then(() => {\n this.#notifyService.success('Submit success');\n });\n } else {\n this.#notifyService.success('Submit success');\n }\n };\n\n #withRowIndexes = (rows: FormBuilderLayoutRow[]): DragDropRowItem[] => {\n return rows.map((row, index) => ({\n ...row,\n rowIndex: index,\n }));\n };\n\n #rowForItems = (items: any[]): DragDropRowItem | undefined => {\n return this.dragDropRows.find(row => row.items === items);\n };\n\n #isPaletteComponent = (item: unknown): item is FormBuilderComponent => {\n return !!item && typeof item === 'object' && 'symbol' in item && 'type' in item;\n };\n\n #draggedDataFromDropEvent = (event: CdkDragDrop<any[]>): unknown => {\n return event.item.data ?? event.previousContainer.data[event.previousIndex];\n };\n\n #usedColumns = (row: DragDropRowItem): number => {\n return row.items.reduce((sum, item) => sum + +(item.layout?.columns || 12), 0);\n };\n\n #availableColumns = (row: DragDropRowItem): number => {\n return Math.max(0, 12 - this.#usedColumns(row));\n };\n\n #scopeIndexAfterRow = (row: DragDropRowItem): number => {\n const scope = this.#scope();\n const lastItem = row.items[row.items.length - 1];\n const lastIndex = lastItem ? scope.findIndex(component => component.id === lastItem.id) : -1;\n return lastIndex >= 0 ? lastIndex + 1 : scope.length;\n };\n\n #paletteDropPlacement = (\n containerData: any[],\n currentIndex: number,\n item: FormBuilderComponent\n ): { index?: number; columns?: string } => {\n const row = this.#rowForItems(containerData);\n if (!row || item.type === 'break') {\n return { index: this.#scopeIndexFromDrop(containerData, currentIndex) };\n }\n\n const availableColumns = this.#availableColumns(row);\n if (availableColumns >= 2) {\n return {\n index: this.#scopeIndexFromDrop(containerData, currentIndex),\n columns: `${availableColumns}`,\n };\n }\n\n return { index: this.#scopeIndexAfterRow(row), columns: '12' };\n };\n\n #scopeIndexFromDrop = (containerData: any[], currentIndex: number): number | undefined => {\n const scope = this.#scope();\n const row = this.#rowForItems(containerData);\n if (row) {\n const anchor = row.items[currentIndex] ?? row.items[row.items.length - 1];\n if (!anchor) return scope.length;\n\n const anchorIndex = scope.findIndex(component => component.id === anchor.id);\n if (anchorIndex < 0) return scope.length;\n return currentIndex >= row.items.length ? anchorIndex + 1 : anchorIndex;\n }\n\n if (containerData === this.dragDropRows) {\n const rowAtIndex = this.dragDropRows[currentIndex];\n const anchor = rowAtIndex?.items[0];\n if (!anchor) return scope.length;\n\n const anchorIndex = scope.findIndex(component => component.id === anchor.id);\n return anchorIndex >= 0 ? anchorIndex : scope.length;\n }\n\n return undefined;\n };\n\n #cloneComponentWithNewIdentity = <T extends SdFormGenericComponent | SdFormGenericGroup>(component: T): T => {\n const clonedComponent = JSON.parse(JSON.stringify(component)) as T;\n this.#regenerateComponentIdentity(clonedComponent);\n return clonedComponent;\n };\n\n #regenerateComponentIdentity = (component: SdFormGenericComponent | SdFormGenericGroup) => {\n component.id = GenerateId();\n if (component.type === 'group') {\n component.components = component.components.map(child => this.#cloneComponentWithNewIdentity(child));\n return;\n }\n\n component.key = GenerateKey();\n };\n}\n","<!-- cdkDropListGroup: auto-connect tất cả cdkDropList trong palette, canvas rows, group bodies.\n [class.fb-shell--dragging]: JS-driven flag để ẩn hover/actions/resize toàn diện\n trong lúc drag (CSS :has() không bắt 100% trường hợp với CDK preview clone). -->\n<div\n class=\"fb-shell\"\n cdkDropListGroup\n [class.fb-shell--dragging]=\"isAnyDragging()\"\n [class.fb-shell--palette-dragging]=\"dragSource() === 'palette'\"\n [class.fb-shell--resizing]=\"isResizing()\">\n <ng-template #dragPreviewTemplate>\n <span class=\"fb-drag-preview__glyph\" aria-hidden=\"true\"></span>\n <span class=\"fb-drag-preview__body\" aria-hidden=\"true\">\n <span class=\"fb-drag-preview__line is-strong\"></span>\n <span class=\"fb-drag-preview__line\"></span>\n </span>\n </ng-template>\n <ng-template #dropPlaceholderTemplate let-item>\n <span class=\"fb-drop-placeholder__icon\" aria-hidden=\"true\">\n <span class=\"msi\">{{ placeholderSymbolFor(item) }}</span>\n </span>\n <span class=\"fb-drop-placeholder__body\" aria-hidden=\"true\">\n <span class=\"fb-drop-placeholder__title\">{{ placeholderTitleFor(item) }}</span>\n <span class=\"fb-drop-placeholder__meta\">{{ placeholderMetaFor(item) }}</span>\n </span>\n </ng-template>\n\n <!-- ════════════════════════ LEFT PALETTE ════════════════════════ -->\n <aside class=\"fb-palette\">\n <div class=\"fb-panel-header\">\n <div class=\"fb-panel-header__title\">{{ 'core.component.form-builder.components' | translate }}</div>\n </div>\n\n <!-- Search pill -->\n <div class=\"fb-palette__search\">\n <span class=\"msi\" aria-hidden=\"true\">search</span>\n <input\n type=\"text\"\n [placeholder]=\"'core.component.form-builder.search-components' | translate\"\n [value]=\"paletteSearch()\"\n (input)=\"paletteSearch.set($any($event.target).value)\" />\n <span class=\"kbd\">⌘K</span>\n </div>\n\n <div class=\"fb-palette__scroll\">\n @for (group of paletteGroups(); track group.key) {\n <div class=\"fb-palette__group-label\">{{ group.label }}</div>\n <div class=\"fb-palette__list\" cdkDropList [cdkDropListData]=\"group.items\" [cdkDropListEnterPredicate]=\"noReturnPredicate\">\n @for (formBuilderComponent of group.items; track formBuilderComponent.type) {\n <div\n cdkDrag\n [cdkDragData]=\"formBuilderComponent\"\n class=\"fb-palette-item\"\n [matTooltip]=\"formBuilderComponent.name\"\n matTooltipPosition=\"right\"\n (click)=\"addComponent(formBuilderComponent)\"\n (cdkDragStarted)=\"onPaletteDragStarted()\"\n (cdkDragMoved)=\"onAnyDragMoved($event)\"\n (cdkDragEnded)=\"onAnyDragEnded()\"\n aria-hidden=\"true\">\n <span class=\"fb-palette-item__icon\"\n ><span class=\"msi\">{{ formBuilderComponent.symbol }}</span></span\n >\n <span class=\"fb-palette-item__name\">{{ formBuilderComponent.name }}</span>\n <span class=\"fb-palette-item__drag\"><span class=\"msi\">drag_indicator</span></span>\n <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n </div>\n <div *cdkDragPlaceholder class=\"fb-drop-placeholder\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: formBuilderComponent }\"></ng-container>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </aside>\n\n <!-- ════════════════════════ CENTER CANVAS ═══════════════════════ -->\n <section class=\"fb-canvas\">\n @let _editingGroup = editingGroup();\n @if (_editingGroup) {\n <!-- ── Drill-in header: đang thiết kế children của 1 group ── -->\n <header class=\"fb-canvas__header fb-canvas__header--group\">\n <div class=\"fb-canvas__title fb-groupedit__crumb\">\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.back-to-design' | translate\"\n (click)=\"cancelGroupEdit()\">\n <span class=\"msi\">chevron_left</span>\n </button>\n <span class=\"fb-groupedit__icon\"\n ><span class=\"msi\">{{ _editingGroup.properties?.icon || 'category' }}</span></span\n >\n <span>{{ _editingGroup.label || ('core.component.form-builder.edit-group' | translate) }}</span>\n <span class=\"fb-groupedit__hint\">{{ 'core.component.form-builder.edit-group' | translate }}</span>\n </div>\n <div class=\"fb-canvas__actions\">\n <sd-button type=\"text\" [title]=\"'core.component.form-builder.cancel' | translate\" (click)=\"cancelGroupEdit()\"></sd-button>\n <sd-button\n type=\"fill\"\n color=\"primary\"\n prefixIcon=\"check\"\n [title]=\"'core.component.form-builder.confirm' | translate\"\n (click)=\"confirmGroupEdit()\"></sd-button>\n </div>\n </header>\n } @else {\n <header class=\"fb-canvas__header\">\n <div class=\"fb-canvas__title\">\n <span>{{ 'core.component.form-builder.layout' | translate }}</span>\n </div>\n <div class=\"fb-canvas__actions\">\n <!-- Toolbar cluster: view JSON / variables / validation -->\n <button type=\"button\" class=\"fb-icon-btn\" [matTooltip]=\"'core.component.form-builder.view-json' | translate\" (click)=\"viewJSON()\">\n <span class=\"msi\">data_object</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.config-variable' | translate\"\n (click)=\"configureVariables()\">\n <span class=\"msi\">data_array</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.config-validation-warning-error' | translate\"\n (click)=\"openConfigureValidation()\">\n <span class=\"msi\">rule</span>\n </button>\n\n <span class=\"fb-divider\"></span>\n\n <!-- M3 segmented Design/Preview toggle -->\n <div class=\"fb-mode-toggle\" role=\"tablist\">\n <button type=\"button\" role=\"tab\" [class.is-active]=\"!isPreview()\" [attr.aria-selected]=\"!isPreview()\" (click)=\"setMode(false)\">\n <span class=\"msi\">edit</span>\n <span>{{ 'core.component.form-builder.design' | translate }}</span>\n </button>\n <button type=\"button\" role=\"tab\" [class.is-active]=\"isPreview()\" [attr.aria-selected]=\"isPreview()\" (click)=\"setMode(true)\">\n <span class=\"msi\">visibility</span>\n <span>{{ 'core.component.form-builder.preview' | translate }}</span>\n </button>\n </div>\n </div>\n </header>\n }\n\n <div class=\"fb-canvas__body\" [class.is-preview]=\"isPreview()\" id=\"frmComponent\">\n @if (isPreview()) {\n <!-- ── Preview mode ───────────────────────────────────────────── -->\n <div class=\"fb-preview-card\">\n <div class=\"fb-preview-card__chip\">\n <span class=\"msi\">visibility</span>\n {{ 'core.component.form-builder.preview-runtime' | translate }}\n </div>\n <sd-form-render [configuration]=\"{ components: this.components, validations: this.validations }\"></sd-form-render>\n <div class=\"fb-preview-card__footer\">\n <sd-button type=\"text\" [title]=\"'core.component.form-builder.cancel' | translate\" (click)=\"setMode(false)\"></sd-button>\n <sd-button\n type=\"fill\"\n color=\"primary\"\n [title]=\"'core.component.form-builder.submit' | translate\"\n (click)=\"onValidate()\"></sd-button>\n </div>\n </div>\n } @else {\n <!-- ── Design mode ────────────────────────────────────────────── -->\n @if (!dragDropRows.length) {\n <div class=\"fb-empty\">\n <div class=\"fb-empty__art\"><span class=\"msi\">dashboard_customize</span></div>\n <div class=\"fb-empty__title\">{{ 'core.component.form-builder.empty-title' | translate }}</div>\n <div class=\"fb-empty__hint\">\n {{ 'core.component.form-builder.empty-hint' | translate }}\n <span class=\"fb-empty__kbd\"><span class=\"msi\">keyboard</span>⌘ K</span>\n </div>\n </div>\n }\n\n <div\n cdkDropList\n cdkDropListOrientation=\"vertical\"\n [cdkDropListData]=\"dragDropRows\"\n (cdkDropListDropped)=\"drop($event)\"\n (click)=\"clickFormContentEmpty()\"\n aria-hidden=\"true\">\n @for (row of dragDropRows; track row.id) {\n <div\n cdkDrag\n [cdkDragData]=\"row\"\n class=\"fb-row\"\n (mouseover)=\"onMouseover($event, row)\"\n (focus)=\"onFocus($event)\"\n (cdkDragStarted)=\"onRowDragStarted()\"\n (cdkDragMoved)=\"onAnyDragMoved($event)\"\n (cdkDragEnded)=\"onAnyDragEnded()\"\n [class.is-drag-target]=\"targetItem === row\"\n [class.is-row-full]=\"isRowFull(row)\"\n [class.is-row-inline-locked]=\"isRowInlineDropLocked(row)\"\n [class.is-resizing-row]=\"resizeState()?.rowId === row.id\"\n [id]=\"row.id\"\n aria-hidden=\"true\">\n <div class=\"fb-row__drag\" [matTooltip]=\"'core.component.form-builder.drag-vertically' | translate\" cdkDragHandle>\n <span class=\"msi\">drag_indicator</span>\n </div>\n <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n </div>\n <div *cdkDragPlaceholder class=\"fb-drop-placeholder fb-drop-placeholder--row\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: row }\"></ng-container>\n </div>\n <!-- Quick-add break button — show on row hover, insert break after this row -->\n <button\n type=\"button\"\n class=\"fb-row-break-btn\"\n [matTooltip]=\"'core.component.form-builder.break' | translate\"\n matTooltipPosition=\"right\"\n (click)=\"insertBreakAfter(row); $event.stopPropagation()\">\n <span class=\"msi\">horizontal_rule</span>\n </button>\n\n <div\n class=\"fb-row__items\"\n style=\"display: flex; flex: 1; gap: var(--gap-2)\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListData]=\"row.items\"\n [cdkDropListEnterPredicate]=\"canEnterRowDropList\"\n (cdkDropListDropped)=\"drop($event)\">\n @for (item of row.items; track item.id; let i = $index) {\n <!-- Group component renders as outlined card with colored header bar -->\n @if (item.type === 'group') {\n @let g = $any(item);\n @let cv = groupColorVars(g.properties?.color);\n <div\n cdkDrag\n [cdkDragData]=\"item\"\n [id]=\"item.id\"\n class=\"fb-group column-{{ item.layout?.columns || 12 }}\"\n [class.fb-item]=\"false\"\n [class.is-selected]=\"item.id === selectedComponent()?.id\"\n [class.is-hidden]=\"item.properties?.hidden\"\n [style.flex]=\"'0 0 calc(' + +(item.layout?.columns || 12) + '/12 * 100% - var(--gap-2))'\"\n [style.maxWidth]=\"'calc(' + +(item.layout?.columns || 12) + '/12 * 100% - var(--gap-2))'\"\n (click)=\"selectComponent(item); $event.stopPropagation()\"\n (cdkDragStarted)=\"dragStartComponentItem($event)\"\n (cdkDragMoved)=\"onAnyDragMoved($event)\"\n (cdkDragEnded)=\"dragEndComponentItem($event); onAnyDragEnded()\"\n aria-hidden=\"true\">\n <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n </div>\n <div *cdkDragPlaceholder class=\"fb-drop-placeholder\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: item }\"></ng-container>\n </div>\n <!-- cdkDragHandle: chỉ cho phép kéo group qua header — body free cho click vào child. -->\n <div class=\"fb-group__header\" cdkDragHandle [style.background]=\"cv.bg\" [style.color]=\"cv.fg\">\n <span class=\"fb-group__icon\"\n ><span class=\"msi\">{{ g.properties?.icon || 'category' }}</span></span\n >\n <span class=\"fb-group__label\">{{ item.label }}</span>\n @if (hasConditional(item)) {\n <span class=\"fb-group__conditional-chip\">\n <span class=\"msi\" style=\"font-size: 12px\">bolt</span>\n {{ 'core.component.form-builder.conditional' | translate }}\n </span>\n }\n <span class=\"fb-group__count\">{{ g.components?.length || 0 }} fields</span>\n </div>\n <!-- Floating action toolbar -->\n <div class=\"fb-actions\">\n <!-- why: Detail = mở canvas thiết kế riêng cho group (thay cho drag/drop trong group). -->\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.edit-group' | translate\"\n (click)=\"enterGroupEdit(g); $event.stopPropagation()\">\n <span class=\"msi\">open_in_full</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.duplicate' | translate\"\n (click)=\"onDuplicate(item); $event.stopPropagation()\">\n <span class=\"msi\">content_copy</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [class.warning]=\"item.properties?.hidden\"\n [class.on]=\"item.properties?.hidden\"\n [matTooltip]=\"\n item.properties?.hidden\n ? ('core.component.form-builder.show' | translate)\n : ('core.component.form-builder.hide' | translate)\n \"\n (click)=\"onChangeHidden(item); $event.stopPropagation()\">\n <span class=\"msi\">{{ item.properties?.hidden ? 'visibility_off' : 'visibility' }}</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn danger\"\n [matTooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"removeComponent(item.id); $event.stopPropagation()\">\n <span class=\"msi\">delete</span>\n </button>\n </div>\n\n <!-- Static preview: children render read-only (không drag/resize/select).\n Sửa nội dung group qua nút Detail (enterGroupEdit). -->\n <div class=\"fb-group__body fb-group__body--static\" (click)=\"enterGroupEdit(g); $event.stopPropagation()\">\n @if (!g.components?.length) {\n <div class=\"fb-group__empty\">\n <span class=\"msi\" style=\"font-size: 16px; margin-right: 6px\">open_in_full</span>\n {{ 'core.component.form-builder.group-empty-hint' | translate }}\n </div>\n }\n @for (child of g.components; track child.id) {\n <div\n class=\"fb-item is-child fb-item--static column-{{ child.layout?.columns || 12 }}\"\n [class.is-hidden]=\"child.properties?.hidden\">\n <ng-container *ngTemplateOutlet=\"controlTemplate; context: { $implicit: child }\"> </ng-container>\n </div>\n }\n </div>\n </div>\n } @else if (item.type === 'break') {\n <!-- Break: row separator cố định. Render 12-col line, không có resize/edit attribute. -->\n <div\n cdkDrag\n [cdkDragData]=\"item\"\n [id]=\"item.id\"\n class=\"fb-item is-break column-12\"\n [class.is-selected]=\"item.id === selectedComponent()?.id\"\n [class.is-hidden]=\"item.properties?.hidden\"\n (click)=\"selectComponent(item); $event.stopPropagation()\"\n (cdkDragStarted)=\"dragStartComponentItem($event)\"\n (cdkDragMoved)=\"onAnyDragMoved($event)\"\n (cdkDragEnded)=\"dragEndComponentItem($event); onAnyDragEnded()\"\n aria-hidden=\"true\">\n <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n </div>\n <div *cdkDragPlaceholder class=\"fb-drop-placeholder\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: item }\"></ng-container>\n </div>\n <div class=\"fb-break-line\">\n <span class=\"msi\">horizontal_rule</span>\n <span class=\"fb-break-label\">{{ 'core.component.form-builder.break' | translate }}</span>\n </div>\n <div class=\"fb-actions\">\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [class.warning]=\"item.properties?.hidden\"\n [class.on]=\"item.properties?.hidden\"\n [matTooltip]=\"\n item.properties?.hidden\n ? ('core.component.form-builder.show' | translate)\n : ('core.component.form-builder.hide' | translate)\n \"\n (click)=\"onChangeHidden(item); $event.stopPropagation()\">\n <span class=\"msi\">{{ item.properties?.hidden ? 'visibility_off' : 'visibility' }}</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn danger\"\n [matTooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"removeComponent(item.id); $event.stopPropagation()\">\n <span class=\"msi\">delete</span>\n </button>\n </div>\n </div>\n } @else {\n <!-- Regular form component -->\n <div\n cdkDrag\n [cdkDragData]=\"item\"\n [id]=\"item.id\"\n class=\"fb-item column-{{ item.layout?.columns || 12 }}\"\n [class.is-selected]=\"item.id === selectedComponent()?.id\"\n [class.is-hidden]=\"item.properties?.hidden\"\n [class.is-readonly]=\"item.properties?.viewed\"\n [class.is-resizing]=\"resizeState()?.itemId === item.id\"\n (click)=\"selectComponent(item); $event.stopPropagation()\"\n (cdkDragStarted)=\"dragStartComponentItem($event)\"\n (cdkDragMoved)=\"onAnyDragMoved($event)\"\n (cdkDragEnded)=\"dragEndComponentItem($event); onAnyDragEnded()\"\n aria-hidden=\"true\">\n <div *cdkDragPreview class=\"fb-drag-preview\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dragPreviewTemplate\"></ng-container>\n </div>\n <div *cdkDragPlaceholder class=\"fb-drop-placeholder\" aria-hidden=\"true\">\n <ng-container *ngTemplateOutlet=\"dropPlaceholderTemplate; context: { $implicit: item }\"></ng-container>\n </div>\n\n <!-- Status chip (mutually exclusive priority: hidden > readonly > conditional) -->\n @if (item.properties?.hidden) {\n <span class=\"fb-status-chip hidden\">\n <span class=\"msi\">visibility_off</span>\n {{ 'core.component.form-builder.hidden' | translate }}\n </span>\n } @else if (item.properties?.viewed) {\n <span class=\"fb-status-chip readonly\">\n <span class=\"msi\">edit_off</span>\n {{ 'core.component.form-builder.read-only' | translate }}\n </span>\n } @else if (hasConditional(item)) {\n <span class=\"fb-status-chip conditional\">\n <span class=\"msi\">bolt</span>\n {{ 'core.component.form-builder.conditional' | translate }}\n </span>\n }\n\n <!-- Floating action toolbar pill -->\n <div class=\"fb-actions\">\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [class.warning]=\"item.properties?.viewed\"\n [class.on]=\"item.properties?.viewed\"\n [matTooltip]=\"\n item.properties?.viewed\n ? ('core.component.form-builder.unset-readonly' | translate)\n : ('core.component.form-builder.set-readonly' | translate)\n \"\n (click)=\"onChangeViewed(item); $event.stopPropagation()\">\n <span class=\"msi\">edit_off</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [matTooltip]=\"'core.component.form-builder.duplicate' | translate\"\n (click)=\"onDuplicate(item); $event.stopPropagation()\">\n <span class=\"msi\">content_copy</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn\"\n [class.warning]=\"item.properties?.hidden\"\n [class.on]=\"item.properties?.hidden\"\n [matTooltip]=\"\n item.properties?.hidden\n ? ('core.component.form-builder.show' | translate)\n : ('core.component.form-builder.hide' | translate)\n \"\n (click)=\"onChangeHidden(item); $event.stopPropagation()\">\n <span class=\"msi\">{{ item.properties?.hidden ? 'visibility_off' : 'visibility' }}</span>\n </button>\n <button\n type=\"button\"\n class=\"fb-icon-btn danger\"\n [matTooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"removeComponent(item.id); $event.stopPropagation()\">\n <span class=\"msi\">delete</span>\n </button>\n </div>\n\n <ng-container *ngTemplateOutlet=\"controlTemplate; context: { $implicit: item }\"> </ng-container>\n\n @if (resizeState()?.itemId === item.id) {\n <span class=\"fb-resize-chip\">{{ resizeState()?.columns }}/12</span>\n }\n\n <!-- Resize handle (pill) — cdkDragLockAxis=\"x\" để chỉ kéo ngang.\n Wrapping cdkDropList có enterPredicate=false, không nhận drop. -->\n <div cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListEnterPredicate]=\"noReturnPredicate\">\n <div\n cdkDrag\n cdkDragLockAxis=\"x\"\n class=\"fb-resize\"\n (cdkDragStarted)=\"startResizeControl(item, row)\"\n (cdkDragMoved)=\"changeSizeControl($event, item, row.items, i)\"\n (cdkDragEnded)=\"endResizeControl($event)\"\n [matTooltip]=\"'core.component.form-builder.flex' | translate\"\n aria-label=\"resize\"></div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n </section>\n\n <!-- ════════════════════════ RIGHT ATTRIBUTES ════════════════════════ -->\n <aside class=\"fb-attrs\">\n <div class=\"fb-panel-header\">\n <div class=\"fb-panel-header__title\">{{ 'core.component.form-builder.attribute' | translate }}</div>\n </div>\n\n @let _selectedComponent = selectedComponent();\n @if (_selectedComponent) {\n <!-- Selection header: type icon + name + key/type -->\n <div class=\"fb-attrs__selection\">\n <span class=\"fb-attrs__sel-icon\"\n ><span class=\"msi\">{{ symbolFor(_selectedComponent) }}</span></span\n >\n <div class=\"fb-attrs__sel-meta\">\n <div class=\"fb-attrs__sel-name\">{{ $any(_selectedComponent).label || ('core.component.form-builder.untitled' | translate) }}</div>\n <div class=\"fb-attrs__sel-key\">\n @if ($any(_selectedComponent).key) {\n {{ $any(_selectedComponent).key }} · {{ typeLabelFor(_selectedComponent) }}\n } @else {\n {{ typeLabelFor(_selectedComponent) }}\n }\n </div>\n </div>\n </div>\n\n <div class=\"fb-attrs__body\" aria-hidden=\"true\">\n @if (_selectedComponent.type === 'textfield') {\n <textfield-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></textfield-attribute>\n } @else if (_selectedComponent.type === 'textarea') {\n <textarea-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></textarea-attribute>\n } @else if (_selectedComponent.type === 'chip-string') {\n <chip-string-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></chip-string-attribute>\n } @else if (_selectedComponent.type === 'chip-calendar') {\n <chip-calendar-attribute\n [components]=\"components\"\n [variables]=\"variables\"\n [component]=\"_selectedComponent\"></chip-calendar-attribute>\n } @else if (_selectedComponent.type === 'number') {\n <number-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></number-attribute>\n } @else if (_selectedComponent.type === 'datetime') {\n <datetime-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></datetime-attribute>\n } @else if (_selectedComponent.type === 'select') {\n <select-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></select-attribute>\n } @else if (_selectedComponent.type === 'radio') {\n <radio-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></radio-attribute>\n } @else if (_selectedComponent.type === 'checkbox') {\n <checkbox-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></checkbox-attribute>\n } @else if (_selectedComponent.type === 'html') {\n <html-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></html-attribute>\n } @else if (_selectedComponent.type === 'upload') {\n <upload-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></upload-attribute>\n } @else if (_selectedComponent.type === 'table') {\n <table-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"_selectedComponent\"></table-attribute>\n } @else if (_selectedComponent.type === 'group') {\n <group-attribute [group]=\"$any(_selectedComponent)\"></group-attribute>\n }\n </div>\n } @else {\n <div class=\"fb-attrs__placeholder\">\n <span class=\"msi\">ads_click</span>\n <div class=\"title\">{{ 'core.component.form-builder.no-selection-title' | translate }}</div>\n <div class=\"hint\">{{ 'core.component.form-builder.no-selection-hint' | translate }}</div>\n </div>\n }\n </aside>\n</div>\n\n<!-- ══════════════════ Reusable control template ═════════════════ -->\n<ng-template #controlTemplate let-item>\n @if (item.type === 'textfield') {\n <textfield-control [component]=\"item\"></textfield-control>\n } @else if (item.type === 'textarea') {\n <textarea-control [component]=\"item\"></textarea-control>\n } @else if (item.type === 'chip-string') {\n <chip-string-control [component]=\"item\"></chip-string-control>\n } @else if (item.type === 'chip-calendar') {\n <chip-calendar-control [component]=\"item\"></chip-calendar-control>\n } @else if (item.type === 'number') {\n <number-control [component]=\"item\"></number-control>\n } @else if (item.type === 'datetime') {\n <datetime-control [component]=\"item\"></datetime-control>\n } @else if (item.type === 'select') {\n <select-control [component]=\"item\"></select-control>\n } @else if (item.type === 'radio') {\n <radio-control [component]=\"item\"></radio-control>\n } @else if (item.type === 'checkbox') {\n <checkbox-control [component]=\"item\"></checkbox-control>\n } @else if (item.type === 'html') {\n <html-control [component]=\"item\"></html-control>\n } @else if (item.type === 'upload') {\n <upload-control [component]=\"item\"></upload-control>\n } @else if (item.type === 'table') {\n <table-control [component]=\"item\"></table-control>\n }\n</ng-template>\n\n<!-- ══════════════════════ JSON / variables modals ═══════════════════════ -->\n<sd-modal title=\"JSON\" view=\"dialog\" width=\"80%\" #popupViewJSON>\n <sd-textarea [(model)]=\"jsonString\"></sd-textarea>\n <ng-container sdFooter>\n <sd-button\n type=\"fill\"\n [title]=\"'core.component.form-builder.save' | translate\"\n (click)=\"updateJSON()\"\n prefixIcon=\"save\"\n color=\"primary\"></sd-button>\n </ng-container>\n</sd-modal>\n<sd-modal [title]=\"'core.component.form-builder.config-variable' | translate\" view=\"dialog\" width=\"800px\" #popupConfigureVariables>\n @for (variable of clonedVariables; track variable.id) {\n <div class=\"d-flex align-items-center\" style=\"gap: 8px\">\n <sd-input [form]=\"form\" [label]=\"'core.component.form-builder.field-key' | translate\" [(model)]=\"variable.key\" required></sd-input>\n <sd-input\n [form]=\"form\"\n [label]=\"'core.component.form-builder.display-label' | translate\"\n [(model)]=\"variable.label\"\n required></sd-input>\n <sd-button prefixIcon=\"delete\" (click)=\"removeVariables(variable.id)\" color=\"error\"></sd-button>\n </div>\n }\n <a href=\"javascript:;\" (click)=\"addVariables()\">{{ 'core.component.form-builder.add-variable' | translate }}</a>\n <ng-container sdFooter>\n <sd-button\n type=\"fill\"\n [title]=\"'core.component.form-builder.save' | translate\"\n (click)=\"updateVariables()\"\n prefixIcon=\"save\"\n color=\"primary\"></sd-button>\n </ng-container>\n</sd-modal>\n<configure-validation (accept)=\"onUpdateValidations($event)\"></configure-validation>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdModal } from '@sdcorejs/angular/components/modal';\nimport { SdAutocomplete } from '@sdcorejs/angular/forms/autocomplete';\nimport { SdInput } from '@sdcorejs/angular/forms/input';\nimport { SdInputNumber } from '@sdcorejs/angular/forms/input-number';\nimport { SdSelect } from '@sdcorejs/angular/forms/select';\nimport { ArrayUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport {\n Attribute,\n AttributeOperators,\n GetAttributes,\n SdFormGenericComponent,\n SdFormGenericExpression,\n SdFormGenericGroup,\n} from '../../models';\nimport { ExpressionFeelPipe } from '../../pipes';\nimport { FormGenericService } from '../../services';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\n\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\n@Component({\n selector: 'sd-feel-expression',\n templateUrl: './sd-feel-expression.component.html',\n styleUrl: './sd-feel-expression.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SdInput, SdInputNumber, SdSelect, SdAutocomplete, SdButton, SdSelect, SdModal, TranslatePipe],\n})\nexport class SdFeelExpression implements OnInit {\n @ViewChild(SdModal) modal?: SdModal;\n form = new FormGroup({});\n attributeOperators = AttributeOperators;\n attributes: Attribute[] = [];\n attribute: Record<string, Attribute> = {};\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\n // ValuesKey\n expression?: SdFormGenericExpression;\n @Input({ alias: 'expression', required: true }) set _expression(expression: SdFormGenericExpression | undefined) {\n if (this.expression !== expression) {\n this.expression = expression;\n }\n this.expression = this.expression || {\n key: `${new Date().getTime().toString(36)}`,\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n };\n }\n @Output() expressionChange = new EventEmitter<SdFormGenericExpression>();\n\n //\n model?: string;\n @Input({ alias: 'model', required: true }) set _model(model: string | undefined) {\n if (this.model !== model) {\n this.model = model;\n }\n }\n @Output() modelChange = new EventEmitter<string>();\n\n @Output() sdChange = new EventEmitter<{ model?: string; expression?: SdFormGenericExpression }>();\n\n constructor(\n private ref: ChangeDetectorRef,\n private expressionFeelPipe: ExpressionFeelPipe,\n private formGenericService: FormGenericService\n ) {}\n\n ngOnInit(): void {}\n\n edit = async () => {\n this.attributes = await this.#getAttributes(this.components);\n this.attribute = ArrayUtilities.toObject('value', this.attributes);\n this.modal?.open?.();\n this.ref.markForCheck();\n };\n\n addCondition = (conditions: SdFormGenericExpression['conditions']) => {\n conditions.push({\n key: `${new Date().getTime().toString(36)}`,\n type: 'condition',\n field: undefined,\n operator: 'EQUAL',\n value: undefined,\n dayInfo: {},\n });\n this.ref.markForCheck();\n };\n\n addCombinator = (conditions: SdFormGenericExpression['conditions']) => {\n conditions.push({\n key: `${new Date().getTime().toString(36)}`,\n type: 'combinator',\n combinator: '&&',\n conditions: [],\n });\n this.ref.markForCheck();\n };\n\n remove = (conditions: SdFormGenericExpression['conditions'], idx: number) => {\n conditions.splice(idx, 1);\n this.ref.markForCheck();\n };\n\n onAccept = () => {\n if (this.form.invalid) {\n this.form.markAllAsTouched();\n return;\n }\n if (this.expression) {\n this.model = this.expressionFeelPipe.transform(this.expression!);\n this.expressionChange.emit(this.expression);\n } else {\n this.model = '';\n }\n this.modelChange.emit(this.model);\n this.sdChange.emit({\n model: this.model,\n expression: this.expression,\n });\n this.modal?.close();\n this.ref.markForCheck();\n };\n\n // Từ components map thành các attributes\n #getAttributes = async (components: (SdFormGenericComponent | SdFormGenericGroup)[]): Promise<Attribute[]> => {\n const attributes: Attribute[] = [];\n if (components.length) {\n for (const component of components) {\n if (component.type === 'group') {\n attributes.push(...GetAttributes(component.components));\n } else if (component.type === 'textfield' || component.type === 'textarea') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n } else if (component.type === 'number') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'number',\n });\n } else if (component.type === 'checkbox') {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'boolean',\n displayOnTrue: 'YES',\n displayOnFalse: 'NO',\n });\n } else if (component.type === 'radio' || component.type === 'select') {\n if (component.values?.length) {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'values',\n values: component.values.map(e => ({\n value: e.value,\n display: e.label,\n })),\n });\n } else {\n const values = await this.formGenericService.selection.items(component.valuesKey, {\n entity: {},\n component,\n });\n // Nếu là mảng thì push vào\n if (Array.isArray(values)) {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'values',\n values,\n });\n } else {\n attributes.push({\n value: component.key,\n display: component.label,\n type: 'string',\n });\n }\n }\n }\n }\n }\n return attributes;\n };\n}\n","<a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{model || '--'}}</a>\n@if (expression) {\n<sd-modal [title]=\"'core.component.form-builder.set-expression' | translate\">\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button prefixIcon=\"calculate\" class=\"mr-4\" [title]=\"'core.component.form-builder.condition-group' | translate\" color=\"primary\" (click)=\"addCombinator(expression.conditions)\"></sd-button>\n <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.condition' | translate\" color=\"primary\" (click)=\"addCondition(expression.conditions)\" type=\"fill\"></sd-button>\n </div>\n <!-- Cấp 1 -->\n @for (conditionLv1 of expression.conditions; track conditionLv1.key; let idxLv1 = $index) {\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px;\">\n <div class=\"c-condition\">\n <!-- Dòng 1 chỉ hiện WHERE -->\n @if (idxLv1 === 0) {\n <div class=\"c-where\">WHERE</div>\n }\n <!-- Dòng 2 hiển thị combinator -->\n @if (idxLv1 === 1) {\n <div class=\"c-select\">\n <sd-select\n size=\"sm\"\n [(model)]=\"expression.combinator\"\n [items]=\"[\n { value: '&&', display: 'AND' },\n { value: '||', display: 'OR' }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError=\"\"></sd-select>\n </div>\n }\n </div>\n @if (conditionLv1.type === 'condition') {\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"width: 200px;\" [(model)]=\"conditionLv1.field\" [items]=\"attributes\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n @let fieldAttribute = attribute[conditionLv1.field!];\n <sd-select size=\"sm\" [form]=\"form\" style=\"width: 100px;\" [(model)]=\"conditionLv1.operator\" [items]=\"attributeOperators[fieldAttribute?.type || 'string']\" valueField=\"value\" displayField=\"display\" [disabled]=\"!fieldAttribute?.type\" required hideInlineError></sd-select>\n @if(!!fieldAttribute?.type && conditionLv1.operator && conditionLv1.operator !== 'NULL' && conditionLv1.operator !== 'NOT_NULL') {\n @if(fieldAttribute.type === 'string') {\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input>\n } @else if(fieldAttribute.type === 'number') {\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input-number>\n } @else if(fieldAttribute.type === 'boolean') {\n <sd-select size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" [items]=\"[{value: true, display: fieldAttribute.displayOnTrue}, {value: false, display: fieldAttribute.displayOnFalse}]\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-select>\n }@else if(fieldAttribute.type === 'values') {\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" [items]=\"fieldAttribute.values\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n }\n }\n <sd-button\n class=\"ml-auto\"\n prefixIcon=\"delete\"\n [tooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n \n } @else if (conditionLv1.type === 'combinator') {\n <div class=\"c-builder\">\n <div class=\"d-flex justify-content-end\">\n <sd-button\n class=\"mr-4\"\n prefixIcon=\"delete\"\n [tooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\n <sd-button prefixIcon=\"add\" [title]=\"'core.component.form-builder.condition' | translate\" size=\"sm\" color=\"primary\" (click)=\"addCondition(conditionLv1.conditions)\" type=\"fill\"></sd-button>\n </div>\n <!-- Cấp 2 -->\n @for (conditionLv2 of conditionLv1.conditions; track conditionLv2.key; let idxLv2 = $index) {\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px;\">\n <div class=\"c-condition\">\n <!-- Dòng 1 chỉ hiện WHERE -->\n @if (idxLv2 === 0) {\n <div class=\"c-where\">WHERE</div>\n }\n <!-- Dòng 2 hiển thị combinator -->\n @if (idxLv2 === 1) {\n <div class=\"c-select\">\n <sd-select\n size=\"sm\"\n [(model)]=\"conditionLv1.combinator\"\n [items]=\"[\n { value: '&&', display: 'AND' },\n { value: '||', display: 'OR' }\n ]\"\n valueField=\"value\"\n displayField=\"display\"\n required\n hideInlineError=\"\"></sd-select>\n </div>\n }\n </div>\n @if (conditionLv2.type === 'condition') {\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"width: 200px;\" [(model)]=\"conditionLv2.field\" [items]=\"attributes\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n @let fieldAttribute = attribute[conditionLv2.field!];\n <sd-select size=\"sm\" [form]=\"form\" style=\"width: 100px;\" [(model)]=\"conditionLv2.operator\" [items]=\"attributeOperators[fieldAttribute?.type || 'string']\" valueField=\"value\" displayField=\"display\" [disabled]=\"!fieldAttribute?.type\" required hideInlineError></sd-select>\n @if(!!fieldAttribute?.type && conditionLv2.operator && conditionLv2.operator !== 'NULL' && conditionLv2.operator !== 'NOT_NULL') {\n @if(fieldAttribute.type === 'string') {\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" required hideInlineError></sd-input>\n } @else if(fieldAttribute.type === 'number') {\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" required hideInlineError></sd-input-number>\n } @else if(fieldAttribute.type === 'boolean') {\n <sd-select size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" [items]=\"[{value: true, display: fieldAttribute.displayOnTrue}, {value: false, display: fieldAttribute.displayOnFalse}]\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-select>\n }@else if(fieldAttribute.type === 'values') {\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" [items]=\"fieldAttribute.values\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\n }\n }\n <sd-button\n class=\"ml-auto\"\n prefixIcon=\"delete\"\n [tooltip]=\"'core.component.form-builder.delete' | translate\"\n (click)=\"remove(conditionLv1.conditions, idxLv1)\"></sd-button>\n \n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <ng-container sdFooter>\n <sd-button prefixIcon=\"save\" [title]=\"'core.component.form-builder.confirm' | translate\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\n </ng-container>\n</sd-modal>\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ComponentViewedPipe","DateUtilities","i2.FormGenericService","i1","StringUtilities","i1.FormGenericService","SdInputNumber","startWith","debounceTime","SdInput","SdSelect","SdAutocomplete","i1.BuilderService","BuildQueries","i2.BuilderService","i1.ExpressionFeelPipe"],"mappings":"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"}
|