@sd-angular/core 19.0.0-beta.1 → 19.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/assets/scss/core/bootstrap.scss +25 -0
  2. package/assets/scss/core/form.scss +4 -10
  3. package/components/avatar/index.d.ts +1 -0
  4. package/components/avatar/src/avatar.component.d.ts +14 -0
  5. package/components/document-builder/src/document-builder.component.d.ts +23 -6
  6. package/components/document-builder/src/document-builder.config.d.ts +21 -0
  7. package/components/document-builder/src/document-builder.model.d.ts +1 -0
  8. package/components/document-builder/src/document-builder.utils.d.ts +10 -0
  9. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +4 -0
  10. package/components/document-builder/src/plugins/{image-upload.plugin.d.ts → image-upload/image-upload.plugin.d.ts} +0 -4
  11. package/components/document-builder/src/plugins/index.d.ts +6 -5
  12. package/components/index.d.ts +1 -0
  13. package/components/table/src/models/table-item.model.d.ts +2 -1
  14. package/components/table/src/models/table-option.model.d.ts +2 -1
  15. package/components/workflow/src/models/index.d.ts +1 -0
  16. package/fesm2022/sd-angular-core-components-avatar.mjs +88 -0
  17. package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -0
  18. package/fesm2022/sd-angular-core-components-badge.mjs +2 -2
  19. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  20. package/fesm2022/sd-angular-core-components-document-builder.mjs +721 -513
  21. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  22. package/fesm2022/sd-angular-core-components-table.mjs +366 -77
  23. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  24. package/fesm2022/sd-angular-core-components-workflow.mjs +23 -23
  25. package/fesm2022/sd-angular-core-components-workflow.mjs.map +1 -1
  26. package/fesm2022/sd-angular-core-components.mjs +1 -0
  27. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  28. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +24 -2
  29. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  30. package/fesm2022/sd-angular-core-forms-date.mjs +15 -3
  31. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  32. package/fesm2022/sd-angular-core-forms-datetime.mjs +17 -3
  33. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  34. package/fesm2022/sd-angular-core-forms-input-number.mjs +18 -3
  35. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  36. package/fesm2022/sd-angular-core-forms-input.mjs +20 -6
  37. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  38. package/fesm2022/sd-angular-core-forms-radio.mjs +17 -2
  39. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  40. package/fesm2022/sd-angular-core-forms-select.mjs +15 -2
  41. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  42. package/fesm2022/sd-angular-core-forms-textarea.mjs +21 -2
  43. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  44. package/fesm2022/sd-angular-core-modules-auth.mjs +137 -0
  45. package/fesm2022/sd-angular-core-modules-auth.mjs.map +1 -0
  46. package/fesm2022/sd-angular-core-modules-layout.mjs +1 -1
  47. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  48. package/fesm2022/sd-angular-core-modules.mjs +1 -0
  49. package/fesm2022/sd-angular-core-modules.mjs.map +1 -1
  50. package/fesm2022/sd-angular-core-pipes.mjs +21 -1
  51. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  52. package/fesm2022/sd-angular-core-services-confirm.mjs +60 -25
  53. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  54. package/fesm2022/sd-angular-core-utilities-extensions.mjs +66 -1
  55. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  56. package/fesm2022/sd-angular-core-utilities-models.mjs +12 -3
  57. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  58. package/forms/autocomplete/src/autocomplete.component.d.ts +5 -1
  59. package/forms/date/src/date.component.d.ts +4 -1
  60. package/forms/datetime/src/datetime.component.d.ts +4 -1
  61. package/forms/input/src/input.component.d.ts +6 -4
  62. package/forms/input-number/src/input-number.component.d.ts +4 -1
  63. package/forms/radio/src/radio.component.d.ts +5 -1
  64. package/forms/select/src/select.component.d.ts +5 -1
  65. package/forms/textarea/src/textarea.component.d.ts +3 -1
  66. package/modules/auth/configurations/auth.configuration.d.ts +19 -0
  67. package/modules/auth/configurations/index.d.ts +1 -0
  68. package/modules/auth/guards/auth.guard.d.ts +11 -0
  69. package/modules/auth/guards/index.d.ts +2 -0
  70. package/modules/auth/guards/portal.guard.d.ts +11 -0
  71. package/modules/auth/index.d.ts +3 -0
  72. package/modules/auth/services/auth.model.d.ts +8 -0
  73. package/modules/auth/services/auth.service.d.ts +17 -0
  74. package/modules/auth/services/index.d.ts +2 -0
  75. package/modules/index.d.ts +1 -0
  76. package/package.json +57 -49
  77. package/pipes/index.d.ts +1 -0
  78. package/pipes/src/empty.pipe.d.ts +7 -0
  79. package/sd-angular-core-19.0.0-beta.11.tgz +0 -0
  80. package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +8 -0
  81. package/services/confirm/src/lib/confirm.service.d.ts +14 -0
  82. package/utilities/extensions/index.d.ts +1 -0
  83. package/utilities/extensions/src/color.extension.d.ts +20 -0
  84. package/utilities/models/src/maybe-async.model.d.ts +1 -0
  85. package/utilities/models/src/pattern.model.d.ts +2 -2
  86. /package/components/document-builder/src/plugins/{comment.plugin.d.ts → comment/comment.plugin.d.ts} +0 -0
  87. /package/components/document-builder/src/plugins/{page-orientation.plugin.d.ts → page-orientation/page-orientation.plugin.d.ts} +0 -0
  88. /package/components/document-builder/src/plugins/{table-fit.plugin.d.ts → table-fit/table-fit.plugin.d.ts} +0 -0
  89. /package/components/document-builder/src/plugins/{variable.plugin.d.ts → variable/variable.plugin.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-components-workflow.mjs","sources":["../../../projects/sd-angular/components/workflow/src/configurations/workflow.configuration.ts","../../../projects/sd-angular/components/workflow/src/models/form-generic-component.model.ts","../../../projects/sd-angular/components/workflow/src/models/form-generic-expression.model.ts","../../../projects/sd-angular/components/workflow/src/services/form-generic.service.ts","../../../projects/sd-angular/components/workflow/src/services/form-render.service.ts","../../../projects/sd-angular/components/workflow/src/pipes/component-viewed.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/when-expression.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/expression-query.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/expression-view.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/expression-feel.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/html.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/hyperlink.pipe.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/textfield/textfield.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/textfield/textfield.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/textarea/textarea.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/textarea/textarea.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/chip-string/chip-string.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/chip-string/chip-string.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/number/number.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/number/number.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/datetime/datetime.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/datetime/datetime.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/select/select.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/select/select.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/radio/radio.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/radio/radio.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/upload/upload.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/upload/upload.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/table/table.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/table/table.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/html/html.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/html/html.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/item.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/item.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/variable/variable.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/variable/variable.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/form-render.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/form-render.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/expression-builder/expression-builder.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/expression-builder/expression-builder.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-expression/attribute-expression.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-expression/attribute-expression.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-input/attribute-input.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-input/attribute-input.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-switch/attribute-switch.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-switch/attribute-switch.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-template/attribute-template.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-template/attribute-template.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/services/builder.service.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textfield/control/textfield-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textfield/control/textfield-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textarea/control/textarea-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textarea/control/textarea-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-string/control/chip-string-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-string/control/chip-string-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/number/attribute/number-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/number/attribute/number-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/number/control/number-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/number/control/number-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/datetime/control/datetime-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/datetime/control/datetime-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-select/attribute-select.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-select/attribute-select.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/attribute-selection.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/attribute-selection.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/select/attribute/select-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/select/attribute/select-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/select/control/select-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/select/control/select-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/radio/control/radio-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/radio/control/radio-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/radio/attribute/radio-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/radio/attribute/radio-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/checkbox/control/checkbox-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/checkbox/control/checkbox-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/attribute/html-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/attribute/html-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/control/html-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/control/html-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/upload/attribute/upload-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/upload/attribute/upload-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/upload/control/upload-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/upload/control/upload-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-table/attribute-table.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-table/attribute-table.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/table/attribute/table-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/table/attribute/table-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/table/control/table-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/table/control/table-control.component.html","../../../projects/sd-angular/components/workflow/src/models/form-generic-validation.model.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/configure-validation/configure-validation.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/configure-validation/configure-validation.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/form-builder.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/form-builder.component.html","../../../projects/sd-angular/components/workflow/src/components/sd-feel-expression/sd-feel-expression.component.ts","../../../projects/sd-angular/components/workflow/src/components/sd-feel-expression/sd-feel-expression.component.html","../../../projects/sd-angular/components/workflow/sd-angular-core-components-workflow.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { IWorkflowConfigurationForm } from './form.configuration';\r\n\r\nexport interface ISdWorkflowConfiguration {\r\n form?: IWorkflowConfigurationForm;\r\n}\r\n\r\nexport const SD_WORKFLOW_CONFIGURATION = new InjectionToken<ISdWorkflowConfiguration>('sd.workflow.configuration');\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// Định nghĩa các Components của Form Render\r\nimport { SdTableColumn, SdTableOption } from '@sd-angular/core/components/table';\r\nimport { SdUploadFile } from '@sd-angular/core/components/upload-file';\r\nimport { SdColor } from '@sd-angular/core/utilities';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { SdPatternType } from '@sd-angular/core/utilities/models';\r\nimport { SdFormGenericSelectionStaticItem } from './form-generic-definition-selection.model';\r\nimport { SdFormGenericExpression } from './form-generic-expression.model';\r\nimport { SdFormGeneric } from './form-generic.model';\r\n\r\nexport interface SdFormRenderConfiguration {\r\n onLoaded?: () => void;\r\n components: SdFormGeneric['components'];\r\n validations?: SdFormGeneric['validations'];\r\n variables?: SdFormGenericVariable[];\r\n beforeSubmit?: (entity: Record<string, any>) => Promise<Record<string, any>>;\r\n}\r\n\r\nexport interface SdFormGenericLayout {\r\n row?: string;\r\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;\r\n mobileColumns?:\r\n | '1'\r\n | '2'\r\n | '3'\r\n | '4'\r\n | '5'\r\n | '6'\r\n | '7'\r\n | '8'\r\n | '9'\r\n | '10'\r\n | '11'\r\n | '12'\r\n | 1\r\n | 2\r\n | 3\r\n | 4\r\n | 5\r\n | 6\r\n | 7\r\n | 8\r\n | 9\r\n | 10\r\n | 11\r\n | 12;\r\n}\r\n\r\nexport const GenerateId = () => {\r\n return SdUtilities.randomId('id');\r\n};\r\n\r\nexport const GenerateKey = () => {\r\n return SdUtilities.randomId('key');\r\n};\r\n\r\nexport const SdFormatComponent = (component: SdFormGenericComponent | SdFormGenericGroup) => {\r\n if (component) {\r\n if (!component.id) {\r\n component.id = GenerateId();\r\n }\r\n // Html và Group không có key và validate\r\n if (component.type !== 'group') {\r\n if (!component.key) {\r\n component.key = GenerateKey();\r\n }\r\n if (!component.validate) {\r\n component.validate = {};\r\n }\r\n }\r\n if (!component.layout) {\r\n component.layout = {\r\n columns: '12',\r\n };\r\n }\r\n\r\n if (!component.properties) {\r\n component.properties = {};\r\n }\r\n\r\n if (component.type === 'datetime') {\r\n // Nếu là datetime thì gán mặc định subtype là date\r\n component.subtype = component.subtype || 'date';\r\n } else if (component.type === 'table') {\r\n // Nếu là table thì lấy columns mẫu\r\n if (!component.columns?.length) {\r\n component.columns = [\r\n {\r\n key: 'key_1',\r\n label: 'Cột 1',\r\n type: 'string',\r\n },\r\n {\r\n key: 'key_2',\r\n label: 'Cột 2',\r\n type: 'string',\r\n },\r\n {\r\n key: 'key_3',\r\n label: 'Cột 3',\r\n type: 'string',\r\n },\r\n ];\r\n }\r\n } else if (component.type === 'radio') {\r\n // Nếu là radio thì lấy values mẫu\r\n if (!component.values?.length) {\r\n component.values = [\r\n {\r\n value: 'value_1',\r\n label: 'Label 1',\r\n },\r\n {\r\n value: 'value_2',\r\n label: 'Label 2',\r\n },\r\n ];\r\n }\r\n // Mặc định trải ngang các lựa chọn\r\n component.properties.direction = component.properties.direction || 'row';\r\n } else if (component.type === 'upload') {\r\n component.properties!.type = component.properties!.type || 'file';\r\n component.properties!.source = component.properties!.source || 'ALL';\r\n }\r\n }\r\n};\r\n\r\nexport interface SdFormGenericVariable {\r\n id: string;\r\n key: string;\r\n label: string;\r\n}\r\n\r\nexport type SdFormGenericComponent =\r\n | SdFormGenericTextfield\r\n | SdFormGenericChipString\r\n | SdFormGenericChipCalendar\r\n | SdFormGenericTextarea\r\n | SdFormGenericNumber\r\n | SdFormGenericCheckbox\r\n | SdFormGenericDatetime\r\n | SdFormGenericValues\r\n | SdFormGenericUpload\r\n | SdFormGenericTable\r\n | SdFormGenericHtml;\r\n\r\nexport type SdFormGenericValues = SdFormGenericRadio | SdFormGenericSelect | SdFormGenericChecklist;\r\nexport interface SdFormGenericComponentBase {\r\n template?: string;\r\n id: string;\r\n key: string;\r\n label: string;\r\n helperText?: string;\r\n layout?: SdFormGenericLayout;\r\n validate?: {\r\n required?: boolean;\r\n };\r\n disabled?: boolean;\r\n properties?: {\r\n viewed?: boolean; // true nếu muốn hiển thị dạng view (view khác với disable)\r\n hyperlink?: string; // Hyperlink khi ở trạng thái viewed\r\n hidden?: boolean;\r\n hiddenWhenExpression?: SdFormGenericExpression;\r\n visibleWhenExpression?: SdFormGenericExpression;\r\n disabledWhenExpression?: SdFormGenericExpression;\r\n requiredWhenExpression?: SdFormGenericExpression;\r\n onChange?: {\r\n // Thực tế khi sử dụng sẽ có mong muốn trigger sự kiện change sẽ làm gì đó\r\n // Nếu muốn setValues thì cú pháp sẽ là \"key\": \"${otherKey}\" hoặc \"key\": true, \"key\": \"value\"\r\n setValues?: Record<string, any>;\r\n };\r\n } & Record<string, any>;\r\n}\r\nexport interface SdFormGenericTextfield extends SdFormGenericComponentBase {\r\n type: 'textfield';\r\n defaultValue?: string;\r\n validate?: {\r\n maxlength?: number;\r\n minlength?: number;\r\n pattern?: SdPatternType | string; // Regex\r\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\n\r\nexport interface SdFormGenericChipString extends SdFormGenericComponentBase {\r\n type: 'chip-string';\r\n defaultValue?: string[];\r\n validate?: {\r\n maxlength?: number;\r\n minlength?: number;\r\n pattern?: SdPatternType | string; // Regex\r\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\r\n maxOfItems?: number; // Số lượng item tối đa\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\nexport interface SdFormGenericChipCalendar extends SdFormGenericComponentBase {\r\n type: 'chip-calendar';\r\n defaultValue?: string[];\r\n validate?: {\r\n maxlength?: number;\r\n minlength?: number;\r\n pattern?: SdPatternType | string; // Regex\r\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\r\n maxOfItems?: number; // Số lượng item tối đa\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\nexport interface SdFormGenericTextarea extends SdFormGenericComponentBase {\r\n type: 'textarea';\r\n defaultValue?: string;\r\n validate?: {\r\n maxlength?: number;\r\n minlength?: number;\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\n\r\nexport interface SdFormGenericNumber extends SdFormGenericComponentBase {\r\n type: 'number';\r\n defaultValue?: number;\r\n validate?: {\r\n min?: number;\r\n max?: number;\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\n\r\nexport interface SdFormGenericCheckbox extends SdFormGenericComponentBase {\r\n type: 'checkbox';\r\n defaultValue?: boolean;\r\n}\r\n\r\nexport interface SdFormGenericDatetime extends SdFormGenericComponentBase {\r\n type: 'datetime';\r\n subtype: 'date' | 'datetime';\r\n defaultValue?: string;\r\n validate?: {\r\n min?: 'TODAY' | string;\r\n max?: 'TODAY' | string;\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\nexport interface SdFormGenericRadio extends SdFormGenericComponentBase {\r\n type: 'radio';\r\n values?: SdFormGenericSelectionStaticItem[];\r\n valuesKey?: string; // Mapping từ form-render-values\r\n defaultValue?: string;\r\n properties?: {\r\n direction?: 'row' | 'column';\r\n } & SdFormGenericComponentBase['properties'];\r\n}\r\nexport interface SdFormGenericSelect extends SdFormGenericComponentBase {\r\n type: 'select';\r\n values?: SdFormGenericSelectionStaticItem[];\r\n valuesKey?: string; // Mapping từ form-render-values\r\n defaultValue?: string | string[];\r\n properties?: {\r\n query?: Record<string, any>;\r\n multiple?: boolean;\r\n setVariables?: Record<string, string>; // Chỉ đối với dữ liệu từ API\r\n } & SdFormGenericComponentBase['properties'];\r\n}\r\nexport interface SdFormGenericChecklist extends SdFormGenericComponentBase {\r\n type: 'checklist';\r\n values?: SdFormGenericSelectionStaticItem[];\r\n valuesKey?: string; // Mapping từ form-render-values\r\n defaultValue?: string[];\r\n properties?: {\r\n query?: Record<string, any>;\r\n } & SdFormGenericComponentBase['properties'];\r\n}\r\nexport interface SdFormGenericGroup {\r\n id: string;\r\n type: 'group';\r\n label: string;\r\n layout: SdFormGenericLayout;\r\n components: SdFormGenericComponent[];\r\n properties: {\r\n icon: string;\r\n color: SdColor;\r\n hidden?: boolean;\r\n hiddenWhenExpression?: SdFormGenericExpression;\r\n visibleWhenExpression?: SdFormGenericExpression;\r\n };\r\n}\r\n\r\n// CUSTOM\r\nexport interface SdFormGenericUpload extends SdFormGenericComponentBase {\r\n type: 'upload';\r\n properties?: {\r\n type?: SdUploadFile['type'];\r\n maxSize?: SdUploadFile['maxSize']; // Dung lượng tối đa\r\n max?: SdUploadFile['max']; // Số lượng file tối đa\r\n extensions?: SdUploadFile['extensions'];\r\n args?: Record<string, any>; //.tham số\r\n // Dành cho mobile\r\n source?: 'ALL' | 'PHOTO_LIBRARY' | 'CAPTURE'; // Mặc định là ALL\r\n } & SdFormGenericComponentBase['properties'];\r\n}\r\n\r\nexport interface FormRenderComponentTableColumnValues {\r\n valuesKey: string;\r\n query?: Record<string, any>;\r\n}\r\n\r\nexport type SdFormGenericTableColumn<T = any> =\r\n | TableColumnString<T>\r\n | TableColumnNumber<T>\r\n | TableColumnBool<T>\r\n | TableColumnDate<T>\r\n | TableColumnDatetime<T>\r\n | TableColumnRadio<T>\r\n | TableColumnValues<T>\r\n | TableColumnImage<T>\r\n | TableColumnFile<T>;\r\n\r\nexport const TableColumnTypes = [\r\n {\r\n value: 'string',\r\n display: 'Chuỗi',\r\n },\r\n {\r\n value: 'number',\r\n display: 'Số',\r\n },\r\n {\r\n value: 'date',\r\n display: 'Ngày',\r\n },\r\n {\r\n value: 'datetime',\r\n display: 'Ngày giờ',\r\n },\r\n {\r\n value: 'values',\r\n display: 'Chọn giá trị',\r\n },\r\n {\r\n value: 'boolean',\r\n display: 'True/False',\r\n },\r\n {\r\n value: 'file',\r\n display: 'Tệp',\r\n },\r\n {\r\n value: 'image',\r\n display: 'Ảnh',\r\n },\r\n];\r\n\r\ninterface TableColumnBase<T = any> {\r\n key: Extract<keyof T, string>;\r\n label: string;\r\n width?: SdTableColumn['width'];\r\n validate?: {\r\n required?: boolean;\r\n };\r\n}\r\n\r\ninterface TableColumnString<T = any> extends TableColumnBase<T> {\r\n type: 'string';\r\n validate?: { minlength?: number; maxlength?: number; pattern?: string; patternErrorMessage?: string } & TableColumnBase['validate'];\r\n}\r\n\r\ninterface TableColumnNumber<T = any> extends TableColumnBase<T> {\r\n type: 'number';\r\n validate?: { min?: number; max?: number } & TableColumnBase['validate'];\r\n}\r\n\r\ninterface TableColumnDate<T = any> extends TableColumnBase<T> {\r\n type: 'date';\r\n validate?: { min?: 'TODAY' | string; max?: 'TODAY' | string } & TableColumnBase['validate'];\r\n}\r\n\r\ninterface TableColumnDatetime<T = any> extends TableColumnBase<T> {\r\n type: 'datetime';\r\n validate?: { min?: 'TODAY' | string; max?: 'TODAY' | string } & TableColumnBase['validate'];\r\n}\r\n\r\ninterface TableColumnBool<T = any> extends TableColumnBase<T> {\r\n type: 'boolean';\r\n displayOnTrue?: string;\r\n displayOnFalse?: string;\r\n}\r\n\r\ninterface TableColumnRadio<T = any> extends TableColumnBase<T> {\r\n type: 'radio';\r\n values?: SdFormGenericSelectionStaticItem[];\r\n}\r\n\r\ninterface TableColumnValues<T = any> extends TableColumnBase<T> {\r\n type: 'values';\r\n valuesKey: string;\r\n query?: Record<string, any>;\r\n values?: SdFormGenericSelectionStaticItem[];\r\n}\r\ninterface TableColumnImage<T = any> extends TableColumnBase<T> {\r\n type: 'image';\r\n args?: Record<string, any>;\r\n validate?: { max?: number; maxSize?: number } & TableColumnBase['validate'];\r\n}\r\n\r\ninterface TableColumnFile<T = any> extends TableColumnBase<T> {\r\n type: 'file';\r\n args?: Record<string, any>;\r\n validate?: { max?: number; maxSize?: number } & TableColumnBase['validate'];\r\n}\r\n\r\nexport interface SdFormGenericTable extends SdFormGenericComponentBase {\r\n type: 'table';\r\n columnsKey?: string;\r\n columns?: SdFormGenericTableColumn[];\r\n properties?: {\r\n type?: SdTableOption['type'];\r\n titleButtonCreate?: string; // Tiêu đề nút tạo mới\r\n } & SdFormGenericComponentBase['properties'];\r\n}\r\n\r\nexport interface SdFormGenericHtml {\r\n template?: string;\r\n id: string;\r\n key?: string;\r\n type: 'html';\r\n content: string;\r\n validate?: {\r\n required?: boolean;\r\n };\r\n layout?: SdFormGenericLayout;\r\n properties?: {\r\n viewed?: boolean;\r\n hyperlink?: string; // Hyperlink khi ở trạng thái viewed\r\n hidden?: boolean;\r\n hiddenWhenExpression?: SdFormGenericExpression;\r\n visibleWhenExpression?: SdFormGenericExpression;\r\n variables?: { key: string; label: string; value?: string }[];\r\n queries?: { key: string; label: string }[];\r\n query?: Record<string, any>;\r\n };\r\n}\r\n\r\nexport interface FormBuilderComponent {\r\n type: string;\r\n icon: string;\r\n name: string;\r\n}\r\n\r\nexport const FormBuilderComponents: FormBuilderComponent[] = [\r\n {\r\n type: 'textfield',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M45 16a3 3 0 013 3v16a3 3 0 01-3 3H9a3 3 0 01-3-3V19a3 3 0 013-3h36zm0 2H9a1 1 0 00-1 1v16a1 1 0 001 1h36a1 1 0 001-1V19a1 1 0 00-1-1zm-32 4v10h-2V22h2z\"></path></svg>',\r\n name: 'Text field',\r\n },\r\n {\r\n type: 'textarea',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M45 13a3 3 0 0 1 3 3v22a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V16a3 3 0 0 1 3-3zm0 2H9a1 1 0 0 0-1 1v22a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V16a1 1 0 0 0-1-1m-1.136 15.5.849.849-6.364 6.364-.849-.849zm.264 3.5.849.849-2.828 2.828-.849-.849zM13 19v10h-2V19z\"></path></svg>',\r\n name: 'Text area',\r\n },\r\n {\r\n type: 'chip-string',\r\n icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M160-240q-33 0-56.5-23.5T80-320v-320q0-33 23.5-56.5T160-720h640q33 0 56.5 23.5T880-640v320q0 33-23.5 56.5T800-240H160Zm0-80h640v-320H160v320Zm130-40h60v-90h90v-60h-90v-90h-60v90h-90v60h90v90Zm-130 40v-320 320Z\"/></svg>',\r\n name: 'Chip string',\r\n },\r\n {\r\n type: 'chip-calendar',\r\n icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M160-240q-33 0-56.5-23.5T80-320v-320q0-33 23.5-56.5T160-720h640q33 0 56.5 23.5T880-640v320q0 33-23.5 56.5T800-240H160Zm0-80h640v-320H160v320Zm130-40h60v-90h90v-60h-90v-90h-60v90h-90v60h90v90Zm-130 40v-320 320Z\"/></svg>',\r\n name: 'Chip calendar',\r\n },\r\n {\r\n type: 'number',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1M35 28.444h7l-3.5 4zM35 26h7l-3.5-4z\"></path></svg>',\r\n name: 'Number',\r\n },\r\n {\r\n type: 'datetime',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M37.908 13.418h-5.004v-2.354h-1.766v2.354H21.13v-2.354h-1.766v2.354H14.36a2.07 2.07 0 0 0-2.06 2.06v23.549a2.07 2.07 0 0 0 2.06 2.06h6.77v-1.766h-6.358a.707.707 0 0 1-.706-.706V15.89c0-.39.316-.707.706-.707h4.592v2.355h1.766v-2.355h10.008v2.355h1.766v-2.355h4.592a.71.71 0 0 1 .707.707v6.358h1.765v-6.77c0-1.133-.927-2.06-2.06-2.06\"></path><path d=\"m35.13 37.603 1.237-1.237-3.468-3.475v-5.926h-1.754v6.654l3.984 3.984Z\"></path><path fill-rule=\"evenodd\" d=\"M23.08 36.962a9.678 9.678 0 1 0 17.883-7.408 9.678 9.678 0 0 0-17.882 7.408Zm4.54-10.292a7.924 7.924 0 1 1 8.805 13.177A7.924 7.924 0 0 1 27.62 26.67\"></path></svg>',\r\n name: 'Date',\r\n },\r\n {\r\n type: 'select',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M45 16a3 3 0 013 3v16a3 3 0 01-3 3H9a3 3 0 01-3-3V19a3 3 0 013-3h36zm0 2H9a1 1 0 00-1 1v16a1 1 0 001 1h36a1 1 0 001-1V19a1 1 0 00-1-1zm-12 7h9l-4.5 6-4.5-6z\"></path></svg>',\r\n name: 'Select',\r\n },\r\n {\r\n type: 'radio',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M27 22c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5m0-5c-5.52 0-10 4.48-10 10s4.48 10 10 10 10-4.48 10-10-4.48-10-10-10m0 18a8 8 0 1 1 0-16 8 8 0 1 1 0 16\"></path></svg>',\r\n name: 'Radio',\r\n },\r\n\r\n {\r\n type: 'checkbox',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M34 18H20a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V20a2 2 0 0 0-2-2m-9 14-5-5 1.41-1.41L25 29.17l7.59-7.59L34 23z\"></path></svg>',\r\n name: 'Check box',\r\n },\r\n {\r\n type: 'html',\r\n icon: '<span style=\"font-size:32px\" class=\"material-icons\">code</span>',\r\n name: 'HTML',\r\n },\r\n {\r\n type: 'upload',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" class=\"fjs-palette-field-icon\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M34.636 21.91A3.818 3.818 0 1127 21.908a3.818 3.818 0 017.636 0zm-2 0A1.818 1.818 0 1129 21.908a1.818 1.818 0 013.636 0z\" clip-rule=\"evenodd\"></path><path fill-rule=\"evenodd\" d=\"M15 13a2 2 0 00-2 2v24a2 2 0 002 2h24a2 2 0 002-2V15a2 2 0 00-2-2H15zm24 2H15v12.45l4.71-4.709a1.91 1.91 0 012.702 0l6.695 6.695 2.656-1.77a1.91 1.91 0 012.411.239L39 32.73V15zM15 39v-8.754a.975.975 0 00.168-.135l5.893-5.893 6.684 6.685a1.911 1.911 0 002.41.238l2.657-1.77 6.02 6.02c.052.051.108.097.168.135V39H15z\" clip-rule=\"evenodd\"></path></svg>',\r\n name: 'Upload',\r\n },\r\n {\r\n type: 'table',\r\n icon: '<span style=\"font-size:32px\" class=\"material-icons\">table_chart</span>',\r\n name: 'Table',\r\n },\r\n];\r\n\r\nexport const GetComponentAttributes = (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => {\r\n const attributes: { value: string; display: string }[] = [];\r\n if (components.length) {\r\n for (const component of components) {\r\n if (component.type === 'group') {\r\n attributes.push(...GetComponentAttributes(component.components));\r\n } else if (component.type !== 'html') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n });\r\n }\r\n }\r\n }\r\n return attributes;\r\n};\r\n\r\nexport const GetVariableAttributes = (variables: SdFormGenericVariable[]) => {\r\n const attributes: { value: string; display: string }[] = [];\r\n if (variables.length) {\r\n for (const variable of variables) {\r\n attributes.push({\r\n value: variable.key,\r\n display: `[VARIABLE] ${variable.label}`,\r\n });\r\n }\r\n }\r\n return attributes;\r\n};\r\n","import { SdOperator, SdOperators } from '@sd-angular/core/utilities/models';\r\nimport { SdFormGenericComponent, SdFormGenericGroup } from './form-generic-component.model';\r\nimport { DateUtilities } from '@sd-angular/core/utilities';\r\n\r\nexport interface SdFormGenericExpression {\r\n key: string; // Random, phục vụ cho @for ở attribute-expression\r\n type: 'combinator';\r\n combinator: '&&' | '||';\r\n conditions: (SdFormGenericExpression | SdFormGenericExpressionCondition)[];\r\n}\r\n\r\nexport interface SdFormGenericExpressionCondition {\r\n key: string; // Random, phục vụ cho @for ở attribute-expression\r\n type: 'condition';\r\n field?: string;\r\n operator: SdOperator;\r\n value: any;\r\n dayInfo: DayInfo;\r\n}\r\n\r\nexport type Operator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';\r\nexport const Operators: {\r\n value: Operator;\r\n symbol?: string;\r\n display: string;\r\n}[] = [\r\n {\r\n value: 'EQUAL',\r\n symbol: '=',\r\n display: 'Bằng',\r\n },\r\n {\r\n value: 'NOT_EQUAL',\r\n symbol: '≠',\r\n display: 'Không bằng',\r\n },\r\n {\r\n value: 'GREATER_THAN',\r\n symbol: '>',\r\n display: 'Lớn hơn',\r\n },\r\n {\r\n value: 'LESS_THAN',\r\n symbol: '<',\r\n display: 'Nhỏ hơn',\r\n },\r\n {\r\n value: 'GREATER_OR_EQUAL',\r\n symbol: '≥',\r\n display: 'Lớn hơn, hoặc bằng',\r\n },\r\n {\r\n value: 'LESS_OR_EQUAL',\r\n symbol: '≤',\r\n display: 'Nhỏ hơn, hoặc bằng',\r\n },\r\n {\r\n value: 'NULL',\r\n symbol: 'motion_photos_off',\r\n display: 'Là rỗng',\r\n },\r\n {\r\n value: 'NOT_NULL',\r\n symbol: 'adjust',\r\n display: 'Không rỗng',\r\n },\r\n];\r\n\r\nexport type Attribute = AttributeBase | AttributeBoolean | AttributeDate | AttributeValues;\r\n\r\ninterface AttributeBase {\r\n value: string;\r\n display: string;\r\n type: 'string' | 'number';\r\n}\r\n\r\ninterface AttributeBoolean {\r\n value: string;\r\n display: string;\r\n type: 'boolean';\r\n displayOnTrue: string;\r\n displayOnFalse: string;\r\n}\r\n\r\ninterface AttributeDate {\r\n value: string;\r\n display: string;\r\n type: 'datetime';\r\n}\r\n\r\nexport interface DayInfo {\r\n type?: 'RELATED' | 'NOW' | 'DATETIME' | 'ATTRIBUTE';\r\n related?: 'LASTDAY' | 'NEXTDAY' | 'LASTWEEK' | 'NEXTWEEK' | 'LASTMONTH' | 'NEXTMONTH';\r\n relatedValue?: number;\r\n}\r\n\r\nexport const DayInfoTypes = [\r\n { value: 'RELATED', display: 'Ngày liên quan' },\r\n { value: 'NOW', display: 'Ngày hiện tại' },\r\n { value: 'DATETIME', display: 'Ngày cụ thể' },\r\n { value: 'ATTRIBUTE', display: 'Trường dữ liệu' },\r\n];\r\n\r\nexport const DayInfoPreviouses = [\r\n { value: 'LASTDAY', display: 'Ngày trước', format: (n: number) => `${n || 1}LastDay` },\r\n { value: 'NEXTDAY', display: 'Ngày tới', format: (n: number) => `${n || 1}NextDay` },\r\n // { value: 'LASTWEEK', display: 'Tuần trước', format: (n: number) => `${n || 1}LastWeek` },\r\n // { value: 'NEXTWEEK', display: 'Tuần tới', format: (n: number) => `${n || 1}NextWeek` },\r\n // { value: 'LASTMONTH', display: 'Tháng trước', format: (n: number) => `${n || 1}LastMonth` },\r\n // { value: 'NEXTMONTH', display: 'Tháng tới', format: (n: number) => `${n || 1}NextMonth` },\r\n];\r\n\r\nexport const GetDatetimeValue = (value: string) => {\r\n if (!value || typeof value !== 'string') {\r\n return undefined;\r\n }\r\n if (value === 'now') {\r\n return DateUtilities.toFormat(new Date(), 'yyyy/MM/dd HH:mm:ss');\r\n }\r\n if (value?.endsWith('LastDay')) {\r\n const relatedValue = +value.replace('LastDay', '');\r\n if (relatedValue) {\r\n return DateUtilities.toFormat(DateUtilities.addDays(new Date(), -relatedValue), 'yyyy/MM/dd HH:mm:ss');\r\n }\r\n }\r\n if (value?.endsWith('NextDay')) {\r\n const relatedValue = +value.replace('LastDay', '');\r\n if (relatedValue) {\r\n return DateUtilities.toFormat(DateUtilities.addDays(new Date(), relatedValue), 'yyyy/MM/dd HH:mm:ss');\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\ninterface AttributeValues {\r\n value: string;\r\n display: string;\r\n type: 'values';\r\n values: { value: string; display: string }[];\r\n}\r\n\r\nexport const AttributeOperators: Record<\r\n Attribute['type'],\r\n {\r\n value: Operator;\r\n symbol?: string;\r\n display: string;\r\n }[]\r\n> = {\r\n string: [\r\n {\r\n value: 'EQUAL',\r\n symbol: '=',\r\n display: 'Bằng',\r\n },\r\n {\r\n value: 'NOT_EQUAL',\r\n symbol: '≠',\r\n display: 'Không bằng',\r\n },\r\n {\r\n value: 'NULL',\r\n symbol: 'motion_photos_off',\r\n display: 'Là rỗng',\r\n },\r\n {\r\n value: 'NOT_NULL',\r\n symbol: 'adjust',\r\n display: 'Không rỗng',\r\n },\r\n ],\r\n number: Operators,\r\n datetime: Operators,\r\n boolean: [\r\n {\r\n value: 'EQUAL',\r\n symbol: '=',\r\n display: 'Bằng',\r\n },\r\n {\r\n value: 'NOT_EQUAL',\r\n symbol: '≠',\r\n display: 'Không bằng',\r\n },\r\n ],\r\n values: [\r\n {\r\n value: 'EQUAL',\r\n symbol: '=',\r\n display: 'Bằng',\r\n },\r\n {\r\n value: 'NOT_EQUAL',\r\n symbol: '≠',\r\n display: 'Không bằng',\r\n },\r\n {\r\n value: 'NULL',\r\n symbol: 'motion_photos_off',\r\n display: 'Là rỗng',\r\n },\r\n {\r\n value: 'NOT_NULL',\r\n symbol: 'adjust',\r\n display: 'Không rỗng',\r\n },\r\n ],\r\n};\r\n\r\n// Từ components map thành các attributes\r\nexport const GetAttributes = (components: (SdFormGenericComponent | SdFormGenericGroup)[]): Attribute[] => {\r\n const attributes: Attribute[] = [];\r\n if (components.length) {\r\n for (const component of components) {\r\n if (component.type === 'group') {\r\n attributes.push(...GetAttributes(component.components));\r\n } else if (component.type === 'textfield' || component.type === 'textarea') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n } else if (component.type === 'number') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'number',\r\n });\r\n } else if (component.type === 'datetime') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'datetime',\r\n });\r\n } else if (component.type === 'checkbox') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'boolean',\r\n displayOnTrue: 'YES',\r\n displayOnFalse: 'NO',\r\n });\r\n } else if (component.type === 'radio' || component.type === 'select') {\r\n if (component.values?.length) {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'values',\r\n values: component.values.map(e => ({\r\n value: e.value,\r\n display: e.label,\r\n })),\r\n });\r\n } else {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return attributes;\r\n};\r\n\r\nexport const TemplateToCondition = (template: string | undefined | null, entity: Record<string, any>) => {\r\n if (!template) {\r\n return undefined;\r\n }\r\n const regex = /\\$\\{([A-Za-z0-9._-]*)\\}/g;\r\n const matches = template.match(regex) || [];\r\n for (const match of matches) {\r\n const key = match.slice(2, match.length - 1);\r\n if (key) {\r\n // Xử lý trong trường hợp key có định dạng a.b.c ...\r\n let val: any = entity;\r\n const strs = key.split('.');\r\n for (const str of strs) {\r\n val = val?.[str];\r\n }\r\n if (typeof val === 'string') {\r\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\r\n if (DateUtilities.isDate(val)) {\r\n template = template.replace(match, `'${DateUtilities.toFormat(val, 'yyyy/MM/dd HH:mm:ss')}'`);\r\n } else {\r\n // Nếu là chuỗi thì thêm dấu nháy khi replace giá trị để so sánh, ví dụ 'a' === 'a'\r\n // Nếu là số hay boolean thì không cần, ví dụ 121 === 121\r\n template = template.replace(match, `'${val}'`);\r\n }\r\n } else {\r\n template = template.replace(match, val ?? `undefined`);\r\n }\r\n }\r\n }\r\n return template;\r\n};\r\n\r\nexport const ExpressionToJavascriptExpression = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\r\n const queries: string[] = [];\r\n if (condition.type === 'combinator') {\r\n if (condition.conditions?.length) {\r\n for (const child of condition.conditions) {\r\n queries.push(`(${ExpressionToJavascriptExpression(child)})`);\r\n }\r\n }\r\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\r\n const query = queries.join(` ${condition.combinator} `);\r\n if (queries.length > 1) {\r\n return `(${query})`;\r\n } else {\r\n return query;\r\n }\r\n } else {\r\n return ConvertToJavascriptExpression(condition);\r\n }\r\n};\r\nconst ConvertToJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\r\n const { value } = condition;\r\n // Convert thành syntax ${field}\r\n const field = '${' + condition.field + '}';\r\n const { operator } = condition;\r\n if (!operator) {\r\n return undefined;\r\n }\r\n if (operator === 'NULL') {\r\n return `!${field}`;\r\n }\r\n if (operator === 'NOT_NULL') {\r\n return `!!${field}`;\r\n }\r\n if (value === undefined || value === null || value === '') {\r\n return undefined;\r\n }\r\n // Xử lý đối với trường hợp string là 'datetime' thì value sẽ có thể là 'now', '1LastDay' ....\r\n const datetimeValue = GetDatetimeValue(value);\r\n if (operator === 'EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} === '${datetimeValue || value}'`;\r\n }\r\n return `${field} === ${value}`;\r\n }\r\n if (operator === 'GREATER_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} > '${datetimeValue || value}'`;\r\n }\r\n return `${field} > ${value}`;\r\n }\r\n if (operator === 'LESS_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} < '${datetimeValue || value}'`;\r\n }\r\n return `${field} < ${value}`;\r\n }\r\n if (operator === 'NOT_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} !== '${datetimeValue || value}'`;\r\n }\r\n return `${field} !== ${value}`;\r\n }\r\n if (operator === 'GREATER_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} >= '${datetimeValue || value}'`;\r\n }\r\n return `${field} >= ${value}`;\r\n }\r\n if (operator === 'LESS_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} <= '${datetimeValue || value}'`;\r\n }\r\n return `${field} <= ${value}`;\r\n }\r\n return undefined;\r\n};\r\n","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport { SdSearch } from '@sd-angular/core/forms';\r\nimport { ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from '../configurations';\r\nimport { SdFormGenericArgs, SdFormGenericDefinitionHtml, SdFormGenericDefinitionSelection, SdFormGenericSelectionItem } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FormGenericService {\r\n #selections?: SdFormGenericDefinitionSelection[];\r\n #definitionHtmls?: SdFormGenericDefinitionHtml[];\r\n constructor(\r\n @Inject(SD_WORKFLOW_CONFIGURATION)\r\n @Optional()\r\n private readonly configuration: ISdWorkflowConfiguration,\r\n ) {}\r\n\r\n get selections() {\r\n return this.configuration?.form?.selections || [];\r\n }\r\n\r\n get tables() {\r\n return this.configuration?.form?.tables || [];\r\n }\r\n\r\n getSelection = async (valuesKey: string | undefined | null) => {\r\n if (!valuesKey) {\r\n return undefined;\r\n }\r\n const selections = await this.selection.definitions();\r\n return selections.find(e => e.value === valuesKey);\r\n };\r\n\r\n selection = {\r\n definitions: async (): Promise<SdFormGenericDefinitionSelection[]> => {\r\n // Nếu chưa xử lý lấy trước đó thì thực hiện xử lý lấy data cho selections\r\n if (!this.#selections) {\r\n const selections = this.configuration?.form?.selections;\r\n if (!selections) {\r\n this.#selections = [];\r\n } else if (Array.isArray(selections)) {\r\n this.#selections = selections;\r\n } else {\r\n const results = selections();\r\n if (results instanceof Promise) {\r\n this.#selections = (await results) || [];\r\n } else {\r\n this.#selections = results || [];\r\n }\r\n }\r\n }\r\n return this.#selections || [];\r\n },\r\n getDefinition: async (valuesKey: string | undefined | null) => {\r\n if (!valuesKey) {\r\n return undefined;\r\n }\r\n const selections = await this.selection.definitions();\r\n return selections.find(e => e.value === valuesKey);\r\n },\r\n // Lấy dữ liệu items cho dropdown, radio, checklist\r\n // Dữ liệu có thể là 1 mảng hoặc hàm\r\n items: async (\r\n valuesKey: string | undefined | null,\r\n args: SdFormGenericArgs\r\n ): Promise<SdFormGenericSelectionItem[] | SdSearch<SdFormGenericSelectionItem>> => {\r\n try {\r\n const { component, column } = args;\r\n // Nếu có values thì xử lý trả về mảng tĩnh\r\n if (component && 'values' in component && Array.isArray(component.values) && component.values.length) {\r\n return component.values.map(e => ({\r\n value: e.value,\r\n display: e.label,\r\n data: e,\r\n }));\r\n }\r\n // Nếu component là table và có thông tin column\r\n if (component?.type === 'table' && column && 'values' in column && Array.isArray(column.values) && column.values.length) {\r\n return column.values.map(e => ({\r\n value: e.value,\r\n display: e.label,\r\n data: e,\r\n }));\r\n }\r\n // Ngoài ra nếu không có valuesKey thì trả về mảng rỗng\r\n if (!valuesKey) {\r\n return [];\r\n }\r\n // Tìm cấu hình dựa vào valuesKey\r\n const selection = await this.selection.getDefinition(valuesKey);\r\n if (!selection) {\r\n return [];\r\n }\r\n if ('values' in selection) {\r\n return await selection.values(args);\r\n } else if ('valuesKey' in selection && selection?.valuesKey && !!this.configuration?.form?.getValues) {\r\n return (await this.configuration?.form?.getValues?.(selection.valuesKey, selection.args)) || [];\r\n } else if ('lazyValues' in selection) {\r\n return searchArgs => {\r\n return selection.lazyValues(searchArgs, args);\r\n };\r\n } else if ('lazyValuesKey' in selection && selection?.lazyValuesKey && !!this.configuration?.form?.getLazyValues) {\r\n const getLazyValues = this.configuration?.form?.getLazyValues?.(selection.lazyValuesKey, selection.args);\r\n return searchArgs => {\r\n return getLazyValues(searchArgs, args);\r\n };\r\n }\r\n return [];\r\n } catch (err) {\r\n console.error(err);\r\n return [];\r\n }\r\n },\r\n variables: {\r\n detail: async (valuesKey: string, values: string | number | string[] | number[], args: SdFormGenericArgs) => {\r\n const selection = await this.selection.getDefinition(valuesKey);\r\n return selection?.variables?.detail?.(values, args);\r\n },\r\n },\r\n };\r\n\r\n html = {\r\n definitions: async (): Promise<SdFormGenericDefinitionHtml[]> => {\r\n // Nếu chưa xử lý lấy trước đó thì thực hiện xử lý lấy data cho htmls\r\n if (!this.#definitionHtmls) {\r\n const htmls = this.configuration?.form?.htmls;\r\n if (!htmls) {\r\n this.#definitionHtmls = [];\r\n } else if (Array.isArray(htmls)) {\r\n this.#definitionHtmls = htmls;\r\n } else {\r\n const results = htmls();\r\n if (results instanceof Promise) {\r\n this.#definitionHtmls = (await results) || [];\r\n } else {\r\n this.#definitionHtmls = results || [];\r\n }\r\n }\r\n }\r\n return this.#definitionHtmls || [];\r\n },\r\n getContent: async (template: string, query?: Record<string, any>): Promise<string> => {\r\n const definitions = await this.html.definitions();\r\n const html = definitions.find(e => e.value === template);\r\n if (html) {\r\n if (typeof html.content === 'string') {\r\n return html.content;\r\n }\r\n if (typeof html.content === 'function') {\r\n return await html.content(query).catch(err => {\r\n console.error(err);\r\n return '';\r\n });\r\n }\r\n return '';\r\n }\r\n return '';\r\n },\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SdFormGeneric } from '../models/form-generic.model';\r\nimport { ComponentViewedPipe } from '../pipes';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdFormRenderService {\r\n constructor(private readonly componentViewedPipe: ComponentViewedPipe) {}\r\n\r\n viewEntities = async (form: SdFormGeneric, entities: Record<string, any>[]): Promise<Record<string, any>[]> => {\r\n const reuslts: Record<string, any>[] = [];\r\n for (const entity of entities || []) {\r\n const result: Record<string, any> = {};\r\n for (const component of form?.components || []) {\r\n // Group và upload thì k cần lấy view\r\n if (\r\n component.type !== 'table' &&\r\n component.type !== 'group' &&\r\n component.type !== 'upload' &&\r\n component.type !== 'html' &&\r\n component.key\r\n ) {\r\n result[component.key] = await this.componentViewedPipe.transform(entity?.[component.key], entity, component);\r\n }\r\n }\r\n reuslts.push(result);\r\n }\r\n return reuslts;\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { DateUtilities, NumberUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { SD_EMPTY_STR } from '@sd-angular/core/utilities/models';\r\nimport { SdFormGenericComponent, SdFormGenericHtml } from '../models';\r\nimport { FormGenericService } from '../services';\r\nimport { SdFormatNumberPipe } from '@sd-angular/core/pipes';\r\n\r\n@Pipe({\r\n name: 'componentViewed',\r\n standalone: true,\r\n})\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n// Pipe xử lý hiển thị detail cho component\r\nexport class ComponentViewedPipe implements PipeTransform {\r\n constructor(\r\n private readonly formatNumberPipe: SdFormatNumberPipe,\r\n private readonly formGenericService: FormGenericService\r\n ) {}\r\n transform = async (\r\n value: any,\r\n entity: Record<string, any>,\r\n component: Exclude<SdFormGenericComponent, SdFormGenericHtml>\r\n ): Promise<string> => {\r\n if (!component?.key) {\r\n return '';\r\n }\r\n const val = entity?.[component.key];\r\n if (val === undefined || val === null) {\r\n return SD_EMPTY_STR;\r\n }\r\n if (component.type === 'textfield' || component.type === 'textarea') {\r\n return val || SD_EMPTY_STR;\r\n }\r\n if (component.type === 'number') {\r\n return this.formatNumberPipe.transform(value)?.toString() ?? SD_EMPTY_STR;\r\n }\r\n if (component.type === 'datetime') {\r\n if (component.subtype === 'datetime') {\r\n return DateUtilities.toFormat(val, 'dd/MM/yyyy HH:mm') || SD_EMPTY_STR;\r\n } else {\r\n return DateUtilities.toFormat(val, 'dd/MM/yyyy') || SD_EMPTY_STR;\r\n }\r\n }\r\n if (component.type === 'select' || component.type === 'radio' || component.type === 'checklist') {\r\n const values = (Array.isArray(val) ? val : [val]).filter(value => value !== undefined && value !== null && value !== '');\r\n if (!values.length) {\r\n return SD_EMPTY_STR;\r\n }\r\n const selection = await this.formGenericService.selection.getDefinition(component?.valuesKey);\r\n // Nếu có cấu hình view tương ứng với selection thì sử dụng viewed\r\n if (selection?.viewed) {\r\n return (\r\n (await selection.viewed(values, {\r\n entity,\r\n component,\r\n })) || SD_EMPTY_STR\r\n );\r\n }\r\n // Ngoài ra xử lý lấy thông tin items\r\n const items = await this.formGenericService.selection.items(component?.valuesKey, {\r\n entity,\r\n component,\r\n });\r\n if (!items) {\r\n return SD_EMPTY_STR;\r\n }\r\n // Nếu items là Array thì kiểm tra value và hiển thị display\r\n if (Array.isArray(items)) {\r\n return (\r\n items\r\n .filter(e => values.includes(e.value))\r\n .map(e => e.display)\r\n .join(', ') || SD_EMPTY_STR\r\n );\r\n }\r\n // items là Function (lazyValues) thì thực hiện gọi API\r\n return await items({\r\n type: 'VALUE',\r\n value: values,\r\n }).then(results => {\r\n return (\r\n results\r\n .filter(e => values.includes(e.value))\r\n .map(e => e.display)\r\n .join(', ') || SD_EMPTY_STR\r\n );\r\n });\r\n }\r\n return '';\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { ExpressionToJavascriptExpression, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericHtml, TemplateToCondition } from '../models';\r\n\r\n@Pipe({\r\n name: 'whenExpression',\r\n standalone: true,\r\n})\r\n// Xử lý thông tin required, disabled, hidden của component\r\nexport class WhenExpressionPipe implements PipeTransform {\r\n #hidden = (component: SdFormGenericComponent | SdFormGenericGroup, variables: Record<string, any>) => {\r\n if (component.properties?.hidden) {\r\n return true;\r\n }\r\n const hiddenWhenExpression = component.properties?.hiddenWhenExpression;\r\n if (hiddenWhenExpression) {\r\n const val = TemplateToCondition(ExpressionToJavascriptExpression(hiddenWhenExpression), variables);\r\n if (!val) {\r\n return true;\r\n }\r\n try {\r\n const result = new Function('return ' + val)();\r\n if (typeof result === 'boolean') {\r\n // Chỉ bỏ hidden khi template return false\r\n return result;\r\n } else {\r\n return true;\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n return true;\r\n }\r\n }\r\n const visibleWhenExpression = component.properties?.visibleWhenExpression;\r\n if (visibleWhenExpression) {\r\n const val = TemplateToCondition(ExpressionToJavascriptExpression(visibleWhenExpression), variables);\r\n if (!val) {\r\n return true;\r\n }\r\n try {\r\n const result = new Function('return ' + val)();\r\n if (typeof result === 'boolean') {\r\n // \r\n return !result;\r\n } else {\r\n return true; // Ẩn\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n return true; // Ẩn\r\n }\r\n }\r\n return false;\r\n };\r\n #disabled = (component: Exclude<SdFormGenericComponent, SdFormGenericHtml>, variables: Record<string, any>) => {\r\n const disabledWhenExpression = component.properties?.disabledWhenExpression;\r\n if (disabledWhenExpression) {\r\n const val = TemplateToCondition(ExpressionToJavascriptExpression(disabledWhenExpression), variables);\r\n if (!val) {\r\n return true;\r\n }\r\n try {\r\n const result = new Function('return ' + val)();\r\n if (typeof result === 'boolean') {\r\n // Chỉ bỏ disabled khi template return false\r\n return result;\r\n } else {\r\n return true;\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n #required = (component: Exclude<SdFormGenericComponent, SdFormGenericHtml>, variables: Record<string, any>) => {\r\n const requiredWhenExpression = component.properties?.requiredWhenExpression;\r\n if (requiredWhenExpression) {\r\n const val = TemplateToCondition(ExpressionToJavascriptExpression(requiredWhenExpression), variables);\r\n if (!val) {\r\n return false;\r\n }\r\n try {\r\n const result = new Function('return ' + val)();\r\n if (typeof result === 'boolean') {\r\n // Chỉ required khi template return true\r\n return result;\r\n } else {\r\n return false;\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n return false;\r\n }\r\n }\r\n return false;\r\n };\r\n transform(\r\n hashed: string | undefined,\r\n component: SdFormGenericComponent | SdFormGenericGroup,\r\n entity: Record<string, any>\r\n ): {\r\n hidden: boolean;\r\n disabled: boolean;\r\n required: boolean;\r\n } {\r\n // Group và html chỉ xử lý ẩn/hiện\r\n if (component.type === 'group' || component.type === 'html') {\r\n return {\r\n hidden: this.#hidden(component, entity),\r\n disabled: false,\r\n required: false,\r\n };\r\n }\r\n return {\r\n hidden: this.#hidden(component, entity),\r\n disabled: component?.disabled || this.#disabled(component, entity),\r\n required: component?.validate?.required || this.#required(component, entity),\r\n };\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\r\n\r\n// Từ Expression JSON build thành Expression String\r\n@Pipe({\r\n name: 'expressionQuery',\r\n})\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ExpressionQueryPipe implements PipeTransform {\r\n #generateQuery = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\r\n const queries: string[] = [];\r\n if (condition.type === 'combinator') {\r\n if (condition.conditions?.length) {\r\n for (const child of condition.conditions) {\r\n queries.push(`(${this.#generateQuery(child)})`);\r\n }\r\n }\r\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\r\n const query = queries.join(` ${condition.combinator} `);\r\n if (queries.length > 1) {\r\n return `(${query})`;\r\n } else {\r\n return query;\r\n }\r\n } else {\r\n return this.#generateJavascriptExpression(condition);\r\n }\r\n };\r\n #generateJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\r\n const { value } = condition;\r\n // Convert thành syntax ${field}\r\n const field = '${' + condition.field + '}';\r\n const { operator } = condition;\r\n if (!operator) {\r\n return undefined;\r\n }\r\n if (operator === 'NULL') {\r\n return `!${field}`;\r\n }\r\n if (operator === 'NOT_NULL') {\r\n return `!!${field}`;\r\n }\r\n if (value === undefined || value === null || value === '') {\r\n return undefined;\r\n }\r\n if (operator === 'EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} === '${value}'`;\r\n }\r\n return `${field} === ${value}`;\r\n }\r\n if (operator === 'GREATER_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} > '${value}'`;\r\n }\r\n return `${field} > ${value}`;\r\n }\r\n if (operator === 'LESS_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} < '${value}'`;\r\n }\r\n return `${field} < ${value}`;\r\n }\r\n if (operator === 'NOT_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} !== '${value}'`;\r\n }\r\n return `${field} !== ${value}`;\r\n }\r\n if (operator === 'GREATER_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} >= '${value}'`;\r\n }\r\n return `${field} >= ${value}`;\r\n }\r\n if (operator === 'LESS_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} <= '${value}'`;\r\n }\r\n return `${field} <= ${value}`;\r\n }\r\n return undefined;\r\n };\r\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition | undefined): string | undefined {\r\n if(!condition) {\r\n return undefined;\r\n }\r\n return this.#generateQuery(condition);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Attribute, Operators, SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\r\n\r\n@Pipe({\r\n name: 'expressionView',\r\n})\r\nexport class ExpressionViewPipe implements PipeTransform {\r\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition, attributes: Attribute[]): string {\r\n if (condition.type === 'combinator') {\r\n return '';\r\n }\r\n const { field, operator, value } = condition;\r\n const containerStyle = `style=\"border: 1px solid #e6e6e6; border-radius: 4px; background-color: #e6e6e6; padding: 4px 8px;\"`;\r\n const results: string[] = [];\r\n // Wording field\r\n results.push(`<div ${containerStyle}>${attributes.find(e => e.value === field)?.display || field}</div>`);\r\n // Wording operator\r\n if (operator) {\r\n results.push(`<div>${Operators.find(e => e.value === operator)?.display || operator}</div>`);\r\n }\r\n // Wording value\r\n if (operator && value !== undefined) {\r\n results.push(`<div ${containerStyle}>${value}</div>`);\r\n }\r\n return `<div class=\"d-flex flex-row align-items-center\" style=\"gap:8px ;flex-wrap: wrap ;word-wrap: break-word\">${results.join(\r\n ''\r\n )}</div>`;\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\r\n\r\n// Từ Expression JSON build thành Expression String theo cú pháp của FEEL mà Camunda sử dụng\r\n@Pipe({\r\n name: 'expressionFeel',\r\n})\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ExpressionFeelPipe implements PipeTransform {\r\n #generateQuery = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\r\n const queries: string[] = [];\r\n if (condition.type === 'combinator') {\r\n if (condition.conditions?.length) {\r\n for (const child of condition.conditions) {\r\n queries.push(`${this.#generateQuery(child)}`);\r\n }\r\n }\r\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\r\n const query = queries.join(` ${condition.combinator === '||' ? 'or' : 'and'} `);\r\n if (queries.length > 1) {\r\n return `(${query})`;\r\n } else {\r\n return query;\r\n }\r\n } else {\r\n return this.#generateJavascriptExpression(condition);\r\n }\r\n };\r\n #generateJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\r\n const { field, value } = condition;\r\n // Convert thành syntax ${field}\r\n const { operator } = condition;\r\n if (!operator) {\r\n return undefined;\r\n }\r\n if (operator === 'NULL') {\r\n return `${field} == null`;\r\n }\r\n if (operator === 'NOT_NULL') {\r\n return `${field} != null`;\r\n }\r\n if (value === undefined || value === null || value === '') {\r\n return undefined;\r\n }\r\n if (operator === 'EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} == '${value}'`;\r\n }\r\n return `${field} == ${value}`;\r\n }\r\n if (operator === 'GREATER_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} > '${value}'`;\r\n }\r\n return `${field} > ${value}`;\r\n }\r\n if (operator === 'LESS_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} < '${value}'`;\r\n }\r\n return `${field} < ${value}`;\r\n }\r\n if (operator === 'NOT_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} != '${value}'`;\r\n }\r\n return `${field} != ${value}`;\r\n }\r\n if (operator === 'GREATER_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} >= '${value}'`;\r\n }\r\n return `${field} >= ${value}`;\r\n }\r\n if (operator === 'LESS_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} <= '${value}'`;\r\n }\r\n return `${field} <= ${value}`;\r\n }\r\n return undefined;\r\n };\r\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition): string | undefined {\r\n const result = this.#generateQuery(condition);\r\n if (result) {\r\n return '${' + result + '}';\r\n }\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdSafeHtmlPipe } from '@sd-angular/core/pipes';\r\nimport { StringUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { SdFormGenericHtml } from '../models';\r\n\r\n@Pipe({\r\n name: 'htmlPipe',\r\n standalone: true,\r\n})\r\n// Pipe xử lý hiển thị detail cho component\r\nexport class HtmlPipe implements PipeTransform {\r\n constructor(private readonly htmlSafePipe: SdSafeHtmlPipe) {}\r\n // Hash component để pipe nhận biết được content hay variables có thay đổi render lại\r\n transform = (hashed: string | undefined | null, content: string, component: SdFormGenericHtml) => {\r\n if (!content) {\r\n return '';\r\n }\r\n const variables: Record<string, any> = {};\r\n if (component.properties?.variables?.length) {\r\n component.properties.variables.forEach(variable => (variables[variable.key] = variable.value));\r\n }\r\n return this.htmlSafePipe.transform(StringUtilities.templateToDisplay(content, variables));\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { StringUtilities } from '@sd-angular/core/utilities/extensions';\r\n\r\n@Pipe({\r\n name: 'hyperlink',\r\n standalone: true,\r\n})\r\n// Pipe xử lý hiển thị detail cho component\r\nexport class HyperlinkPipe implements PipeTransform {\r\n constructor() {}\r\n transform = (hyperlink: string | undefined | null, entity: Record<string, any>): string => {\r\n if (!hyperlink) {\r\n return '';\r\n }\r\n return StringUtilities.templateToDisplay(hyperlink, entity);\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdInput } from '@sd-angular/core/forms';\r\nimport { SdCustomValidator } from '@sd-angular/core/forms/models';\r\nimport { combineLatest, filter, startWith, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericTextfield } from '../../../../../../models';\r\nimport { ComponentViewedPipe } from '../../../../../../pipes';\r\n\r\n@Component({\r\n selector: 'lib-textfield',\r\n templateUrl: './textfield.component.html',\r\n styleUrls: ['./textfield.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdInput,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n ],\r\n})\r\nexport class TextfieldComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n this.#applyDefaultValue(); // Áp dụng defaultValue khi entity thay đổi\r\n }\r\n }\r\n\r\n component?: SdFormGenericTextfield;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericTextfield) {\r\n this.component = val;\r\n this.#applyDefaultValue(); // Áp dụng defaultValue khi component thay đổi\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n this.#disabledChanges.next(this.disabled);\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n validator?: SdCustomValidator;\r\n @Input('validator') set _validator(validator: SdCustomValidator | undefined | null) {\r\n if (validator && this.validator !== validator) {\r\n this.validator = validator;\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n #disabledChanges = new Subject<boolean>();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n this.#applyDefaultValue(); // Áp dụng defaultValue khi component khởi tạo\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n /**\r\n * Áp dụng defaultValue nếu:\r\n * - Không ở trạng thái viewed\r\n * - Không bị disabled\r\n * - entity[key] chưa có giá trị (null, undefined, hoặc empty string)\r\n * - component có defaultValue\r\n */\r\n #applyDefaultValue = () => {\r\n if (!this.component?.key || !this.entity) {\r\n return;\r\n }\r\n const isViewed = this.viewed || this.component.properties?.viewed;\r\n // Chỉ gán default value nếu undefined\r\n const isUndefined = this.entity[this.component.key] === undefined;\r\n const hasDefaultValue = this.component.defaultValue !== undefined && this.component.defaultValue !== null;\r\n // Chỉ gán defaultValue khi:\r\n // 1. Không ở trạng thái viewed\r\n // 2. Không bị disabled\r\n // 3. Giá trị hiện tại chưa được set (null, undefined hoặc empty string)\r\n // 4. Component có defaultValue\r\n if (!isViewed && hasDefaultValue && isUndefined) {\r\n this.entity[this.component.key] = this.component.defaultValue;\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n } @else {\r\n <sd-input\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [helperText]=\"component.helperText\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [validator]=\"validator\"\r\n [maxlength]=\"component.validate?.maxlength\"\r\n [pattern]=\"component.validate?.pattern\"\r\n [patternErrorMessage]=\"component.validate?.patternErrorMessage\"\r\n [disabled]=\"disabled\"></sd-input>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdTextarea } from '@sd-angular/core/forms/textarea';\r\nimport { SdFormGenericTextarea } from '../../../../../../models';\r\nimport { ComponentViewedPipe } from '../../../../../../pipes';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-textarea',\r\n templateUrl: './textarea.component.html',\r\n styleUrls: ['./textarea.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdTextarea,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n ],\r\n})\r\nexport class TextareaComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n component?: SdFormGenericTextarea;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericTextarea) {\r\n this.component = val;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n } @else {\r\n <sd-textarea\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [helperText]=\"component.helperText\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [maxlength]=\"component.validate?.maxlength\"\r\n [disabled]=\"disabled\"></sd-textarea>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdChip } from '@sd-angular/core/forms';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericChipString } from '../../../../../../models';\r\nimport { ComponentViewedPipe } from '../../../../../../pipes';\r\n\r\n@Component({\r\n selector: 'lib-chip-string',\r\n templateUrl: './chip-string.component.html',\r\n styleUrls: ['./chip-string.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdChip,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n ],\r\n})\r\nexport class ChipStringComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n component?: SdFormGenericChipString;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericChipString) {\r\n this.component = val;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n } @else {\r\n <sd-chip\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"></sd-chip>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdChipCalendar } from '@sd-angular/core/forms';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericChipCalendar } from '../../../../../../models';\r\nimport { ComponentViewedPipe } from '../../../../../../pipes';\r\n\r\n@Component({\r\n selector: 'lib-chip-calendar',\r\n templateUrl: './chip-calendar.component.html',\r\n styleUrls: ['./chip-calendar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdChipCalendar,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n ],\r\n})\r\nexport class ChipCalendarComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n component?: SdFormGenericChipCalendar;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericChipCalendar) {\r\n this.component = val;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n } @else {\r\n <sd-chip-calendar\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"></sd-chip-calendar>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdInput } from '@sd-angular/core/forms';\r\nimport { SdCustomValidator } from '@sd-angular/core/forms/models';\r\nimport { SdFormGenericNumber, SdFormGenericTextfield } from '../../../../../../models';\r\nimport { ComponentViewedPipe } from '../../../../../../pipes';\r\nimport { SdInputNumber } from '@sd-angular/core/forms/input-number';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-number',\r\n templateUrl: './number.component.html',\r\n styleUrls: ['./number.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdInputNumber,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n ],\r\n})\r\nexport class NumberComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n component?: SdFormGenericNumber;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericNumber) {\r\n this.component = val;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n } @else {\r\n <sd-input-number\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [helperText]=\"component.helperText\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [max]=\"component.validate?.max\"\r\n [min]=\"component.validate?.min\"></sd-input-number>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdDate } from '@sd-angular/core/forms/date';\r\nimport { SdDatetime } from '@sd-angular/core/forms/datetime';\r\nimport { SdFormGenericDatetime } from '../../../../../../models';\r\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { Router } from '@angular/router';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\n\r\n@Component({\r\n selector: 'lib-datetime',\r\n templateUrl: './datetime.component.html',\r\n styleUrls: ['./datetime.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdDate,\r\n SdDatetime,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n HyperlinkPipe,\r\n ],\r\n})\r\nexport class DatetimeComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n // Mặc định là date\r\n subtype?: SdFormGenericDatetime['subtype'] = 'date';\r\n component?: SdFormGenericDatetime;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericDatetime) {\r\n this.component = val;\r\n this.subtype = this.component?.subtype || 'date';\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private router: Router, private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n onNavigate = (url: string) => {\r\n if (url?.startsWith('http')) {\r\n window.open(url);\r\n } else {\r\n const [path, queryString] = url?.split('?');\r\n const queryParams = SdUtilities.parseQueryParams(queryString);\r\n this.router.navigate([path], { queryParams });\r\n }\r\n };\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n @if (component.properties?.hyperlink) {\r\n @let url = component.properties!.hyperlink | hyperlink: entity;\r\n <!-- Nếu có hyperlink thì dùng thẻ a -->\r\n <a href=\"javascript:;\" (click)=\"onNavigate(url)\">{{ entity[component.key!] | componentViewed: entity : component | async }}</a>\r\n } @else {\r\n <!-- Ngoài ra dùng thẻ mặc định -->\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n }\r\n } @else if (subtype === 'date') {\r\n <sd-date\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [helperText]=\"component.helperText\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [min]=\"component.validate?.min\"\r\n [max]=\"component.validate?.max\"\r\n [disabled]=\"disabled\"></sd-date>\r\n } @else {\r\n <sd-datetime\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [helperText]=\"component.helperText\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [min]=\"component.validate?.min\"\r\n [max]=\"component.validate?.max\"\r\n [disabled]=\"disabled\"></sd-datetime>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdAutocomplete, SdSearch, SdSelect } from '@sd-angular/core/forms';\r\nimport { SdCustomValidator } from '@sd-angular/core/forms/models';\r\nimport { SdUtilities, StringUtilities } from '@sd-angular/core/utilities';\r\n// import { sha1 } from 'object-hash';\r\nimport { debounceTime, filter, startWith, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericSelect, SdFormGenericSelectionItem } from '../../../../../../models';\r\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\r\nimport { FormGenericService } from '../../../../../../services';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'lib-select',\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdSelect,\r\n SdAutocomplete,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n HyperlinkPipe,\r\n ],\r\n})\r\nexport class SelectComponent implements AfterViewInit, OnDestroy {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n form = new FormGroup({});\r\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\r\n if (this.form !== form) {\r\n this.form = form;\r\n this.#inputChanges.next();\r\n }\r\n }\r\n entity: Record<string, any> = {};\r\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n this.#inputChanges.next();\r\n }\r\n }\r\n\r\n component!: SdFormGenericSelect;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericSelect) {\r\n this.component = val;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n validator?: SdCustomValidator;\r\n @Input('validator') set _validator(validator: SdCustomValidator | undefined) {\r\n if (validator && this.validator !== validator) {\r\n this.validator = validator;\r\n }\r\n }\r\n\r\n items: SdFormGenericSelectionItem[] | SdSearch = [];\r\n\r\n #subscription = new Subscription();\r\n #inputChanges = new Subject<void>();\r\n constructor(\r\n private router: Router,\r\n private ref: ChangeDetectorRef,\r\n private readonly formRenderService: FormGenericService\r\n ) {}\r\n\r\n #hashedQuery?: string;\r\n hashedValues?: string;\r\n #generateQuery = (query: string | Record<string, any> | undefined, data: Record<string, any>): Record<string, any> => {\r\n let result: Record<string, any> = {};\r\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\r\n if (typeof query === 'string') {\r\n try {\r\n result = JSON.parse(query);\r\n } catch (err) {\r\n console.error(err);\r\n return result;\r\n }\r\n } else if (Array.isArray(query)) {\r\n return result;\r\n } else {\r\n result = { ...query };\r\n }\r\n // Xử lý query,\r\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\"}\r\n for (const key of Object.keys({ ...result })) {\r\n // Xử ly\r\n result[key] = StringUtilities.templateToDisplay(result[key], data);\r\n if (result[key] === 'true') {\r\n result[key] = true;\r\n }\r\n if (result[key] === 'false') {\r\n result[key] = false;\r\n }\r\n if (result[key] === '') {\r\n delete result[key];\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\r\n const hashedValues = SdUtilities.hash(values);\r\n if (this.hashedValues !== hashedValues) {\r\n this.hashedValues = hashedValues;\r\n this.#inputChanges.next();\r\n }\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#inputChanges.pipe(startWith('')).subscribe(async () => {\r\n // Trạng thái viewed thì không cần check\r\n if (!this.viewed && this.component && !this.component?.properties?.viewed) {\r\n const values = { ...this.entity, ...this.form.value };\r\n const query = this.#generateQuery(this.component?.properties?.query, values);\r\n const hashedQuery = SdUtilities.hash(query);\r\n // Nếu query có thay đổi thì thực hiện gán lại items\r\n if (hashedQuery !== this.#hashedQuery) {\r\n this.#hashedQuery = hashedQuery;\r\n this.items = await this.formRenderService.selection.items(this.component?.valuesKey, {\r\n entity: values,\r\n component: this.component,\r\n query,\r\n });\r\n this.ref.markForCheck();\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChanges = async () => {\r\n const setVariables = this.component.properties?.setVariables;\r\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ị\r\n if (this.component.valuesKey && setVariables) {\r\n // Lấy thông tin detail\r\n const values = { ...this.entity, ...this.form.value };\r\n const query = this.#generateQuery(this.component?.properties?.query, values);\r\n const detail = await this.formRenderService.selection.variables.detail(this.component.valuesKey, this.entity[this.component.key], {\r\n entity: this.entity,\r\n component: this.component,\r\n query,\r\n });\r\n // Nếu có detail thì thực hiện setVariables\r\n if (detail) {\r\n // Đi qua từng key của component sẽ gán giá trị\r\n for (const key of Object.keys(setVariables)) {\r\n try {\r\n const value = StringUtilities.parseExpression(setVariables[key], detail);\r\n // Thực hiện gán giá trị\r\n this.entity[key] = value;\r\n // Thông báo setVariables để component (nếu đang hiển thị) biết và thực hiện re-render hay markForCheck()\r\n this.setVariables.next({ key, value });\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n onNavigate = (url: string) => {\r\n if (url?.startsWith('http')) {\r\n window.open(url);\r\n } else {\r\n const [path, queryString] = url?.split('?');\r\n const queryParams = SdUtilities.parseQueryParams(queryString);\r\n this.router.navigate([path], { queryParams });\r\n }\r\n };\r\n}\r\n","@if (entity && component) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n @if (component.properties?.hyperlink) {\r\n @let url = component.properties!.hyperlink | hyperlink: entity;\r\n <!-- Nếu có hyperlink thì dùng thẻ a -->\r\n <a href=\"javascript:;\" (click)=\"onNavigate(url)\">{{ entity[component.key!] | componentViewed: entity : component | async }}</a>\r\n } @else {\r\n <!-- Ngoài ra dùng thẻ mặc định -->\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n }\r\n } @else {\r\n @if (component.properties?.multiple) {\r\n <sd-select\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key]\"\r\n [required]=\"required\"\r\n [validator]=\"validator\"\r\n [disabled]=\"disabled\"\r\n [items]=\"items\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n disabledField=\"disabled\"\r\n (sdChange)=\"onChanges()\"\r\n multiple></sd-select>\r\n } @else {\r\n <sd-autocomplete\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key]\"\r\n [required]=\"required\"\r\n [validator]=\"validator\"\r\n [disabled]=\"disabled\"\r\n [items]=\"items\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChanges()\"></sd-autocomplete>\r\n }\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdRadio } from '@sd-angular/core/forms';\r\nimport { filter, startWith, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericRadio, SdFormGenericSelectionItem } from '../../../../../../models';\r\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\r\nimport { FormGenericService } from '../../../../../../services';\r\nimport { Router } from '@angular/router';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\n\r\n@Component({\r\n selector: 'lib-radio',\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdRadio,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n HyperlinkPipe\r\n ],\r\n})\r\nexport class RadioComponent implements AfterViewInit, OnDestroy {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n form = new FormGroup({});\r\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\r\n if (this.form !== form) {\r\n this.form = form;\r\n this.#changes.next();\r\n }\r\n }\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n this.#changes.next();\r\n }\r\n }\r\n\r\n component!: SdFormGenericRadio;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericRadio) {\r\n if (this.component !== val) {\r\n this.component = val;\r\n this.#changes.next();\r\n }\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n const viewed = val === '' || !!val;\r\n if (this.viewed !== viewed) {\r\n this.viewed = viewed;\r\n this.#changes.next();\r\n }\r\n }\r\n\r\n items: SdFormGenericSelectionItem[] = [];\r\n\r\n #subscription = new Subscription();\r\n #changes = new Subject<void>();\r\n constructor(\r\n private router: Router,\r\n private ref: ChangeDetectorRef,\r\n private readonly formGenericService: FormGenericService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(startWith('')).subscribe(async () => {\r\n // Trạng thái viewed thì không cần check\r\n if (!this.viewed && this.component && !this.component?.properties?.viewed) {\r\n const values = { ...this.entity, ...this.form.value };\r\n const items = await this.formGenericService.selection.items(this.component.valuesKey, {\r\n entity: values,\r\n component: this.component,\r\n });\r\n // Với radio thì selection buộc phải là values, không phải là lazyValues\r\n if (Array.isArray(items)) {\r\n this.items = items;\r\n } else {\r\n this.items = [];\r\n }\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onNavigate = (url: string) => {\r\n if (url?.startsWith('http')) {\r\n window.open(url);\r\n } else {\r\n const [path, queryString] = url?.split('?');\r\n const queryParams = SdUtilities.parseQueryParams(queryString);\r\n this.router.navigate([path], { queryParams });\r\n }\r\n };\r\n}\r\n","@if (entity && component) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n @if (component.properties?.hyperlink) {\r\n @let url = component.properties!.hyperlink | hyperlink: entity;\r\n <!-- Nếu có hyperlink thì dùng thẻ a -->\r\n <a href=\"javascript:;\" (click)=\"onNavigate(url)\">{{ entity[component.key!] | componentViewed: entity : component | async }}</a>\r\n } @else {\r\n <!-- Ngoài ra dùng thẻ mặc định -->\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n }\r\n } @else {\r\n <sd-radio\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [items]=\"items\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [display]=\"component.properties?.direction\"></sd-radio>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdUploadFile } from '@sd-angular/core/components/upload-file';\r\nimport { SdCustomValidator } from '@sd-angular/core/forms/models';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericUpload } from '../../../../../../models';\r\n\r\n@Component({\r\n selector: 'lib-upload',\r\n templateUrl: './upload.component.html',\r\n styleUrls: ['./upload.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule, SdUploadFile],\r\n})\r\nexport class UploadComponent implements OnDestroy {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @ViewChild(SdUploadFile) sdUploadFile?: SdUploadFile;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n this.#changes.next();\r\n }\r\n }\r\n\r\n component?: SdFormGenericUpload;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericUpload) {\r\n this.component = val;\r\n this.#changes.next();\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n validator?: SdCustomValidator;\r\n @Input('validator') set _validator(validator: SdCustomValidator | undefined | null) {\r\n if (validator && this.validator !== validator) {\r\n this.validator = validator;\r\n }\r\n }\r\n\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n constructor(private readonly ref: ChangeDetectorRef) {}\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n\r\n upload = async () => {\r\n return await this.sdUploadFile?.upload();\r\n };\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <sd-upload-file\r\n [type]=\"component.properties?.type\"\r\n [form]=\"form\"\r\n [model]=\"entity[component.key!]\"\r\n align=\"left\"\r\n [args]=\"component.properties?.args\"\r\n disabled\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"></sd-upload-file>\r\n } @else {\r\n <sd-upload-file\r\n [type]=\"component.properties?.type\"\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [max]=\"component.properties?.max\"\r\n [maxSize]=\"component.properties?.maxSize\"\r\n [extensions]=\"component.properties?.extensions\"\r\n [args]=\"component.properties?.args\"\r\n align=\"left\"\r\n [required]=\"component.validate?.required || required\"\r\n [disabled]=\"disabled\"\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"></sd-upload-file>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n QueryList,\r\n ViewChild,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdSideDrawer } from '@sd-angular/core/components/side-drawer';\r\nimport { SdTabelCellDefDirective, SdTable, SdTableColumn, SdTableOption } from '@sd-angular/core/components/table';\r\nimport { SdUploadFile } from '@sd-angular/core/components/upload-file';\r\nimport { SdAutocomplete, SdInput, SdInputNumber, SdRadio, SdSearch } from '@sd-angular/core/forms';\r\nimport { filter, startWith, Subject, Subscription } from 'rxjs';\r\nimport {\r\n SdFormGenericTableColumn,\r\n SdFormGenericSelectionItem,\r\n SdFormGenericTable,\r\n SdFormGenericSelectionStaticItem,\r\n} from '../../../../../../models';\r\nimport { FormGenericService } from '../../../../../../services';\r\nimport { SdDate } from '@sd-angular/core/forms/date';\r\nimport { SdDatetime } from '@sd-angular/core/forms/datetime';\r\n\r\n@Component({\r\n selector: 'lib-table',\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdInput,\r\n SdInputNumber,\r\n SdAutocomplete,\r\n SdUploadFile,\r\n SdTable,\r\n SdTabelCellDefDirective,\r\n SdSideDrawer,\r\n SdButton,\r\n SdUploadFile,\r\n SdRadio,\r\n SdDate,\r\n SdDatetime,\r\n // Pipe cho phần viewed\r\n ],\r\n})\r\nexport class TableComponent implements AfterViewInit, OnDestroy {\r\n @ViewChildren(SdUploadFile) uploadFiles?: QueryList<SdUploadFile>;\r\n @ViewChild(SdTable) table?: SdTable;\r\n @ViewChild(SdSideDrawer) sideDrawer?: SdSideDrawer;\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n component?: SdFormGenericTable;\r\n col = 'col-6 px-8';\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericTable) {\r\n this.component = val;\r\n this.col = `col-${this.component?.layout?.columns || '6'} px-8`;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = val === '' || val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n this.#tableChanges.next();\r\n }\r\n\r\n model: any[] = [];\r\n @Input('model') set _model(val: any[] | undefined | null) {\r\n val = val || [];\r\n if (this.model !== val) {\r\n this.model = val;\r\n this.#modelChanges.next(val);\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<any[]>();\r\n\r\n #tableChanges = new Subject<void>();\r\n #modelChanges = new Subject<string[]>();\r\n #subscription = new Subscription();\r\n tableOption?: SdTableOption;\r\n row: any = {};\r\n columnValues: Record<string, SdFormGenericSelectionItem[] | SdSearch> = {};\r\n formRenderColumn: Record<string, SdFormGenericTableColumn> = {};\r\n // Lấy những fileColumns để định nghĩa cellDef tương ứng\r\n fileKeys: string[] = [];\r\n imageKeys: string[] = [];\r\n\r\n #selectedIndex = -1;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private readonly formGenericService: FormGenericService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.model = variable.value;\r\n this.#modelChanges.next(this.model);\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#tableChanges.pipe(startWith('')).subscribe(async () => {\r\n await this.#initTable();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n // Khi giá trị thay đổi thì reload lại\r\n this.#subscription.add(\r\n this.#modelChanges.pipe(startWith(this.model)).subscribe(async () => {\r\n await this.#reload();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n #initTable = async () => {\r\n // Xử lý columns\r\n const columns: SdTableColumn[] = [];\r\n //console.log( this.component?.columns)\r\n for (const column of this.component?.columns || []) {\r\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\r\n this.formRenderColumn[column.key] = column;\r\n const { type, key, label, width } = column;\r\n if (type === 'string') {\r\n columns.push({\r\n type: 'string',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'number') {\r\n columns.push({\r\n type: 'number',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'boolean') {\r\n columns.push({\r\n type: 'boolean',\r\n field: key,\r\n title: label,\r\n width,\r\n option: {\r\n displayOnTrue: column.displayOnTrue,\r\n displayOnFalse: column.displayOnFalse,\r\n },\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'date') {\r\n columns.push({\r\n type: 'date',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'datetime') {\r\n columns.push({\r\n type: 'datetime',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'radio') {\r\n const { values } = column;\r\n columns.push({\r\n type: 'values',\r\n field: key,\r\n title: label,\r\n width: width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n option: {\r\n items: values || [],\r\n valueField: 'value',\r\n displayField: 'display',\r\n },\r\n });\r\n } else if (type === 'values') {\r\n const { valuesKey } = column;\r\n this.columnValues[key] = await this.formGenericService.selection.items(valuesKey, {\r\n component: this.component,\r\n column,\r\n entity: this.form.value,\r\n });\r\n if (this.columnValues[key]) {\r\n if (Array.isArray(this.columnValues[key])) {\r\n const items = this.columnValues[key];\r\n columns.push({\r\n type: 'values',\r\n field: key,\r\n title: label,\r\n width: width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n option: {\r\n items: this.columnValues[key],\r\n valueField: 'value',\r\n displayField: 'display',\r\n },\r\n transform: value => {\r\n return items.find(t => t.value === value)?.display || '--';\r\n },\r\n });\r\n } else {\r\n columns.push({\r\n type: 'lazy-values',\r\n field: key,\r\n title: label,\r\n width: width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n option: {\r\n items: this.columnValues[key],\r\n valueField: 'value',\r\n displayField: 'display',\r\n },\r\n });\r\n }\r\n }\r\n } else if (type === 'image') {\r\n // Ảnh hay file thì đều là string, nhưng sẽ dùng cellDef để can thiệp hiển thị\r\n this.imageKeys.push(key); // Ghi nhận lại cột nào là image để can thiệp cellDef\r\n columns.push({\r\n type: 'string',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'file') {\r\n // Ảnh hay file thì đều là string, nhưng sẽ dùng cellDef để can thiệp hiển thị\r\n this.fileKeys.push(key); // Ghi nhận lại cột nào là file để can thiệp cellDef\r\n columns.push({\r\n type: 'string',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n }\r\n //console.log( this.imageKeys ,this.fileKeys )\r\n }\r\n // await this.#onLoaded();\r\n this.tableOption = {\r\n type: 'local',\r\n key: this.component?.key,\r\n reload: { visible: false },\r\n config: { visible: false },\r\n paginate: {\r\n hidden: true,\r\n pageSize: 100,\r\n },\r\n style: {\r\n maxHeight: '400px',\r\n },\r\n filter: {\r\n disabled: true,\r\n },\r\n items: () => {\r\n return this.model || [];\r\n },\r\n commands: [\r\n {\r\n icon: 'edit',\r\n fontSet: 'material-icons-outlined',\r\n click: rowData => {\r\n this.onDetail(rowData);\r\n },\r\n hidden: !!this.viewed || !!this.component?.properties?.viewed,\r\n },\r\n {\r\n icon: 'delete',\r\n fontSet: 'material-icons-outlined',\r\n click: rowData => {\r\n const idx = this.model?.indexOf(rowData);\r\n this.model?.splice(idx, 1);\r\n this.table?.reload().then(() => this.ref.markForCheck());\r\n },\r\n hidden: !!this.viewed || !!this.component?.properties?.viewed,\r\n },\r\n ],\r\n columns,\r\n };\r\n };\r\n\r\n #reload = () => {\r\n return this.table?.reload?.();\r\n };\r\n\r\n // #onLoaded = async () => {\r\n // for (const item of this.model || []) {\r\n // for (const column of this.fileColumns) {\r\n // const values = item?.[column.key];\r\n // if (Array.isArray(values) && values.length) {\r\n // const res = await this.documentService.downloadUrls(values);\r\n // item[column.key] = res.map((e) => e.pre_signed_url);\r\n // }\r\n // }\r\n // }\r\n // };\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onDetail = (row?: any) => {\r\n if (row) {\r\n this.#selectedIndex = this.model.indexOf(row);\r\n this.row = row;\r\n } else {\r\n this.#selectedIndex = -1;\r\n this.row = {};\r\n }\r\n this.form.markAsUntouched();\r\n this.form.markAsPristine();\r\n this.sideDrawer?.open();\r\n };\r\n\r\n onCancel = () => {\r\n this.sideDrawer?.close();\r\n };\r\n\r\n onAccept = (addable?: boolean) => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n // Nếu là cập nhật thì cập nhật vào trường tương ứng\r\n if (this.#selectedIndex >= 0) {\r\n this.model[this.#selectedIndex] = this.row;\r\n } else {\r\n this.model = [...(this.model || []), this.row];\r\n }\r\n\r\n this.modelChange.emit(this.model);\r\n this.table?.reload();\r\n this.ref.markForCheck();\r\n if (!addable) {\r\n // Nếu không thêm dòng nữa thì đóng luôn\r\n this.sideDrawer?.close();\r\n } else {\r\n // Thêm dòng nữa nhanh\r\n this.onDetail();\r\n }\r\n };\r\n\r\n onFileUploadChange(item: any, key: string, newValue: any) {\r\n item[key] = newValue;\r\n this.modelChange.emit(this.model);\r\n }\r\n\r\n getArgs(key: string): Record<string, any> | undefined {\r\n const col = this.formRenderColumn[key];\r\n if (col?.type === 'file' || col?.type === 'image') {\r\n return col.args;\r\n }\r\n return undefined;\r\n }\r\n\r\n\r\n upload = async () => {\r\n if (this.uploadFiles?.length) {\r\n // Thực hiện upload tất cả các file đã chọn\r\n await Promise.all(this.uploadFiles.map(uploadFile => uploadFile.upload()));\r\n }\r\n };\r\n}\r\n","@if(component && tableOption) {\r\n <div style=\"width: 100%\">\r\n <sd-table [option]=\"tableOption\">\r\n @for(key of imageKeys; track key) {\r\n <ng-template [sdTableCellDef]=\"key\" let-item=\"item\">\r\n <sd-upload-file\r\n type=\"image\"\r\n [model]=\"item[key]\"\r\n [args]=\"getArgs(key)\"\r\n (modelChange)=\"onFileUploadChange(item, key, $event)\"\r\n align=\"left\"\r\n disabled\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"></sd-upload-file>\r\n </ng-template>\r\n }\r\n @for(key of fileKeys; track key) {\r\n <ng-template [sdTableCellDef]=\"key\" let-item=\"item\">\r\n <sd-upload-file\r\n [model]=\"item[key]\"\r\n [args]=\"getArgs(key)\"\r\n (modelChange)=\"onFileUploadChange(item, key, $event)\"\r\n align=\"left\"\r\n disabled\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"></sd-upload-file>\r\n </ng-template>\r\n }\r\n </sd-table>\r\n @if(!viewed && !component.properties?.viewed) {\r\n <sd-button\r\n prefixIcon=\"add\"\r\n color=\"primary\"\r\n (click)=\"onDetail()\"\r\n [title]=\"component.properties?.titleButtonCreate || 'Thêm mới'\"></sd-button>\r\n }\r\n @if(!viewed && !component.properties?.viewed) {\r\n <sd-side-drawer title=\"Chi tiết\" width=\"500px\">\r\n <div sdTitle>\r\n <span>Tạo mới/cập nhật</span>\r\n </div>\r\n <div sdBody class=\"c-table-create-update\">\r\n @if(!!component.columns?.length) {\r\n <div class=\"row mx-0\">\r\n @for(column of component.columns;track column.key) {\r\n @let validate = formRenderColumn[column.key].validate;\r\n <div class=\"col-12 px-0 mt-16\">\r\n @if(column.type === 'string') {\r\n <sd-input\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [(model)]=\"row[column.key]\"\r\n [required]=\"validate?.required\"\r\n [pattern]=\"column.validate?.pattern\"\r\n [patternErrorMessage]=\"column.validate?.patternErrorMessage\"></sd-input>\r\n }@else if(column.type === 'number') {\r\n <sd-input-number\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [(model)]=\"row[column.key]\"\r\n [required]=\"validate?.required\"\r\n [min]=\"column.validate?.min\"></sd-input-number>\r\n }@else if(column.type === 'radio') {\r\n <sd-radio\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [name]=\"column.key\"\r\n [items]=\"column.values\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [required]=\"validate?.required\"></sd-radio>\r\n }@else if(column.type === 'values') {\r\n <sd-autocomplete\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [(model)]=\"row[column.key]\"\r\n [items]=\"columnValues[column.key]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [required]=\"validate?.required\"></sd-autocomplete>\r\n }@else if(column.type === 'date') {\r\n <sd-date\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [(model)]=\"row[column.key]\"\r\n [required]=\"validate?.required\"></sd-date>\r\n }@else if(column.type === 'datetime') {\r\n <sd-datetime\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [(model)]=\"row[column.key]\"\r\n [required]=\"validate?.required\"></sd-datetime>\r\n }@else if(column.type === 'image') {\r\n <sd-upload-file\r\n [label]=\"column.label\"\r\n type=\"image\"\r\n [(model)]=\"row[column.key]\"\r\n [args]=\"column.args\"\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"\r\n align=\"left\"></sd-upload-file>\r\n }@else if (column.type === 'file') {\r\n <sd-upload-file\r\n [label]=\"column.label\"\r\n type=\"file\"\r\n [(model)]=\"row[column.key]\"\r\n [args]=\"column.args\"\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"\r\n align=\"left\"></sd-upload-file>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n \r\n </div>\r\n <div sdFooter class=\"text-right pr-16\">\r\n <sd-button title=\"Lưu\" prefixIcon=\"save\" color=\"primary\" type=\"fill\" (click)=\"onAccept()\"></sd-button>\r\n </div>\r\n </sd-side-drawer>\r\n }\r\n </div>\r\n}\r\n\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdUtilities, StringUtilities } from '@sd-angular/core/utilities';\r\n// import { sha1 } from 'object-hash';\r\nimport { debounceTime, filter, startWith, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericHtml } from '../../../../../../models';\r\nimport { HtmlPipe } from '../../../../../../pipes';\r\nimport { FormGenericService } from '../../../../../../services';\r\n\r\n@Component({\r\n selector: 'lib-html',\r\n templateUrl: './html.component.html',\r\n styleUrls: ['./html.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [HtmlPipe],\r\n})\r\nexport class HtmlComponent implements AfterViewInit, OnDestroy {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n\r\n form = new FormGroup({});\r\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\r\n if (this.form !== form) {\r\n this.form = form;\r\n this.#inputChanges.next();\r\n }\r\n }\r\n\r\n entity: Record<string, any> = {};\r\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n this.#inputChanges.next();\r\n }\r\n }\r\n\r\n // Khi 1 giá trị trong entity thay đổi thì hashedValues sẽ thay đổi\r\n // Mong muốn khi hashedValues thay đổi thì trigger changes để trigger lại hàm lấy thông tin items\r\n @Input('hashedValues') set _hashedValues(val: string | undefined) {\r\n this.#inputChanges.next();\r\n }\r\n component!: SdFormGenericHtml;\r\n key!: string;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\r\n this.component = component;\r\n this.key = component.key || component.id;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n #inputChanges = new Subject<void>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private readonly formRenderService: FormGenericService\r\n ) {}\r\n\r\n #hashedQuery?: string;\r\n hashedValues?: string;\r\n #generateQuery = (query: string | Record<string, any> | undefined, data: Record<string, any>): Record<string, any> => {\r\n let result: Record<string, any> = {};\r\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\r\n if (typeof query === 'string') {\r\n try {\r\n result = JSON.parse(query);\r\n } catch (err) {\r\n console.error(err);\r\n return result;\r\n }\r\n } else if (Array.isArray(query)) {\r\n return result;\r\n } else {\r\n result = { ...query };\r\n }\r\n // Xử lý query,\r\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\"}\r\n for (const key of Object.keys({ ...result })) {\r\n // Xử ly\r\n result[key] = StringUtilities.templateToDisplay(result[key], data);\r\n if (result[key] === 'true') {\r\n result[key] = true;\r\n }\r\n if (result[key] === 'false') {\r\n result[key] = false;\r\n }\r\n if (result[key] === '') {\r\n delete result[key];\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n async ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n if (!this.component.template) {\r\n // Nếu HTML không phải từ template thì giá trị = content\r\n this.entity[this.key] = this.component.content;\r\n } else if (!this.component.properties?.queries?.length) {\r\n // Nếu HTML từ static template (không có queries)\r\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template);\r\n this.ref.markForCheck();\r\n } else if (this.viewed || this.component?.properties?.viewed) {\r\n // Đây là trạng thái view của HTML từ template có query\r\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\r\n this.entity[this.key] = this.entity[this.key] || this.component.content;\r\n /* const values = { ...this.entity, ...this.form.value };\r\n const query = this.#generateQuery(this.component?.properties?.query, values);\r\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template, query);\r\n this.ref.markForCheck(); */\r\n } else {\r\n // Nếu có queries thì lắng nghe thay đổi của form\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\r\n const hashedValues = SdUtilities.hash(values);\r\n if (this.hashedValues !== hashedValues) {\r\n this.hashedValues = hashedValues;\r\n this.#inputChanges.next();\r\n }\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#inputChanges.pipe(startWith('')).subscribe(async () => {\r\n const values = { ...this.entity, ...this.form.value };\r\n const query = this.#generateQuery(this.component?.properties?.query, values);\r\n const hashedQuery = SdUtilities.hash(query);\r\n // Nếu query có thay đổi thì thực hiện gán lại items\r\n if (hashedQuery !== this.#hashedQuery) {\r\n this.#hashedQuery = hashedQuery;\r\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template!, query)\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngAfterViewInit() {}\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component && entity) {\r\n <div [innerHTML]=\"entity[key] | htmlPipe: entity[key] : component\"></div>\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdCustomValidator } from '@sd-angular/core/forms/models';\r\nimport { SdFormGenericComponent } from '../../../../models';\r\nimport { HtmlPipe } from '../../../../pipes';\r\nimport {\r\n ChipCalendarComponent,\r\n ChipStringComponent,\r\n DatetimeComponent,\r\n NumberComponent,\r\n RadioComponent,\r\n SelectComponent,\r\n TableComponent,\r\n TextareaComponent,\r\n TextfieldComponent,\r\n UploadComponent,\r\n} from './components';\r\nimport { Subject } from 'rxjs';\r\nimport { HtmlComponent } from \"./components/html/html.component\";\r\n\r\n@Component({\r\n selector: 'lib-item',\r\n templateUrl: './item.component.html',\r\n styleUrls: ['./item.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n TextfieldComponent,\r\n TextareaComponent,\r\n ChipStringComponent,\r\n ChipCalendarComponent,\r\n NumberComponent,\r\n DatetimeComponent,\r\n SelectComponent,\r\n RadioComponent,\r\n TableComponent,\r\n UploadComponent,\r\n HtmlComponent\r\n],\r\n})\r\nexport class LibItemComponent {\r\n @ViewChild(UploadComponent) itemUpload?: UploadComponent;\r\n @ViewChild(TableComponent) itemTable?: TableComponent;\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n col = 'col-6 px-8 py-8';\r\n component?: SdFormGenericComponent;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericComponent) {\r\n this.component = val;\r\n this.col = `col-${this.component?.layout?.columns || '6'} px-8 py-8`;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n validator?: SdCustomValidator;\r\n @Input('validator') set _validator(validator: SdCustomValidator) {\r\n if (validator && this.validator !== validator) {\r\n this.validator = validator;\r\n }\r\n }\r\n\r\n // Thực hiện upload nếu có component upload\r\n // TODO: Bổ sung logic upload cho table\r\n upload = async () => {\r\n await this.itemUpload?.upload?.();\r\n await this.itemTable?.upload?.();\r\n };\r\n\r\n // items: SdSearch = (args)=> {\r\n // const { } = args;\r\n // }\r\n\r\n // onSelect = (data: BaseEntity | BaseEntity[]) => {\r\n // if (Array.isArray(data)) {\r\n // this.entity[this.component.key] = data.map(selected => selected?.id).filter(val => !!val);\r\n // } else {\r\n // this.entity[this.component.key] = data?.id;\r\n // }\r\n // };\r\n}\r\n","@if (entity && component) {\r\n @if (component.type === 'textfield') {\r\n <div [class]=\"col\">\r\n <lib-textfield\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [validator]=\"validator\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-textfield>\r\n </div>\r\n } @else if (component.type === 'textarea') {\r\n <div [class]=\"col\">\r\n <lib-textarea\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-textarea>\r\n </div>\r\n } @else if (component.type === 'chip-string') {\r\n <div [class]=\"col\">\r\n <lib-chip-string\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-chip-string>\r\n </div>\r\n } @else if (component.type === 'chip-calendar') {\r\n <div [class]=\"col\">\r\n <lib-chip-calendar\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-chip-calendar>\r\n </div>\r\n } @else if (component.type === 'number') {\r\n <div [class]=\"col\">\r\n <lib-number\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-number>\r\n </div>\r\n }\r\n @if (component.type === 'select') {\r\n <div [class]=\"col\">\r\n <lib-select\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [component]=\"component\"\r\n [entity]=\"entity\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [validator]=\"validator\"\r\n [viewed]=\"viewed\"></lib-select>\r\n </div>\r\n } @else if (component.type === 'radio') {\r\n <div [class]=\"col\">\r\n <lib-radio\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [component]=\"component\"\r\n [entity]=\"entity\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-radio>\r\n </div>\r\n } @else if (component.type === 'datetime') {\r\n <div [class]=\"col\">\r\n <lib-datetime\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-datetime>\r\n </div>\r\n } @else if (component.type === 'upload') {\r\n <div [class]=\"col\">\r\n <lib-upload\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [component]=\"component\"\r\n [entity]=\"entity\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [validator]=\"validator\"\r\n [viewed]=\"viewed\">\r\n </lib-upload>\r\n </div>\r\n } @else if (component.type === 'table') {\r\n <div [class]=\"col\">\r\n <lib-table [setVariables]=\"setVariables\" [component]=\"component\" [(model)]=\"entity[component.key!]\" [viewed]=\"viewed\"></lib-table>\r\n </div>\r\n } @else if (component.type === 'html') {\r\n <div [class]=\"col\">\r\n <lib-html [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" [component]=\"component\" [viewed]=\"viewed\"> </lib-html>\r\n </div>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericVariable } from '../../../../models';\r\n\r\n@Component({\r\n selector: 'variable',\r\n templateUrl: './variable.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class VariableComponent {\r\n @Input({ required: true }) variables?: SdFormGenericVariable[];\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup<any>({});\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n if (this.variables) {\r\n // Kiểm tra xem variable có trong form chưa, nếu có thì push vào form\r\n // Mục đích là khi variable bị thay đổi thì trigger được valueChanges và nơi khác lấy được variables\r\n for (const variable of this.variables) {\r\n if (!this.form.controls[variable.key]) {\r\n this.form.addControl(variable.key, new FormControl(this.entity?.[variable.key]));\r\n }\r\n }\r\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\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => !!this.variables?.some(e => e.key === variable.key))).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.form.setValue(this.entity);\r\n })\r\n );\r\n }\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n QueryList,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\n// import { sha1 } from 'object-hash';\r\nimport { SdBaseSecureComponent } from '@sd-angular/core/components/base';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { combineLatest, Subject, Subscription } from 'rxjs';\r\nimport { debounceTime, startWith } from 'rxjs/operators';\r\nimport { ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from '../../configurations';\r\nimport {\r\n ExpressionToJavascriptExpression,\r\n SdFormatComponent,\r\n SdFormRenderConfiguration,\r\n TemplateToCondition\r\n} from '../../models';\r\nimport { SdFormGenericValidation } from '../../models/form-generic-validation.model';\r\nimport { WhenExpressionPipe } from '../../pipes';\r\nimport { LibItemComponent, VariableComponent } from './components';\r\n\r\n@Component({\r\n selector: 'sd-form-render',\r\n templateUrl: './form-render.component.html',\r\n styleUrls: ['./form-render.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, LibItemComponent, WhenExpressionPipe, VariableComponent],\r\n})\r\nexport class SdFormRender extends SdBaseSecureComponent implements OnDestroy, AfterViewInit {\r\n @ViewChildren(LibItemComponent) formRenderItems: QueryList<LibItemComponent> = new QueryList<LibItemComponent>();\r\n @Input() form: FormGroup = new FormGroup({});\r\n configuration!: SdFormRenderConfiguration;\r\n @Input({ alias: 'configuration', required: true }) set _configuration(val: SdFormRenderConfiguration) {\r\n this.configuration = val;\r\n // Luôn format lại component trước khi render\r\n this.configuration?.components?.forEach(SdFormatComponent);\r\n this.#configurationChanges.next(this.configuration);\r\n }\r\n\r\n // Dựa vào giá trị default sẽ gán cho entity\r\n #defaultEntity: Record<string, any> = {};\r\n @Input('defaultEntity') set _default(defaultEntity: Record<string, any>) {\r\n this.#defaultEntity = defaultEntity;\r\n this.#defaultEntityChanges.next(defaultEntity);\r\n }\r\n\r\n entity: Record<string, any> = {};\r\n @Input('entity') set _entity(val: Record<string, any>) {\r\n this.entity = val;\r\n this.#entityChanges.next(this.entity);\r\n }\r\n\r\n properties: string[] = [];\r\n @Input('properties') set _properties(val: string[]) {\r\n this.properties = val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '') {\r\n this.viewed = val === '' || val;\r\n }\r\n #subscription = new Subscription();\r\n #configurationChanges = new Subject<SdFormRenderConfiguration>();\r\n #defaultEntityChanges = new Subject<Record<string, any>>();\r\n #entityChanges = new Subject<Record<string, any>>();\r\n loadCompleted = false;\r\n hashedValues?: string;\r\n formValue: Record<string, any> = {};\r\n\r\n // Các component item của form-render sẽ lắng nghe thay đổi\r\n setVariables = new Subject<{ key: string; value: any }>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(SD_WORKFLOW_CONFIGURATION) private workflowConfiguration: ISdWorkflowConfiguration\r\n ) {\r\n super();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n combineLatest([this.#configurationChanges, this.#entityChanges])\r\n .pipe(startWith([]))\r\n .subscribe(async () => {\r\n if (this.entity && this.configuration?.components?.length) {\r\n this.loadCompleted = true;\r\n this.ref.markForCheck(); // Vì loadCompleted ko phải là @Input nên component sẽ ko load lại\r\n if (this.configuration?.onLoaded) {\r\n setTimeout(() => {\r\n this.configuration?.onLoaded?.();\r\n });\r\n }\r\n }\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#defaultEntityChanges.pipe(startWith(this.#defaultEntity)).subscribe(defaultEntity => {\r\n for (const key of Object.keys({ ...defaultEntity })) {\r\n this.entity[key] = this.entity[key] ?? defaultEntity[key];\r\n }\r\n this.form.setValue(this.entity);\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#entityChanges.pipe(startWith(this.entity)).subscribe(entity => {\r\n if (!this.form.controls['sdRaw']) {\r\n this.form.addControl('sdRaw', new FormControl({ ...entity }));\r\n } else {\r\n this.form.controls['sdRaw'].setValue({ ...entity });\r\n }\r\n })\r\n );\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\r\n const hashedValues = SdUtilities.hash(values);\r\n if (this.hashedValues !== hashedValues) {\r\n this.hashedValues = hashedValues;\r\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\r\n this.formValue = { ...this.entity, ...values };\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n // Hàm này sẽ đi qua các components và các columns trong table để xử lý upload file\r\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\r\n upload = async () => {\r\n for (const formRenderItem of this.formRenderItems || []) {\r\n await formRenderItem.upload();\r\n }\r\n };\r\n\r\n // Nên gọi hàm này trước khi save/submit\r\n // Hàm này trả về mảng string error\r\n // Nếu không có error nào thì trả về mảng rỗng\r\n getValidationMessages = async (alert: SdFormGenericValidation['alert']) => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const messages: string[] = [];\r\n for (const validation of this.configuration?.validations?.filter(e => e.alert === alert) || []) {\r\n if (validation.type === 'expression') {\r\n const val = TemplateToCondition(ExpressionToJavascriptExpression(validation.expression), this.entity);\r\n if (!val) {\r\n continue;\r\n }\r\n try {\r\n const result = new Function('return ' + val)();\r\n if (typeof result === 'boolean') {\r\n if (result) {\r\n messages.push(validation.message);\r\n }\r\n } else {\r\n continue;\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n continue;\r\n }\r\n } else if (validation.type === 'function') {\r\n const func = this.workflowConfiguration?.form?.validation?.functions?.find(e => e.value === validation.code);\r\n if (func?.validate) {\r\n const message = await func.validate({\r\n entity: this.entity,\r\n });\r\n if (message) {\r\n messages.push(message);\r\n }\r\n }\r\n }\r\n }\r\n return messages;\r\n };\r\n}\r\n","@if (form && loadCompleted && hashedValues) {\r\n <div class=\"row mx-0\">\r\n @for (component of configuration.components; track component.id) {\r\n @let expression = hashedValues | whenExpression: component : formValue;\r\n @if (!expression.hidden) {\r\n @if (component.type === 'group') {\r\n @if (!!component.components.length) {\r\n <div class=\"col-12 mt-16\">\r\n <sd-section [title]=\"component.label\" [icon]=\"component.properties.icon\">\r\n <div class=\"row mx-0\">\r\n @for (childComponent of component.components; track childComponent.id) {\r\n @let childExpression = hashedValues | whenExpression: childComponent : formValue;\r\n @if (!childExpression.hidden) {\r\n <lib-item\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"childComponent\"\r\n [required]=\"childExpression.required\"\r\n [disabled]=\"childExpression.disabled\"\r\n [viewed]=\"viewed\"></lib-item>\r\n }\r\n }\r\n </div>\r\n </sd-section>\r\n </div>\r\n }\r\n } @else {\r\n <lib-item\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"expression.required\"\r\n [disabled]=\"expression.disabled\"\r\n [viewed]=\"viewed\"></lib-item>\r\n }\r\n }\r\n }\r\n <variable [variables]=\"configuration.variables\" [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" ></variable>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatIcon, MatIconModule } from '@angular/material/icon';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { SdDatetime } from '@sd-angular/core/forms/datetime';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\nimport { SdInputNumber } from '@sd-angular/core/forms/input-number';\r\nimport { SdSelect } from '@sd-angular/core/forms/select';\r\nimport { ArrayUtilities, DateUtilities, SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport {\r\n Attribute,\r\n AttributeOperators,\r\n DayInfoPreviouses,\r\n DayInfoTypes,\r\n SdFormGenericExpression,\r\n SdFormGenericExpressionCondition,\r\n} from '../../../../models';\r\nimport { ExpressionQueryPipe } from '../../../../pipes';\r\nimport { SdSuffixDefDirective } from '@sd-angular/core/forms/directives';\r\n\r\n// Component xây dựng Expression dựa vào SdFormGenericExpression\r\n@Component({\r\n selector: 'expression-builder',\r\n templateUrl: './expression-builder.component.html',\r\n styleUrl: './expression-builder.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n SdInput,\r\n SdInputNumber,\r\n SdSelect,\r\n SdAutocomplete,\r\n SdButton,\r\n SdSelect,\r\n SdModal,\r\n ExpressionQueryPipe,\r\n SdDatetime,\r\n SdSuffixDefDirective,\r\n MatIconModule\r\n ],\r\n})\r\nexport class ExpressionBuilderComponent {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n form = new FormGroup({});\r\n attributeOperators = AttributeOperators;\r\n attributes: Attribute[] = [];\r\n numberAttributes: Attribute[] = [];\r\n dateAttributes: Attribute[] = [];\r\n attribute: Record<string, Attribute> = {};\r\n types = DayInfoTypes;\r\n previouses = DayInfoPreviouses;\r\n\r\n @Input() label?: string;\r\n\r\n @Input('attributes') set _attributes(attributes: Attribute[]) {\r\n this.attributes = attributes || [];\r\n this.numberAttributes = this.attributes\r\n .filter(e => e.type === 'number')\r\n .map(e => ({\r\n ...e,\r\n value: '${' + e.value + '}',\r\n }));\r\n this.dateAttributes = this.attributes\r\n .filter(e => e.type === 'datetime')\r\n .map(e => ({\r\n ...e,\r\n value: '${' + e.value + '}',\r\n }));\r\n this.attribute = ArrayUtilities.toObject('value', this.attributes);\r\n }\r\n\r\n expression?: SdFormGenericExpression = {\r\n key: SdUtilities.randomId(),\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n };\r\n model?: SdFormGenericExpression = {\r\n key: SdUtilities.randomId(),\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n };\r\n @Input({ alias: 'model', required: true }) set _model(model: SdFormGenericExpression | undefined) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n this.model = this.model || {\r\n key: SdUtilities.randomId(),\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n };\r\n }\r\n @Output() modelChange = new EventEmitter<SdFormGenericExpression>();\r\n @Output() sdChange = new EventEmitter<SdFormGenericExpression>();\r\n @Output() edit = new EventEmitter<void>();\r\n\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n onEdit = async () => {\r\n // Khi cập nhật expression thì clone ra\r\n this.expression = JSON.parse(JSON.stringify(this.model));\r\n // Thông báo cho component cha có sự kiện edit trong trường hợp attributes có thay đổi\r\n this.edit.next();\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n addCondition = (conditions: SdFormGenericExpression['conditions']) => {\r\n conditions.push({\r\n key: SdUtilities.randomId(),\r\n type: 'condition',\r\n field: undefined,\r\n operator: 'EQUAL',\r\n value: undefined,\r\n dayInfo: {},\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n addCombinator = (conditions: SdFormGenericExpression['conditions']) => {\r\n conditions.push({\r\n key: SdUtilities.randomId(),\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n remove = (conditions: SdFormGenericExpression['conditions'], idx: number) => {\r\n conditions.splice(idx, 1);\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n this.model = this.expression;\r\n this.modelChange.emit(this.model);\r\n this.sdChange.emit(this.model);\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n\r\n onChangeAttribute = (condition: SdFormGenericExpressionCondition) => {\r\n const fieldAttribute = this.attribute[condition.field!];\r\n if (fieldAttribute.type === 'datetime') {\r\n condition.dayInfo = condition.dayInfo || {};\r\n }\r\n };\r\n\r\n onChangeDateInfo = (condition: SdFormGenericExpressionCondition) => {\r\n // Xử lý giá trị\r\n if (condition.dayInfo?.type === 'NOW') {\r\n condition.value = 'now';\r\n } else if (condition.dayInfo?.type === 'RELATED' && condition.dayInfo.relatedValue) {\r\n condition.value = DayInfoPreviouses.find(e => e.value === condition.dayInfo.related)?.format(condition.dayInfo.relatedValue) ?? null;\r\n } else if (condition.value?.type === 'DATETIME' && condition.value) {\r\n condition.value = DateUtilities.toFormat(condition.value, 'yyyy/MM/dd HH:mm:00');\r\n }\r\n };\r\n}\r\n","<!-- <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ (model | expressionQuery) || '--' }}</a> -->\r\n<sd-input [label]=\"label\" style=\"width: 100%;\" [model]=\"(model | expressionQuery) || '--'\" disabled hideInlineError>\r\n <ng-template sdSuffixDef>\r\n <sd-button\r\n prefixIcon=\"edit\"\r\n color=\"primary\"\r\n (click)=\"onEdit()\"\r\n type=\"link\"></sd-button>\r\n </ng-template>\r\n</sd-input>\r\n@if (expression) {\r\n <sd-modal title=\"Thiết lập biểu thức\">\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button\r\n prefixIcon=\"calculate\"\r\n class=\"mr-4\"\r\n title=\"Nhóm điều kiện\"\r\n color=\"primary\"\r\n (click)=\"addCombinator(expression.conditions)\"></sd-button>\r\n <sd-button\r\n prefixIcon=\"add\"\r\n title=\"Điều kiện\"\r\n color=\"primary\"\r\n (click)=\"addCondition(expression.conditions)\"\r\n type=\"fill\"></sd-button>\r\n </div>\r\n <!-- Cấp 1 -->\r\n @for (conditionLv1 of expression.conditions; track conditionLv1.key; let idxLv1 = $index) {\r\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px\">\r\n <div class=\"c-condition\">\r\n <!-- Dòng 1 chỉ hiện WHERE -->\r\n @if (idxLv1 === 0) {\r\n <div class=\"c-where\">WHERE</div>\r\n }\r\n <!-- Dòng 2 hiển thị combinator -->\r\n @if (idxLv1 === 1) {\r\n <div class=\"c-select\">\r\n <sd-select\r\n size=\"sm\"\r\n [(model)]=\"expression.combinator\"\r\n [items]=\"[\r\n { value: '&&', display: 'AND' },\r\n { value: '||', display: 'OR' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError=\"\"></sd-select>\r\n </div>\r\n }\r\n </div>\r\n @if (conditionLv1.type === 'condition') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 200px\"\r\n [(model)]=\"conditionLv1.field\"\r\n [items]=\"attributes\"\r\n (sdChange)=\"onChangeAttribute(conditionLv1)\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n @let fieldAttribute = attribute[conditionLv1.field!];\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 100px\"\r\n [(model)]=\"conditionLv1.operator\"\r\n [items]=\"attributeOperators[fieldAttribute?.type || 'string']\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [disabled]=\"!fieldAttribute?.type\"\r\n required\r\n hideInlineError></sd-select>\r\n @if (\r\n !!fieldAttribute?.type && conditionLv1.operator && conditionLv1.operator !== 'NULL' && conditionLv1.operator !== 'NOT_NULL'\r\n ) {\r\n @if (fieldAttribute.type === 'string') {\r\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input>\r\n } @else if (fieldAttribute.type === 'number') {\r\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"conditionLv1.value\" hideInlineError></sd-input-number>\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv1.value\"\r\n [items]=\"numberAttributes\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n hideInlineError></sd-autocomplete>\r\n } @else if (fieldAttribute.type === 'datetime' && conditionLv1.dayInfo) {\r\n <sd-select\r\n size=\"sm\"\r\n placeholder=\"Thời điểm\"\r\n [form]=\"form\"\r\n style=\"width: 150px\"\r\n [items]=\"types\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"conditionLv1.dayInfo.type\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\r\n required\r\n hideInlineError>\r\n </sd-select>\r\n @if (conditionLv1.dayInfo.type === 'RELATED') {\r\n <sd-input-number\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 80px\"\r\n [(model)]=\"conditionLv1.dayInfo.relatedValue\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\r\n [min]=\"1\"\r\n required\r\n hideInlineError>\r\n </sd-input-number>\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [items]=\"previouses\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"conditionLv1.dayInfo.related\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\r\n required\r\n hideInlineError>\r\n </sd-select>\r\n } @else if (conditionLv1.dayInfo.type === 'DATETIME') {\r\n <sd-datetime\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv1.value\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\r\n required\r\n hideInlineError>\r\n </sd-datetime>\r\n } @else if (conditionLv1.dayInfo.type === 'ATTRIBUTE') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv1.value\"\r\n [items]=\"dateAttributes\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n hideInlineError></sd-autocomplete>\r\n }\r\n } @else if (fieldAttribute.type === 'boolean') {\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv1.value\"\r\n [items]=\"[\r\n { value: true, display: fieldAttribute.displayOnTrue },\r\n { value: false, display: fieldAttribute.displayOnFalse }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-select>\r\n } @else if (fieldAttribute.type === 'values') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv1.value\"\r\n [items]=\"fieldAttribute.values\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n }\r\n }\r\n <sd-button class=\"ml-auto\" prefixIcon=\"delete\" tooltip=\"Xóa\" (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\r\n } @else if (conditionLv1.type === 'combinator') {\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button class=\"mr-4\" prefixIcon=\"delete\" tooltip=\"Xóa\" (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\r\n <sd-button\r\n prefixIcon=\"add\"\r\n title=\"Điều kiện\"\r\n size=\"sm\"\r\n color=\"primary\"\r\n (click)=\"addCondition(conditionLv1.conditions)\"\r\n type=\"fill\"></sd-button>\r\n </div>\r\n <!-- Cấp 2 -->\r\n @for (conditionLv2 of conditionLv1.conditions; track conditionLv2.key; let idxLv2 = $index) {\r\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px\">\r\n <div class=\"c-condition\">\r\n <!-- Dòng 1 chỉ hiện WHERE -->\r\n @if (idxLv2 === 0) {\r\n <div class=\"c-where\">WHERE</div>\r\n }\r\n <!-- Dòng 2 hiển thị combinator -->\r\n @if (idxLv2 === 1) {\r\n <div class=\"c-select\">\r\n <sd-select\r\n size=\"sm\"\r\n [(model)]=\"conditionLv1.combinator\"\r\n [items]=\"[\r\n { value: '&&', display: 'AND' },\r\n { value: '||', display: 'OR' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError=\"\"></sd-select>\r\n </div>\r\n }\r\n </div>\r\n @if (conditionLv2.type === 'condition') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 200px\"\r\n [(model)]=\"conditionLv2.field\"\r\n [items]=\"attributes\"\r\n (sdChange)=\"onChangeAttribute(conditionLv2)\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n @let fieldAttribute = attribute[conditionLv2.field!];\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 100px\"\r\n [(model)]=\"conditionLv2.operator\"\r\n [items]=\"attributeOperators[fieldAttribute?.type || 'string']\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [disabled]=\"!fieldAttribute?.type\"\r\n required\r\n hideInlineError></sd-select>\r\n @if (\r\n !!fieldAttribute?.type &&\r\n conditionLv2.operator &&\r\n conditionLv2.operator !== 'NULL' &&\r\n conditionLv2.operator !== 'NOT_NULL'\r\n ) {\r\n @if (fieldAttribute.type === 'string') {\r\n <sd-input\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n required\r\n hideInlineError></sd-input>\r\n } @else if (fieldAttribute.type === 'number') {\r\n <sd-input-number\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n hideInlineError></sd-input-number>\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n [items]=\"numberAttributes\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n hideInlineError></sd-autocomplete>\r\n } @else if (fieldAttribute.type === 'datetime' && conditionLv2.dayInfo) {\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n placeholder=\"Thời điểm\"\r\n style=\"width: 150px\"\r\n [items]=\"types\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"conditionLv2.dayInfo.type\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\r\n required\r\n hideInlineError>\r\n </sd-select>\r\n @if (conditionLv2.dayInfo.type === 'RELATED') {\r\n <sd-input-number\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 80px\"\r\n [(model)]=\"conditionLv2.dayInfo.relatedValue\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\r\n [min]=\"1\"\r\n required\r\n hideInlineError>\r\n </sd-input-number>\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [items]=\"previouses\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"conditionLv2.dayInfo.related\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\r\n required\r\n hideInlineError>\r\n </sd-select>\r\n } @else if (conditionLv2.dayInfo.type === 'DATETIME') {\r\n <sd-datetime\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\r\n required\r\n hideInlineError>\r\n </sd-datetime>\r\n } @else if (conditionLv2.dayInfo.type === 'ATTRIBUTE') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n [items]=\"dateAttributes\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n hideInlineError></sd-autocomplete>\r\n }\r\n } @else if (fieldAttribute.type === 'boolean') {\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n [items]=\"[\r\n { value: true, display: fieldAttribute.displayOnTrue },\r\n { value: false, display: fieldAttribute.displayOnFalse }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-select>\r\n } @else if (fieldAttribute.type === 'values') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n [items]=\"fieldAttribute.values\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n }\r\n }\r\n <sd-button\r\n class=\"ml-auto\"\r\n prefixIcon=\"delete\"\r\n tooltip=\"Xóa\"\r\n (click)=\"remove(conditionLv1.conditions, idxLv1)\"></sd-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n </sd-modal>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport {\r\n Attribute,\r\n GetAttributes,\r\n SdFormGenericComponent,\r\n SdFormGenericExpression,\r\n SdFormGenericGroup,\r\n SdFormGenericVariable\r\n} from '../../../../models';\r\nimport { FormGenericService } from '../../../../services';\r\nimport { ExpressionBuilderComponent } from '../expression-builder/expression-builder.component';\r\n\r\n// Component xây dựng Expression dựa vào SdFormGenericExpression\r\n@Component({\r\n selector: 'attribute-expression',\r\n templateUrl: './attribute-expression.component.html',\r\n styleUrl: './attribute-expression.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ExpressionBuilderComponent],\r\n})\r\nexport class AttributeExpression {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n attributes: Attribute[] = [];\r\n @Input() label?: string;\r\n model?: SdFormGenericExpression;\r\n @Input({ alias: 'model', required: true }) set _model(model: SdFormGenericExpression | undefined) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<SdFormGenericExpression>();\r\n @Output() sdChange = new EventEmitter<SdFormGenericExpression>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private formGenericService: FormGenericService\r\n ) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n onEdit = async () => {\r\n this.attributes = await this.#getAttributes(this.components, this.variables);\r\n this.ref.markForCheck();\r\n };\r\n \r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n };\r\n\r\n // Từ components map thành các attributes\r\n #getAttributes = async (\r\n components: (SdFormGenericComponent | SdFormGenericGroup)[],\r\n variables: SdFormGenericVariable[]\r\n ): Promise<Attribute[]> => {\r\n const attributes: Attribute[] = [];\r\n if (components?.length) {\r\n for (const component of components) {\r\n if (component.type === 'group') {\r\n attributes.push(...GetAttributes(component.components));\r\n } else if (component.type === 'textfield' || component.type === 'textarea') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n } else if (component.type === 'number') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'number',\r\n });\r\n } else if (component.type === 'checkbox') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'boolean',\r\n displayOnTrue: 'YES',\r\n displayOnFalse: 'NO',\r\n });\r\n } else if (component.type === 'radio' || component.type === 'select') {\r\n if (component.values?.length) {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'values',\r\n values: component.values.map(e => ({\r\n value: e.value,\r\n display: e.label,\r\n })),\r\n });\r\n } else {\r\n const values = await this.formGenericService.selection.items(component.valuesKey, {\r\n entity: {},\r\n component,\r\n });\r\n // Nếu là mảng thì push vào\r\n if (Array.isArray(values)) {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'values',\r\n values,\r\n });\r\n } else {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (variables?.length) {\r\n for (const variable of variables) {\r\n attributes.push({\r\n value: variable.key,\r\n display: `[VARIABLE] ${variable.label}`,\r\n type: 'string',\r\n });\r\n }\r\n }\r\n return attributes;\r\n };\r\n}\r\n","\r\n\r\n<expression-builder class=\"d-block py-8\" [label]=\"label\" [(model)]=\"model\" [attributes]=\"attributes\" (sdChange)=\"onChange($event)\" (edit)=\"onEdit()\"></expression-builder>","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { SdInputNumber } from '@sd-angular/core/forms/input-number';\r\n\r\n@Component({\r\n selector: 'attribute-input-number',\r\n templateUrl: './attribute-input-number.component.html',\r\n imports: [SdInputNumber],\r\n})\r\nexport class AttributeInputNumber {\r\n label?: string | null;\r\n @Input('label') set _label(label: string | undefined | null) {\r\n this.label = label;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n model?: number | null;\r\n @Input('model') set _model(model: number | undefined | null) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<number>();\r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(value);\r\n };\r\n}\r\n","<!-- <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <sd-input-number\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [(model)]=\"model\"\r\n [disabled]=\"disabled\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-input-number>\r\n</div> -->\r\n<sd-input-number\r\n class=\"py-8\"\r\n [label]=\"label!\"\r\n [(model)]=\"model\"\r\n [disabled]=\"disabled\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-input-number>\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\n\r\n@Component({\r\n selector: 'attribute-input',\r\n templateUrl: './attribute-input.component.html',\r\n imports: [SdInput],\r\n})\r\nexport class AttributeInput {\r\n @Input() form?: FormGroup;\r\n\r\n label?: string | null;\r\n @Input('label') set _label(label: string | undefined | null) {\r\n this.label = label;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n model?: string | null;\r\n @Input('model') set _model(model: string | undefined | null) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<string>();\r\n @Output() sdChange = new EventEmitter<string>();\r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n };\r\n}\r\n","<!-- <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <sd-input style=\"width: 200px\" size=\"sm\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-input>\r\n</div> -->\r\n<sd-input class=\"py-8\" [label]=\"label!\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-input>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSwitch } from '@sd-angular/core/forms/switch';\r\nimport { SdSelect } from '@sd-angular/core/forms/select';\r\n\r\n@Component({\r\n selector: 'attribute-switch',\r\n templateUrl: './attribute-switch.component.html',\r\n imports: [SdSelect],\r\n})\r\nexport class AttributeSwitch {\r\n @Input() form?: FormGroup;\r\n\r\n label?: string | null;\r\n @Input('label') set _label(label: string | undefined | null) {\r\n this.label = label;\r\n }\r\n\r\n model?: boolean;\r\n @Input('model') set _model(val: boolean | undefined | null) {\r\n if (this.model !== !!val) {\r\n this.model = !!val;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<boolean>();\r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(!!value);\r\n };\r\n}\r\n","<!-- <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <sd-switch size=\"sm\" [form]=\"form\" [(model)]=\"model\" (sdChange)=\"onChange($event)\" hideInlineError></sd-switch>\r\n</div> -->\r\n<sd-select\r\n class=\"py-8\"\r\n [label]=\"label!\"\r\n [form]=\"form\"\r\n [(model)]=\"model\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [items]=\"[\r\n { value: true, display: 'Có' },\r\n { value: false, display: 'Không' }\r\n ]\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-select>\r\n","import { Component, EventEmitter, Inject, Input, Output } from '@angular/core';\r\nimport { ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from '../../../../configurations';\r\nimport { SdFormGenericComponent, SdFormGenericTemplate } from '../../../../models';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\n\r\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\r\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\r\n@Component({\r\n selector: 'attribute-template',\r\n templateUrl: './attribute-template.component.html',\r\n imports: [SdAutocomplete],\r\n})\r\nexport class AttributeTemplate {\r\n templates: SdFormGenericTemplate[] = [];\r\n component!: SdFormGenericComponent;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericComponent) {\r\n this.component = component;\r\n this.templates = this.workflowConfiguration?.form?.templates?.filter(e => e.component?.type === this.component?.type) || [];\r\n }\r\n @Output() sdChange = new EventEmitter<SdFormGenericComponent>();\r\n constructor(@Inject(SD_WORKFLOW_CONFIGURATION) private workflowConfiguration: ISdWorkflowConfiguration) {}\r\n\r\n onChange = (value: string | number | null) => {\r\n if (typeof value === 'string') {\r\n const template = this.templates?.find(e => e.value === value);\r\n if (template?.component) {\r\n this.sdChange.emit(JSON.parse(JSON.stringify(template.component)));\r\n }\r\n }\r\n };\r\n}\r\n","@if (templates.length) {\r\n <!-- <div class=\"d-flex align-items-center py-4\">\r\n <div class=\"T14M\" style=\"flex: 1\">Dữ liệu mẫu</div>\r\n <sd-autocomplete\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [(model)]=\"component.template\"\r\n [items]=\"templates\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-autocomplete>\r\n </div> -->\r\n <sd-autocomplete\r\n class=\"py-8\"\r\n label=\"Dữ liệu mẫu\"\r\n [(model)]=\"component.template\"\r\n [items]=\"templates\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-autocomplete>\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\nimport { SdTextarea } from '@sd-angular/core/forms/textarea';\r\n\r\n@Component({\r\n selector: 'attribute-textarea',\r\n templateUrl: './attribute-textarea.component.html',\r\n imports: [SdTextarea],\r\n})\r\nexport class AttributeTextarea {\r\n @Input() form?: FormGroup;\r\n\r\n label?: string | null;\r\n @Input('label') set _label(label: string | undefined | null) {\r\n this.label = label;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n model?: string | null;\r\n @Input('model') set _model(model: string | undefined | null) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<string>();\r\n @Output() sdChange = new EventEmitter<string>();\r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n };\r\n}\r\n","<sd-textarea class=\"py-8\" [label]=\"label!\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-textarea>","import { Injectable } from '@angular/core';\r\nimport { debounceTime, Subject } from 'rxjs';\r\nimport { SdFormGenericComponent, SdFormGenericGroup } from '../../../models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class BuilderService {\r\n constructor() {}\r\n\r\n // Khi component change attribute, mong muốn re-render control để người dùng nhìn trực quan\r\n // Ví dụ:\r\n // Khi content html thay đổi (attribute), mong muốn bố cục (control) cũng sẽ hiển thị\r\n // Khi columns của table thay đổi, cập nhật bố cục\r\n #componentChanges = new Subject<SdFormGenericComponent | SdFormGenericGroup>();\r\n get componentEmitters() {\r\n return this.#componentChanges;\r\n }\r\n\r\n get componentListeners() {\r\n // Debound 0.2s để tránh trigger liên tục\r\n return this.#componentChanges.pipe(debounceTime(200));\r\n }\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { debounceTime, filter, Subscription } from 'rxjs';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericTextfield, SdFormGenericVariable } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeTextarea } from \"../../attribute-textarea/attribute-textarea.component\";\r\n\r\n@Component({\r\n selector: 'textfield-attribute',\r\n templateUrl: './textfield-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeExpression, AttributeInput, AttributeInputNumber, AttributeSwitch, AttributeTextarea],\r\n})\r\nexport class TextfieldAttribute {\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n component!: SdFormGenericTextfield;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextfield) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'textfield') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-textarea [form]=\"form\" label=\"Gợi ý\" [(model)]=\"component.helperText\"></attribute-textarea>\r\n <attribute-input [form]=\"form\" label=\"Giá trị mặc định\" [(model)]=\"component.defaultValue\"></attribute-input>\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n <attribute-input-number label=\"Ký tự tối đa\" [(model)]=\"component.validate!.maxlength\"></attribute-input-number>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n <attribute-input label=\"Expression\" [(model)]=\"component.validate!.pattern\"></attribute-input>\r\n <attribute-input label=\"Expression message\" [(model)]=\"component.validate!.patternErrorMessage\"></attribute-input>\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericTextfield } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'textfield-control',\r\n templateUrl: './textfield-control.component.html',\r\n styleUrls: ['./textfield-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TextFieldControl {\r\n component!: SdFormGenericTextfield;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextfield) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">\r\n Your input text\r\n </div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input\">{{component.defaultValue}}</div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { debounceTime, filter, Subscription } from 'rxjs';\r\nimport {\r\n SdFormatComponent,\r\n SdFormGenericComponent,\r\n SdFormGenericGroup,\r\n SdFormGenericTextarea,\r\n SdFormGenericVariable,\r\n} from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\r\n\r\n@Component({\r\n selector: 'textarea-attribute',\r\n templateUrl: './textarea-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeInputNumber, AttributeSwitch, AttributeExpression, AttributeTextarea],\r\n})\r\nexport class TextareaAttribute {\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n component!: SdFormGenericTextarea;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextarea) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'textarea') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-textarea [form]=\"form\" label=\"Gợi ý\" [(model)]=\"component.helperText\"></attribute-textarea>\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n <attribute-input-number label=\"Ký tự tối đa\" [(model)]=\"component.validate!.maxlength\"></attribute-input-number>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericTextarea } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { filter, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'textarea-control',\r\n templateUrl: './textarea-control.component.html',\r\n styleUrls: ['./textarea-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TextareaControl {\r\n component!: SdFormGenericTextarea;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextarea) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">Your input text</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-textarea\"></div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericChipString } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'chip-string-control',\r\n templateUrl: './chip-string-control.component.html',\r\n styleUrls: ['./chip-string-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n})\r\nexport class ChipStringControl {\r\n component!: SdFormGenericChipString;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipString) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n // Vì đã đúng theo id nên có thể ép kiểu any\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">One, Two, Three</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input\">\r\n <span class=\"c-chip\">One</span>\r\n <span class=\"c-chip\">Two</span>\r\n <span class=\"c-chip\">Three</span>\r\n </div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormatComponent, SdFormGenericChipString, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericVariable } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\n\r\n@Component({\r\n selector: 'chip-string-attribute',\r\n templateUrl: './chip-string-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression],\r\n})\r\nexport class ChipStringAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericChipString;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipString) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'chip-string') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n onChanges = () => {\r\n this.#changes.next();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n @if (component.properties!.viewed) {\r\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\r\n }\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n @if (!component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n }\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericChipCalendar } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'chip-calendar-control',\r\n templateUrl: './chip-calendar-control.component.html',\r\n styleUrls: ['./chip-calendar-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n})\r\nexport class ChipCalendarControl {\r\n component!: SdFormGenericChipCalendar;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipCalendar) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n // Vì đã đúng theo id nên có thể ép kiểu any\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">One, Two, Three</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input\">\r\n <span class=\"c-chip\">One</span>\r\n <span class=\"c-chip\">Two</span>\r\n <span class=\"c-chip\">Three</span>\r\n </div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormatComponent, SdFormGenericChipCalendar, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericVariable } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\n\r\n@Component({\r\n selector: 'chip-calendar-attribute',\r\n templateUrl: './chip-calendar-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression],\r\n})\r\nexport class ChipCalendarAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericChipCalendar;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipCalendar) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'chip-string') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n onChanges = () => {\r\n this.#changes.next();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n @if (component.properties!.viewed) {\r\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\r\n }\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n @if (!component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n }\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericNumber, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeTextarea } from \"../../attribute-textarea/attribute-textarea.component\";\r\n\r\n@Component({\r\n selector: 'number-attribute',\r\n templateUrl: './number-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeInputNumber, AttributeSwitch, AttributeExpression, AttributeTextarea],\r\n})\r\nexport class NumberAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericNumber;\r\n isTemplate = false;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericNumber) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'number') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.isTemplate = true;\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-textarea [form]=\"form\" label=\"Gợi ý\" [(model)]=\"component.helperText\"></attribute-textarea>\r\n</sd-section>\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n <attribute-input-number label=\"Giá trị nhỏ nhất\" [(model)]=\"component.validate!.min\"></attribute-input-number>\r\n <attribute-input-number label=\"Giá trị lớn nhất\" [(model)]=\"component.validate!.max\"></attribute-input-number>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericNumber } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\nimport { NumberUtilities } from '@sd-angular/core/utilities/extensions';\r\n\r\n@Component({\r\n selector: 'number-control',\r\n templateUrl: './number-control.component.html',\r\n styleUrls: ['./number-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NumberControl {\r\n component!: SdFormGenericNumber;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericNumber) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n number = NumberUtilities.toISO(new Date().getTime());\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n // Vì đã đúng theo id nên có thể ép kiểu any\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">{{number}}</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input\"></div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { DateUtilities } from '@sd-angular/core/utilities';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { SdFormGenericDatetime } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'datetime-control',\r\n templateUrl: './datetime-control.component.html',\r\n styleUrls: ['./datetime-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [],\r\n})\r\nexport class DatetimeControl {\r\n component!: SdFormGenericDatetime;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericDatetime) {\r\n this.component = component;\r\n }\r\n\r\n date = DateUtilities.toFormat(new Date(), 'dd/MM/yyyy');\r\n datetime = DateUtilities.toFormat(new Date(), 'dd/MM/yyyy HH:mm');\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n \r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n \r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">{{ component.subtype === 'datetime' ? datetime : date }}</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input\">\r\n <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\r\n <path\r\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>\r\n </svg>\r\n </div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSelect } from '@sd-angular/core/forms/select';\r\n\r\n@Component({\r\n selector: 'attribute-select',\r\n templateUrl: './attribute-select.component.html',\r\n imports: [SdSelect],\r\n})\r\nexport class AttributeSelect {\r\n @Input() form?: FormGroup;\r\n \r\n label?: string | null;\r\n @Input('label') set _label(label: string | undefined | null) {\r\n this.label = label;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n multiple = false;\r\n @Input('multiple') set _multiple(val: '' | boolean | undefined | null) {\r\n this.multiple = val === '' || !!val;\r\n }\r\n\r\n items: Item[] = [];\r\n @Input({ alias: 'items', required: true }) set _items(items: Item[] | undefined | null) {\r\n if (Array.isArray(items) && this.items !== items) {\r\n this.items = items || [];\r\n } else {\r\n items = [];\r\n }\r\n }\r\n\r\n model?: any | any[];\r\n @Input('model') set _model(model: any | any[] | undefined | null) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<string>();\r\n @Output() sdChange = new EventEmitter<string>();\r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n };\r\n}\r\n\r\ninterface Item {\r\n value: string;\r\n display: string;\r\n}\r\n","<!-- <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <sd-select\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [form]=\"form\"\r\n [(model)]=\"model\"\r\n [items]=\"items\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [disabled]=\"disabled\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-select>\r\n</div> -->\r\n<sd-select\r\n class=\"py-8\"\r\n [label]=\"label!\"\r\n [form]=\"form\"\r\n [(model)]=\"model\"\r\n [items]=\"items\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [disabled]=\"disabled\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-select>","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericDatetime, SdFormGenericGroup, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { debounceTime, filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeTextarea } from \"../../attribute-textarea/attribute-textarea.component\";\r\n\r\n@Component({\r\n selector: 'datetime-attribute',\r\n templateUrl: './datetime-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeSwitch, AttributeSelect, AttributeExpression, AttributeTextarea],\r\n})\r\nexport class DatetimeAttribute {\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n component!: SdFormGenericDatetime;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericDatetime) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'datetime') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input [form]=\"form\" label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-select\r\n label=\"Định dạng\"\r\n [(model)]=\"component.subtype\"\r\n [items]=\"[\r\n { value: 'date', display: 'dd/MM/yyyy' },\r\n { value: 'datetime', display: 'dd/MM/yyyy HH:mm' }\r\n ]\"></attribute-select>\r\n <attribute-textarea [form]=\"form\" label=\"Gợi ý\" [(model)]=\"component.helperText\"></attribute-textarea>\r\n</sd-section>\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch [form]=\"form\" label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport {\r\n GetComponentAttributes,\r\n GetVariableAttributes,\r\n SdFormGenericComponent,\r\n SdFormGenericDefinitionSelection,\r\n SdFormGenericGroup,\r\n SdFormGenericVariable,\r\n} from '../../../../../../models';\r\nimport { startWith, Subject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'build-queries',\r\n templateUrl: './build-queries.component.html',\r\n styleUrl: './build-queries.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdAutocomplete, SdButton, SdModal],\r\n})\r\nexport class BuildQueries {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n @Input() label?: string;\r\n @Input({ required: true }) selections: SdFormGenericDefinitionSelection[] = [];\r\n valuesKey?: string | null;\r\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\r\n this.valuesKey = valuesKey;\r\n this.#inputChanges.next();\r\n }\r\n selection?: SdFormGenericDefinitionSelection;\r\n\r\n leftProperties?: Property[];\r\n rightProperties?: Property[];\r\n\r\n queryString?: string;\r\n model?: Record<string, any>;\r\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\r\n this.model = JSON.parse(JSON.stringify({ ...model }));\r\n // Parse JSON -> STRING để hiển thị trên UI\r\n this.queryString = JSON.stringify(this.model);\r\n }\r\n @Output() modelChange = new EventEmitter<Record<string, string>>();\r\n\r\n // Mỗi lần inputChanges thì tính lại selection\r\n #inputChanges = new Subject<void>();\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.#inputChanges.pipe(startWith('')).subscribe(() => {\r\n this.selection = this.selections?.find?.(e => e.value === this.valuesKey);\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n edit = async () => {\r\n this.leftProperties = this.selection?.queries?.items || [];\r\n this.rightProperties = [...GetComponentAttributes(this.components), ...GetVariableAttributes(this.variables)].map(e => ({\r\n value: '${' + e.value + '}',\r\n display: e.display,\r\n }));\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const result: Record<string, string> = {};\r\n for (const key of Object.keys(this.model!)) {\r\n const value = this.model?.[key];\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n }\r\n this.modelChange.emit(result);\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n}\r\n\r\nexport interface Property {\r\n value: string;\r\n display: string;\r\n}\r\n","@if (!!selection?.queries?.items?.length) {\r\n <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\r\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\r\n </div>\r\n </div>\r\n <sd-modal title=\"Thiết lập giá trị truy vấn\" width=\"400px\">\r\n <div class=\"c-builder\">\r\n @for (property of leftProperties; track property.value) {\r\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\r\n <div style=\"width: 150px\">\r\n <div class=\"text-secondary\">{{ property.value }}</div>\r\n <div class=\"T16M\">{{ property.display }}</div>\r\n </div>\r\n <sd-autocomplete\r\n label=\"Trường lấy giá trị\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"model![property.value]\"\r\n [items]=\"rightProperties\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n hideInlineError></sd-autocomplete>\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n </sd-modal>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport {\r\n GetComponentAttributes,\r\n GetVariableAttributes,\r\n SdFormGenericComponent,\r\n SdFormGenericDefinitionSelection,\r\n SdFormGenericGroup,\r\n SdFormGenericVariable,\r\n} from '../../../../../../models';\r\nimport { startWith, Subject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'build-variables',\r\n templateUrl: './build-variables.component.html',\r\n styleUrl: './build-variables.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdAutocomplete, SdButton, SdModal],\r\n})\r\nexport class BuildVariables {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n @Input() label?: string;\r\n @Input({ required: true }) selections: SdFormGenericDefinitionSelection[] = [];\r\n valuesKey?: string | null;\r\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\r\n this.valuesKey = valuesKey;\r\n this.#inputChanges.next();\r\n }\r\n selection?: SdFormGenericDefinitionSelection;\r\n\r\n leftProperties?: Property[];\r\n rightProperties?: Property[];\r\n\r\n items: {\r\n id: string;\r\n key: string;\r\n value: any;\r\n }[] = [];\r\n queryString?: string;\r\n #model!: Record<string, any>;\r\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\r\n this.#model = JSON.parse(JSON.stringify({ ...model }));\r\n // Parse JSON -> STRING để hiển thị trên UI\r\n this.queryString = JSON.stringify(this.#model);\r\n this.items = Object.keys(this.#model).map(key => ({\r\n id: SdUtilities.randomId(),\r\n key,\r\n value: this.#model?.[key],\r\n }));\r\n }\r\n @Output() modelChange = new EventEmitter<Record<string, string>>();\r\n\r\n // Mỗi lần inputChanges thì tính lại selection\r\n #inputChanges = new Subject<void>();\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.#inputChanges.pipe(startWith('')).subscribe(() => {\r\n this.selection = this.selections?.find?.(e => e.value === this.valuesKey);\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n edit = async () => {\r\n this.leftProperties = [...GetComponentAttributes(this.components),...GetVariableAttributes(this.variables)];\r\n this.rightProperties =\r\n this.selection?.variables?.items?.map(e => ({\r\n value: '${' + e.value + '}',\r\n display: e.display,\r\n })) || [];\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n addField = () => {\r\n this.items.push({\r\n id: SdUtilities.randomId(),\r\n key: '',\r\n value: '',\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n remove = (idx: number) => {\r\n this.items.splice(idx, 1);\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const result: Record<string, string> = {};\r\n for (const { key, value } of this.items) {\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n }\r\n this.modelChange.emit(result);\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n}\r\n\r\nexport interface Property {\r\n value: string;\r\n display: string;\r\n}\r\n","@if (!!selection?.variables?.items?.length) {\r\n <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\r\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\r\n </div>\r\n </div>\r\n <sd-modal title=\"Thiết lập gán giá trị khi thay đổi\" width=\"500px\">\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button prefixIcon=\"add\" title=\"Thêm trường\" color=\"primary\" (click)=\"addField()\"></sd-button>\r\n </div>\r\n <!-- Cấp 1 -->\r\n @for (item of items; track item.id; let idx = $index) {\r\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\r\n <sd-autocomplete\r\n label=\"Trường muốn gán giá trị\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"item.key\"\r\n [items]=\"leftProperties\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n <sd-autocomplete\r\n label=\"Giá trị muốn gán\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"item.value\"\r\n [items]=\"rightProperties\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n </sd-modal>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\nimport {\r\n SdFormGenericComponent,\r\n SdFormGenericDefinitionSelection,\r\n SdFormGenericGroup,\r\n SdFormGenericSelectionStaticItem,\r\n SdFormGenericTableColumn,\r\n SdFormGenericValues,\r\n SdFormGenericVariable,\r\n} from '../../../../models';\r\nimport { FormGenericService } from '../../../../services';\r\nimport { BuildQueries } from \"./components/build-queries/build-queries.component\";\r\nimport { BuildVariables } from \"./components/build-variables/build-variables.component\";\r\n\r\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\r\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\r\n@Component({\r\n selector: 'attribute-selection',\r\n templateUrl: './attribute-selection.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdInput, SdAutocomplete, SdButton, SdSection, BuildQueries, BuildVariables],\r\n})\r\nexport class AttributeSelection {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n @Input({ required: true }) component!: SdFormGenericValues | SdFormGenericTableColumn;\r\n // ValuesKey\r\n valuesKey?: string;\r\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\r\n if (this.valuesKey !== valuesKey) {\r\n this.valuesKey = valuesKey?.toString();\r\n }\r\n }\r\n @Output() valuesKeyChange = new EventEmitter<string>();\r\n selections: SdFormGenericDefinitionSelection[] = [];\r\n\r\n // Values\r\n values: SdFormGenericSelectionStaticItem[] = [];\r\n @Input({ alias: 'values', required: true }) set _values(values: SdFormGenericSelectionStaticItem[] | undefined | null) {\r\n if (this.values !== values) {\r\n this.values = values || [];\r\n }\r\n }\r\n @Output() valuesChange = new EventEmitter<SdFormGenericSelectionStaticItem[]>();\r\n @Output() sdChange = new EventEmitter<SdFormGenericComponent>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private formGenericService: FormGenericService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.formGenericService.selection.definitions().then(selections => {\r\n // Nếu không phải là type select thì không hiển thị các lựa chọn lazyValues\r\n // Vì radio, checklist không thể load lazy\r\n if (this.component.type !== 'select') {\r\n this.selections = selections.filter(selection => !('lazyValues' in selection) && !('lazyValuesKey' in selection));\r\n } else {\r\n this.selections = selections;\r\n }\r\n this.ref.markForCheck();\r\n });\r\n }\r\n\r\n onChangeValuesKey = (value: any) => {\r\n this.valuesKeyChange.emit(value);\r\n // Gán values rỗng nếu đã sử dụng valuesKey\r\n this.values = [];\r\n this.valuesChange.emit(this.values);\r\n this.ref.markForCheck();\r\n };\r\n\r\n onChangeValues = () => {\r\n this.valuesChange.emit(this.values);\r\n };\r\n\r\n addItem = () => {\r\n this.values.push({\r\n value: `value_${new Date().getTime().toString(36)}`,\r\n label: `Label ${new Date().getTime().toString(36)}`,\r\n });\r\n this.valuesChange.emit(this.values);\r\n this.ref.markForCheck();\r\n };\r\n\r\n removeItem = (idx: number) => {\r\n this.values.splice(idx, 1);\r\n this.valuesChange.emit(this.values);\r\n this.ref.markForCheck();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Dữ liệu\" icon=\"format_list_bulleted\">\r\n @if (selections.length) {\r\n <div class=\"d-flex align-items-center py-4\">\r\n <div class=\"T14M\" style=\"flex: 1\">Dữ liệu API</div>\r\n <sd-autocomplete\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [(model)]=\"valuesKey\"\r\n [items]=\"selections\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChangeValuesKey($event)\"\r\n hideInlineError></sd-autocomplete>\r\n </div>\r\n <!-- Nếu là select từ API thì cho phép truyền thêm Query -->\r\n\r\n @if (component.type === 'select' && !!valuesKey) {\r\n <build-queries\r\n label=\"Điều kiện truy vấn\"\r\n [selections]=\"selections\"\r\n [valuesKey]=\"valuesKey\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.query\"></build-queries>\r\n <build-variables\r\n label=\"Gán giá trị\"\r\n [selections]=\"selections\"\r\n [valuesKey]=\"valuesKey\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.setVariables\"></build-variables>\r\n <!-- <div class=\"d-flex align-items-center py-4\">\r\n <div class=\"T14M\" style=\"flex: 1\">Điều kiện truy vấn</div>\r\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"component.properties!.query\" hideInlineError></sd-input>\r\n </div> -->\r\n }\r\n }\r\n @if (!valuesKey) {\r\n <div class=\"d-flex flex-column\" style=\"gap: 4px\">\r\n <div class=\"T14M\">Dữ liệu tĩnh</div>\r\n @for (item of values; track item.value; let idx = $index) {\r\n <div class=\"d-flex align-items-end py-4\" style=\"gap: 4px\">\r\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"item.value\" (sdChange)=\"onChangeValues()\" hideInlineError></sd-input>\r\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"item.label\" (sdChange)=\"onChangeValues()\" hideInlineError></sd-input>\r\n <sd-button prefixIcon=\"delete\" (click)=\"removeItem(idx)\" color=\"error\"></sd-button>\r\n </div>\r\n }\r\n <sd-button prefixIcon=\"add\" title=\"Thêm dữ liệu\" (click)=\"addItem()\" color=\"primary\"></sd-button>\r\n </div>\r\n }\r\n</sd-section>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericSelect, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeSelection } from '../../attribute-selection/attribute-selection.component';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\n\r\n@Component({\r\n selector: 'select-attribute',\r\n templateUrl: './select-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeSelection, AttributeInput, AttributeSwitch, AttributeExpression],\r\n})\r\nexport class SelectAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericSelect;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericSelect) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChanges = () => {\r\n this.#changes.next();\r\n };\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'select') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-switch label=\"Chọn nhiều\" [(model)]=\"component.properties!.multiple\"></attribute-switch>\r\n @if (component.properties!.viewed) {\r\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\r\n }\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <attribute-selection\r\n [components]=\"components\"\r\n [component]=\"component\"\r\n [variables]=\"variables\"\r\n [(valuesKey)]=\"component.valuesKey\"\r\n [(values)]=\"component.values\"\r\n (valuesKeyChange)=\"onChanges()\"\r\n (valuesChange)=\"onChanges()\"></attribute-selection>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericSelect } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'select-control',\r\n templateUrl: './select-control.component.html',\r\n styleUrls: ['./select-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n})\r\nexport class SelectControl {\r\n component!: SdFormGenericSelect;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericSelect) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">Your dropdown selection</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input c-select\">\r\n <svg width=\"8\" height=\"8\">\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n fill=\"currentColor\"\r\n stroke=\"currentColor\"\r\n stroke-width=\".5\"\r\n d=\"M7.75 1.336L4 6.125.258 1.335 0 1.54l4 5.125L8 1.54zm0 0\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericRadio } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'radio-control',\r\n templateUrl: './radio-control.component.html',\r\n styleUrls: ['./radio-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n})\r\nexport class RadioControl {\r\n component!: SdFormGenericRadio;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericRadio) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n // Vì đã đúng theo id nên có thể ép kiểu any\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">Your radio selection</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"c-radio-item d-flex flex-wrap align-items-center\">\r\n @if (component.values?.length) {\r\n <div class=\"d-flex\" [class.flex-column]=\"component.properties?.direction === 'column'\" style=\"gap: 8px\">\r\n @for (item of component.values; track item.value) {\r\n <div class=\"d-flex align-items-center my-4\">\r\n <div class=\"c-rd-ip mr-4\"></div>\r\n <div class=\"T12M\">{{ item.label }}</div>\r\n </div>\r\n }\r\n </div>\r\n } @else if (component.valuesKey) {\r\n <div class=\"T12R text-secondary\">{{ component.valuesKey }}</div>\r\n }\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericRadio, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSelection } from '../../attribute-selection/attribute-selection.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { BuilderService } from '../../../services';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\n\r\n@Component({\r\n selector: 'radio-attribute',\r\n templateUrl: './radio-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeSelection, AttributeInput, AttributeSwitch, AttributeSelect, AttributeExpression],\r\n})\r\nexport class RadioAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericRadio;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericRadio) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'radio') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n onChanges = () => {\r\n this.#changes.next();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n @if (component.properties!.viewed) {\r\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\r\n }\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n <attribute-select\r\n [form]=\"form\"\r\n label=\"Bố cục\"\r\n [(model)]=\"component.properties!.direction\"\r\n [items]=\"[\r\n { value: 'row', display: 'Ngang' },\r\n { value: 'column', display: 'Dọc' }\r\n ]\"></attribute-select>\r\n </sd-section>\r\n @if (!component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n }\r\n <attribute-selection\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [component]=\"component\"\r\n [(valuesKey)]=\"component.valuesKey\"\r\n [(values)]=\"component.values\"\r\n (valuesKeyChange)=\"onChanges()\"\r\n (valuesChange)=\"onChanges()\"></attribute-selection>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { SdFormGenericCheckbox } from '../../../../../models';\r\n\r\n@Component({\r\n selector: 'checkbox-control',\r\n templateUrl: './checkbox-control.component.html',\r\n styleUrls: ['./checkbox-control.component.scss'],\r\n imports: [CommonModule],\r\n})\r\nexport class CheckboxControl {\r\n component!: SdFormGenericCheckbox;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericCheckbox) {\r\n this.component = component;\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">Có/Không</div>\r\n} @else {\r\n <div class=\"c-checkbox\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-box mr-4\"></div>\r\n <div class=\"T14R\">{{ component.label }}</div>\r\n </div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericCheckbox, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { BuilderService } from '../../../services';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\n\r\n@Component({\r\n selector: 'checkbox-attribute',\r\n templateUrl: './checkbox-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression],\r\n})\r\nexport class CheckboxAttribute {\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n component!: SdFormGenericCheckbox;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericCheckbox) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'checkbox') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input [form]=\"form\" label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n</sd-section>\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { GetComponentAttributes, GetVariableAttributes, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericVariable } from '../../../../../../../models';\r\n\r\n@Component({\r\n selector: 'build-queries',\r\n templateUrl: './build-queries.component.html',\r\n styleUrl: './build-queries.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdAutocomplete, SdButton, SdModal],\r\n})\r\nexport class BuildQueries {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n form = new FormGroup({});\r\n @Input() label?: string;\r\n leftProperties?: Property[];\r\n @Input({ alias: 'queries', required: true }) set _queries(queries: { key: string; label: string }[] | undefined | null) {\r\n this.leftProperties =\r\n queries?.map(e => ({\r\n value: e.key,\r\n display: e.label,\r\n })) || [];\r\n }\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n rightProperties?: Property[];\r\n queryString?: string;\r\n model?: Record<string, any>;\r\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\r\n this.model = JSON.parse(JSON.stringify({ ...model }));\r\n // Parse JSON -> STRING để hiển thị trên UI\r\n this.queryString = JSON.stringify(this.model);\r\n }\r\n @Output() modelChange = new EventEmitter<Record<string, string>>();\r\n\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {}\r\n\r\n ngOnDestroy() {}\r\n\r\n edit = () => {\r\n this.rightProperties =\r\n [...GetComponentAttributes(this.components), ...GetVariableAttributes(this.variables)].map(e => ({\r\n value: '${' + e.value + '}',\r\n display: e.display,\r\n })) || [];\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const result: Record<string, string> = {};\r\n for (const key of Object.keys(this.model!)) {\r\n const value = this.model?.[key];\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n }\r\n this.modelChange.emit(result);\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n}\r\n\r\ninterface Property {\r\n value: string;\r\n display: string;\r\n}\r\n","@if (!!leftProperties?.length) {\r\n <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\r\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\r\n </div>\r\n </div>\r\n <sd-modal title=\"Thiết lập giá trị truy vấn\" width=\"400px\">\r\n <div class=\"c-builder\">\r\n @for (property of leftProperties; track property.value) {\r\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\r\n <div class=\"T14M\" style=\"width: 150px\">{{ property.display }}</div>\r\n <sd-autocomplete\r\n label=\"Trường lấy giá trị\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"model![property.value]\"\r\n [items]=\"rightProperties\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n </sd-modal>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { debounceTime, filter, Subscription } from 'rxjs';\r\nimport {\r\n GetComponentAttributes,\r\n SdFormatComponent,\r\n SdFormGenericComponent,\r\n SdFormGenericDefinitionHtml,\r\n SdFormGenericGroup,\r\n SdFormGenericHtml,\r\n SdFormGenericVariable,\r\n} from '../../../../../models';\r\nimport { FormGenericService } from '../../../../../services';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\r\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\r\nimport { BuildQueries } from './components/build-queries/build-queries.component';\r\n\r\n@Component({\r\n selector: 'html-attribute',\r\n templateUrl: './html-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeInput, AttributeSelect, AttributeExpression, AttributeTextarea, BuildQueries],\r\n})\r\nexport class HtmlAttribute implements OnInit, AfterViewInit, OnDestroy {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n\r\n component!: SdFormGenericHtml;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n form = new FormGroup({});\r\n definitionHtmls: SdFormGenericDefinitionHtml[] = [];\r\n // Mong muốn là khi attribute changes thông báo cho control biết để control render content tương ứng\r\n @Output() attributeChanges = new EventEmitter();\r\n\r\n #subscription = new Subscription();\r\n rightProperties: { value: string; display: string }[] = [];\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private formGenericService: FormGenericService,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.formGenericService.html.definitions().then(htmls => {\r\n this.definitionHtmls = htmls;\r\n this.ref.markForCheck();\r\n });\r\n this.rightProperties =\r\n GetComponentAttributes(this.components).map(e => ({\r\n value: '${' + e.value + '}',\r\n display: e.display,\r\n })) || [];\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeDefinition = async (value: string) => {\r\n const definition = this.definitionHtmls.find(e => e.value === value);\r\n if (definition) {\r\n this.component.content = await this.formGenericService.html.getContent(value);\r\n this.component.properties!.variables = JSON.parse(JSON.stringify(definition.variables || []));\r\n if (definition.type === 'query') {\r\n this.component.properties!.queries = JSON.parse(JSON.stringify(definition.queries || []));\r\n } else {\r\n this.component.properties!.queries = [];\r\n }\r\n delete this.component.properties?.query;\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n } else {\r\n this.component.properties!.variables = [];\r\n this.component.properties!.queries = [];\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","@if (!component.properties!.hidden) {\r\n <sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-select\r\n label=\"Dữ liệu mẫu\"\r\n [(model)]=\"component.template\"\r\n [items]=\"definitionHtmls\"\r\n (sdChange)=\"onChangeDefinition($event)\"></attribute-select>\r\n <attribute-input [form]=\"form\" label=\"Trường dữ liệu\" [(model)]=\"component.key\"></attribute-input>\r\n <attribute-textarea [form]=\"form\" label=\"Nội dung\" [(model)]=\"component.content\"></attribute-textarea>\r\n @if (component.properties?.queries?.length) {\r\n <build-queries\r\n label=\"Điều kiện truy vấn\"\r\n [queries]=\"component.properties?.queries\"\r\n [components]=\"components\"\r\n [variables]=\"variables\" \r\n [(model)]=\"component.properties!.query\"></build-queries>\r\n }\r\n </sd-section>\r\n @if (component.properties?.variables?.length) {\r\n <sd-section class=\"mt-8\" title=\"Tham số\" icon=\"format_list_bulleted\">\r\n @for (variable of component.properties?.variables; track variable.key) {\r\n <attribute-input [form]=\"form\" [label]=\"variable.label\" [(model)]=\"variable.value\"></attribute-input>\r\n }\r\n </sd-section>\r\n }\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericHtml } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { HtmlPipe } from '../../../../../pipes';\r\nimport { FormGenericService } from '../../../../../services';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\n\r\n@Component({\r\n selector: 'html-control',\r\n templateUrl: './html-control.component.html',\r\n styleUrls: ['./html-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [HtmlPipe],\r\n})\r\nexport class HtmlControl {\r\n component!: SdFormGenericHtml;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n this.content = this.component.content;\r\n }\r\n content?: string;\r\n hashed?: string; // Dùng để ép Angular nhận diện sự thay đổi của HTML khi content/variables\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService,\r\n private formGenericService: FormGenericService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(async () => {\r\n if (this.component.template) {\r\n this.content = await this.formGenericService.html.getContent(this.component.template);\r\n } else {\r\n this.content = this.component.content;\r\n }\r\n this.hashed = SdUtilities.hash({\r\n content: this.content,\r\n variables: this.component.properties?.variables?.reduce(\r\n (current, next) => ({\r\n ...current,\r\n [next.key]: next.value,\r\n }),\r\n {}\r\n ),\r\n });\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (!content) {\r\n <div class=\"c-html d-flex align-items-center justify-content-center\">\r\n <span class=\"material-icons\"> html </span>\r\n </div>\r\n} @else {\r\n <div [innerHTML]=\"hashed | htmlPipe: content: component\"></div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport {\r\n SdFormGenericComponent,\r\n SdFormGenericGroup,\r\n} from '../../../../models';\r\nimport { SdInput } from '@sd-angular/core/forms';\r\n\r\n@Component({\r\n selector: 'attribute-parameter',\r\n templateUrl: './attribute-parameter.component.html',\r\n styleUrl: './attribute-parameter.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ SdButton, SdModal , SdInput],\r\n})\r\nexport class AttributeParameter {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n form = new FormGroup({});\r\n @Input() label?: string;\r\n\r\n items: {\r\n id: string;\r\n key: string;\r\n value: any;\r\n }[] = [];\r\n queryString?: string;\r\n #model!: Record<string, any>;\r\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\r\n this.#model = JSON.parse(JSON.stringify({ ...model }));\r\n // Parse JSON -> STRING để hiển thị trên UI\r\n this.queryString = JSON.stringify(this.#model);\r\n this.items = Object.keys(this.#model).map(key => ({\r\n id: SdUtilities.randomId(),\r\n key,\r\n value: this.#model?.[key],\r\n }));\r\n }\r\n @Output() modelChange = new EventEmitter<Record<string, string>>();\r\n\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n edit = async () => {\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n addField = () => {\r\n this.items.push({\r\n id: SdUtilities.randomId(),\r\n key: '',\r\n value: '',\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n remove = (idx: number) => {\r\n this.items.splice(idx, 1);\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const result: Record<string, string> = {};\r\n for (const { key, value } of this.items) {\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n }\r\n this.modelChange.emit(result);\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n}\r\n\r\nexport interface Property {\r\n value: string;\r\n display: string;\r\n}\r\n","<div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\r\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\r\n </div>\r\n</div>\r\n<sd-modal title=\"Gán giá trị Tham số\" width=\"500px\">\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button prefixIcon=\"add\" title=\"Thêm trường\" color=\"primary\" (click)=\"addField()\"></sd-button>\r\n </div>\r\n <!-- Cấp 1 -->\r\n @for (item of items; track item.id; let idx = $index) {\r\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\r\n <sd-input label=\"Tên tham số\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"item.key\" required hideInlineError></sd-input>\r\n <sd-input label=\"Giá trị tương ứng\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"item.value\" required hideInlineError></sd-input>\r\n <div style=\"width: 32px; min-width: 32px\">\r\n <sd-button\r\n prefixIcon=\"delete\"\r\n tooltip=\"Xóa\"\r\n (click)=\"remove(idx)\"\r\n size=\"sm\"\r\n class=\"p-0\"\r\n ></sd-button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericUpload, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { BuilderService } from '../../../services';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { debounceTime, filter, Subscription } from 'rxjs';\r\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\r\nimport { AttributeParameter } from '../../attribute-parameter/attribute-parameter.component';\r\n\r\n@Component({\r\n selector: 'upload-attribute',\r\n templateUrl: './upload-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeInputNumber, AttributeSwitch, AttributeSelect, AttributeExpression , AttributeParameter],\r\n})\r\nexport class UploadAttribute {\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n component!: SdFormGenericUpload;\r\n extension?: string;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericUpload) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n this.extension = this.component.properties!.extensions?.join(',') || '';\r\n }\r\n\r\n #subscription = new Subscription();\r\n sources: {\r\n value: 'ALL' | 'PHOTO_LIBRARY' | 'CAPTURE';\r\n display: string;\r\n }[] = [{\r\n value: 'ALL',\r\n display: 'Tất cả'\r\n },{\r\n value: 'PHOTO_LIBRARY',\r\n display: 'Chọn từ thư viện'\r\n },{\r\n value: 'CAPTURE',\r\n display: 'Chụp ảnh'\r\n }];\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'upload') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.component.properties!.type = this.component.properties!.type || 'file';\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n onChangeExtension = (extension: string) => {\r\n this.extension = extension;\r\n this.component.properties!.extensions =\r\n extension\r\n ?.split(',')\r\n ?.map(val => val?.trim())\r\n ?.filter(val => !!val) || [];\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-select\r\n label=\"Loại\"\r\n [(model)]=\"component.properties!.type\"\r\n [items]=\"[\r\n { value: 'file', display: 'Tệp' },\r\n { value: 'image', display: 'Ảnh' }\r\n ]\"></attribute-select>\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n <attribute-input-number label=\"SL tệp/ảnh tối đa\" [(model)]=\"component.properties!.max\"></attribute-input-number>\r\n <attribute-input-number label=\"Dung lượng (Mb)\" [(model)]=\"component.properties!.maxSize\"></attribute-input-number>\r\n @if (component.properties!.type === 'file') {\r\n <attribute-input label=\"Định dạng (VD: png,jpg ...)\" [model]=\"extension\" (modelChange)=\"onChangeExtension($event)\"></attribute-input>\r\n }\r\n @if (component.properties!.type === 'image') {\r\n <attribute-select label=\"Nguồn (mobile)\" [(model)]=\"component.properties!.source\" [items]=\"sources\"></attribute-select>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Tham số\" icon=\"settings\">\r\n <attribute-parameter label=\"Gán tham số\" [components]=\"components\" [(model)]=\"component.properties!.args\"></attribute-parameter>\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericUpload } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { filter, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'upload-control',\r\n templateUrl: './upload-control.component.html',\r\n styleUrls: ['./upload-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UploadControl {\r\n component!: SdFormGenericUpload;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericUpload) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <svg\r\n width=\"64\"\r\n height=\"64\"\r\n viewBox=\"0 0 1280 1280\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n stroke-linejoin=\"round\"\r\n stroke-miterlimit=\"2\"\r\n alt=\"This is an image placeholder\">\r\n <path fill=\"#e5e9ed\" d=\"M0 0h1280v1280H0z\"></path>\r\n <path d=\"M910 410H370v470h540V410zm-57.333 57.333v355.334H427.333V467.333h425.334z\" fill=\"#cad3db\"></path>\r\n <path d=\"M810 770H480v-60l100-170 130 170 100-65v125z\" fill=\"#cad3db\"></path>\r\n <circle cx=\"750\" cy=\"550\" r=\"50\" fill=\"#cad3db\" transform=\"translate(10 10)\"></circle>\r\n </svg>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"c-upload-file d-flex align-items-center justify-content-between\">\r\n <svg\r\n width=\"64\"\r\n height=\"64\"\r\n viewBox=\"0 0 1280 1280\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n stroke-linejoin=\"round\"\r\n stroke-miterlimit=\"2\"\r\n alt=\"This is an image placeholder\">\r\n <path fill=\"#e5e9ed\" d=\"M0 0h1280v1280H0z\"></path>\r\n <path d=\"M910 410H370v470h540V410zm-57.333 57.333v355.334H427.333V467.333h425.334z\" fill=\"#cad3db\"></path>\r\n <path d=\"M810 770H480v-60l100-170 130 170 100-65v125z\" fill=\"#cad3db\"></path>\r\n <circle cx=\"750\" cy=\"550\" r=\"50\" fill=\"#cad3db\" transform=\"translate(10 10)\"></circle>\r\n </svg>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { SdLabel } from '@sd-angular/core/forms/label';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from '../../../../configurations';\r\nimport {\r\n SdFormGenericComponent,\r\n SdFormGenericDefinitionTable,\r\n SdFormGenericGroup,\r\n SdFormGenericTableColumn,\r\n SdFormGenericVariable,\r\n TableColumnTypes,\r\n} from '../../../../models';\r\nimport { AttributeInput } from '../attribute-input/attribute-input.component';\r\nimport { AttributeSelect } from '../attribute-select/attribute-select.component';\r\nimport { AttributeSelection } from '../attribute-selection/attribute-selection.component';\r\nimport { AttributeSwitch } from '../attribute-switch/attribute-switch.component';\r\nimport { AttributeParameter } from '../attribute-parameter/attribute-parameter.component';\r\n\r\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\r\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\r\n@Component({\r\n selector: 'attribute-table',\r\n templateUrl: './attribute-table.component.html',\r\n imports: [\r\n MatIconModule,\r\n MatDividerModule,\r\n SdLabel,\r\n SdAutocomplete,\r\n SdButton,\r\n SdSection,\r\n SdModal,\r\n AttributeSelection,\r\n AttributeInput,\r\n AttributeSelect,\r\n AttributeSwitch,\r\n AttributeParameter\r\n ],\r\n})\r\nexport class AttributeTable {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n // ColumnsKey\r\n columnsKey?: string;\r\n @Input({ alias: 'columnsKey', required: true }) set _columnsKey(columnsKey: string | undefined | null) {\r\n if (this.columnsKey !== columnsKey) {\r\n this.columnsKey = columnsKey?.toString();\r\n }\r\n }\r\n @Output() columnsKeyChange = new EventEmitter<string>();\r\n tables: SdFormGenericDefinitionTable[] = [];\r\n\r\n // Columns\r\n types = TableColumnTypes;\r\n columns: SdFormGenericTableColumn[] = [];\r\n @Input({ alias: 'columns', required: true }) set _columns(columns: SdFormGenericTableColumn[] | undefined | null) {\r\n if (this.columns !== columns) {\r\n this.columns = columns || [];\r\n }\r\n }\r\n @Output() columnsChange = new EventEmitter<SdFormGenericTableColumn[]>();\r\n column?: SdFormGenericTableColumn;\r\n constructor(@Inject(SD_WORKFLOW_CONFIGURATION) private workflowConfiguration: ISdWorkflowConfiguration) {\r\n this.tables = this.workflowConfiguration?.form?.tables || [];\r\n }\r\n\r\n onChangeColumnsKey = (value: any) => {\r\n this.columnsKeyChange.emit(value);\r\n const table = this.tables.find(e => e.value === value);\r\n if (table) {\r\n this.columns = table.columns();\r\n } else {\r\n this.columns = [];\r\n }\r\n this.columnsChange.emit(this.columns);\r\n };\r\n\r\n addColumn = () => {\r\n this.selectedIdx = undefined;\r\n this.column = {\r\n key: SdUtilities.randomId('key'),\r\n label: SdUtilities.randomId('label'),\r\n type: 'string',\r\n width: '100px',\r\n validate: {},\r\n };\r\n this.modal?.open();\r\n };\r\n\r\n selectedIdx? = 0;\r\n editColumn = (idx: number) => {\r\n if (this.columns[idx]) {\r\n this.selectedIdx = idx;\r\n this.column = JSON.parse(JSON.stringify(this.columns[idx]));\r\n this.column!.validate = this.column?.validate || {};\r\n this.modal?.open();\r\n }\r\n };\r\n\r\n removeColumn = (idx: number) => {\r\n this.columns.splice(idx, 1);\r\n this.columnsChange.emit(this.columns);\r\n };\r\n\r\n onConfirm = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n if (this.column) {\r\n if (this.selectedIdx! >= 0) {\r\n this.columns.splice(this.selectedIdx!, 1, this.column);\r\n } else {\r\n this.columns.push(this.column);\r\n }\r\n this.columnsChange.emit(this.columns);\r\n }\r\n this.modal?.close();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Dữ liệu\" icon=\"format_list_bulleted\">\r\n @if (tables.length) {\r\n <!-- <div class=\"d-flex align-items-center py-4\">\r\n <div class=\"T14M\" style=\"flex: 1\">Dữ liệu cột</div>\r\n <sd-autocomplete\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [(model)]=\"columnsKey\"\r\n [items]=\"tables\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChangeColumnsKey($event)\"\r\n hideInlineError></sd-autocomplete>\r\n </div> -->\r\n <sd-autocomplete\r\n class=\"py-8\"\r\n label=\"Dữ liệu cột\"\r\n [(model)]=\"columnsKey\"\r\n [items]=\"tables\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChangeColumnsKey($event)\"\r\n hideInlineError></sd-autocomplete>\r\n }\r\n @if (!columnsKey) {\r\n <div class=\"d-flex flex-column\" style=\"gap: 4px\">\r\n <div class=\"T14M\">Danh sách cột</div>\r\n @for (item of columns; track item.key; let idx = $index) {\r\n <div class=\"d-flex align-items-center py-4\" style=\"gap: 4px; justify-content: space-between\">\r\n <div class=\"d-flex flex-column\">\r\n <sd-label [label]=\"item.label\" [required]=\"item.validate?.required\"></sd-label>\r\n <div class=\"T12R text-secondary\">{{ item.key }}</div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 4px\">\r\n <mat-icon class=\"text-secondary\" style=\"cursor: pointer\" [fontIcon]=\"'edit'\" (click)=\"editColumn(idx)\"></mat-icon>\r\n <mat-icon class=\"text-secondary\" style=\"cursor: pointer\" [fontIcon]=\"'cancel'\" (click)=\"removeColumn(idx)\"></mat-icon>\r\n </div>\r\n </div>\r\n }\r\n <sd-button prefixIcon=\"add\" title=\"Thêm cột\" (click)=\"addColumn()\" color=\"primary\"></sd-button>\r\n </div>\r\n }\r\n</sd-section>\r\n<sd-modal title=\"Cấu hình cột\" width=\"600px\">\r\n @if (column) {\r\n <sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-input [form]=\"form\" label=\"Trường dữ liệu\" [(model)]=\"column.key\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên cột\" [(model)]=\"column.label\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Chiều rộng\" [(model)]=\"column.width\"></attribute-input>\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"column.validate!.required\"></attribute-switch>\r\n <attribute-select [form]=\"form\" label=\"Loại dữ liệu\" [(model)]=\"column.type\" [items]=\"types\"></attribute-select>\r\n </sd-section>\r\n @if (column.type === 'boolean') {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"info\">\r\n <attribute-input [form]=\"form\" label=\"Hiển thị khi TRUE\" [(model)]=\"column.displayOnTrue\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Hiển thị khi FALSE\" [(model)]=\"column.displayOnFalse\"></attribute-input>\r\n </sd-section>\r\n } @else if (column.type === 'values') {\r\n <attribute-selection\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [component]=\"column\"\r\n [(valuesKey)]=\"column.valuesKey\"\r\n [(values)]=\"column.values\"></attribute-selection>\r\n } @else if (column.type === 'file' || column.type === 'image') {\r\n <sd-section class=\"mt-8\" title=\"Tham số\" icon=\"settings\">\r\n <attribute-parameter label=\"Gán tham số\" [components]=\"components\" [(model)]=\"column!.args\"></attribute-parameter>\r\n </sd-section>\r\n }\r\n }\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Lưu\" (click)=\"onConfirm()\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericTable, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeTable } from '../../attribute-table/attribute-table.component';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\n\r\n@Component({\r\n selector: 'table-attribute',\r\n templateUrl: './table-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeSwitch, AttributeTable, AttributeExpression],\r\n})\r\nexport class TableAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericTable;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTable) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'table') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n onChanges = () => {\r\n this.#changes.next();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <attribute-table\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(columnsKey)]=\"component.columnsKey\"\r\n [(columns)]=\"component.columns\"\r\n (columnsKeyChange)=\"onChanges()\"\r\n (columnsChange)=\"onChanges()\"></attribute-table>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericTable } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { filter, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'table-control',\r\n templateUrl: './table-control.component.html',\r\n styleUrls: ['./table-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n})\r\nexport class TableControl {\r\n component!: SdFormGenericTable;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTable) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n @if (component.columns?.length) {\r\n <div class=\"c-table\">\r\n <div class=\"c-header d-flex align-items-center bg-secondary-light\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"c-item\" [style.width]=\"column.width\">\r\n {{ column.label }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"c-content\">\r\n <div class=\"row-table d-flex align-items-center\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"c-item text-secondary\" [style.width]=\"column.width\">{{ column.key }}</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n @if (component.columns?.length) {\r\n <div class=\"c-table\">\r\n <div class=\"c-header d-flex align-items-center bg-primary-light\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"c-item\" [style.width]=\"column.width\">\r\n {{ column.label }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"c-content\">\r\n <div class=\"row-table d-flex align-items-center\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"c-item text-secondary\" [style.width]=\"column.width\">{{ column.key }}</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// Định nghĩa các Components của Form Render\r\nimport { SdFormGenericExpression } from './form-generic-expression.model';\r\n\r\nexport type SdFormGenericValidation = ValidationExpression | ValidationFunction;\r\n\r\ninterface ValidationBase {\r\n alert: 'warning' | 'error'; //\r\n}\r\n\r\nexport const ValidationAlerts = [\r\n {\r\n value: 'error',\r\n display: 'Lỗi',\r\n },\r\n {\r\n value: 'warning',\r\n display: 'Cảnh báo',\r\n },\r\n];\r\n\r\ninterface ValidationExpression extends ValidationBase {\r\n type: 'expression';\r\n expression: SdFormGenericExpression;\r\n message: string; // Có thể là html\r\n}\r\n\r\ninterface ValidationFunction extends ValidationBase {\r\n type: 'function';\r\n code: string; // Lấy từ value của SdFormGenericValidationFunction\r\n}\r\n\r\ninterface ValidateArgs {\r\n entity: Record<string, any>;\r\n}\r\n\r\nexport interface SdFormGenericValidationFunction {\r\n value: string;\r\n display: string;\r\n validate: (args: ValidateArgs) => Promise<string | undefined | null>; // Hàm trả về string message nếu có lỗi, message có thể là html\r\n}\r\n\r\nexport interface SdFormGenericValidationConfiguration {\r\n // Danh sách các functions validate được cấu hình sẵn để làm dữ liêu cho dropdown\r\n functions?: SdFormGenericValidationFunction[];\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdInput, SdLabel, SdSelect } from '@sd-angular/core/forms';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from '../../../../configurations';\r\nimport { Attribute, GetAttributes } from '../../../../models';\r\nimport { SdFormGenericValidation, SdFormGenericValidationFunction, ValidationAlerts } from '../../../../models/form-generic-validation.model';\r\nimport { SdFormGeneric } from '../../../../models/form-generic.model';\r\nimport { ExpressionBuilderComponent } from '../expression-builder/expression-builder.component';\r\n\r\n@Component({\r\n selector: 'configure-validation',\r\n templateUrl: './configure-validation.component.html',\r\n styleUrl: './configure-validation.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatMenuModule, SdModal, SdButton, SdInput, SdSelect, ExpressionBuilderComponent, MatIconModule],\r\n})\r\nexport class ConfigureValidationComponent {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n form = new FormGroup({});\r\n attributes: Attribute[] = [];\r\n validations: SdFormGenericValidation[] = [];\r\n functions: SdFormGenericValidationFunction[] = [];\r\n alerts = ValidationAlerts;\r\n @Output() accept = new EventEmitter<SdFormGenericValidation[]>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(SD_WORKFLOW_CONFIGURATION) private workflowConfiguration: ISdWorkflowConfiguration\r\n ) {\r\n this.functions = this.workflowConfiguration?.form?.validation?.functions || [];\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // this.#subscription.add(\r\n // this.#validationsChanges.pipe(debounceTime(200), startWith(this.validations)).subscribe(() => {\r\n // // Khi component thay đổi thì sync lại\r\n // this.ref.markForCheck();\r\n // })\r\n // );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n open = (formGeneric: SdFormGeneric) => {\r\n // Xử lý gán validations\r\n if (Array.isArray(formGeneric?.validations)) {\r\n this.validations = JSON.parse(JSON.stringify(formGeneric?.validations));\r\n } else {\r\n this.validations = [];\r\n }\r\n this.attributes = GetAttributes(formGeneric.components)\r\n if (formGeneric) {\r\n this.modal?.open();\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n addValidation = (type: SdFormGenericValidation['type']) => {\r\n if (type === 'expression') {\r\n this.validations.push({\r\n alert: 'error',\r\n type,\r\n expression: {\r\n key: SdUtilities.randomId(),\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n },\r\n message: '',\r\n });\r\n } else if (type === 'function') {\r\n this.validations.push({\r\n alert: 'error',\r\n type,\r\n code: '',\r\n });\r\n }\r\n this.ref.markForCheck();\r\n };\r\n\r\n removaValidation = (index: number) => {\r\n this.validations.splice(index, 1);\r\n this.ref.markForCheck();\r\n };\r\n\r\n updateValidations = () => {\r\n this.accept.emit(this.validations);\r\n this.modal?.close();\r\n };\r\n}\r\n","<sd-modal title=\"Cấu hình xác thực lỗi/cảnh báo\" view=\"dialog\" width=\"800px\" #popupConfigureVariables>\r\n @for (validation of validations; track $index; let idx = $index) {\r\n <div class=\"mat-elevation-z2 position-relative p-8 mb-16\" style=\"border-radius: 8px;\">\r\n <div class=\"row mx-0\">\r\n <sd-select\r\n class=\"col-3\"\r\n label=\"Loại thông báo\"\r\n [(model)]=\"validation.alert\"\r\n [items]=\"alerts\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required></sd-select>\r\n @if (validation.type === 'expression') {\r\n <sd-input class=\"col-9\" [form]=\"form\" label=\"Thông báo hiển thị\" [(model)]=\"validation.message\" required></sd-input>\r\n <expression-builder class=\"col-12\" label=\"Biểu thức điều kiện\" [(model)]=\"validation.expression\" [attributes]=\"attributes\"></expression-builder>\r\n } @else if (validation.type === 'function') {\r\n <sd-select\r\n class=\"col-9\"\r\n [form]=\"form\"\r\n [(model)]=\"validation.code\"\r\n [items]=\"functions\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required></sd-select>\r\n }\r\n <mat-icon class=\"c-close-icon\" (click)=\"removaValidation(idx)\">delete</mat-icon>\r\n <!-- <sd-button\r\n \r\n prefixIcon=\"delete\"\r\n (click)=\"removaValidation(idx)\"\r\n color=\"error\"\r\n type=\"link\"></sd-button> -->\r\n </div>\r\n </div>\r\n }\r\n <sd-button title=\"Thêm xác thực\" [matMenuTriggerFor]=\"menu\" prefixIcon=\"add\" color=\"primary\" type=\"link\"></sd-button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button (click)=\"addValidation('expression')\" mat-menu-item type=\"button\">\r\n <!-- <mat-icon fontIcon=\"warning\"></mat-icon> -->\r\n <span>Biểu thức</span>\r\n </button>\r\n <button (click)=\"addValidation('function')\" mat-menu-item type=\"button\">\r\n <!-- <mat-icon fontIcon=\"error\"></mat-icon> -->\r\n <span>Phương thức sẵn có</span>\r\n </button>\r\n </mat-menu>\r\n <ng-container sdFooter>\r\n <sd-button type=\"fill\" title=\"Lưu\" (click)=\"updateValidations()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { CdkDragDrop, CdkDragMove, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, Input, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdBaseSecureComponent } from '@sd-angular/core/components/base';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\nimport { SdTextarea } from '@sd-angular/core/forms/textarea';\r\nimport { SdSafeHtmlPipe } from '@sd-angular/core/pipes';\r\nimport { SdConfirmService, SdNotifyService } from '@sd-angular/core/services';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { debounceTime, startWith, Subject, Subscription } from 'rxjs';\r\nimport {\r\n FormBuilderComponent,\r\n FormBuilderComponents,\r\n GenerateId,\r\n GenerateKey,\r\n SdFormGenericComponent,\r\n SdFormGenericGroup,\r\n SdFormGenericVariable,\r\n} from '../../models';\r\nimport { SdFormGenericValidation } from '../../models/form-generic-validation.model';\r\nimport { SdFormGeneric } from '../../models/form-generic.model';\r\nimport { SdFormRender } from '../form-render/form-render.component';\r\nimport {\r\n CheckboxAttribute,\r\n CheckboxControl,\r\n ChipCalendarAttribute,\r\n ChipCalendarControl,\r\n ChipStringAttribute,\r\n ChipStringControl,\r\n DatetimeAttribute,\r\n DatetimeControl,\r\n HtmlAttribute,\r\n HtmlControl,\r\n NumberAttribute,\r\n NumberControl,\r\n RadioAttribute,\r\n RadioControl,\r\n SelectAttribute,\r\n SelectControl,\r\n TableAttribute,\r\n TableControl,\r\n TextareaAttribute,\r\n TextareaControl,\r\n TextfieldAttribute,\r\n TextFieldControl,\r\n UploadAttribute,\r\n UploadControl,\r\n} from './components';\r\nimport { ConfigureValidationComponent } from './components/configure-validation/configure-validation.component';\r\nimport { BuilderService } from './services';\r\n\r\ninterface DragDropRowItem {\r\n items: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n rowIndex?: number;\r\n}\r\n\r\n@Component({\r\n selector: 'sd-form-builder',\r\n templateUrl: './form-builder.component.html',\r\n styleUrl: './form-builder.component.scss',\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n DragDropModule,\r\n // Core Pipes\r\n SdSafeHtmlPipe,\r\n // Controls\r\n TextFieldControl,\r\n TextfieldAttribute,\r\n TextareaControl,\r\n TextareaAttribute,\r\n ChipStringControl,\r\n ChipStringAttribute,\r\n ChipCalendarControl,\r\n ChipCalendarAttribute,\r\n NumberControl,\r\n NumberAttribute,\r\n SelectControl,\r\n SelectAttribute,\r\n DatetimeControl,\r\n DatetimeAttribute,\r\n RadioControl,\r\n RadioAttribute,\r\n CheckboxControl,\r\n CheckboxAttribute,\r\n HtmlControl,\r\n HtmlAttribute,\r\n UploadControl,\r\n UploadAttribute,\r\n TableControl,\r\n TableAttribute,\r\n SdModal,\r\n SdInput,\r\n SdTextarea,\r\n SdButton,\r\n SdFormRender,\r\n ConfigureValidationComponent,\r\n ],\r\n})\r\nexport class SdFormBuilder extends SdBaseSecureComponent {\r\n @ViewChild('popupViewJSON') popupViewJSON?: SdModal;\r\n @ViewChild('popupConfigureVariables') popupConfigureVariables?: SdModal;\r\n @ViewChild(ConfigureValidationComponent) configureValidation?: ConfigureValidationComponent;\r\n @ViewChild(SdFormRender) formRender?: SdFormRender;\r\n form = new FormGroup({});\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private notifyService: SdNotifyService,\r\n private confirmService: SdConfirmService,\r\n private builderService: BuilderService\r\n ) {\r\n super();\r\n }\r\n components: Required<SdFormGeneric>['components'] = [];\r\n variables: Required<SdFormGeneric>['variables'] = [];\r\n validations: Required<SdFormGeneric>['validations'] = [];\r\n // @Input('components') set _components(components: (SdFormGenericComponent | SdFormGenericGroup)[] | undefined | null) {\r\n // // Luôn clone components để tránh ảnh hưởng đến tham số truyền vào\r\n // if (Array.isArray(components)) {\r\n // this.components = JSON.parse(JSON.stringify(components));\r\n // } else {\r\n // this.components = [];\r\n // }\r\n // this.#componentsChanges.next();\r\n // }\r\n\r\n // Mỗi lần mở popup thì sử dụng clone variables vào clonedVariables, khi nào bấm ok thì mới gán ngược lại clonedVariables vào variables\r\n clonedVariables: SdFormGenericVariable[] = [];\r\n // @Input('variables') set _variables(variables: SdFormGenericVariable[] | undefined | null) {\r\n // // Luôn clone components để tránh ảnh hưởng đến tham số truyền vào\r\n // if (Array.isArray(variables)) {\r\n // this.variables = JSON.parse(JSON.stringify(variables));\r\n // } else {\r\n // this.variables = [];\r\n // }\r\n // this.#variablesChanges.next();\r\n // }\r\n\r\n @Input('formGeneric') set _formGeneric(formGeneric: SdFormGeneric) {\r\n // Luôn clone (JSONS stringfy) để tránh ảnh hưởng đến tham số truyền vào\r\n // Xử lý gán components\r\n if (Array.isArray(formGeneric?.components)) {\r\n this.components = JSON.parse(JSON.stringify(formGeneric?.components));\r\n } else {\r\n this.components = [];\r\n }\r\n this.#componentsChanges.next();\r\n // Xử lý gán variables\r\n if (Array.isArray(formGeneric?.variables)) {\r\n this.variables = JSON.parse(JSON.stringify(formGeneric?.variables));\r\n } else {\r\n this.variables = [];\r\n }\r\n this.#variablesChanges.next();\r\n // Xử lý gán validations\r\n if (Array.isArray(formGeneric?.validations)) {\r\n this.validations = JSON.parse(JSON.stringify(formGeneric?.validations));\r\n } else {\r\n this.validations = [];\r\n }\r\n this.#validationsChanges.next();\r\n }\r\n\r\n formBuilderComponents = FormBuilderComponents;\r\n selectedComponent?: SdFormGenericComponent | SdFormGenericGroup;\r\n expand = true;\r\n dragDropRows: DragDropRowItem[] = [];\r\n isDragging = false;\r\n targetItem?: DragDropRowItem = undefined;\r\n\r\n #componentsChanges = new Subject<void>();\r\n #variablesChanges = new Subject<void>();\r\n #validationsChanges = new Subject<void>();\r\n #subscription = new Subscription();\r\n isPreview = false;\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.#componentsChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\r\n // Khi component thay đổi thì sync lại\r\n this.#syncComponentsToRows();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#variablesChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\r\n // Khi component thay đổi thì sync lại\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#validationsChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\r\n // Khi component thay đổi thì sync lại\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n addComponent = (item: FormBuilderComponent, index?: number) => {\r\n const id = GenerateId();\r\n const key = GenerateKey();\r\n const formRenderComponent: SdFormGenericComponent = {\r\n id,\r\n key,\r\n type: item.type as any,\r\n label: item.type,\r\n layout: {\r\n columns: '12',\r\n },\r\n validate: {\r\n required: false,\r\n },\r\n disabled: false,\r\n properties: {},\r\n };\r\n if (index !== undefined) {\r\n this.components.splice(index, 0, formRenderComponent);\r\n } else {\r\n this.components.push(formRenderComponent);\r\n }\r\n\r\n this.#recountTabIndex();\r\n this.selectedComponent = this.components?.find(component => component.id === id);\r\n this.selectComponent(this.selectedComponent);\r\n this.ref.markForCheck();\r\n };\r\n\r\n removeComponent = (id: string) => {\r\n this.components = this.components.filter((t: { id: string }) => t.id !== id);\r\n this.#recountTabIndex();\r\n };\r\n\r\n selectComponent = (item?: SdFormGenericComponent | SdFormGenericGroup) => {\r\n this.selectedComponent = item;\r\n this.ref.markForCheck();\r\n };\r\n\r\n onClickedOutside = (e: any) => {\r\n const classList = (e.target as Element).classList;\r\n if (!classList.length || classList.contains('components') || classList.contains('cdk-drop-list')) {\r\n this.selectedComponent = undefined;\r\n }\r\n };\r\n\r\n clickFormContentEmpty = () => {\r\n if (!this.dragDropRows?.length) {\r\n this.selectedComponent = undefined;\r\n }\r\n };\r\n\r\n drop = (event: CdkDragDrop<any[]>) => {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n this.#syncRowsToComponents();\r\n // xử lý kéo chéo\r\n if (!event.isPointerOverContainer) {\r\n const dragItemId = event.item.element.nativeElement.id;\r\n if (dragItemId) {\r\n const dragItem = this.components.find((t: { id: string }) => t.id === dragItemId);\r\n this.xuLyKeoCheo(dragItem);\r\n }\r\n }\r\n } else {\r\n const drop = event.previousContainer.data[0];\r\n if ('icon' in drop) {\r\n // transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\r\n const droppedItem = event.previousContainer.data[event.previousIndex] as FormBuilderComponent;\r\n const rowIndex = event.currentIndex;\r\n const rowItem = this.dragDropRows?.find(t => t.rowIndex === rowIndex);\r\n if (rowItem) {\r\n this.addComponent(droppedItem, +(rowItem.items[0]?.layout?.row || 12) - 1);\r\n // this.addComponent(droppedItem, parseInt(rowItem.items[rowItem.items.length - 1].layout.row, 0));\r\n } else {\r\n this.addComponent(droppedItem);\r\n }\r\n } else {\r\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\r\n }\r\n }\r\n this.#recountTabIndex();\r\n };\r\n\r\n dragStartComponentItem = (event: any) => {\r\n this.isDragging = true;\r\n };\r\n\r\n dragEndComponentItem = (event: any) => {\r\n this.isDragging = false;\r\n };\r\n\r\n onMouseover = (event: MouseEvent, rowItem: DragDropRowItem) => {\r\n if (this.isDragging) {\r\n this.targetItem = rowItem;\r\n }\r\n };\r\n\r\n // Mouseover thì phải có Focus không thì thẻ sẽ báo lỗi\r\n onFocus = (event: FocusEvent) => {\r\n //console.log(event);\r\n };\r\n\r\n xuLyKeoCheo = (dragItem?: SdFormGenericComponent | SdFormGenericGroup) => {\r\n if (dragItem) {\r\n if (this.targetItem) {\r\n // kiểm tra target đã full column chưa?\r\n const totalColumnInRow = this.targetItem.items.map(t => +t.layout!.columns || 12).reduce((acc, curr) => acc + curr, 0);\r\n if (totalColumnInRow + +dragItem.layout!.columns <= 12) {\r\n // xóa vị trí cũ\r\n this.dragDropRows.forEach(t => {\r\n if (t.items.some((k: { id: any }) => k.id === dragItem.id)) {\r\n t.items = t.items.filter((k: { id: any }) => k.id !== dragItem.id) || [];\r\n }\r\n });\r\n // thêm vào vị trí mới\r\n this.targetItem.items.push(dragItem);\r\n this.#syncRowsToComponents();\r\n } else {\r\n this.notifyService.warning('Không thể di chuyển tới dòng này vì tổng kích thước vượt quá 12 cột');\r\n }\r\n }\r\n }\r\n this.targetItem = undefined;\r\n };\r\n\r\n noReturnPredicate = () => {\r\n return false;\r\n };\r\n\r\n #recountTabIndex = () => {\r\n // Tránh dùng map vì nó sẽ sinh ra reference mới\r\n this.components.forEach((item, index) => {\r\n if (item.layout) {\r\n item.layout!.row = `${index + 1}`;\r\n item.layout!.columns = item.layout?.columns || '12';\r\n } else {\r\n item.layout = {\r\n row: `${index + 1}`,\r\n columns: '12',\r\n };\r\n }\r\n });\r\n if (this.selectedComponent && this.selectedComponent?.layout?.row) {\r\n this.selectedComponent.layout.row = this.components.find(t => t.id === this.selectedComponent?.id)?.layout?.row;\r\n }\r\n this.#syncComponentsToRows();\r\n };\r\n\r\n // Hàm xử lý chuyển đổi components -> dragDropRows\r\n // Dựa vào columns của component để quyết định dragDropRows có bao nhiêu items trên row, đảm bảo columns tổng số items <= 12\r\n #syncComponentsToRows = () => {\r\n this.dragDropRows = [];\r\n for (const component of this.components) {\r\n // lấy dòng cuối cùng của dragDropList\r\n let lastRow: DragDropRowItem = { rowIndex: this.dragDropRows.length, items: [] };\r\n if (this.dragDropRows.length) {\r\n lastRow = this.dragDropRows[this.dragDropRows.length - 1];\r\n } else {\r\n this.dragDropRows.push(lastRow);\r\n }\r\n // tính tổng cột trên 1 dòng\r\n const columns = +component.layout!.columns || 12;\r\n const totalColumnInRow = lastRow.items.map(t => +t.layout!.columns || 12).reduce((acc: number, curr) => acc + curr, 0);\r\n if (+totalColumnInRow + columns <= 12) {\r\n lastRow.items.push(component);\r\n } else {\r\n const newRow = { rowIndex: this.dragDropRows.length, items: [component] };\r\n this.dragDropRows.push(newRow);\r\n }\r\n }\r\n };\r\n\r\n // Hàm xử lý chuyển đổi dragDropRows -> components\r\n // Vì khi kéo thả sẽ thay đổi vị trí, do đó cần sắp xếp lại components\r\n #syncRowsToComponents = () => {\r\n // rải data ma trận droplist => schema.components\r\n this.components = this.dragDropRows?.map(e => e.items)?.reduce((current, next) => [...current, ...next], []) || [];\r\n };\r\n\r\n changeSizeControl = async (\r\n event: CdkDragMove<SdFormGenericComponent | SdFormGenericGroup>,\r\n item: SdFormGenericComponent | SdFormGenericGroup,\r\n items: (SdFormGenericComponent | SdFormGenericGroup)[],\r\n currentIndex: number\r\n ) => {\r\n // const totalColumnInRow = items.map(k => k.layout.columns).reduce((acc, curr) => acc + parseInt(curr, 0), 0);\r\n const totalColumnBeforeItem = items\r\n .map(k => +k.layout!.columns || 12)\r\n .reduce((acc, curr, index) => {\r\n if (index < currentIndex) {\r\n acc = acc + curr;\r\n }\r\n return acc;\r\n }, 0);\r\n const rect = document.getElementById('frmComponent')?.getBoundingClientRect() as DOMRect;\r\n const left = rect.left;\r\n const right = rect.right - left;\r\n const mouse = event.pointerPosition.x - left!;\r\n const t = Math.round(12 / (100 / ((100 * mouse) / right))) - totalColumnBeforeItem;\r\n if (t > 12) {\r\n item.layout!.columns = '12';\r\n } else if (t < 2) {\r\n item.layout!.columns = '2';\r\n } else {\r\n item.layout!.columns = `${t}` as any;\r\n }\r\n\r\n // document.getElementById('test').innerHTML = `<pre>\r\n // left: ${left}\r\n // right: ${document.getElementById('frmComponent').getBoundingClientRect().right}\r\n // right-left: ${right}\r\n // mouse: ${event.pointerPosition.x}\r\n // mouse-left: ${mouse}\r\n // t: ${t}\r\n // columns: ${item.layout.columns}\r\n // </pre>`;\r\n };\r\n\r\n dragEndChangeSizeControl = (event: any) => {\r\n this.#recountTabIndex();\r\n };\r\n\r\n onChangeViewed = (component: SdFormGenericComponent) => {\r\n component.properties!.viewed = !component.properties!.viewed;\r\n // Emit khi có sự thay đổi để control và attribute lắng nghe và render lại\r\n this.builderService.componentEmitters.next(component);\r\n };\r\n\r\n onChangeHidden = (component: SdFormGenericComponent | SdFormGenericGroup) => {\r\n component.properties!.hidden = !component.properties!.hidden;\r\n // Emit khi có sự thay đổi để control và attribute lắng nghe và render lại\r\n this.builderService.componentEmitters.next(component);\r\n };\r\n\r\n // Duplicate component nhưng sẽ clear id và key để tránh trùng lặp\r\n onDuplicate = (component: SdFormGenericComponent | SdFormGenericGroup) => {\r\n const clonedComponent = JSON.parse(JSON.stringify(component));\r\n clonedComponent.id = GenerateId();\r\n clonedComponent.key = GenerateKey();\r\n this.components.push(clonedComponent);\r\n this.#recountTabIndex();\r\n this.selectedComponent = this.components?.find(t => t.id === clonedComponent.id);\r\n this.selectComponent(this.selectedComponent);\r\n this.ref.markForCheck();\r\n };\r\n\r\n // Copy form hiện tại\r\n jsonString?: string;\r\n viewJSON = () => {\r\n this.jsonString = JSON.stringify({ components: this.components });\r\n this.popupViewJSON?.open();\r\n this.ref.markForCheck();\r\n };\r\n\r\n updateJSON = () => {\r\n try {\r\n if (this.jsonString) {\r\n const json: Record<string, any> = JSON.parse(this.jsonString);\r\n if ('components' in json) {\r\n this.components = json['components'];\r\n this.popupViewJSON?.close();\r\n this.#syncComponentsToRows();\r\n this.ref.markForCheck();\r\n } else {\r\n throw new Error('Invalid JSON');\r\n }\r\n }\r\n } catch (err: any) {\r\n console.error(err);\r\n this.notifyService.warning(err?.message);\r\n }\r\n };\r\n\r\n configureVariables = () => {\r\n this.clonedVariables = JSON.parse(JSON.stringify(this.variables || []));\r\n this.popupConfigureVariables?.open();\r\n this.ref.markForCheck();\r\n };\r\n\r\n addVariables = () => {\r\n this.clonedVariables.push({\r\n id: SdUtilities.randomId(),\r\n key: '',\r\n label: '',\r\n });\r\n };\r\n\r\n removeVariables = (id: string) => {\r\n const idx = this.clonedVariables.findIndex(e => e.id === id);\r\n this.clonedVariables.splice(idx, 1);\r\n };\r\n\r\n updateVariables = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n this.ref.markForCheck();\r\n return;\r\n }\r\n this.variables = this.clonedVariables;\r\n this.popupConfigureVariables?.close();\r\n this.ref.markForCheck();\r\n };\r\n\r\n // Chìa ra cho bên ngoài lấy components hiện tại\r\n getComponents = (): (SdFormGenericComponent | SdFormGenericGroup)[] => {\r\n this.#syncRowsToComponents();\r\n return JSON.parse(JSON.stringify(this.components || []));\r\n };\r\n\r\n // Chìa ra cho bên ngoài lấy variables hiện tại\r\n getVariables = (): SdFormGenericVariable[] => {\r\n return JSON.parse(JSON.stringify(this.variables || []));\r\n };\r\n\r\n #getValidations = (): SdFormGenericValidation[] => {\r\n return JSON.parse(JSON.stringify(this.validations || []));\r\n };\r\n\r\n getForm = (): SdFormGeneric => {\r\n return {\r\n components: this.getComponents(),\r\n variables: this.getVariables(),\r\n validations: this.#getValidations(),\r\n };\r\n };\r\n\r\n openConfigureValidation = () => {\r\n this.configureValidation?.open(this.getForm());\r\n };\r\n\r\n onUpdateValidations = (validations: SdFormGenericValidation[]) => {\r\n this.validations = validations;\r\n };\r\n\r\n onValidate = async () => {\r\n const errorMessages = await this.formRender?.getValidationMessages('error');\r\n if (errorMessages?.length) {\r\n this.notifyService.error(errorMessages);\r\n return;\r\n }\r\n const warningMessages = await this.formRender?.getValidationMessages('warning');\r\n if (warningMessages?.length) {\r\n this.confirmService.confirm(warningMessages.join(', ')).then(() => {\r\n this.notifyService.success('Submit success');\r\n });\r\n } else {\r\n this.notifyService.success('Submit success');\r\n }\r\n };\r\n}\r\n","<div class=\"d-flex form-editor\">\r\n <div class=\"d-flex flex-column form-menu\">\r\n <div class=\"c-header\">Components</div>\r\n <div class=\"component-container\" style=\"flex: 1\">\r\n <div class=\"form-editor-group\" cdkDropList [cdkDropListData]=\"formBuilderComponents\" [cdkDropListEnterPredicate]=\"noReturnPredicate\">\r\n @for (formBuilderComponent of formBuilderComponents; track formBuilderComponent.type) {\r\n <div cdkDrag class=\"form-item\" (click)=\"addComponent(formBuilderComponent)\" aria-hidden=\"true\">\r\n <div class=\"c-form-item\">\r\n <span [innerHtml]=\"formBuilderComponent.icon | sdSafeHtml\"></span>\r\n <div class=\"title\">\r\n {{ formBuilderComponent.name }}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex flex-column form-content\">\r\n <div class=\"c-header d-flex align-items-center justify-content-between\">\r\n <div>Bố cục</div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px\">\r\n <mat-icon matTooltip=\"Xem JSON\" fontIcon=\"code\" (click)=\"viewJSON()\"></mat-icon>\r\n <mat-icon matTooltip=\"Cấu hình biến\" fontIcon=\"scatter_plot\" (click)=\"configureVariables()\"></mat-icon>\r\n <mat-icon matTooltip=\"Cấu hình xác thực cảnh báo/lỗi\" fontIcon=\"error\" (click)=\"openConfigureValidation()\"></mat-icon>\r\n <mat-icon\r\n [matTooltip]=\"isPreview ? 'Trở về thiết kế' : 'Xem thử'\"\r\n [fontIcon]=\"isPreview ? 'stop_circle' : 'play_circle'\"\r\n (click)=\"isPreview = !isPreview\"></mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"p-12 components\" style=\"flex: 1; overflow-y: auto\" id=\"frmComponent\">\r\n @if (isPreview) {\r\n <sd-form-render [configuration]=\"{ components: this.components, validations: this.validations }\"></sd-form-render>\r\n <sd-button title=\"Validate\" (click)=\"onValidate()\"></sd-button>\r\n } @else {\r\n <div\r\n cdkDropList\r\n cdkDropListOrientation=\"vertical\"\r\n [cdkDropListData]=\"dragDropRows\"\r\n class=\"listY\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n (click)=\"clickFormContentEmpty()\"\r\n aria-hidden=\"true\">\r\n @for (row of dragDropRows; track row.rowIndex) {\r\n <div\r\n cdkDrag\r\n (mouseover)=\"onMouseover($event, row)\"\r\n (focus)=\"onFocus($event)\"\r\n id=\"row_{{ row.rowIndex }}\"\r\n class=\"row-item\"\r\n aria-hidden=\"true\">\r\n <div class=\"btn-drag-row-item\"><mat-icon matTooltip=\"Kéo lên / xuống\">drag_indicator</mat-icon></div>\r\n <div\r\n class=\"c-row-item\"\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"row.items\"\r\n (cdkDropListDropped)=\"drop($event)\">\r\n @for (item of row.items; track item.id; let i = $index) {\r\n <div\r\n cdkDrag\r\n [id]=\"item.id\"\r\n class=\"component-item column-{{ item.layout?.columns || 12 }}\"\r\n [class.active]=\"item.id === selectedComponent?.id\"\r\n (click)=\"selectComponent(item)\"\r\n (clickOutside)=\"onClickedOutside($event)\"\r\n (cdkDragStarted)=\"dragStartComponentItem($event)\"\r\n (cdkDragEnded)=\"dragEndComponentItem($event)\"\r\n aria-hidden=\"true\">\r\n <div class=\"c-component-item\" [class.c-hidden]=\"item.properties?.hidden\">\r\n <div class=\"c-actions\">\r\n @if (item.type !== 'group') {\r\n <mat-icon\r\n [matTooltip]=\"item.properties?.viewed ? 'Bỏ chỉ xem' : 'Chỉ xem'\"\r\n (click)=\"onChangeViewed(item)\"\r\n fontSet=\"material-icons-outlined\"\r\n style=\"font-size: 16px; cursor: pointer\"\r\n [class.text-warning]=\"item.properties?.viewed\">\r\n edit_off\r\n </mat-icon>\r\n }\r\n <mat-icon\r\n matTooltip=\"Nhân bản\"\r\n (click)=\"onDuplicate(item)\"\r\n fontSet=\"material-icons-outlined\"\r\n style=\"font-size: 16px; cursor: pointer\">\r\n content_copy\r\n </mat-icon>\r\n <mat-icon\r\n [matTooltip]=\"item.properties?.hidden ? 'Hiện' : 'Ẩn'\"\r\n (click)=\"onChangeHidden(item)\"\r\n fontSet=\"material-icons-outlined\"\r\n style=\"font-size: 16px; cursor: pointer\"\r\n [class.text-warning]=\"item.properties?.hidden\">\r\n visibility_off\r\n </mat-icon>\r\n <mat-icon\r\n matTooltip=\"Xóa\"\r\n (click)=\"removeComponent(item.id)\"\r\n fontSet=\"material-icons-outlined\"\r\n style=\"font-size: 16px; cursor: pointer\"\r\n class=\"text-error\">\r\n delete\r\n </mat-icon>\r\n </div>\r\n @if (item.type === 'textfield') {\r\n <textfield-control [component]=\"item\"></textfield-control>\r\n } @else if (item.type === 'textarea') {\r\n <textarea-control [component]=\"item\"></textarea-control>\r\n } @else if (item.type === 'chip-string') {\r\n <chip-string-control [component]=\"item\"></chip-string-control>\r\n } @else if (item.type === 'chip-calendar') {\r\n <chip-calendar-control [component]=\"item\"></chip-calendar-control>\r\n } @else if (item.type === 'number') {\r\n <number-control [component]=\"item\"></number-control>\r\n } @else if (item.type === 'datetime') {\r\n <datetime-control [component]=\"item\"></datetime-control>\r\n } @else if (item.type === 'select') {\r\n <select-control [component]=\"item\"></select-control>\r\n } @else if (item.type === 'radio') {\r\n <radio-control [component]=\"item\"></radio-control>\r\n } @else if (item.type === 'checkbox') {\r\n <checkbox-control [component]=\"item\"></checkbox-control>\r\n } @else if (item.type === 'html') {\r\n <html-control [component]=\"item\" #html></html-control>\r\n } @else if (item.type === 'upload') {\r\n <upload-control [component]=\"item\"></upload-control>\r\n } @else if (item.type === 'table') {\r\n <table-control [component]=\"item\"></table-control>\r\n }\r\n <div class=\"c-item-backdrop\"></div>\r\n </div>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\">\r\n <div\r\n cdkDrag\r\n (cdkDragMoved)=\"changeSizeControl($event, item, row.items, i)\"\r\n (cdkDragEnded)=\"dragEndChangeSizeControl($event)\"\r\n class=\"c-bar-resize-right\"\r\n matTooltip=\"Co dãn\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"d-flex flex-column form-attributes\">\r\n <div class=\"c-header\">Thuộc tính</div>\r\n @if (selectedComponent) {\r\n <div class=\"attributes\" style=\"flex: 1\" aria-hidden=\"true\">\r\n @if (selectedComponent.type === 'textfield') {\r\n <textfield-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></textfield-attribute>\r\n } @else if (selectedComponent.type === 'textarea') {\r\n <textarea-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></textarea-attribute>\r\n } @else if (selectedComponent.type === 'chip-string') {\r\n <chip-string-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></chip-string-attribute>\r\n } @else if (selectedComponent.type === 'chip-calendar') {\r\n <chip-calendar-attribute\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [component]=\"selectedComponent\"></chip-calendar-attribute>\r\n } @else if (selectedComponent.type === 'number') {\r\n <number-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></number-attribute>\r\n } @else if (selectedComponent.type === 'datetime') {\r\n <datetime-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></datetime-attribute>\r\n } @else if (selectedComponent.type === 'select') {\r\n <select-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></select-attribute>\r\n } @else if (selectedComponent.type === 'radio') {\r\n <radio-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></radio-attribute>\r\n } @else if (selectedComponent.type === 'checkbox') {\r\n <checkbox-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></checkbox-attribute>\r\n } @else if (selectedComponent.type === 'html') {\r\n <html-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></html-attribute>\r\n } @else if (selectedComponent.type === 'upload') {\r\n <upload-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></upload-attribute>\r\n } @else if (selectedComponent.type === 'table') {\r\n <table-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></table-attribute>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<sd-modal title=\"JSON\" view=\"dialog\" width=\"80%\" #popupViewJSON>\r\n <sd-textarea [(model)]=\"jsonString\"></sd-textarea>\r\n <ng-container sdFooter>\r\n <sd-button type=\"fill\" title=\"Lưu\" (click)=\"updateJSON()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n<sd-modal title=\"Cấu hình biến\" view=\"dialog\" width=\"800px\" #popupConfigureVariables>\r\n @for (variable of clonedVariables; track variable.id) {\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px\">\r\n <sd-input [form]=\"form\" label=\"Trường dữ liệu\" [(model)]=\"variable.key\" required></sd-input>\r\n <sd-input [form]=\"form\" label=\"Nhãn hiển thị\" [(model)]=\"variable.label\" required></sd-input>\r\n <sd-button prefixIcon=\"delete\" (click)=\"removeVariables(variable.id)\" color=\"error\"></sd-button>\r\n </div>\r\n }\r\n <a href=\"javascript:;\" (click)=\"addVariables()\">Thêm biến</a>\r\n <ng-container sdFooter>\r\n <sd-button type=\"fill\" title=\"Lưu\" (click)=\"updateVariables()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n<configure-validation (accept)=\"onUpdateValidations($event)\"></configure-validation>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdBaseSecureComponent } from '@sd-angular/core/components/base';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\nimport { SdInputNumber } from '@sd-angular/core/forms/input-number';\r\nimport { SdSelect } from '@sd-angular/core/forms/select';\r\nimport { ArrayUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport {\r\n Attribute,\r\n AttributeOperators,\r\n GetAttributes,\r\n SdFormGenericComponent,\r\n SdFormGenericExpression,\r\n SdFormGenericGroup,\r\n} from '../../models';\r\nimport { ExpressionFeelPipe } from '../../pipes';\r\nimport { FormGenericService } from '../../services';\r\n\r\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\r\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\r\n@Component({\r\n selector: 'sd-feel-expression',\r\n templateUrl: './sd-feel-expression.component.html',\r\n styleUrl: './sd-feel-expression.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdInput, SdInputNumber, SdSelect, SdAutocomplete, SdButton, SdSelect, SdModal],\r\n})\r\nexport class SdFeelExpression extends SdBaseSecureComponent {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n form = new FormGroup({});\r\n attributeOperators = AttributeOperators;\r\n attributes: Attribute[] = [];\r\n attribute: Record<string, Attribute> = {};\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n // ValuesKey\r\n expression?: SdFormGenericExpression;\r\n @Input({ alias: 'expression', required: true }) set _expression(expression: SdFormGenericExpression | undefined) {\r\n if (this.expression !== expression) {\r\n this.expression = expression;\r\n }\r\n this.expression = this.expression || {\r\n key: `${new Date().getTime().toString(36)}`,\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n };\r\n }\r\n @Output() expressionChange = new EventEmitter<SdFormGenericExpression>();\r\n\r\n //\r\n model?: string;\r\n @Input({ alias: 'model', required: true }) set _model(model: string | undefined) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<string>();\r\n\r\n @Output() sdChange = new EventEmitter<{ model?: string; expression?: SdFormGenericExpression }>();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private expressionFeelPipe: ExpressionFeelPipe,\r\n private formGenericService: FormGenericService\r\n ) {\r\n super()\r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n edit = async () => {\r\n this.attributes = await this.#getAttributes(this.components);\r\n this.attribute = ArrayUtilities.toObject('value', this.attributes);\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n addCondition = (conditions: SdFormGenericExpression['conditions']) => {\r\n conditions.push({\r\n key: `${new Date().getTime().toString(36)}`,\r\n type: 'condition',\r\n field: undefined,\r\n operator: 'EQUAL',\r\n value: undefined,\r\n dayInfo: {}\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n addCombinator = (conditions: SdFormGenericExpression['conditions']) => {\r\n conditions.push({\r\n key: `${new Date().getTime().toString(36)}`,\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n remove = (conditions: SdFormGenericExpression['conditions'], idx: number) => {\r\n conditions.splice(idx, 1);\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n if (this.expression) {\r\n this.model = this.expressionFeelPipe.transform(this.expression!);\r\n this.expressionChange.emit(this.expression);\r\n } else {\r\n this.model = '';\r\n }\r\n this.modelChange.emit(this.model);\r\n this.sdChange.emit({\r\n model: this.model,\r\n expression: this.expression,\r\n });\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n\r\n // Từ components map thành các attributes\r\n #getAttributes = async (components: (SdFormGenericComponent | SdFormGenericGroup)[]): Promise<Attribute[]> => {\r\n const attributes: Attribute[] = [];\r\n if (components.length) {\r\n for (const component of components) {\r\n if (component.type === 'group') {\r\n attributes.push(...GetAttributes(component.components));\r\n } else if (component.type === 'textfield' || component.type === 'textarea') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n } else if (component.type === 'number') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'number',\r\n });\r\n } else if (component.type === 'checkbox') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'boolean',\r\n displayOnTrue: 'YES',\r\n displayOnFalse: 'NO',\r\n });\r\n } else if (component.type === 'radio' || component.type === 'select') {\r\n if (component.values?.length) {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'values',\r\n values: component.values.map(e => ({\r\n value: e.value,\r\n display: e.label,\r\n })),\r\n });\r\n } else {\r\n const values = await this.formGenericService.selection.items(component.valuesKey, {\r\n entity: {},\r\n component,\r\n });\r\n // Nếu là mảng thì push vào\r\n if (Array.isArray(values)) {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'values',\r\n values,\r\n });\r\n } else {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return attributes;\r\n };\r\n}\r\n","<a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{model || '--'}}</a>\r\n@if (expression) {\r\n<sd-modal title=\"Thiết lập biểu thức\">\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button prefixIcon=\"calculate\" class=\"mr-4\" title=\"Nhóm điều kiện\" color=\"primary\" (click)=\"addCombinator(expression.conditions)\"></sd-button>\r\n <sd-button prefixIcon=\"add\" title=\"Điều kiện\" color=\"primary\" (click)=\"addCondition(expression.conditions)\" type=\"fill\"></sd-button>\r\n </div>\r\n <!-- Cấp 1 -->\r\n @for (conditionLv1 of expression.conditions; track conditionLv1.key; let idxLv1 = $index) {\r\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px;\">\r\n <div class=\"c-condition\">\r\n <!-- Dòng 1 chỉ hiện WHERE -->\r\n @if (idxLv1 === 0) {\r\n <div class=\"c-where\">WHERE</div>\r\n }\r\n <!-- Dòng 2 hiển thị combinator -->\r\n @if (idxLv1 === 1) {\r\n <div class=\"c-select\">\r\n <sd-select\r\n size=\"sm\"\r\n [(model)]=\"expression.combinator\"\r\n [items]=\"[\r\n { value: '&&', display: 'AND' },\r\n { value: '||', display: 'OR' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError=\"\"></sd-select>\r\n </div>\r\n }\r\n </div>\r\n @if (conditionLv1.type === 'condition') {\r\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"width: 200px;\" [(model)]=\"conditionLv1.field\" [items]=\"attributes\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\r\n @let fieldAttribute = attribute[conditionLv1.field!];\r\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>\r\n @if(!!fieldAttribute?.type && conditionLv1.operator && conditionLv1.operator !== 'NULL' && conditionLv1.operator !== 'NOT_NULL') {\r\n @if(fieldAttribute.type === 'string') {\r\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input>\r\n } @else if(fieldAttribute.type === 'number') {\r\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input-number>\r\n } @else if(fieldAttribute.type === 'boolean') {\r\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>\r\n }@else if(fieldAttribute.type === 'values') {\r\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" [items]=\"fieldAttribute.values\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\r\n }\r\n }\r\n <sd-button\r\n class=\"ml-auto\"\r\n prefixIcon=\"delete\"\r\n tooltip=\"Xóa\"\r\n (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\r\n \r\n } @else if (conditionLv1.type === 'combinator') {\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button\r\n class=\"mr-4\"\r\n prefixIcon=\"delete\"\r\n tooltip=\"Xóa\"\r\n (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\r\n <sd-button prefixIcon=\"add\" title=\"Điều kiện\" size=\"sm\" color=\"primary\" (click)=\"addCondition(conditionLv1.conditions)\" type=\"fill\"></sd-button>\r\n </div>\r\n <!-- Cấp 2 -->\r\n @for (conditionLv2 of conditionLv1.conditions; track conditionLv2.key; let idxLv2 = $index) {\r\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px;\">\r\n <div class=\"c-condition\">\r\n <!-- Dòng 1 chỉ hiện WHERE -->\r\n @if (idxLv2 === 0) {\r\n <div class=\"c-where\">WHERE</div>\r\n }\r\n <!-- Dòng 2 hiển thị combinator -->\r\n @if (idxLv2 === 1) {\r\n <div class=\"c-select\">\r\n <sd-select\r\n size=\"sm\"\r\n [(model)]=\"conditionLv1.combinator\"\r\n [items]=\"[\r\n { value: '&&', display: 'AND' },\r\n { value: '||', display: 'OR' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError=\"\"></sd-select>\r\n </div>\r\n }\r\n </div>\r\n @if (conditionLv2.type === 'condition') {\r\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"width: 200px;\" [(model)]=\"conditionLv2.field\" [items]=\"attributes\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\r\n @let fieldAttribute = attribute[conditionLv2.field!];\r\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>\r\n @if(!!fieldAttribute?.type && conditionLv2.operator && conditionLv2.operator !== 'NULL' && conditionLv2.operator !== 'NOT_NULL') {\r\n @if(fieldAttribute.type === 'string') {\r\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" required hideInlineError></sd-input>\r\n } @else if(fieldAttribute.type === 'number') {\r\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" required hideInlineError></sd-input-number>\r\n } @else if(fieldAttribute.type === 'boolean') {\r\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>\r\n }@else if(fieldAttribute.type === 'values') {\r\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" [items]=\"fieldAttribute.values\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\r\n }\r\n }\r\n <sd-button\r\n class=\"ml-auto\"\r\n prefixIcon=\"delete\"\r\n tooltip=\"Xóa\"\r\n (click)=\"remove(conditionLv1.conditions, idxLv1)\"></sd-button>\r\n \r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ComponentViewedPipe","DateUtilities","i2.FormGenericService","SdUtilities","i1","i2","StringUtilities","i3","i1.FormGenericService","SdInputNumber","startWith","debounceTime","SdInput","SdSelect","SdAutocomplete","i1.BuilderService","BuildQueries","i2.BuilderService","i1.ExpressionFeelPipe"],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-components-workflow.mjs","sources":["../../../projects/sd-angular/components/workflow/src/configurations/workflow.configuration.ts","../../../projects/sd-angular/components/workflow/src/models/form-generic-component.model.ts","../../../projects/sd-angular/components/workflow/src/models/form-generic-expression.model.ts","../../../projects/sd-angular/components/workflow/src/services/form-generic.service.ts","../../../projects/sd-angular/components/workflow/src/services/form-render.service.ts","../../../projects/sd-angular/components/workflow/src/pipes/component-viewed.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/when-expression.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/expression-query.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/expression-view.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/expression-feel.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/html.pipe.ts","../../../projects/sd-angular/components/workflow/src/pipes/hyperlink.pipe.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/textfield/textfield.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/textfield/textfield.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/textarea/textarea.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/textarea/textarea.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/chip-string/chip-string.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/chip-string/chip-string.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/number/number.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/number/number.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/datetime/datetime.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/datetime/datetime.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/select/select.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/select/select.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/radio/radio.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/radio/radio.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/upload/upload.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/upload/upload.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/table/table.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/table/table.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/html/html.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/components/html/html.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/item.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/item/item.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/components/variable/variable.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/components/variable/variable.component.html","../../../projects/sd-angular/components/workflow/src/components/form-render/form-render.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-render/form-render.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/expression-builder/expression-builder.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/expression-builder/expression-builder.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-expression/attribute-expression.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-expression/attribute-expression.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-input/attribute-input.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-input/attribute-input.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-switch/attribute-switch.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-switch/attribute-switch.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-template/attribute-template.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-template/attribute-template.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/services/builder.service.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textfield/control/textfield-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textfield/control/textfield-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textarea/control/textarea-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/textarea/control/textarea-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-string/control/chip-string-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-string/control/chip-string-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/number/attribute/number-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/number/attribute/number-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/number/control/number-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/number/control/number-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/datetime/control/datetime-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/datetime/control/datetime-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-select/attribute-select.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-select/attribute-select.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/attribute-selection.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-selection/attribute-selection.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/select/attribute/select-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/select/attribute/select-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/select/control/select-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/select/control/select-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/radio/control/radio-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/radio/control/radio-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/radio/attribute/radio-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/radio/attribute/radio-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/checkbox/control/checkbox-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/checkbox/control/checkbox-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/attribute/html-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/attribute/html-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/control/html-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/html/control/html-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/upload/attribute/upload-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/upload/attribute/upload-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/upload/control/upload-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/upload/control/upload-control.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-table/attribute-table.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/attribute-table/attribute-table.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/table/attribute/table-attribute.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/table/attribute/table-attribute.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/table/control/table-control.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/table/control/table-control.component.html","../../../projects/sd-angular/components/workflow/src/models/form-generic-validation.model.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/configure-validation/configure-validation.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/components/configure-validation/configure-validation.component.html","../../../projects/sd-angular/components/workflow/src/components/form-builder/form-builder.component.ts","../../../projects/sd-angular/components/workflow/src/components/form-builder/form-builder.component.html","../../../projects/sd-angular/components/workflow/src/components/sd-feel-expression/sd-feel-expression.component.ts","../../../projects/sd-angular/components/workflow/src/components/sd-feel-expression/sd-feel-expression.component.html","../../../projects/sd-angular/components/workflow/sd-angular-core-components-workflow.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { IWorkflowConfigurationForm } from './form.configuration';\r\n\r\nexport interface ISdWorkflowConfiguration {\r\n form?: IWorkflowConfigurationForm;\r\n}\r\n\r\nexport const SD_WORKFLOW_CONFIGURATION = new InjectionToken<ISdWorkflowConfiguration>('sd.workflow.configuration');\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// Định nghĩa các Components của Form Render\r\nimport { SdTableColumn, SdTableOption } from '@sd-angular/core/components/table';\r\nimport { SdUploadFile } from '@sd-angular/core/components/upload-file';\r\nimport { SdColor } from '@sd-angular/core/utilities';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { SdPatternType } from '@sd-angular/core/utilities/models';\r\nimport { SdFormGenericSelectionStaticItem } from './form-generic-definition-selection.model';\r\nimport { SdFormGenericExpression } from './form-generic-expression.model';\r\nimport { SdFormGeneric } from './form-generic.model';\r\n\r\nexport interface SdFormRenderConfiguration {\r\n onLoaded?: () => void;\r\n components: SdFormGeneric['components'];\r\n validations?: SdFormGeneric['validations'];\r\n variables?: SdFormGenericVariable[];\r\n beforeSubmit?: (entity: Record<string, any>) => Promise<Record<string, any>>;\r\n}\r\n\r\nexport interface SdFormGenericLayout {\r\n row?: string;\r\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;\r\n mobileColumns?:\r\n | '1'\r\n | '2'\r\n | '3'\r\n | '4'\r\n | '5'\r\n | '6'\r\n | '7'\r\n | '8'\r\n | '9'\r\n | '10'\r\n | '11'\r\n | '12'\r\n | 1\r\n | 2\r\n | 3\r\n | 4\r\n | 5\r\n | 6\r\n | 7\r\n | 8\r\n | 9\r\n | 10\r\n | 11\r\n | 12;\r\n}\r\n\r\nexport const GenerateId = () => {\r\n return SdUtilities.randomId('id');\r\n};\r\n\r\nexport const GenerateKey = () => {\r\n return SdUtilities.randomId('key');\r\n};\r\n\r\nexport const SdFormatComponent = (component: SdFormGenericComponent | SdFormGenericGroup) => {\r\n if (component) {\r\n if (!component.id) {\r\n component.id = GenerateId();\r\n }\r\n // Html và Group không có key và validate\r\n if (component.type !== 'group') {\r\n if (!component.key) {\r\n component.key = GenerateKey();\r\n }\r\n if (!component.validate) {\r\n component.validate = {};\r\n }\r\n }\r\n if (!component.layout) {\r\n component.layout = {\r\n columns: '12',\r\n };\r\n }\r\n\r\n if (!component.properties) {\r\n component.properties = {};\r\n }\r\n\r\n if (component.type === 'datetime') {\r\n // Nếu là datetime thì gán mặc định subtype là date\r\n component.subtype = component.subtype || 'date';\r\n } else if (component.type === 'table') {\r\n // Nếu là table thì lấy columns mẫu\r\n if (!component.columns?.length) {\r\n component.columns = [\r\n {\r\n key: 'key_1',\r\n label: 'Cột 1',\r\n type: 'string',\r\n },\r\n {\r\n key: 'key_2',\r\n label: 'Cột 2',\r\n type: 'string',\r\n },\r\n {\r\n key: 'key_3',\r\n label: 'Cột 3',\r\n type: 'string',\r\n },\r\n ];\r\n }\r\n } else if (component.type === 'radio') {\r\n // Nếu là radio thì lấy values mẫu\r\n if (!component.values?.length) {\r\n component.values = [\r\n {\r\n value: 'value_1',\r\n label: 'Label 1',\r\n },\r\n {\r\n value: 'value_2',\r\n label: 'Label 2',\r\n },\r\n ];\r\n }\r\n // Mặc định trải ngang các lựa chọn\r\n component.properties.direction = component.properties.direction || 'row';\r\n } else if (component.type === 'upload') {\r\n component.properties!.type = component.properties!.type || 'file';\r\n component.properties!.source = component.properties!.source || 'ALL';\r\n }\r\n }\r\n};\r\n\r\nexport interface SdFormGenericVariable {\r\n id: string;\r\n key: string;\r\n label: string;\r\n}\r\n\r\nexport type SdFormGenericComponent =\r\n | SdFormGenericTextfield\r\n | SdFormGenericChipString\r\n | SdFormGenericChipCalendar\r\n | SdFormGenericTextarea\r\n | SdFormGenericNumber\r\n | SdFormGenericCheckbox\r\n | SdFormGenericDatetime\r\n | SdFormGenericValues\r\n | SdFormGenericUpload\r\n | SdFormGenericTable\r\n | SdFormGenericHtml;\r\n\r\nexport type SdFormGenericValues = SdFormGenericRadio | SdFormGenericSelect | SdFormGenericChecklist;\r\nexport interface SdFormGenericComponentBase {\r\n template?: string;\r\n id: string;\r\n key: string;\r\n label: string;\r\n helperText?: string;\r\n layout?: SdFormGenericLayout;\r\n validate?: {\r\n required?: boolean;\r\n };\r\n disabled?: boolean;\r\n properties?: {\r\n viewed?: boolean; // true nếu muốn hiển thị dạng view (view khác với disable)\r\n hyperlink?: string; // Hyperlink khi ở trạng thái viewed\r\n hidden?: boolean;\r\n hiddenWhenExpression?: SdFormGenericExpression;\r\n visibleWhenExpression?: SdFormGenericExpression;\r\n disabledWhenExpression?: SdFormGenericExpression;\r\n requiredWhenExpression?: SdFormGenericExpression;\r\n onChange?: {\r\n // Thực tế khi sử dụng sẽ có mong muốn trigger sự kiện change sẽ làm gì đó\r\n // Nếu muốn setValues thì cú pháp sẽ là \"key\": \"${otherKey}\" hoặc \"key\": true, \"key\": \"value\"\r\n setValues?: Record<string, any>;\r\n };\r\n } & Record<string, any>;\r\n}\r\nexport interface SdFormGenericTextfield extends SdFormGenericComponentBase {\r\n type: 'textfield';\r\n defaultValue?: string;\r\n validate?: {\r\n maxlength?: number;\r\n minlength?: number;\r\n pattern?: SdPatternType | string; // Regex\r\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\n\r\nexport interface SdFormGenericChipString extends SdFormGenericComponentBase {\r\n type: 'chip-string';\r\n defaultValue?: string[];\r\n validate?: {\r\n maxlength?: number;\r\n minlength?: number;\r\n pattern?: SdPatternType | string; // Regex\r\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\r\n maxOfItems?: number; // Số lượng item tối đa\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\nexport interface SdFormGenericChipCalendar extends SdFormGenericComponentBase {\r\n type: 'chip-calendar';\r\n defaultValue?: string[];\r\n validate?: {\r\n maxlength?: number;\r\n minlength?: number;\r\n pattern?: SdPatternType | string; // Regex\r\n patternErrorMessage?: string; // Message lỗi khi invalid pattern\r\n maxOfItems?: number; // Số lượng item tối đa\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\nexport interface SdFormGenericTextarea extends SdFormGenericComponentBase {\r\n type: 'textarea';\r\n defaultValue?: string;\r\n validate?: {\r\n maxlength?: number;\r\n minlength?: number;\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\n\r\nexport interface SdFormGenericNumber extends SdFormGenericComponentBase {\r\n type: 'number';\r\n defaultValue?: number;\r\n validate?: {\r\n min?: number;\r\n max?: number;\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\n\r\nexport interface SdFormGenericCheckbox extends SdFormGenericComponentBase {\r\n type: 'checkbox';\r\n defaultValue?: boolean;\r\n}\r\n\r\nexport interface SdFormGenericDatetime extends SdFormGenericComponentBase {\r\n type: 'datetime';\r\n subtype: 'date' | 'datetime';\r\n defaultValue?: string;\r\n validate?: {\r\n min?: 'TODAY' | string;\r\n max?: 'TODAY' | string;\r\n } & SdFormGenericComponentBase['validate'];\r\n}\r\nexport interface SdFormGenericRadio extends SdFormGenericComponentBase {\r\n type: 'radio';\r\n values?: SdFormGenericSelectionStaticItem[];\r\n valuesKey?: string; // Mapping từ form-render-values\r\n defaultValue?: string;\r\n properties?: {\r\n direction?: 'row' | 'column';\r\n } & SdFormGenericComponentBase['properties'];\r\n}\r\nexport interface SdFormGenericSelect extends SdFormGenericComponentBase {\r\n type: 'select';\r\n values?: SdFormGenericSelectionStaticItem[];\r\n valuesKey?: string; // Mapping từ form-render-values\r\n defaultValue?: string | string[];\r\n properties?: {\r\n query?: Record<string, any>;\r\n multiple?: boolean;\r\n setVariables?: Record<string, string>; // Chỉ đối với dữ liệu từ API\r\n } & SdFormGenericComponentBase['properties'];\r\n}\r\nexport interface SdFormGenericChecklist extends SdFormGenericComponentBase {\r\n type: 'checklist';\r\n values?: SdFormGenericSelectionStaticItem[];\r\n valuesKey?: string; // Mapping từ form-render-values\r\n defaultValue?: string[];\r\n properties?: {\r\n query?: Record<string, any>;\r\n } & SdFormGenericComponentBase['properties'];\r\n}\r\nexport interface SdFormGenericGroup {\r\n id: string;\r\n type: 'group';\r\n label: string;\r\n layout: SdFormGenericLayout;\r\n components: SdFormGenericComponent[];\r\n properties: {\r\n icon: string;\r\n color: SdColor;\r\n hidden?: boolean;\r\n hiddenWhenExpression?: SdFormGenericExpression;\r\n visibleWhenExpression?: SdFormGenericExpression;\r\n };\r\n}\r\n\r\n// CUSTOM\r\nexport interface SdFormGenericUpload extends SdFormGenericComponentBase {\r\n type: 'upload';\r\n properties?: {\r\n type?: SdUploadFile['type'];\r\n maxSize?: SdUploadFile['maxSize']; // Dung lượng tối đa\r\n max?: SdUploadFile['max']; // Số lượng file tối đa\r\n extensions?: SdUploadFile['extensions'];\r\n args?: Record<string, any>; //.tham số\r\n // Dành cho mobile\r\n source?: 'ALL' | 'PHOTO_LIBRARY' | 'CAPTURE'; // Mặc định là ALL\r\n } & SdFormGenericComponentBase['properties'];\r\n}\r\n\r\nexport interface FormRenderComponentTableColumnValues {\r\n valuesKey: string;\r\n query?: Record<string, any>;\r\n}\r\n\r\nexport type SdFormGenericTableColumn<T = any> =\r\n | TableColumnString<T>\r\n | TableColumnNumber<T>\r\n | TableColumnBool<T>\r\n | TableColumnDate<T>\r\n | TableColumnDatetime<T>\r\n | TableColumnRadio<T>\r\n | TableColumnValues<T>\r\n | TableColumnImage<T>\r\n | TableColumnFile<T>;\r\n\r\nexport const TableColumnTypes = [\r\n {\r\n value: 'string',\r\n display: 'Chuỗi',\r\n },\r\n {\r\n value: 'number',\r\n display: 'Số',\r\n },\r\n {\r\n value: 'date',\r\n display: 'Ngày',\r\n },\r\n {\r\n value: 'datetime',\r\n display: 'Ngày giờ',\r\n },\r\n {\r\n value: 'values',\r\n display: 'Chọn giá trị',\r\n },\r\n {\r\n value: 'boolean',\r\n display: 'True/False',\r\n },\r\n {\r\n value: 'file',\r\n display: 'Tệp',\r\n },\r\n {\r\n value: 'image',\r\n display: 'Ảnh',\r\n },\r\n];\r\n\r\ninterface TableColumnBase<T = any> {\r\n key: Extract<keyof T, string>;\r\n label: string;\r\n width?: SdTableColumn['width'];\r\n validate?: {\r\n required?: boolean;\r\n };\r\n}\r\n\r\ninterface TableColumnString<T = any> extends TableColumnBase<T> {\r\n type: 'string';\r\n validate?: { minlength?: number; maxlength?: number; pattern?: string; patternErrorMessage?: string } & TableColumnBase['validate'];\r\n}\r\n\r\ninterface TableColumnNumber<T = any> extends TableColumnBase<T> {\r\n type: 'number';\r\n validate?: { min?: number; max?: number } & TableColumnBase['validate'];\r\n}\r\n\r\ninterface TableColumnDate<T = any> extends TableColumnBase<T> {\r\n type: 'date';\r\n validate?: { min?: 'TODAY' | string; max?: 'TODAY' | string } & TableColumnBase['validate'];\r\n}\r\n\r\ninterface TableColumnDatetime<T = any> extends TableColumnBase<T> {\r\n type: 'datetime';\r\n validate?: { min?: 'TODAY' | string; max?: 'TODAY' | string } & TableColumnBase['validate'];\r\n}\r\n\r\ninterface TableColumnBool<T = any> extends TableColumnBase<T> {\r\n type: 'boolean';\r\n displayOnTrue?: string;\r\n displayOnFalse?: string;\r\n}\r\n\r\ninterface TableColumnRadio<T = any> extends TableColumnBase<T> {\r\n type: 'radio';\r\n values?: SdFormGenericSelectionStaticItem[];\r\n}\r\n\r\ninterface TableColumnValues<T = any> extends TableColumnBase<T> {\r\n type: 'values';\r\n valuesKey: string;\r\n query?: Record<string, any>;\r\n values?: SdFormGenericSelectionStaticItem[];\r\n}\r\ninterface TableColumnImage<T = any> extends TableColumnBase<T> {\r\n type: 'image';\r\n args?: Record<string, any>;\r\n validate?: { max?: number; maxSize?: number } & TableColumnBase['validate'];\r\n}\r\n\r\ninterface TableColumnFile<T = any> extends TableColumnBase<T> {\r\n type: 'file';\r\n args?: Record<string, any>;\r\n validate?: { max?: number; maxSize?: number } & TableColumnBase['validate'];\r\n}\r\n\r\nexport interface SdFormGenericTable extends SdFormGenericComponentBase {\r\n type: 'table';\r\n columnsKey?: string;\r\n columns?: SdFormGenericTableColumn[];\r\n properties?: {\r\n type?: SdTableOption['type'];\r\n titleButtonCreate?: string; // Tiêu đề nút tạo mới\r\n } & SdFormGenericComponentBase['properties'];\r\n}\r\n\r\nexport interface SdFormGenericHtml {\r\n template?: string;\r\n id: string;\r\n key?: string;\r\n type: 'html';\r\n content: string;\r\n validate?: {\r\n required?: boolean;\r\n };\r\n layout?: SdFormGenericLayout;\r\n properties?: {\r\n viewed?: boolean;\r\n hyperlink?: string; // Hyperlink khi ở trạng thái viewed\r\n hidden?: boolean;\r\n hiddenWhenExpression?: SdFormGenericExpression;\r\n visibleWhenExpression?: SdFormGenericExpression;\r\n variables?: { key: string; label: string; value?: string }[];\r\n queries?: { key: string; label: string }[];\r\n query?: Record<string, any>;\r\n };\r\n}\r\n\r\nexport interface FormBuilderComponent {\r\n type: string;\r\n icon: string;\r\n name: string;\r\n}\r\n\r\nexport const FormBuilderComponents: FormBuilderComponent[] = [\r\n {\r\n type: 'textfield',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M45 16a3 3 0 013 3v16a3 3 0 01-3 3H9a3 3 0 01-3-3V19a3 3 0 013-3h36zm0 2H9a1 1 0 00-1 1v16a1 1 0 001 1h36a1 1 0 001-1V19a1 1 0 00-1-1zm-32 4v10h-2V22h2z\"></path></svg>',\r\n name: 'Text field',\r\n },\r\n {\r\n type: 'textarea',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M45 13a3 3 0 0 1 3 3v22a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V16a3 3 0 0 1 3-3zm0 2H9a1 1 0 0 0-1 1v22a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V16a1 1 0 0 0-1-1m-1.136 15.5.849.849-6.364 6.364-.849-.849zm.264 3.5.849.849-2.828 2.828-.849-.849zM13 19v10h-2V19z\"></path></svg>',\r\n name: 'Text area',\r\n },\r\n {\r\n type: 'chip-string',\r\n icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M160-240q-33 0-56.5-23.5T80-320v-320q0-33 23.5-56.5T160-720h640q33 0 56.5 23.5T880-640v320q0 33-23.5 56.5T800-240H160Zm0-80h640v-320H160v320Zm130-40h60v-90h90v-60h-90v-90h-60v90h-90v60h90v90Zm-130 40v-320 320Z\"/></svg>',\r\n name: 'Chip string',\r\n },\r\n {\r\n type: 'chip-calendar',\r\n icon: '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M160-240q-33 0-56.5-23.5T80-320v-320q0-33 23.5-56.5T160-720h640q33 0 56.5 23.5T880-640v320q0 33-23.5 56.5T800-240H160Zm0-80h640v-320H160v320Zm130-40h60v-90h90v-60h-90v-90h-60v90h-90v60h90v90Zm-130 40v-320 320Z\"/></svg>',\r\n name: 'Chip calendar',\r\n },\r\n {\r\n type: 'number',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M45 16a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V19a3 3 0 0 1 3-3zm0 2H9a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h36a1 1 0 0 0 1-1V19a1 1 0 0 0-1-1M35 28.444h7l-3.5 4zM35 26h7l-3.5-4z\"></path></svg>',\r\n name: 'Number',\r\n },\r\n {\r\n type: 'datetime',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M37.908 13.418h-5.004v-2.354h-1.766v2.354H21.13v-2.354h-1.766v2.354H14.36a2.07 2.07 0 0 0-2.06 2.06v23.549a2.07 2.07 0 0 0 2.06 2.06h6.77v-1.766h-6.358a.707.707 0 0 1-.706-.706V15.89c0-.39.316-.707.706-.707h4.592v2.355h1.766v-2.355h10.008v2.355h1.766v-2.355h4.592a.71.71 0 0 1 .707.707v6.358h1.765v-6.77c0-1.133-.927-2.06-2.06-2.06\"></path><path d=\"m35.13 37.603 1.237-1.237-3.468-3.475v-5.926h-1.754v6.654l3.984 3.984Z\"></path><path fill-rule=\"evenodd\" d=\"M23.08 36.962a9.678 9.678 0 1 0 17.883-7.408 9.678 9.678 0 0 0-17.882 7.408Zm4.54-10.292a7.924 7.924 0 1 1 8.805 13.177A7.924 7.924 0 0 1 27.62 26.67\"></path></svg>',\r\n name: 'Date',\r\n },\r\n {\r\n type: 'select',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M45 16a3 3 0 013 3v16a3 3 0 01-3 3H9a3 3 0 01-3-3V19a3 3 0 013-3h36zm0 2H9a1 1 0 00-1 1v16a1 1 0 001 1h36a1 1 0 001-1V19a1 1 0 00-1-1zm-12 7h9l-4.5 6-4.5-6z\"></path></svg>',\r\n name: 'Select',\r\n },\r\n {\r\n type: 'radio',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M27 22c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5m0-5c-5.52 0-10 4.48-10 10s4.48 10 10 10 10-4.48 10-10-4.48-10-10-10m0 18a8 8 0 1 1 0-16 8 8 0 1 1 0 16\"></path></svg>',\r\n name: 'Radio',\r\n },\r\n\r\n {\r\n type: 'checkbox',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M34 18H20a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V20a2 2 0 0 0-2-2m-9 14-5-5 1.41-1.41L25 29.17l7.59-7.59L34 23z\"></path></svg>',\r\n name: 'Check box',\r\n },\r\n {\r\n type: 'html',\r\n icon: '<span style=\"font-size:32px\" class=\"material-icons\">code</span>',\r\n name: 'HTML',\r\n },\r\n {\r\n type: 'upload',\r\n icon: '<svg class=\"svg\" fill=\"currentcolor\" class=\"fjs-palette-field-icon\" viewBox=\"0 0 54 54\"><path fill-rule=\"evenodd\" d=\"M34.636 21.91A3.818 3.818 0 1127 21.908a3.818 3.818 0 017.636 0zm-2 0A1.818 1.818 0 1129 21.908a1.818 1.818 0 013.636 0z\" clip-rule=\"evenodd\"></path><path fill-rule=\"evenodd\" d=\"M15 13a2 2 0 00-2 2v24a2 2 0 002 2h24a2 2 0 002-2V15a2 2 0 00-2-2H15zm24 2H15v12.45l4.71-4.709a1.91 1.91 0 012.702 0l6.695 6.695 2.656-1.77a1.91 1.91 0 012.411.239L39 32.73V15zM15 39v-8.754a.975.975 0 00.168-.135l5.893-5.893 6.684 6.685a1.911 1.911 0 002.41.238l2.657-1.77 6.02 6.02c.052.051.108.097.168.135V39H15z\" clip-rule=\"evenodd\"></path></svg>',\r\n name: 'Upload',\r\n },\r\n {\r\n type: 'table',\r\n icon: '<span style=\"font-size:32px\" class=\"material-icons\">table_chart</span>',\r\n name: 'Table',\r\n },\r\n];\r\n\r\nexport const GetComponentAttributes = (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => {\r\n const attributes: { value: string; display: string }[] = [];\r\n if (components.length) {\r\n for (const component of components) {\r\n if (component.type === 'group') {\r\n attributes.push(...GetComponentAttributes(component.components));\r\n } else if (component.type !== 'html') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n });\r\n }\r\n }\r\n }\r\n return attributes;\r\n};\r\n\r\nexport const GetVariableAttributes = (variables: SdFormGenericVariable[]) => {\r\n const attributes: { value: string; display: string }[] = [];\r\n if (variables.length) {\r\n for (const variable of variables) {\r\n attributes.push({\r\n value: variable.key,\r\n display: `[VARIABLE] ${variable.label}`,\r\n });\r\n }\r\n }\r\n return attributes;\r\n};\r\n","import { SdOperator, SdOperators } from '@sd-angular/core/utilities/models';\r\nimport { SdFormGenericComponent, SdFormGenericGroup } from './form-generic-component.model';\r\nimport { DateUtilities } from '@sd-angular/core/utilities';\r\n\r\nexport interface SdFormGenericExpression {\r\n key: string; // Random, phục vụ cho @for ở attribute-expression\r\n type: 'combinator';\r\n combinator: '&&' | '||';\r\n conditions: (SdFormGenericExpression | SdFormGenericExpressionCondition)[];\r\n}\r\n\r\nexport interface SdFormGenericExpressionCondition {\r\n key: string; // Random, phục vụ cho @for ở attribute-expression\r\n type: 'condition';\r\n field?: string;\r\n operator: SdOperator;\r\n value: any;\r\n dayInfo: DayInfo;\r\n}\r\n\r\nexport type Operator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';\r\nexport const Operators: {\r\n value: Operator;\r\n symbol?: string;\r\n display: string;\r\n}[] = [\r\n {\r\n value: 'EQUAL',\r\n symbol: '=',\r\n display: 'Bằng',\r\n },\r\n {\r\n value: 'NOT_EQUAL',\r\n symbol: '≠',\r\n display: 'Không bằng',\r\n },\r\n {\r\n value: 'GREATER_THAN',\r\n symbol: '>',\r\n display: 'Lớn hơn',\r\n },\r\n {\r\n value: 'LESS_THAN',\r\n symbol: '<',\r\n display: 'Nhỏ hơn',\r\n },\r\n {\r\n value: 'GREATER_OR_EQUAL',\r\n symbol: '≥',\r\n display: 'Lớn hơn, hoặc bằng',\r\n },\r\n {\r\n value: 'LESS_OR_EQUAL',\r\n symbol: '≤',\r\n display: 'Nhỏ hơn, hoặc bằng',\r\n },\r\n {\r\n value: 'NULL',\r\n symbol: 'motion_photos_off',\r\n display: 'Là rỗng',\r\n },\r\n {\r\n value: 'NOT_NULL',\r\n symbol: 'adjust',\r\n display: 'Không rỗng',\r\n },\r\n];\r\n\r\nexport type Attribute = AttributeBase | AttributeBoolean | AttributeDate | AttributeValues;\r\n\r\ninterface AttributeBase {\r\n value: string;\r\n display: string;\r\n type: 'string' | 'number';\r\n}\r\n\r\ninterface AttributeBoolean {\r\n value: string;\r\n display: string;\r\n type: 'boolean';\r\n displayOnTrue: string;\r\n displayOnFalse: string;\r\n}\r\n\r\ninterface AttributeDate {\r\n value: string;\r\n display: string;\r\n type: 'datetime';\r\n}\r\n\r\nexport interface DayInfo {\r\n type?: 'RELATED' | 'NOW' | 'DATETIME' | 'ATTRIBUTE';\r\n related?: 'LASTDAY' | 'NEXTDAY' | 'LASTWEEK' | 'NEXTWEEK' | 'LASTMONTH' | 'NEXTMONTH';\r\n relatedValue?: number;\r\n}\r\n\r\nexport const DayInfoTypes = [\r\n { value: 'RELATED', display: 'Ngày liên quan' },\r\n { value: 'NOW', display: 'Ngày hiện tại' },\r\n { value: 'DATETIME', display: 'Ngày cụ thể' },\r\n { value: 'ATTRIBUTE', display: 'Trường dữ liệu' },\r\n];\r\n\r\nexport const DayInfoPreviouses = [\r\n { value: 'LASTDAY', display: 'Ngày trước', format: (n: number) => `${n || 1}LastDay` },\r\n { value: 'NEXTDAY', display: 'Ngày tới', format: (n: number) => `${n || 1}NextDay` },\r\n // { value: 'LASTWEEK', display: 'Tuần trước', format: (n: number) => `${n || 1}LastWeek` },\r\n // { value: 'NEXTWEEK', display: 'Tuần tới', format: (n: number) => `${n || 1}NextWeek` },\r\n // { value: 'LASTMONTH', display: 'Tháng trước', format: (n: number) => `${n || 1}LastMonth` },\r\n // { value: 'NEXTMONTH', display: 'Tháng tới', format: (n: number) => `${n || 1}NextMonth` },\r\n];\r\n\r\nexport const GetDatetimeValue = (value: string) => {\r\n if (!value || typeof value !== 'string') {\r\n return undefined;\r\n }\r\n if (value === 'now') {\r\n return DateUtilities.toFormat(new Date(), 'yyyy/MM/dd HH:mm:ss');\r\n }\r\n if (value?.endsWith('LastDay')) {\r\n const relatedValue = +value.replace('LastDay', '');\r\n if (relatedValue) {\r\n return DateUtilities.toFormat(DateUtilities.addDays(new Date(), -relatedValue), 'yyyy/MM/dd HH:mm:ss');\r\n }\r\n }\r\n if (value?.endsWith('NextDay')) {\r\n const relatedValue = +value.replace('LastDay', '');\r\n if (relatedValue) {\r\n return DateUtilities.toFormat(DateUtilities.addDays(new Date(), relatedValue), 'yyyy/MM/dd HH:mm:ss');\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\ninterface AttributeValues {\r\n value: string;\r\n display: string;\r\n type: 'values';\r\n values: { value: string; display: string }[];\r\n}\r\n\r\nexport const AttributeOperators: Record<\r\n Attribute['type'],\r\n {\r\n value: Operator;\r\n symbol?: string;\r\n display: string;\r\n }[]\r\n> = {\r\n string: [\r\n {\r\n value: 'EQUAL',\r\n symbol: '=',\r\n display: 'Bằng',\r\n },\r\n {\r\n value: 'NOT_EQUAL',\r\n symbol: '≠',\r\n display: 'Không bằng',\r\n },\r\n {\r\n value: 'NULL',\r\n symbol: 'motion_photos_off',\r\n display: 'Là rỗng',\r\n },\r\n {\r\n value: 'NOT_NULL',\r\n symbol: 'adjust',\r\n display: 'Không rỗng',\r\n },\r\n ],\r\n number: Operators,\r\n datetime: Operators,\r\n boolean: [\r\n {\r\n value: 'EQUAL',\r\n symbol: '=',\r\n display: 'Bằng',\r\n },\r\n {\r\n value: 'NOT_EQUAL',\r\n symbol: '≠',\r\n display: 'Không bằng',\r\n },\r\n ],\r\n values: [\r\n {\r\n value: 'EQUAL',\r\n symbol: '=',\r\n display: 'Bằng',\r\n },\r\n {\r\n value: 'NOT_EQUAL',\r\n symbol: '≠',\r\n display: 'Không bằng',\r\n },\r\n {\r\n value: 'NULL',\r\n symbol: 'motion_photos_off',\r\n display: 'Là rỗng',\r\n },\r\n {\r\n value: 'NOT_NULL',\r\n symbol: 'adjust',\r\n display: 'Không rỗng',\r\n },\r\n ],\r\n};\r\n\r\n// Từ components map thành các attributes\r\nexport const GetAttributes = (components: (SdFormGenericComponent | SdFormGenericGroup)[]): Attribute[] => {\r\n const attributes: Attribute[] = [];\r\n if (components.length) {\r\n for (const component of components) {\r\n if (component.type === 'group') {\r\n attributes.push(...GetAttributes(component.components));\r\n } else if (component.type === 'textfield' || component.type === 'textarea') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n } else if (component.type === 'number') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'number',\r\n });\r\n } else if (component.type === 'datetime') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'datetime',\r\n });\r\n } else if (component.type === 'checkbox') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'boolean',\r\n displayOnTrue: 'YES',\r\n displayOnFalse: 'NO',\r\n });\r\n } else if (component.type === 'radio' || component.type === 'select') {\r\n if (component.values?.length) {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'values',\r\n values: component.values.map(e => ({\r\n value: e.value,\r\n display: e.label,\r\n })),\r\n });\r\n } else {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return attributes;\r\n};\r\n\r\nexport const TemplateToCondition = (template: string | undefined | null, entity: Record<string, any>) => {\r\n if (!template) {\r\n return undefined;\r\n }\r\n const regex = /\\$\\{([A-Za-z0-9._-]*)\\}/g;\r\n const matches = template.match(regex) || [];\r\n for (const match of matches) {\r\n const key = match.slice(2, match.length - 1);\r\n if (key) {\r\n // Xử lý trong trường hợp key có định dạng a.b.c ...\r\n let val: any = entity;\r\n const strs = key.split('.');\r\n for (const str of strs) {\r\n val = val?.[str];\r\n }\r\n if (typeof val === 'string') {\r\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\r\n if (DateUtilities.isDate(val)) {\r\n template = template.replace(match, `'${DateUtilities.toFormat(val, 'yyyy/MM/dd HH:mm:ss')}'`);\r\n } else {\r\n // Nếu là chuỗi thì thêm dấu nháy khi replace giá trị để so sánh, ví dụ 'a' === 'a'\r\n // Nếu là số hay boolean thì không cần, ví dụ 121 === 121\r\n template = template.replace(match, `'${val}'`);\r\n }\r\n } else {\r\n template = template.replace(match, val ?? `undefined`);\r\n }\r\n }\r\n }\r\n return template;\r\n};\r\n\r\nexport const ExpressionToJavascriptExpression = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\r\n const queries: string[] = [];\r\n if (condition.type === 'combinator') {\r\n if (condition.conditions?.length) {\r\n for (const child of condition.conditions) {\r\n queries.push(`(${ExpressionToJavascriptExpression(child)})`);\r\n }\r\n }\r\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\r\n const query = queries.join(` ${condition.combinator} `);\r\n if (queries.length > 1) {\r\n return `(${query})`;\r\n } else {\r\n return query;\r\n }\r\n } else {\r\n return ConvertToJavascriptExpression(condition);\r\n }\r\n};\r\nconst ConvertToJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\r\n const { value } = condition;\r\n // Convert thành syntax ${field}\r\n const field = '${' + condition.field + '}';\r\n const { operator } = condition;\r\n if (!operator) {\r\n return undefined;\r\n }\r\n if (operator === 'NULL') {\r\n return `!${field}`;\r\n }\r\n if (operator === 'NOT_NULL') {\r\n return `!!${field}`;\r\n }\r\n if (value === undefined || value === null || value === '') {\r\n return undefined;\r\n }\r\n // Xử lý đối với trường hợp string là 'datetime' thì value sẽ có thể là 'now', '1LastDay' ....\r\n const datetimeValue = GetDatetimeValue(value);\r\n if (operator === 'EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} === '${datetimeValue || value}'`;\r\n }\r\n return `${field} === ${value}`;\r\n }\r\n if (operator === 'GREATER_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} > '${datetimeValue || value}'`;\r\n }\r\n return `${field} > ${value}`;\r\n }\r\n if (operator === 'LESS_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} < '${datetimeValue || value}'`;\r\n }\r\n return `${field} < ${value}`;\r\n }\r\n if (operator === 'NOT_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} !== '${datetimeValue || value}'`;\r\n }\r\n return `${field} !== ${value}`;\r\n }\r\n if (operator === 'GREATER_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} >= '${datetimeValue || value}'`;\r\n }\r\n return `${field} >= ${value}`;\r\n }\r\n if (operator === 'LESS_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} <= '${datetimeValue || value}'`;\r\n }\r\n return `${field} <= ${value}`;\r\n }\r\n return undefined;\r\n};\r\n","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport { SdSearch } from '@sd-angular/core/forms';\r\nimport { ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from '../configurations';\r\nimport { SdFormGenericArgs, SdFormGenericDefinitionHtml, SdFormGenericDefinitionSelection, SdFormGenericSelectionItem } from '../models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FormGenericService {\r\n #selections?: SdFormGenericDefinitionSelection[];\r\n #definitionHtmls?: SdFormGenericDefinitionHtml[];\r\n constructor(\r\n @Inject(SD_WORKFLOW_CONFIGURATION)\r\n @Optional()\r\n private readonly configuration: ISdWorkflowConfiguration,\r\n ) {}\r\n\r\n get selections() {\r\n return this.configuration?.form?.selections || [];\r\n }\r\n\r\n get tables() {\r\n return this.configuration?.form?.tables || [];\r\n }\r\n\r\n getSelection = async (valuesKey: string | undefined | null) => {\r\n if (!valuesKey) {\r\n return undefined;\r\n }\r\n const selections = await this.selection.definitions();\r\n return selections.find(e => e.value === valuesKey);\r\n };\r\n\r\n selection = {\r\n definitions: async (): Promise<SdFormGenericDefinitionSelection[]> => {\r\n // Nếu chưa xử lý lấy trước đó thì thực hiện xử lý lấy data cho selections\r\n if (!this.#selections) {\r\n const selections = this.configuration?.form?.selections;\r\n if (!selections) {\r\n this.#selections = [];\r\n } else if (Array.isArray(selections)) {\r\n this.#selections = selections;\r\n } else {\r\n const results = selections();\r\n if (results instanceof Promise) {\r\n this.#selections = (await results) || [];\r\n } else {\r\n this.#selections = results || [];\r\n }\r\n }\r\n }\r\n return this.#selections || [];\r\n },\r\n getDefinition: async (valuesKey: string | undefined | null) => {\r\n if (!valuesKey) {\r\n return undefined;\r\n }\r\n const selections = await this.selection.definitions();\r\n return selections.find(e => e.value === valuesKey);\r\n },\r\n // Lấy dữ liệu items cho dropdown, radio, checklist\r\n // Dữ liệu có thể là 1 mảng hoặc hàm\r\n items: async (\r\n valuesKey: string | undefined | null,\r\n args: SdFormGenericArgs\r\n ): Promise<SdFormGenericSelectionItem[] | SdSearch<SdFormGenericSelectionItem>> => {\r\n try {\r\n const { component, column } = args;\r\n // Nếu có values thì xử lý trả về mảng tĩnh\r\n if (component && 'values' in component && Array.isArray(component.values) && component.values.length) {\r\n return component.values.map(e => ({\r\n value: e.value,\r\n display: e.label,\r\n data: e,\r\n }));\r\n }\r\n // Nếu component là table và có thông tin column\r\n if (component?.type === 'table' && column && 'values' in column && Array.isArray(column.values) && column.values.length) {\r\n return column.values.map(e => ({\r\n value: e.value,\r\n display: e.label,\r\n data: e,\r\n }));\r\n }\r\n // Ngoài ra nếu không có valuesKey thì trả về mảng rỗng\r\n if (!valuesKey) {\r\n return [];\r\n }\r\n // Tìm cấu hình dựa vào valuesKey\r\n const selection = await this.selection.getDefinition(valuesKey);\r\n if (!selection) {\r\n return [];\r\n }\r\n if ('values' in selection) {\r\n return await selection.values(args);\r\n } else if ('valuesKey' in selection && selection?.valuesKey && !!this.configuration?.form?.getValues) {\r\n return (await this.configuration?.form?.getValues?.(selection.valuesKey, selection.args)) || [];\r\n } else if ('lazyValues' in selection) {\r\n return searchArgs => {\r\n return selection.lazyValues(searchArgs, args);\r\n };\r\n } else if ('lazyValuesKey' in selection && selection?.lazyValuesKey && !!this.configuration?.form?.getLazyValues) {\r\n const getLazyValues = this.configuration?.form?.getLazyValues?.(selection.lazyValuesKey, selection.args);\r\n return searchArgs => {\r\n return getLazyValues(searchArgs, args);\r\n };\r\n }\r\n return [];\r\n } catch (err) {\r\n console.error(err);\r\n return [];\r\n }\r\n },\r\n variables: {\r\n detail: async (valuesKey: string, values: string | number | string[] | number[], args: SdFormGenericArgs) => {\r\n const selection = await this.selection.getDefinition(valuesKey);\r\n return selection?.variables?.detail?.(values, args);\r\n },\r\n },\r\n };\r\n\r\n html = {\r\n definitions: async (): Promise<SdFormGenericDefinitionHtml[]> => {\r\n // Nếu chưa xử lý lấy trước đó thì thực hiện xử lý lấy data cho htmls\r\n if (!this.#definitionHtmls) {\r\n const htmls = this.configuration?.form?.htmls;\r\n if (!htmls) {\r\n this.#definitionHtmls = [];\r\n } else if (Array.isArray(htmls)) {\r\n this.#definitionHtmls = htmls;\r\n } else {\r\n const results = htmls();\r\n if (results instanceof Promise) {\r\n this.#definitionHtmls = (await results) || [];\r\n } else {\r\n this.#definitionHtmls = results || [];\r\n }\r\n }\r\n }\r\n return this.#definitionHtmls || [];\r\n },\r\n getContent: async (template: string, query?: Record<string, any>): Promise<string> => {\r\n const definitions = await this.html.definitions();\r\n const html = definitions.find(e => e.value === template);\r\n if (html) {\r\n if (typeof html.content === 'string') {\r\n return html.content;\r\n }\r\n if (typeof html.content === 'function') {\r\n return await html.content(query).catch(err => {\r\n console.error(err);\r\n return '';\r\n });\r\n }\r\n return '';\r\n }\r\n return '';\r\n },\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SdFormGeneric } from '../models/form-generic.model';\r\nimport { ComponentViewedPipe } from '../pipes';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdFormRenderService {\r\n constructor(private readonly componentViewedPipe: ComponentViewedPipe) {}\r\n\r\n viewEntities = async (form: SdFormGeneric, entities: Record<string, any>[]): Promise<Record<string, any>[]> => {\r\n const reuslts: Record<string, any>[] = [];\r\n for (const entity of entities || []) {\r\n const result: Record<string, any> = {};\r\n for (const component of form?.components || []) {\r\n // Group và upload thì k cần lấy view\r\n if (\r\n component.type !== 'table' &&\r\n component.type !== 'group' &&\r\n component.type !== 'upload' &&\r\n component.type !== 'html' &&\r\n component.key\r\n ) {\r\n result[component.key] = await this.componentViewedPipe.transform(entity?.[component.key], entity, component);\r\n }\r\n }\r\n reuslts.push(result);\r\n }\r\n return reuslts;\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { DateUtilities, NumberUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { SD_EMPTY_STR } from '@sd-angular/core/utilities/models';\r\nimport { SdFormGenericComponent, SdFormGenericHtml } from '../models';\r\nimport { FormGenericService } from '../services';\r\nimport { SdFormatNumberPipe } from '@sd-angular/core/pipes';\r\n\r\n@Pipe({\r\n name: 'componentViewed',\r\n standalone: true,\r\n})\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\n// Pipe xử lý hiển thị detail cho component\r\nexport class ComponentViewedPipe implements PipeTransform {\r\n constructor(\r\n private readonly formatNumberPipe: SdFormatNumberPipe,\r\n private readonly formGenericService: FormGenericService\r\n ) {}\r\n transform = async (\r\n value: any,\r\n entity: Record<string, any>,\r\n component: Exclude<SdFormGenericComponent, SdFormGenericHtml>\r\n ): Promise<string> => {\r\n if (!component?.key) {\r\n return '';\r\n }\r\n const val = entity?.[component.key];\r\n if (val === undefined || val === null) {\r\n return SD_EMPTY_STR;\r\n }\r\n if (component.type === 'textfield' || component.type === 'textarea') {\r\n return val || SD_EMPTY_STR;\r\n }\r\n if (component.type === 'number') {\r\n return this.formatNumberPipe.transform(value)?.toString() ?? SD_EMPTY_STR;\r\n }\r\n if (component.type === 'datetime') {\r\n if (component.subtype === 'datetime') {\r\n return DateUtilities.toFormat(val, 'dd/MM/yyyy HH:mm') || SD_EMPTY_STR;\r\n } else {\r\n return DateUtilities.toFormat(val, 'dd/MM/yyyy') || SD_EMPTY_STR;\r\n }\r\n }\r\n if (component.type === 'select' || component.type === 'radio' || component.type === 'checklist') {\r\n const values = (Array.isArray(val) ? val : [val]).filter(value => value !== undefined && value !== null && value !== '');\r\n if (!values.length) {\r\n return SD_EMPTY_STR;\r\n }\r\n const selection = await this.formGenericService.selection.getDefinition(component?.valuesKey);\r\n // Nếu có cấu hình view tương ứng với selection thì sử dụng viewed\r\n if (selection?.viewed) {\r\n return (\r\n (await selection.viewed(values, {\r\n entity,\r\n component,\r\n })) || SD_EMPTY_STR\r\n );\r\n }\r\n // Ngoài ra xử lý lấy thông tin items\r\n const items = await this.formGenericService.selection.items(component?.valuesKey, {\r\n entity,\r\n component,\r\n });\r\n if (!items) {\r\n return SD_EMPTY_STR;\r\n }\r\n // Nếu items là Array thì kiểm tra value và hiển thị display\r\n if (Array.isArray(items)) {\r\n return (\r\n items\r\n .filter(e => values.includes(e.value))\r\n .map(e => e.display)\r\n .join(', ') || SD_EMPTY_STR\r\n );\r\n }\r\n // items là Function (lazyValues) thì thực hiện gọi API\r\n return await items({\r\n type: 'VALUE',\r\n value: values,\r\n }).then(results => {\r\n return (\r\n results\r\n .filter(e => values.includes(e.value))\r\n .map(e => e.display)\r\n .join(', ') || SD_EMPTY_STR\r\n );\r\n });\r\n }\r\n return '';\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { ExpressionToJavascriptExpression, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericHtml, TemplateToCondition } from '../models';\r\n\r\n@Pipe({\r\n name: 'whenExpression',\r\n standalone: true,\r\n})\r\n// Xử lý thông tin required, disabled, hidden của component\r\nexport class WhenExpressionPipe implements PipeTransform {\r\n #hidden = (component: SdFormGenericComponent | SdFormGenericGroup, variables: Record<string, any>) => {\r\n if (component.properties?.hidden) {\r\n return true;\r\n }\r\n const hiddenWhenExpression = component.properties?.hiddenWhenExpression;\r\n if (hiddenWhenExpression) {\r\n const val = TemplateToCondition(ExpressionToJavascriptExpression(hiddenWhenExpression), variables);\r\n if (!val) {\r\n return true;\r\n }\r\n try {\r\n const result = new Function('return ' + val)();\r\n if (typeof result === 'boolean') {\r\n // Chỉ bỏ hidden khi template return false\r\n return result;\r\n } else {\r\n return true;\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n return true;\r\n }\r\n }\r\n const visibleWhenExpression = component.properties?.visibleWhenExpression;\r\n if (visibleWhenExpression) {\r\n const val = TemplateToCondition(ExpressionToJavascriptExpression(visibleWhenExpression), variables);\r\n if (!val) {\r\n return true;\r\n }\r\n try {\r\n const result = new Function('return ' + val)();\r\n if (typeof result === 'boolean') {\r\n // \r\n return !result;\r\n } else {\r\n return true; // Ẩn\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n return true; // Ẩn\r\n }\r\n }\r\n return false;\r\n };\r\n #disabled = (component: Exclude<SdFormGenericComponent, SdFormGenericHtml>, variables: Record<string, any>) => {\r\n const disabledWhenExpression = component.properties?.disabledWhenExpression;\r\n if (disabledWhenExpression) {\r\n const val = TemplateToCondition(ExpressionToJavascriptExpression(disabledWhenExpression), variables);\r\n if (!val) {\r\n return true;\r\n }\r\n try {\r\n const result = new Function('return ' + val)();\r\n if (typeof result === 'boolean') {\r\n // Chỉ bỏ disabled khi template return false\r\n return result;\r\n } else {\r\n return true;\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n #required = (component: Exclude<SdFormGenericComponent, SdFormGenericHtml>, variables: Record<string, any>) => {\r\n const requiredWhenExpression = component.properties?.requiredWhenExpression;\r\n if (requiredWhenExpression) {\r\n const val = TemplateToCondition(ExpressionToJavascriptExpression(requiredWhenExpression), variables);\r\n if (!val) {\r\n return false;\r\n }\r\n try {\r\n const result = new Function('return ' + val)();\r\n if (typeof result === 'boolean') {\r\n // Chỉ required khi template return true\r\n return result;\r\n } else {\r\n return false;\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n return false;\r\n }\r\n }\r\n return false;\r\n };\r\n transform(\r\n hashed: string | undefined,\r\n component: SdFormGenericComponent | SdFormGenericGroup,\r\n entity: Record<string, any>\r\n ): {\r\n hidden: boolean;\r\n disabled: boolean;\r\n required: boolean;\r\n } {\r\n // Group và html chỉ xử lý ẩn/hiện\r\n if (component.type === 'group' || component.type === 'html') {\r\n return {\r\n hidden: this.#hidden(component, entity),\r\n disabled: false,\r\n required: false,\r\n };\r\n }\r\n return {\r\n hidden: this.#hidden(component, entity),\r\n disabled: component?.disabled || this.#disabled(component, entity),\r\n required: component?.validate?.required || this.#required(component, entity),\r\n };\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\r\n\r\n// Từ Expression JSON build thành Expression String\r\n@Pipe({\r\n name: 'expressionQuery',\r\n})\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ExpressionQueryPipe implements PipeTransform {\r\n #generateQuery = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\r\n const queries: string[] = [];\r\n if (condition.type === 'combinator') {\r\n if (condition.conditions?.length) {\r\n for (const child of condition.conditions) {\r\n queries.push(`(${this.#generateQuery(child)})`);\r\n }\r\n }\r\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\r\n const query = queries.join(` ${condition.combinator} `);\r\n if (queries.length > 1) {\r\n return `(${query})`;\r\n } else {\r\n return query;\r\n }\r\n } else {\r\n return this.#generateJavascriptExpression(condition);\r\n }\r\n };\r\n #generateJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\r\n const { value } = condition;\r\n // Convert thành syntax ${field}\r\n const field = '${' + condition.field + '}';\r\n const { operator } = condition;\r\n if (!operator) {\r\n return undefined;\r\n }\r\n if (operator === 'NULL') {\r\n return `!${field}`;\r\n }\r\n if (operator === 'NOT_NULL') {\r\n return `!!${field}`;\r\n }\r\n if (value === undefined || value === null || value === '') {\r\n return undefined;\r\n }\r\n if (operator === 'EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} === '${value}'`;\r\n }\r\n return `${field} === ${value}`;\r\n }\r\n if (operator === 'GREATER_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} > '${value}'`;\r\n }\r\n return `${field} > ${value}`;\r\n }\r\n if (operator === 'LESS_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} < '${value}'`;\r\n }\r\n return `${field} < ${value}`;\r\n }\r\n if (operator === 'NOT_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} !== '${value}'`;\r\n }\r\n return `${field} !== ${value}`;\r\n }\r\n if (operator === 'GREATER_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} >= '${value}'`;\r\n }\r\n return `${field} >= ${value}`;\r\n }\r\n if (operator === 'LESS_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} <= '${value}'`;\r\n }\r\n return `${field} <= ${value}`;\r\n }\r\n return undefined;\r\n };\r\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition | undefined): string | undefined {\r\n if(!condition) {\r\n return undefined;\r\n }\r\n return this.#generateQuery(condition);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Attribute, Operators, SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\r\n\r\n@Pipe({\r\n name: 'expressionView',\r\n})\r\nexport class ExpressionViewPipe implements PipeTransform {\r\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition, attributes: Attribute[]): string {\r\n if (condition.type === 'combinator') {\r\n return '';\r\n }\r\n const { field, operator, value } = condition;\r\n const containerStyle = `style=\"border: 1px solid #e6e6e6; border-radius: 4px; background-color: #e6e6e6; padding: 4px 8px;\"`;\r\n const results: string[] = [];\r\n // Wording field\r\n results.push(`<div ${containerStyle}>${attributes.find(e => e.value === field)?.display || field}</div>`);\r\n // Wording operator\r\n if (operator) {\r\n results.push(`<div>${Operators.find(e => e.value === operator)?.display || operator}</div>`);\r\n }\r\n // Wording value\r\n if (operator && value !== undefined) {\r\n results.push(`<div ${containerStyle}>${value}</div>`);\r\n }\r\n return `<div class=\"d-flex flex-row align-items-center\" style=\"gap:8px ;flex-wrap: wrap ;word-wrap: break-word\">${results.join(\r\n ''\r\n )}</div>`;\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { SdFormGenericExpression, SdFormGenericExpressionCondition } from '../models';\r\n\r\n// Từ Expression JSON build thành Expression String theo cú pháp của FEEL mà Camunda sử dụng\r\n@Pipe({\r\n name: 'expressionFeel',\r\n})\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ExpressionFeelPipe implements PipeTransform {\r\n #generateQuery = (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => {\r\n const queries: string[] = [];\r\n if (condition.type === 'combinator') {\r\n if (condition.conditions?.length) {\r\n for (const child of condition.conditions) {\r\n queries.push(`${this.#generateQuery(child)}`);\r\n }\r\n }\r\n // Nếu nhiều hơn 1 điều kiện, bọc điều kiện bằng cặp ngoặc ()\r\n const query = queries.join(` ${condition.combinator === '||' ? 'or' : 'and'} `);\r\n if (queries.length > 1) {\r\n return `(${query})`;\r\n } else {\r\n return query;\r\n }\r\n } else {\r\n return this.#generateJavascriptExpression(condition);\r\n }\r\n };\r\n #generateJavascriptExpression = (condition: SdFormGenericExpressionCondition) => {\r\n const { field, value } = condition;\r\n // Convert thành syntax ${field}\r\n const { operator } = condition;\r\n if (!operator) {\r\n return undefined;\r\n }\r\n if (operator === 'NULL') {\r\n return `${field} == null`;\r\n }\r\n if (operator === 'NOT_NULL') {\r\n return `${field} != null`;\r\n }\r\n if (value === undefined || value === null || value === '') {\r\n return undefined;\r\n }\r\n if (operator === 'EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} == '${value}'`;\r\n }\r\n return `${field} == ${value}`;\r\n }\r\n if (operator === 'GREATER_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} > '${value}'`;\r\n }\r\n return `${field} > ${value}`;\r\n }\r\n if (operator === 'LESS_THAN') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} < '${value}'`;\r\n }\r\n return `${field} < ${value}`;\r\n }\r\n if (operator === 'NOT_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} != '${value}'`;\r\n }\r\n return `${field} != ${value}`;\r\n }\r\n if (operator === 'GREATER_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} >= '${value}'`;\r\n }\r\n return `${field} >= ${value}`;\r\n }\r\n if (operator === 'LESS_OR_EQUAL') {\r\n // Nếu là chuỗi thì thêm dấu nháy, nếu không thì bỏ qua\r\n if (typeof value === 'string') {\r\n return `${field} <= '${value}'`;\r\n }\r\n return `${field} <= ${value}`;\r\n }\r\n return undefined;\r\n };\r\n transform(condition: SdFormGenericExpression | SdFormGenericExpressionCondition): string | undefined {\r\n const result = this.#generateQuery(condition);\r\n if (result) {\r\n return '${' + result + '}';\r\n }\r\n return result;\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { SdSafeHtmlPipe } from '@sd-angular/core/pipes';\r\nimport { StringUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { SdFormGenericHtml } from '../models';\r\n\r\n@Pipe({\r\n name: 'htmlPipe',\r\n standalone: true,\r\n})\r\n// Pipe xử lý hiển thị detail cho component\r\nexport class HtmlPipe implements PipeTransform {\r\n constructor(private readonly htmlSafePipe: SdSafeHtmlPipe) {}\r\n // Hash component để pipe nhận biết được content hay variables có thay đổi render lại\r\n transform = (hashed: string | undefined | null, content: string, component: SdFormGenericHtml) => {\r\n if (!content) {\r\n return '';\r\n }\r\n const variables: Record<string, any> = {};\r\n if (component.properties?.variables?.length) {\r\n component.properties.variables.forEach(variable => (variables[variable.key] = variable.value));\r\n }\r\n return this.htmlSafePipe.transform(StringUtilities.templateToDisplay(content, variables));\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { StringUtilities } from '@sd-angular/core/utilities/extensions';\r\n\r\n@Pipe({\r\n name: 'hyperlink',\r\n standalone: true,\r\n})\r\n// Pipe xử lý hiển thị detail cho component\r\nexport class HyperlinkPipe implements PipeTransform {\r\n constructor() {}\r\n transform = (hyperlink: string | undefined | null, entity: Record<string, any>): string => {\r\n if (!hyperlink) {\r\n return '';\r\n }\r\n return StringUtilities.templateToDisplay(hyperlink, entity);\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdInput } from '@sd-angular/core/forms';\r\nimport { SdCustomValidator } from '@sd-angular/core/forms/models';\r\nimport { combineLatest, filter, startWith, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericTextfield } from '../../../../../../models';\r\nimport { ComponentViewedPipe } from '../../../../../../pipes';\r\n\r\n@Component({\r\n selector: 'lib-textfield',\r\n templateUrl: './textfield.component.html',\r\n styleUrls: ['./textfield.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdInput,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n ],\r\n})\r\nexport class TextfieldComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n this.#applyDefaultValue(); // Áp dụng defaultValue khi entity thay đổi\r\n }\r\n }\r\n\r\n component?: SdFormGenericTextfield;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericTextfield) {\r\n this.component = val;\r\n this.#applyDefaultValue(); // Áp dụng defaultValue khi component thay đổi\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n this.#disabledChanges.next(this.disabled);\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n validator?: SdCustomValidator;\r\n @Input('validator') set _validator(validator: SdCustomValidator | undefined | null) {\r\n if (validator && this.validator !== validator) {\r\n this.validator = validator;\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n #disabledChanges = new Subject<boolean>();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n this.#applyDefaultValue(); // Áp dụng defaultValue khi component khởi tạo\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n /**\r\n * Áp dụng defaultValue nếu:\r\n * - Không ở trạng thái viewed\r\n * - Không bị disabled\r\n * - entity[key] chưa có giá trị (null, undefined, hoặc empty string)\r\n * - component có defaultValue\r\n */\r\n #applyDefaultValue = () => {\r\n if (!this.component?.key || !this.entity) {\r\n return;\r\n }\r\n const isViewed = this.viewed || this.component.properties?.viewed;\r\n // Chỉ gán default value nếu undefined\r\n const isUndefined = this.entity[this.component.key] === undefined;\r\n const hasDefaultValue = this.component.defaultValue !== undefined && this.component.defaultValue !== null;\r\n // Chỉ gán defaultValue khi:\r\n // 1. Không ở trạng thái viewed\r\n // 2. Không bị disabled\r\n // 3. Giá trị hiện tại chưa được set (null, undefined hoặc empty string)\r\n // 4. Component có defaultValue\r\n if (!isViewed && hasDefaultValue && isUndefined) {\r\n this.entity[this.component.key] = this.component.defaultValue;\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n } @else {\r\n <sd-input\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [helperText]=\"component.helperText\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [validator]=\"validator\"\r\n [maxlength]=\"component.validate?.maxlength\"\r\n [pattern]=\"component.validate?.pattern\"\r\n [patternErrorMessage]=\"component.validate?.patternErrorMessage\"\r\n [disabled]=\"disabled\"></sd-input>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdTextarea } from '@sd-angular/core/forms/textarea';\r\nimport { SdFormGenericTextarea } from '../../../../../../models';\r\nimport { ComponentViewedPipe } from '../../../../../../pipes';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-textarea',\r\n templateUrl: './textarea.component.html',\r\n styleUrls: ['./textarea.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdTextarea,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n ],\r\n})\r\nexport class TextareaComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n component?: SdFormGenericTextarea;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericTextarea) {\r\n this.component = val;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n } @else {\r\n <sd-textarea\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [helperText]=\"component.helperText\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [maxlength]=\"component.validate?.maxlength\"\r\n [disabled]=\"disabled\"></sd-textarea>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdChip } from '@sd-angular/core/forms';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericChipString } from '../../../../../../models';\r\nimport { ComponentViewedPipe } from '../../../../../../pipes';\r\n\r\n@Component({\r\n selector: 'lib-chip-string',\r\n templateUrl: './chip-string.component.html',\r\n styleUrls: ['./chip-string.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdChip,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n ],\r\n})\r\nexport class ChipStringComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n component?: SdFormGenericChipString;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericChipString) {\r\n this.component = val;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n } @else {\r\n <sd-chip\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"></sd-chip>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdChipCalendar } from '@sd-angular/core/forms';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericChipCalendar } from '../../../../../../models';\r\nimport { ComponentViewedPipe } from '../../../../../../pipes';\r\n\r\n@Component({\r\n selector: 'lib-chip-calendar',\r\n templateUrl: './chip-calendar.component.html',\r\n styleUrls: ['./chip-calendar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdChipCalendar,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n ],\r\n})\r\nexport class ChipCalendarComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n component?: SdFormGenericChipCalendar;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericChipCalendar) {\r\n this.component = val;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n } @else {\r\n <sd-chip-calendar\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"></sd-chip-calendar>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdInput } from '@sd-angular/core/forms';\r\nimport { SdCustomValidator } from '@sd-angular/core/forms/models';\r\nimport { SdFormGenericNumber, SdFormGenericTextfield } from '../../../../../../models';\r\nimport { ComponentViewedPipe } from '../../../../../../pipes';\r\nimport { SdInputNumber } from '@sd-angular/core/forms/input-number';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-number',\r\n templateUrl: './number.component.html',\r\n styleUrls: ['./number.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdInputNumber,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n ],\r\n})\r\nexport class NumberComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n component?: SdFormGenericNumber;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericNumber) {\r\n this.component = val;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n } @else {\r\n <sd-input-number\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [helperText]=\"component.helperText\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [max]=\"component.validate?.max\"\r\n [min]=\"component.validate?.min\"></sd-input-number>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdDate } from '@sd-angular/core/forms/date';\r\nimport { SdDatetime } from '@sd-angular/core/forms/datetime';\r\nimport { SdFormGenericDatetime } from '../../../../../../models';\r\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { Router } from '@angular/router';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\n\r\n@Component({\r\n selector: 'lib-datetime',\r\n templateUrl: './datetime.component.html',\r\n styleUrls: ['./datetime.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdDate,\r\n SdDatetime,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n HyperlinkPipe,\r\n ],\r\n})\r\nexport class DatetimeComponent {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n // Mặc định là date\r\n subtype?: SdFormGenericDatetime['subtype'] = 'date';\r\n component?: SdFormGenericDatetime;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericDatetime) {\r\n this.component = val;\r\n this.subtype = this.component?.subtype || 'date';\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private router: Router, private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n onNavigate = (url: string) => {\r\n if (url?.startsWith('http')) {\r\n window.open(url);\r\n } else {\r\n const [path, queryString] = url?.split('?');\r\n const queryParams = SdUtilities.parseQueryParams(queryString);\r\n this.router.navigate([path], { queryParams });\r\n }\r\n };\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n @if (component.properties?.hyperlink) {\r\n @let url = component.properties!.hyperlink | hyperlink: entity;\r\n <!-- Nếu có hyperlink thì dùng thẻ a -->\r\n <a href=\"javascript:;\" (click)=\"onNavigate(url)\">{{ entity[component.key!] | componentViewed: entity : component | async }}</a>\r\n } @else {\r\n <!-- Ngoài ra dùng thẻ mặc định -->\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n }\r\n } @else if (subtype === 'date') {\r\n <sd-date\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [helperText]=\"component.helperText\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [min]=\"component.validate?.min\"\r\n [max]=\"component.validate?.max\"\r\n [disabled]=\"disabled\"></sd-date>\r\n } @else {\r\n <sd-datetime\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [helperText]=\"component.helperText\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [min]=\"component.validate?.min\"\r\n [max]=\"component.validate?.max\"\r\n [disabled]=\"disabled\"></sd-datetime>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdAutocomplete, SdSearch, SdSelect } from '@sd-angular/core/forms';\r\nimport { SdCustomValidator } from '@sd-angular/core/forms/models';\r\nimport { SdUtilities, StringUtilities } from '@sd-angular/core/utilities';\r\n// import { sha1 } from 'object-hash';\r\nimport { debounceTime, filter, startWith, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericSelect, SdFormGenericSelectionItem } from '../../../../../../models';\r\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\r\nimport { FormGenericService } from '../../../../../../services';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'lib-select',\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdSelect,\r\n SdAutocomplete,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n HyperlinkPipe,\r\n ],\r\n})\r\nexport class SelectComponent implements AfterViewInit, OnDestroy {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n form = new FormGroup({});\r\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\r\n if (this.form !== form) {\r\n this.form = form;\r\n this.#inputChanges.next();\r\n }\r\n }\r\n entity: Record<string, any> = {};\r\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n this.#inputChanges.next();\r\n }\r\n }\r\n\r\n component!: SdFormGenericSelect;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericSelect) {\r\n this.component = val;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n validator?: SdCustomValidator;\r\n @Input('validator') set _validator(validator: SdCustomValidator | undefined) {\r\n if (validator && this.validator !== validator) {\r\n this.validator = validator;\r\n }\r\n }\r\n\r\n items: SdFormGenericSelectionItem[] | SdSearch = [];\r\n\r\n #subscription = new Subscription();\r\n #inputChanges = new Subject<void>();\r\n constructor(\r\n private router: Router,\r\n private ref: ChangeDetectorRef,\r\n private readonly formRenderService: FormGenericService\r\n ) {}\r\n\r\n #hashedQuery?: string;\r\n hashedValues?: string;\r\n #generateQuery = (query: string | Record<string, any> | undefined, data: Record<string, any>): Record<string, any> => {\r\n let result: Record<string, any> = {};\r\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\r\n if (typeof query === 'string') {\r\n try {\r\n result = JSON.parse(query);\r\n } catch (err) {\r\n console.error(err);\r\n return result;\r\n }\r\n } else if (Array.isArray(query)) {\r\n return result;\r\n } else {\r\n result = { ...query };\r\n }\r\n // Xử lý query,\r\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\"}\r\n for (const key of Object.keys({ ...result })) {\r\n // Xử ly\r\n result[key] = StringUtilities.templateToDisplay(result[key], data);\r\n if (result[key] === 'true') {\r\n result[key] = true;\r\n }\r\n if (result[key] === 'false') {\r\n result[key] = false;\r\n }\r\n if (result[key] === '') {\r\n delete result[key];\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\r\n const hashedValues = SdUtilities.hash(values);\r\n if (this.hashedValues !== hashedValues) {\r\n this.hashedValues = hashedValues;\r\n this.#inputChanges.next();\r\n }\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#inputChanges.pipe(startWith('')).subscribe(async () => {\r\n // Trạng thái viewed thì không cần check\r\n if (!this.viewed && this.component && !this.component?.properties?.viewed) {\r\n const values = { ...this.entity, ...this.form.value };\r\n const query = this.#generateQuery(this.component?.properties?.query, values);\r\n const hashedQuery = SdUtilities.hash(query);\r\n // Nếu query có thay đổi thì thực hiện gán lại items\r\n if (hashedQuery !== this.#hashedQuery) {\r\n this.#hashedQuery = hashedQuery;\r\n this.items = await this.formRenderService.selection.items(this.component?.valuesKey, {\r\n entity: values,\r\n component: this.component,\r\n query,\r\n });\r\n this.ref.markForCheck();\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChanges = async () => {\r\n const setVariables = this.component.properties?.setVariables;\r\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ị\r\n if (this.component.valuesKey && setVariables) {\r\n // Lấy thông tin detail\r\n const values = { ...this.entity, ...this.form.value };\r\n const query = this.#generateQuery(this.component?.properties?.query, values);\r\n const detail = await this.formRenderService.selection.variables.detail(this.component.valuesKey, this.entity[this.component.key], {\r\n entity: this.entity,\r\n component: this.component,\r\n query,\r\n });\r\n // Nếu có detail thì thực hiện setVariables\r\n if (detail) {\r\n // Đi qua từng key của component sẽ gán giá trị\r\n for (const key of Object.keys(setVariables)) {\r\n try {\r\n const value = StringUtilities.parseExpression(setVariables[key], detail);\r\n // Thực hiện gán giá trị\r\n this.entity[key] = value;\r\n // Thông báo setVariables để component (nếu đang hiển thị) biết và thực hiện re-render hay markForCheck()\r\n this.setVariables.next({ key, value });\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n onNavigate = (url: string) => {\r\n if (url?.startsWith('http')) {\r\n window.open(url);\r\n } else {\r\n const [path, queryString] = url?.split('?');\r\n const queryParams = SdUtilities.parseQueryParams(queryString);\r\n this.router.navigate([path], { queryParams });\r\n }\r\n };\r\n}\r\n","@if (entity && component) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n @if (component.properties?.hyperlink) {\r\n @let url = component.properties!.hyperlink | hyperlink: entity;\r\n <!-- Nếu có hyperlink thì dùng thẻ a -->\r\n <a href=\"javascript:;\" (click)=\"onNavigate(url)\">{{ entity[component.key!] | componentViewed: entity : component | async }}</a>\r\n } @else {\r\n <!-- Ngoài ra dùng thẻ mặc định -->\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n }\r\n } @else {\r\n @if (component.properties?.multiple) {\r\n <sd-select\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key]\"\r\n [required]=\"required\"\r\n [validator]=\"validator\"\r\n [disabled]=\"disabled\"\r\n [items]=\"items\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n disabledField=\"disabled\"\r\n (sdChange)=\"onChanges()\"\r\n multiple></sd-select>\r\n } @else {\r\n <sd-autocomplete\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key]\"\r\n [required]=\"required\"\r\n [validator]=\"validator\"\r\n [disabled]=\"disabled\"\r\n [items]=\"items\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChanges()\"></sd-autocomplete>\r\n }\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdRadio } from '@sd-angular/core/forms';\r\nimport { filter, startWith, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericRadio, SdFormGenericSelectionItem } from '../../../../../../models';\r\nimport { ComponentViewedPipe, HyperlinkPipe } from '../../../../../../pipes';\r\nimport { FormGenericService } from '../../../../../../services';\r\nimport { Router } from '@angular/router';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\n\r\n@Component({\r\n selector: 'lib-radio',\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdRadio,\r\n // Pipe cho phần viewed\r\n ComponentViewedPipe,\r\n HyperlinkPipe\r\n ],\r\n})\r\nexport class RadioComponent implements AfterViewInit, OnDestroy {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n form = new FormGroup({});\r\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\r\n if (this.form !== form) {\r\n this.form = form;\r\n this.#changes.next();\r\n }\r\n }\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n this.#changes.next();\r\n }\r\n }\r\n\r\n component!: SdFormGenericRadio;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericRadio) {\r\n if (this.component !== val) {\r\n this.component = val;\r\n this.#changes.next();\r\n }\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n const viewed = val === '' || !!val;\r\n if (this.viewed !== viewed) {\r\n this.viewed = viewed;\r\n this.#changes.next();\r\n }\r\n }\r\n\r\n items: SdFormGenericSelectionItem[] = [];\r\n\r\n #subscription = new Subscription();\r\n #changes = new Subject<void>();\r\n constructor(\r\n private router: Router,\r\n private ref: ChangeDetectorRef,\r\n private readonly formGenericService: FormGenericService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(startWith('')).subscribe(async () => {\r\n // Trạng thái viewed thì không cần check\r\n if (!this.viewed && this.component && !this.component?.properties?.viewed) {\r\n const values = { ...this.entity, ...this.form.value };\r\n const items = await this.formGenericService.selection.items(this.component.valuesKey, {\r\n entity: values,\r\n component: this.component,\r\n });\r\n // Với radio thì selection buộc phải là values, không phải là lazyValues\r\n if (Array.isArray(items)) {\r\n this.items = items;\r\n } else {\r\n this.items = [];\r\n }\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onNavigate = (url: string) => {\r\n if (url?.startsWith('http')) {\r\n window.open(url);\r\n } else {\r\n const [path, queryString] = url?.split('?');\r\n const queryParams = SdUtilities.parseQueryParams(queryString);\r\n this.router.navigate([path], { queryParams });\r\n }\r\n };\r\n}\r\n","@if (entity && component) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n @if (component.properties?.hyperlink) {\r\n @let url = component.properties!.hyperlink | hyperlink: entity;\r\n <!-- Nếu có hyperlink thì dùng thẻ a -->\r\n <a href=\"javascript:;\" (click)=\"onNavigate(url)\">{{ entity[component.key!] | componentViewed: entity : component | async }}</a>\r\n } @else {\r\n <!-- Ngoài ra dùng thẻ mặc định -->\r\n <div class=\"T16M\">{{ entity[component.key!] | componentViewed: entity : component | async }}</div>\r\n }\r\n } @else {\r\n <sd-radio\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [name]=\"component.key\"\r\n [autoId]=\"component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [items]=\"items\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [display]=\"component.properties?.direction\"></sd-radio>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdUploadFile } from '@sd-angular/core/components/upload-file';\r\nimport { SdCustomValidator } from '@sd-angular/core/forms/models';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericUpload } from '../../../../../../models';\r\n\r\n@Component({\r\n selector: 'lib-upload',\r\n templateUrl: './upload.component.html',\r\n styleUrls: ['./upload.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule, SdUploadFile],\r\n})\r\nexport class UploadComponent implements OnDestroy {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @ViewChild(SdUploadFile) sdUploadFile?: SdUploadFile;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n this.#changes.next();\r\n }\r\n }\r\n\r\n component?: SdFormGenericUpload;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericUpload) {\r\n this.component = val;\r\n this.#changes.next();\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined | null) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n validator?: SdCustomValidator;\r\n @Input('validator') set _validator(validator: SdCustomValidator | undefined | null) {\r\n if (validator && this.validator !== validator) {\r\n this.validator = validator;\r\n }\r\n }\r\n\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n constructor(private readonly ref: ChangeDetectorRef) {}\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n\r\n upload = async () => {\r\n return await this.sdUploadFile?.upload();\r\n };\r\n}\r\n","@if (component && entity) {\r\n @if (viewed || component.properties?.viewed) {\r\n <div class=\"text-secondary\">{{ component.label || component.key }}</div>\r\n <sd-upload-file\r\n [type]=\"component.properties?.type\"\r\n [form]=\"form\"\r\n [model]=\"entity[component.key!]\"\r\n align=\"left\"\r\n [args]=\"component.properties?.args\"\r\n disabled\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"></sd-upload-file>\r\n } @else {\r\n <sd-upload-file\r\n [type]=\"component.properties?.type\"\r\n [form]=\"form\"\r\n [label]=\"component.label || component.key\"\r\n [(model)]=\"entity[component.key!]\"\r\n [max]=\"component.properties?.max\"\r\n [maxSize]=\"component.properties?.maxSize\"\r\n [extensions]=\"component.properties?.extensions\"\r\n [args]=\"component.properties?.args\"\r\n align=\"left\"\r\n [required]=\"component.validate?.required || required\"\r\n [disabled]=\"disabled\"\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"></sd-upload-file>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n QueryList,\r\n ViewChild,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdSideDrawer } from '@sd-angular/core/components/side-drawer';\r\nimport { SdTabelCellDefDirective, SdTable, SdTableColumn, SdTableOption } from '@sd-angular/core/components/table';\r\nimport { SdUploadFile } from '@sd-angular/core/components/upload-file';\r\nimport { SdAutocomplete, SdInput, SdInputNumber, SdRadio, SdSearch } from '@sd-angular/core/forms';\r\nimport { filter, startWith, Subject, Subscription } from 'rxjs';\r\nimport {\r\n SdFormGenericTableColumn,\r\n SdFormGenericSelectionItem,\r\n SdFormGenericTable,\r\n SdFormGenericSelectionStaticItem,\r\n} from '../../../../../../models';\r\nimport { FormGenericService } from '../../../../../../services';\r\nimport { SdDate } from '@sd-angular/core/forms/date';\r\nimport { SdDatetime } from '@sd-angular/core/forms/datetime';\r\n\r\n@Component({\r\n selector: 'lib-table',\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n SdInput,\r\n SdInputNumber,\r\n SdAutocomplete,\r\n SdUploadFile,\r\n SdTable,\r\n SdTabelCellDefDirective,\r\n SdSideDrawer,\r\n SdButton,\r\n SdUploadFile,\r\n SdRadio,\r\n SdDate,\r\n SdDatetime,\r\n // Pipe cho phần viewed\r\n ],\r\n})\r\nexport class TableComponent implements AfterViewInit, OnDestroy {\r\n @ViewChildren(SdUploadFile) uploadFiles?: QueryList<SdUploadFile>;\r\n @ViewChild(SdTable) table?: SdTable;\r\n @ViewChild(SdSideDrawer) sideDrawer?: SdSideDrawer;\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n component?: SdFormGenericTable;\r\n col = 'col-6 px-8';\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericTable) {\r\n this.component = val;\r\n this.col = `col-${this.component?.layout?.columns || '6'} px-8`;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = val === '' || val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n this.#tableChanges.next();\r\n }\r\n\r\n model: any[] = [];\r\n @Input('model') set _model(val: any[] | undefined | null) {\r\n val = val || [];\r\n if (this.model !== val) {\r\n this.model = val;\r\n this.#modelChanges.next(val);\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<any[]>();\r\n\r\n #tableChanges = new Subject<void>();\r\n #modelChanges = new Subject<string[]>();\r\n #subscription = new Subscription();\r\n tableOption?: SdTableOption;\r\n row: any = {};\r\n columnValues: Record<string, SdFormGenericSelectionItem[] | SdSearch> = {};\r\n formRenderColumn: Record<string, SdFormGenericTableColumn> = {};\r\n // Lấy những fileColumns để định nghĩa cellDef tương ứng\r\n fileKeys: string[] = [];\r\n imageKeys: string[] = [];\r\n\r\n #selectedIndex = -1;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private readonly formGenericService: FormGenericService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.model = variable.value;\r\n this.#modelChanges.next(this.model);\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#tableChanges.pipe(startWith('')).subscribe(async () => {\r\n await this.#initTable();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n // Khi giá trị thay đổi thì reload lại\r\n this.#subscription.add(\r\n this.#modelChanges.pipe(startWith(this.model)).subscribe(async () => {\r\n await this.#reload();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n #initTable = async () => {\r\n // Xử lý columns\r\n const columns: SdTableColumn[] = [];\r\n //console.log( this.component?.columns)\r\n for (const column of this.component?.columns || []) {\r\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\r\n this.formRenderColumn[column.key] = column;\r\n const { type, key, label, width } = column;\r\n if (type === 'string') {\r\n columns.push({\r\n type: 'string',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'number') {\r\n columns.push({\r\n type: 'number',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'boolean') {\r\n columns.push({\r\n type: 'boolean',\r\n field: key,\r\n title: label,\r\n width,\r\n option: {\r\n displayOnTrue: column.displayOnTrue,\r\n displayOnFalse: column.displayOnFalse,\r\n },\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'date') {\r\n columns.push({\r\n type: 'date',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'datetime') {\r\n columns.push({\r\n type: 'datetime',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'radio') {\r\n const { values } = column;\r\n columns.push({\r\n type: 'values',\r\n field: key,\r\n title: label,\r\n width: width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n option: {\r\n items: values || [],\r\n valueField: 'value',\r\n displayField: 'display',\r\n },\r\n });\r\n } else if (type === 'values') {\r\n const { valuesKey } = column;\r\n this.columnValues[key] = await this.formGenericService.selection.items(valuesKey, {\r\n component: this.component,\r\n column,\r\n entity: this.form.value,\r\n });\r\n if (this.columnValues[key]) {\r\n if (Array.isArray(this.columnValues[key])) {\r\n const items = this.columnValues[key];\r\n columns.push({\r\n type: 'values',\r\n field: key,\r\n title: label,\r\n width: width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n option: {\r\n items: this.columnValues[key],\r\n valueField: 'value',\r\n displayField: 'display',\r\n },\r\n transform: value => {\r\n return items.find(t => t.value === value)?.display || '--';\r\n },\r\n });\r\n } else {\r\n columns.push({\r\n type: 'lazy-values',\r\n field: key,\r\n title: label,\r\n width: width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n option: {\r\n items: this.columnValues[key],\r\n valueField: 'value',\r\n displayField: 'display',\r\n },\r\n });\r\n }\r\n }\r\n } else if (type === 'image') {\r\n // Ảnh hay file thì đều là string, nhưng sẽ dùng cellDef để can thiệp hiển thị\r\n this.imageKeys.push(key); // Ghi nhận lại cột nào là image để can thiệp cellDef\r\n columns.push({\r\n type: 'string',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n } else if (type === 'file') {\r\n // Ảnh hay file thì đều là string, nhưng sẽ dùng cellDef để can thiệp hiển thị\r\n this.fileKeys.push(key); // Ghi nhận lại cột nào là file để can thiệp cellDef\r\n columns.push({\r\n type: 'string',\r\n field: key,\r\n title: label,\r\n width,\r\n filter: {\r\n disabled: true, // Không cần filter\r\n },\r\n });\r\n }\r\n //console.log( this.imageKeys ,this.fileKeys )\r\n }\r\n // await this.#onLoaded();\r\n this.tableOption = {\r\n type: 'local',\r\n key: this.component?.key,\r\n reload: { visible: false },\r\n config: { visible: false },\r\n paginate: {\r\n hidden: true,\r\n pageSize: 100,\r\n },\r\n style: {\r\n maxHeight: '400px',\r\n },\r\n filter: {\r\n disabled: true,\r\n },\r\n items: () => {\r\n return this.model || [];\r\n },\r\n commands: [\r\n {\r\n icon: 'edit',\r\n fontSet: 'material-icons-outlined',\r\n click: rowData => {\r\n this.onDetail(rowData);\r\n },\r\n hidden: !!this.viewed || !!this.component?.properties?.viewed,\r\n },\r\n {\r\n icon: 'delete',\r\n fontSet: 'material-icons-outlined',\r\n click: rowData => {\r\n const idx = this.model?.indexOf(rowData);\r\n this.model?.splice(idx, 1);\r\n this.table?.reload().then(() => this.ref.markForCheck());\r\n },\r\n hidden: !!this.viewed || !!this.component?.properties?.viewed,\r\n },\r\n ],\r\n columns,\r\n };\r\n };\r\n\r\n #reload = () => {\r\n return this.table?.reload?.();\r\n };\r\n\r\n // #onLoaded = async () => {\r\n // for (const item of this.model || []) {\r\n // for (const column of this.fileColumns) {\r\n // const values = item?.[column.key];\r\n // if (Array.isArray(values) && values.length) {\r\n // const res = await this.documentService.downloadUrls(values);\r\n // item[column.key] = res.map((e) => e.pre_signed_url);\r\n // }\r\n // }\r\n // }\r\n // };\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onDetail = (row?: any) => {\r\n if (row) {\r\n this.#selectedIndex = this.model.indexOf(row);\r\n this.row = row;\r\n } else {\r\n this.#selectedIndex = -1;\r\n this.row = {};\r\n }\r\n this.form.markAsUntouched();\r\n this.form.markAsPristine();\r\n this.sideDrawer?.open();\r\n };\r\n\r\n onCancel = () => {\r\n this.sideDrawer?.close();\r\n };\r\n\r\n onAccept = (addable?: boolean) => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n // Nếu là cập nhật thì cập nhật vào trường tương ứng\r\n if (this.#selectedIndex >= 0) {\r\n this.model[this.#selectedIndex] = this.row;\r\n } else {\r\n this.model = [...(this.model || []), this.row];\r\n }\r\n\r\n this.modelChange.emit(this.model);\r\n this.table?.reload();\r\n this.ref.markForCheck();\r\n if (!addable) {\r\n // Nếu không thêm dòng nữa thì đóng luôn\r\n this.sideDrawer?.close();\r\n } else {\r\n // Thêm dòng nữa nhanh\r\n this.onDetail();\r\n }\r\n };\r\n\r\n onFileUploadChange(item: any, key: string, newValue: any) {\r\n item[key] = newValue;\r\n this.modelChange.emit(this.model);\r\n }\r\n\r\n getArgs(key: string): Record<string, any> | undefined {\r\n const col = this.formRenderColumn[key];\r\n if (col?.type === 'file' || col?.type === 'image') {\r\n return col.args;\r\n }\r\n return undefined;\r\n }\r\n\r\n\r\n upload = async () => {\r\n if (this.uploadFiles?.length) {\r\n // Thực hiện upload tất cả các file đã chọn\r\n await Promise.all(this.uploadFiles.map(uploadFile => uploadFile.upload()));\r\n }\r\n };\r\n}\r\n","@if(component && tableOption) {\r\n <div style=\"width: 100%\">\r\n <sd-table [option]=\"tableOption\">\r\n @for(key of imageKeys; track key) {\r\n <ng-template [sdTableCellDef]=\"key\" let-item=\"item\">\r\n <sd-upload-file\r\n type=\"image\"\r\n [model]=\"item[key]\"\r\n [args]=\"getArgs(key)\"\r\n (modelChange)=\"onFileUploadChange(item, key, $event)\"\r\n align=\"left\"\r\n disabled\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"></sd-upload-file>\r\n </ng-template>\r\n }\r\n @for(key of fileKeys; track key) {\r\n <ng-template [sdTableCellDef]=\"key\" let-item=\"item\">\r\n <sd-upload-file\r\n [model]=\"item[key]\"\r\n [args]=\"getArgs(key)\"\r\n (modelChange)=\"onFileUploadChange(item, key, $event)\"\r\n align=\"left\"\r\n disabled\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"></sd-upload-file>\r\n </ng-template>\r\n }\r\n </sd-table>\r\n @if(!viewed && !component.properties?.viewed) {\r\n <sd-button\r\n prefixIcon=\"add\"\r\n color=\"primary\"\r\n (click)=\"onDetail()\"\r\n [title]=\"component.properties?.titleButtonCreate || 'Thêm mới'\"></sd-button>\r\n }\r\n @if(!viewed && !component.properties?.viewed) {\r\n <sd-side-drawer title=\"Chi tiết\" width=\"500px\">\r\n <div sdTitle>\r\n <span>Tạo mới/cập nhật</span>\r\n </div>\r\n <div sdBody class=\"c-table-create-update\">\r\n @if(!!component.columns?.length) {\r\n <div class=\"row mx-0\">\r\n @for(column of component.columns;track column.key) {\r\n @let validate = formRenderColumn[column.key].validate;\r\n <div class=\"col-12 px-0 mt-16\">\r\n @if(column.type === 'string') {\r\n <sd-input\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [(model)]=\"row[column.key]\"\r\n [required]=\"validate?.required\"\r\n [pattern]=\"column.validate?.pattern\"\r\n [patternErrorMessage]=\"column.validate?.patternErrorMessage\"></sd-input>\r\n }@else if(column.type === 'number') {\r\n <sd-input-number\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [(model)]=\"row[column.key]\"\r\n [required]=\"validate?.required\"\r\n [min]=\"column.validate?.min\"></sd-input-number>\r\n }@else if(column.type === 'radio') {\r\n <sd-radio\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [name]=\"column.key\"\r\n [items]=\"column.values\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [required]=\"validate?.required\"></sd-radio>\r\n }@else if(column.type === 'values') {\r\n <sd-autocomplete\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [(model)]=\"row[column.key]\"\r\n [items]=\"columnValues[column.key]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [required]=\"validate?.required\"></sd-autocomplete>\r\n }@else if(column.type === 'date') {\r\n <sd-date\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [(model)]=\"row[column.key]\"\r\n [required]=\"validate?.required\"></sd-date>\r\n }@else if(column.type === 'datetime') {\r\n <sd-datetime\r\n [form]=\"form\"\r\n [label]=\"column.label\"\r\n [(model)]=\"row[column.key]\"\r\n [required]=\"validate?.required\"></sd-datetime>\r\n }@else if(column.type === 'image') {\r\n <sd-upload-file\r\n [label]=\"column.label\"\r\n type=\"image\"\r\n [(model)]=\"row[column.key]\"\r\n [args]=\"column.args\"\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"\r\n align=\"left\"></sd-upload-file>\r\n }@else if (column.type === 'file') {\r\n <sd-upload-file\r\n [label]=\"column.label\"\r\n type=\"file\"\r\n [(model)]=\"row[column.key]\"\r\n [args]=\"column.args\"\r\n previewWidth=\"50px\"\r\n previewHeight=\"50px\"\r\n align=\"left\"></sd-upload-file>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n \r\n </div>\r\n <div sdFooter class=\"text-right pr-16\">\r\n <sd-button title=\"Lưu\" prefixIcon=\"save\" color=\"primary\" type=\"fill\" (click)=\"onAccept()\"></sd-button>\r\n </div>\r\n </sd-side-drawer>\r\n }\r\n </div>\r\n}\r\n\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdUtilities, StringUtilities } from '@sd-angular/core/utilities';\r\n// import { sha1 } from 'object-hash';\r\nimport { debounceTime, filter, startWith, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericHtml } from '../../../../../../models';\r\nimport { HtmlPipe } from '../../../../../../pipes';\r\nimport { FormGenericService } from '../../../../../../services';\r\n\r\n@Component({\r\n selector: 'lib-html',\r\n templateUrl: './html.component.html',\r\n styleUrls: ['./html.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [HtmlPipe],\r\n})\r\nexport class HtmlComponent implements AfterViewInit, OnDestroy {\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n\r\n form = new FormGroup({});\r\n @Input({ alias: 'form', required: true }) set _form(form: FormGroup) {\r\n if (this.form !== form) {\r\n this.form = form;\r\n this.#inputChanges.next();\r\n }\r\n }\r\n\r\n entity: Record<string, any> = {};\r\n @Input({ alias: 'entity', required: true }) set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n this.#inputChanges.next();\r\n }\r\n }\r\n\r\n // Khi 1 giá trị trong entity thay đổi thì hashedValues sẽ thay đổi\r\n // Mong muốn khi hashedValues thay đổi thì trigger changes để trigger lại hàm lấy thông tin items\r\n @Input('hashedValues') set _hashedValues(val: string | undefined) {\r\n this.#inputChanges.next();\r\n }\r\n component!: SdFormGenericHtml;\r\n key!: string;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\r\n this.component = component;\r\n this.key = component.key || component.id;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined | null) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n #subscription = new Subscription();\r\n #inputChanges = new Subject<void>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private readonly formRenderService: FormGenericService\r\n ) {}\r\n\r\n #hashedQuery?: string;\r\n hashedValues?: string;\r\n #generateQuery = (query: string | Record<string, any> | undefined, data: Record<string, any>): Record<string, any> => {\r\n let result: Record<string, any> = {};\r\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\r\n if (typeof query === 'string') {\r\n try {\r\n result = JSON.parse(query);\r\n } catch (err) {\r\n console.error(err);\r\n return result;\r\n }\r\n } else if (Array.isArray(query)) {\r\n return result;\r\n } else {\r\n result = { ...query };\r\n }\r\n // Xử lý query,\r\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\"}\r\n for (const key of Object.keys({ ...result })) {\r\n // Xử ly\r\n result[key] = StringUtilities.templateToDisplay(result[key], data);\r\n if (result[key] === 'true') {\r\n result[key] = true;\r\n }\r\n if (result[key] === 'false') {\r\n result[key] = false;\r\n }\r\n if (result[key] === '') {\r\n delete result[key];\r\n }\r\n }\r\n return result;\r\n };\r\n\r\n async ngOnInit() {\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => variable.key === this.component?.key)).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.ref.markForCheck();\r\n })\r\n );\r\n if (!this.component.template) {\r\n // Nếu HTML không phải từ template thì giá trị = content\r\n this.entity[this.key] = this.component.content;\r\n } else if (!this.component.properties?.queries?.length) {\r\n // Nếu HTML từ static template (không có queries)\r\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template);\r\n this.ref.markForCheck();\r\n } else if (this.viewed || this.component?.properties?.viewed) {\r\n // Đây là trạng thái view của HTML từ template có query\r\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\r\n this.entity[this.key] = this.entity[this.key] || this.component.content;\r\n /* const values = { ...this.entity, ...this.form.value };\r\n const query = this.#generateQuery(this.component?.properties?.query, values);\r\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template, query);\r\n this.ref.markForCheck(); */\r\n } else {\r\n // Nếu có queries thì lắng nghe thay đổi của form\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\r\n const hashedValues = SdUtilities.hash(values);\r\n if (this.hashedValues !== hashedValues) {\r\n this.hashedValues = hashedValues;\r\n this.#inputChanges.next();\r\n }\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#inputChanges.pipe(startWith('')).subscribe(async () => {\r\n const values = { ...this.entity, ...this.form.value };\r\n const query = this.#generateQuery(this.component?.properties?.query, values);\r\n const hashedQuery = SdUtilities.hash(query);\r\n // Nếu query có thay đổi thì thực hiện gán lại items\r\n if (hashedQuery !== this.#hashedQuery) {\r\n this.#hashedQuery = hashedQuery;\r\n this.entity[this.key] = await this.formRenderService.html.getContent(this.component.template!, query)\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngAfterViewInit() {}\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component && entity) {\r\n <div [innerHTML]=\"entity[key] | htmlPipe: entity[key] : component\"></div>\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdCustomValidator } from '@sd-angular/core/forms/models';\r\nimport { SdFormGenericComponent } from '../../../../models';\r\nimport { HtmlPipe } from '../../../../pipes';\r\nimport {\r\n ChipCalendarComponent,\r\n ChipStringComponent,\r\n DatetimeComponent,\r\n NumberComponent,\r\n RadioComponent,\r\n SelectComponent,\r\n TableComponent,\r\n TextareaComponent,\r\n TextfieldComponent,\r\n UploadComponent,\r\n} from './components';\r\nimport { Subject } from 'rxjs';\r\nimport { HtmlComponent } from \"./components/html/html.component\";\r\n\r\n@Component({\r\n selector: 'lib-item',\r\n templateUrl: './item.component.html',\r\n styleUrls: ['./item.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n TextfieldComponent,\r\n TextareaComponent,\r\n ChipStringComponent,\r\n ChipCalendarComponent,\r\n NumberComponent,\r\n DatetimeComponent,\r\n SelectComponent,\r\n RadioComponent,\r\n TableComponent,\r\n UploadComponent,\r\n HtmlComponent\r\n],\r\n})\r\nexport class LibItemComponent {\r\n @ViewChild(UploadComponent) itemUpload?: UploadComponent;\r\n @ViewChild(TableComponent) itemTable?: TableComponent;\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup({});\r\n value: any;\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n col = 'col-6 px-8 py-8';\r\n component?: SdFormGenericComponent;\r\n @Input({\r\n alias: 'component',\r\n required: true,\r\n })\r\n set _component(val: SdFormGenericComponent) {\r\n this.component = val;\r\n this.col = `col-${this.component?.layout?.columns || '6'} px-8 py-8`;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: boolean | '' | undefined) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n required = false;\r\n @Input('required') set _required(val: boolean | '' | undefined) {\r\n this.required = val === '' || !!val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '' | undefined) {\r\n this.viewed = val === '' || !!val;\r\n }\r\n\r\n validator?: SdCustomValidator;\r\n @Input('validator') set _validator(validator: SdCustomValidator) {\r\n if (validator && this.validator !== validator) {\r\n this.validator = validator;\r\n }\r\n }\r\n\r\n // Thực hiện upload nếu có component upload\r\n // TODO: Bổ sung logic upload cho table\r\n upload = async () => {\r\n await this.itemUpload?.upload?.();\r\n await this.itemTable?.upload?.();\r\n };\r\n\r\n // items: SdSearch = (args)=> {\r\n // const { } = args;\r\n // }\r\n\r\n // onSelect = (data: BaseEntity | BaseEntity[]) => {\r\n // if (Array.isArray(data)) {\r\n // this.entity[this.component.key] = data.map(selected => selected?.id).filter(val => !!val);\r\n // } else {\r\n // this.entity[this.component.key] = data?.id;\r\n // }\r\n // };\r\n}\r\n","@if (entity && component) {\r\n @if (component.type === 'textfield') {\r\n <div [class]=\"col\">\r\n <lib-textfield\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [validator]=\"validator\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-textfield>\r\n </div>\r\n } @else if (component.type === 'textarea') {\r\n <div [class]=\"col\">\r\n <lib-textarea\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-textarea>\r\n </div>\r\n } @else if (component.type === 'chip-string') {\r\n <div [class]=\"col\">\r\n <lib-chip-string\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-chip-string>\r\n </div>\r\n } @else if (component.type === 'chip-calendar') {\r\n <div [class]=\"col\">\r\n <lib-chip-calendar\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-chip-calendar>\r\n </div>\r\n } @else if (component.type === 'number') {\r\n <div [class]=\"col\">\r\n <lib-number\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-number>\r\n </div>\r\n }\r\n @if (component.type === 'select') {\r\n <div [class]=\"col\">\r\n <lib-select\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [component]=\"component\"\r\n [entity]=\"entity\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [validator]=\"validator\"\r\n [viewed]=\"viewed\"></lib-select>\r\n </div>\r\n } @else if (component.type === 'radio') {\r\n <div [class]=\"col\">\r\n <lib-radio\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [component]=\"component\"\r\n [entity]=\"entity\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-radio>\r\n </div>\r\n } @else if (component.type === 'datetime') {\r\n <div [class]=\"col\">\r\n <lib-datetime\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [viewed]=\"viewed\"></lib-datetime>\r\n </div>\r\n } @else if (component.type === 'upload') {\r\n <div [class]=\"col\">\r\n <lib-upload\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [component]=\"component\"\r\n [entity]=\"entity\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [validator]=\"validator\"\r\n [viewed]=\"viewed\">\r\n </lib-upload>\r\n </div>\r\n } @else if (component.type === 'table') {\r\n <div [class]=\"col\">\r\n <lib-table [setVariables]=\"setVariables\" [component]=\"component\" [(model)]=\"entity[component.key!]\" [viewed]=\"viewed\"></lib-table>\r\n </div>\r\n } @else if (component.type === 'html') {\r\n <div [class]=\"col\">\r\n <lib-html [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" [component]=\"component\" [viewed]=\"viewed\"> </lib-html>\r\n </div>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormGenericVariable } from '../../../../models';\r\n\r\n@Component({\r\n selector: 'variable',\r\n templateUrl: './variable.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class VariableComponent {\r\n @Input({ required: true }) variables?: SdFormGenericVariable[];\r\n @Input({ required: true }) setVariables!: Subject<{ key: string; value: any }>;\r\n @Input() form = new FormGroup<any>({});\r\n entity: Record<string, any> = {};\r\n @Input({\r\n alias: 'entity',\r\n required: true,\r\n })\r\n set _entity(val: Record<string, any>) {\r\n if (this.entity !== val) {\r\n this.entity = val;\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n ngOnInit() {\r\n if (this.variables) {\r\n // Kiểm tra xem variable có trong form chưa, nếu có thì push vào form\r\n // Mục đích là khi variable bị thay đổi thì trigger được valueChanges và nơi khác lấy được variables\r\n for (const variable of this.variables) {\r\n if (!this.form.controls[variable.key]) {\r\n this.form.addControl(variable.key, new FormControl(this.entity?.[variable.key]));\r\n }\r\n }\r\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\r\n this.#subscription.add(\r\n this.setVariables.pipe(filter(variable => !!this.variables?.some(e => e.key === variable.key))).subscribe(variable => {\r\n this.entity[variable.key] = variable.value;\r\n this.form.setValue(this.entity);\r\n })\r\n );\r\n }\r\n }\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @angular-eslint/no-input-rename */\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n QueryList,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\n// import { sha1 } from 'object-hash';\r\nimport { SdBaseSecureComponent } from '@sd-angular/core/components/base';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { combineLatest, Subject, Subscription } from 'rxjs';\r\nimport { debounceTime, startWith } from 'rxjs/operators';\r\nimport { ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from '../../configurations';\r\nimport {\r\n ExpressionToJavascriptExpression,\r\n SdFormatComponent,\r\n SdFormRenderConfiguration,\r\n TemplateToCondition\r\n} from '../../models';\r\nimport { SdFormGenericValidation } from '../../models/form-generic-validation.model';\r\nimport { WhenExpressionPipe } from '../../pipes';\r\nimport { LibItemComponent, VariableComponent } from './components';\r\n\r\n@Component({\r\n selector: 'sd-form-render',\r\n templateUrl: './form-render.component.html',\r\n styleUrls: ['./form-render.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, LibItemComponent, WhenExpressionPipe, VariableComponent],\r\n})\r\nexport class SdFormRender extends SdBaseSecureComponent implements OnDestroy, AfterViewInit {\r\n @ViewChildren(LibItemComponent) formRenderItems: QueryList<LibItemComponent> = new QueryList<LibItemComponent>();\r\n @Input() form: FormGroup = new FormGroup({});\r\n configuration!: SdFormRenderConfiguration;\r\n @Input({ alias: 'configuration', required: true }) set _configuration(val: SdFormRenderConfiguration) {\r\n this.configuration = val;\r\n // Luôn format lại component trước khi render\r\n this.configuration?.components?.forEach(SdFormatComponent);\r\n this.#configurationChanges.next(this.configuration);\r\n }\r\n\r\n // Dựa vào giá trị default sẽ gán cho entity\r\n #defaultEntity: Record<string, any> = {};\r\n @Input('defaultEntity') set _default(defaultEntity: Record<string, any>) {\r\n this.#defaultEntity = defaultEntity;\r\n this.#defaultEntityChanges.next(defaultEntity);\r\n }\r\n\r\n entity: Record<string, any> = {};\r\n @Input('entity') set _entity(val: Record<string, any>) {\r\n this.entity = val;\r\n this.#entityChanges.next(this.entity);\r\n }\r\n\r\n properties: string[] = [];\r\n @Input('properties') set _properties(val: string[]) {\r\n this.properties = val;\r\n }\r\n\r\n viewed = false;\r\n @Input('viewed') set _viewed(val: boolean | '') {\r\n this.viewed = val === '' || val;\r\n }\r\n #subscription = new Subscription();\r\n #configurationChanges = new Subject<SdFormRenderConfiguration>();\r\n #defaultEntityChanges = new Subject<Record<string, any>>();\r\n #entityChanges = new Subject<Record<string, any>>();\r\n loadCompleted = false;\r\n hashedValues?: string;\r\n formValue: Record<string, any> = {};\r\n\r\n // Các component item của form-render sẽ lắng nghe thay đổi\r\n setVariables = new Subject<{ key: string; value: any }>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(SD_WORKFLOW_CONFIGURATION) private workflowConfiguration: ISdWorkflowConfiguration\r\n ) {\r\n super();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n combineLatest([this.#configurationChanges, this.#entityChanges])\r\n .pipe(startWith([]))\r\n .subscribe(async () => {\r\n if (this.entity && this.configuration?.components?.length) {\r\n this.loadCompleted = true;\r\n this.ref.markForCheck(); // Vì loadCompleted ko phải là @Input nên component sẽ ko load lại\r\n if (this.configuration?.onLoaded) {\r\n setTimeout(() => {\r\n this.configuration?.onLoaded?.();\r\n });\r\n }\r\n }\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#defaultEntityChanges.pipe(startWith(this.#defaultEntity)).subscribe(defaultEntity => {\r\n for (const key of Object.keys({ ...defaultEntity })) {\r\n this.entity[key] = this.entity[key] ?? defaultEntity[key];\r\n }\r\n this.form.setValue(this.entity);\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#entityChanges.pipe(startWith(this.entity)).subscribe(entity => {\r\n if (!this.form.controls['sdRaw']) {\r\n this.form.addControl('sdRaw', new FormControl({ ...entity }));\r\n } else {\r\n this.form.controls['sdRaw'].setValue({ ...entity });\r\n }\r\n })\r\n );\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500), startWith(this.form.value)).subscribe(values => {\r\n const hashedValues = SdUtilities.hash(values);\r\n if (this.hashedValues !== hashedValues) {\r\n this.hashedValues = hashedValues;\r\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\r\n this.formValue = { ...this.entity, ...values };\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n // Hàm này sẽ đi qua các components và các columns trong table để xử lý upload file\r\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\r\n upload = async () => {\r\n for (const formRenderItem of this.formRenderItems || []) {\r\n await formRenderItem.upload();\r\n }\r\n };\r\n\r\n // Nên gọi hàm này trước khi save/submit\r\n // Hàm này trả về mảng string error\r\n // Nếu không có error nào thì trả về mảng rỗng\r\n getValidationMessages = async (alert: SdFormGenericValidation['alert']) => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const messages: string[] = [];\r\n for (const validation of this.configuration?.validations?.filter(e => e.alert === alert) || []) {\r\n if (validation.type === 'expression') {\r\n const val = TemplateToCondition(ExpressionToJavascriptExpression(validation.expression), this.entity);\r\n if (!val) {\r\n continue;\r\n }\r\n try {\r\n const result = new Function('return ' + val)();\r\n if (typeof result === 'boolean') {\r\n if (result) {\r\n messages.push(validation.message);\r\n }\r\n } else {\r\n continue;\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n continue;\r\n }\r\n } else if (validation.type === 'function') {\r\n const func = this.workflowConfiguration?.form?.validation?.functions?.find(e => e.value === validation.code);\r\n if (func?.validate) {\r\n const message = await func.validate({\r\n entity: this.entity,\r\n });\r\n if (message) {\r\n messages.push(message);\r\n }\r\n }\r\n }\r\n }\r\n return messages;\r\n };\r\n}\r\n","@if (form && loadCompleted && hashedValues) {\r\n <div class=\"row mx-0\">\r\n @for (component of configuration.components; track component.id) {\r\n @let expression = hashedValues | whenExpression: component : formValue;\r\n @if (!expression.hidden) {\r\n @if (component.type === 'group') {\r\n @if (!!component.components.length) {\r\n <div class=\"col-12 mt-16\">\r\n <sd-section [title]=\"component.label\" [icon]=\"component.properties.icon\">\r\n <div class=\"row mx-0\">\r\n @for (childComponent of component.components; track childComponent.id) {\r\n @let childExpression = hashedValues | whenExpression: childComponent : formValue;\r\n @if (!childExpression.hidden) {\r\n <lib-item\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"childComponent\"\r\n [required]=\"childExpression.required\"\r\n [disabled]=\"childExpression.disabled\"\r\n [viewed]=\"viewed\"></lib-item>\r\n }\r\n }\r\n </div>\r\n </sd-section>\r\n </div>\r\n }\r\n } @else {\r\n <lib-item\r\n [setVariables]=\"setVariables\"\r\n [form]=\"form\"\r\n [entity]=\"entity\"\r\n [component]=\"component\"\r\n [required]=\"expression.required\"\r\n [disabled]=\"expression.disabled\"\r\n [viewed]=\"viewed\"></lib-item>\r\n }\r\n }\r\n }\r\n <variable [variables]=\"configuration.variables\" [setVariables]=\"setVariables\" [form]=\"form\" [entity]=\"entity\" ></variable>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatIcon, MatIconModule } from '@angular/material/icon';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { SdDatetime } from '@sd-angular/core/forms/datetime';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\nimport { SdInputNumber } from '@sd-angular/core/forms/input-number';\r\nimport { SdSelect } from '@sd-angular/core/forms/select';\r\nimport { ArrayUtilities, DateUtilities, SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport {\r\n Attribute,\r\n AttributeOperators,\r\n DayInfoPreviouses,\r\n DayInfoTypes,\r\n SdFormGenericExpression,\r\n SdFormGenericExpressionCondition,\r\n} from '../../../../models';\r\nimport { ExpressionQueryPipe } from '../../../../pipes';\r\nimport { SdSuffixDefDirective } from '@sd-angular/core/forms/directives';\r\n\r\n// Component xây dựng Expression dựa vào SdFormGenericExpression\r\n@Component({\r\n selector: 'expression-builder',\r\n templateUrl: './expression-builder.component.html',\r\n styleUrl: './expression-builder.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n SdInput,\r\n SdInputNumber,\r\n SdSelect,\r\n SdAutocomplete,\r\n SdButton,\r\n SdSelect,\r\n SdModal,\r\n ExpressionQueryPipe,\r\n SdDatetime,\r\n SdSuffixDefDirective,\r\n MatIconModule\r\n ],\r\n})\r\nexport class ExpressionBuilderComponent {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n form = new FormGroup({});\r\n attributeOperators = AttributeOperators;\r\n attributes: Attribute[] = [];\r\n numberAttributes: Attribute[] = [];\r\n dateAttributes: Attribute[] = [];\r\n attribute: Record<string, Attribute> = {};\r\n types = DayInfoTypes;\r\n previouses = DayInfoPreviouses;\r\n\r\n @Input() label?: string;\r\n\r\n @Input('attributes') set _attributes(attributes: Attribute[]) {\r\n this.attributes = attributes || [];\r\n this.numberAttributes = this.attributes\r\n .filter(e => e.type === 'number')\r\n .map(e => ({\r\n ...e,\r\n value: '${' + e.value + '}',\r\n }));\r\n this.dateAttributes = this.attributes\r\n .filter(e => e.type === 'datetime')\r\n .map(e => ({\r\n ...e,\r\n value: '${' + e.value + '}',\r\n }));\r\n this.attribute = ArrayUtilities.toObject('value', this.attributes);\r\n }\r\n\r\n expression?: SdFormGenericExpression = {\r\n key: SdUtilities.randomId(),\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n };\r\n model?: SdFormGenericExpression = {\r\n key: SdUtilities.randomId(),\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n };\r\n @Input({ alias: 'model', required: true }) set _model(model: SdFormGenericExpression | undefined) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n this.model = this.model || {\r\n key: SdUtilities.randomId(),\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n };\r\n }\r\n @Output() modelChange = new EventEmitter<SdFormGenericExpression>();\r\n @Output() sdChange = new EventEmitter<SdFormGenericExpression>();\r\n @Output() edit = new EventEmitter<void>();\r\n\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n onEdit = async () => {\r\n // Khi cập nhật expression thì clone ra\r\n this.expression = JSON.parse(JSON.stringify(this.model));\r\n // Thông báo cho component cha có sự kiện edit trong trường hợp attributes có thay đổi\r\n this.edit.next();\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n addCondition = (conditions: SdFormGenericExpression['conditions']) => {\r\n conditions.push({\r\n key: SdUtilities.randomId(),\r\n type: 'condition',\r\n field: undefined,\r\n operator: 'EQUAL',\r\n value: undefined,\r\n dayInfo: {},\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n addCombinator = (conditions: SdFormGenericExpression['conditions']) => {\r\n conditions.push({\r\n key: SdUtilities.randomId(),\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n remove = (conditions: SdFormGenericExpression['conditions'], idx: number) => {\r\n conditions.splice(idx, 1);\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n this.model = this.expression;\r\n this.modelChange.emit(this.model);\r\n this.sdChange.emit(this.model);\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n\r\n onChangeAttribute = (condition: SdFormGenericExpressionCondition) => {\r\n const fieldAttribute = this.attribute[condition.field!];\r\n if (fieldAttribute.type === 'datetime') {\r\n condition.dayInfo = condition.dayInfo || {};\r\n }\r\n };\r\n\r\n onChangeDateInfo = (condition: SdFormGenericExpressionCondition) => {\r\n // Xử lý giá trị\r\n if (condition.dayInfo?.type === 'NOW') {\r\n condition.value = 'now';\r\n } else if (condition.dayInfo?.type === 'RELATED' && condition.dayInfo.relatedValue) {\r\n condition.value = DayInfoPreviouses.find(e => e.value === condition.dayInfo.related)?.format(condition.dayInfo.relatedValue) ?? null;\r\n } else if (condition.value?.type === 'DATETIME' && condition.value) {\r\n condition.value = DateUtilities.toFormat(condition.value, 'yyyy/MM/dd HH:mm:00');\r\n }\r\n };\r\n}\r\n","<!-- <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ (model | expressionQuery) || '--' }}</a> -->\r\n<sd-input [label]=\"label\" style=\"width: 100%;\" [model]=\"(model | expressionQuery) || '--'\" disabled hideInlineError>\r\n <ng-template sdSuffixDef>\r\n <sd-button\r\n prefixIcon=\"edit\"\r\n color=\"primary\"\r\n (click)=\"onEdit()\"\r\n type=\"link\"></sd-button>\r\n </ng-template>\r\n</sd-input>\r\n@if (expression) {\r\n <sd-modal title=\"Thiết lập biểu thức\">\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button\r\n prefixIcon=\"calculate\"\r\n class=\"mr-4\"\r\n title=\"Nhóm điều kiện\"\r\n color=\"primary\"\r\n (click)=\"addCombinator(expression.conditions)\"></sd-button>\r\n <sd-button\r\n prefixIcon=\"add\"\r\n title=\"Điều kiện\"\r\n color=\"primary\"\r\n (click)=\"addCondition(expression.conditions)\"\r\n type=\"fill\"></sd-button>\r\n </div>\r\n <!-- Cấp 1 -->\r\n @for (conditionLv1 of expression.conditions; track conditionLv1.key; let idxLv1 = $index) {\r\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px\">\r\n <div class=\"c-condition\">\r\n <!-- Dòng 1 chỉ hiện WHERE -->\r\n @if (idxLv1 === 0) {\r\n <div class=\"c-where\">WHERE</div>\r\n }\r\n <!-- Dòng 2 hiển thị combinator -->\r\n @if (idxLv1 === 1) {\r\n <div class=\"c-select\">\r\n <sd-select\r\n size=\"sm\"\r\n [(model)]=\"expression.combinator\"\r\n [items]=\"[\r\n { value: '&&', display: 'AND' },\r\n { value: '||', display: 'OR' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError=\"\"></sd-select>\r\n </div>\r\n }\r\n </div>\r\n @if (conditionLv1.type === 'condition') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 200px\"\r\n [(model)]=\"conditionLv1.field\"\r\n [items]=\"attributes\"\r\n (sdChange)=\"onChangeAttribute(conditionLv1)\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n @let fieldAttribute = attribute[conditionLv1.field!];\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 100px\"\r\n [(model)]=\"conditionLv1.operator\"\r\n [items]=\"attributeOperators[fieldAttribute?.type || 'string']\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [disabled]=\"!fieldAttribute?.type\"\r\n required\r\n hideInlineError></sd-select>\r\n @if (\r\n !!fieldAttribute?.type && conditionLv1.operator && conditionLv1.operator !== 'NULL' && conditionLv1.operator !== 'NOT_NULL'\r\n ) {\r\n @if (fieldAttribute.type === 'string') {\r\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input>\r\n } @else if (fieldAttribute.type === 'number') {\r\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"conditionLv1.value\" hideInlineError></sd-input-number>\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv1.value\"\r\n [items]=\"numberAttributes\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n hideInlineError></sd-autocomplete>\r\n } @else if (fieldAttribute.type === 'datetime' && conditionLv1.dayInfo) {\r\n <sd-select\r\n size=\"sm\"\r\n placeholder=\"Thời điểm\"\r\n [form]=\"form\"\r\n style=\"width: 150px\"\r\n [items]=\"types\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"conditionLv1.dayInfo.type\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\r\n required\r\n hideInlineError>\r\n </sd-select>\r\n @if (conditionLv1.dayInfo.type === 'RELATED') {\r\n <sd-input-number\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 80px\"\r\n [(model)]=\"conditionLv1.dayInfo.relatedValue\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\r\n [min]=\"1\"\r\n required\r\n hideInlineError>\r\n </sd-input-number>\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [items]=\"previouses\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"conditionLv1.dayInfo.related\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\r\n required\r\n hideInlineError>\r\n </sd-select>\r\n } @else if (conditionLv1.dayInfo.type === 'DATETIME') {\r\n <sd-datetime\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv1.value\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv1)\"\r\n required\r\n hideInlineError>\r\n </sd-datetime>\r\n } @else if (conditionLv1.dayInfo.type === 'ATTRIBUTE') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv1.value\"\r\n [items]=\"dateAttributes\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n hideInlineError></sd-autocomplete>\r\n }\r\n } @else if (fieldAttribute.type === 'boolean') {\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv1.value\"\r\n [items]=\"[\r\n { value: true, display: fieldAttribute.displayOnTrue },\r\n { value: false, display: fieldAttribute.displayOnFalse }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-select>\r\n } @else if (fieldAttribute.type === 'values') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv1.value\"\r\n [items]=\"fieldAttribute.values\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n }\r\n }\r\n <sd-button class=\"ml-auto\" prefixIcon=\"delete\" tooltip=\"Xóa\" (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\r\n } @else if (conditionLv1.type === 'combinator') {\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button class=\"mr-4\" prefixIcon=\"delete\" tooltip=\"Xóa\" (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\r\n <sd-button\r\n prefixIcon=\"add\"\r\n title=\"Điều kiện\"\r\n size=\"sm\"\r\n color=\"primary\"\r\n (click)=\"addCondition(conditionLv1.conditions)\"\r\n type=\"fill\"></sd-button>\r\n </div>\r\n <!-- Cấp 2 -->\r\n @for (conditionLv2 of conditionLv1.conditions; track conditionLv2.key; let idxLv2 = $index) {\r\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px\">\r\n <div class=\"c-condition\">\r\n <!-- Dòng 1 chỉ hiện WHERE -->\r\n @if (idxLv2 === 0) {\r\n <div class=\"c-where\">WHERE</div>\r\n }\r\n <!-- Dòng 2 hiển thị combinator -->\r\n @if (idxLv2 === 1) {\r\n <div class=\"c-select\">\r\n <sd-select\r\n size=\"sm\"\r\n [(model)]=\"conditionLv1.combinator\"\r\n [items]=\"[\r\n { value: '&&', display: 'AND' },\r\n { value: '||', display: 'OR' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError=\"\"></sd-select>\r\n </div>\r\n }\r\n </div>\r\n @if (conditionLv2.type === 'condition') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 200px\"\r\n [(model)]=\"conditionLv2.field\"\r\n [items]=\"attributes\"\r\n (sdChange)=\"onChangeAttribute(conditionLv2)\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n @let fieldAttribute = attribute[conditionLv2.field!];\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 100px\"\r\n [(model)]=\"conditionLv2.operator\"\r\n [items]=\"attributeOperators[fieldAttribute?.type || 'string']\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [disabled]=\"!fieldAttribute?.type\"\r\n required\r\n hideInlineError></sd-select>\r\n @if (\r\n !!fieldAttribute?.type &&\r\n conditionLv2.operator &&\r\n conditionLv2.operator !== 'NULL' &&\r\n conditionLv2.operator !== 'NOT_NULL'\r\n ) {\r\n @if (fieldAttribute.type === 'string') {\r\n <sd-input\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n required\r\n hideInlineError></sd-input>\r\n } @else if (fieldAttribute.type === 'number') {\r\n <sd-input-number\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n hideInlineError></sd-input-number>\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n [items]=\"numberAttributes\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n hideInlineError></sd-autocomplete>\r\n } @else if (fieldAttribute.type === 'datetime' && conditionLv2.dayInfo) {\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n placeholder=\"Thời điểm\"\r\n style=\"width: 150px\"\r\n [items]=\"types\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"conditionLv2.dayInfo.type\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\r\n required\r\n hideInlineError>\r\n </sd-select>\r\n @if (conditionLv2.dayInfo.type === 'RELATED') {\r\n <sd-input-number\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"width: 80px\"\r\n [(model)]=\"conditionLv2.dayInfo.relatedValue\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\r\n [min]=\"1\"\r\n required\r\n hideInlineError>\r\n </sd-input-number>\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [items]=\"previouses\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [(model)]=\"conditionLv2.dayInfo.related\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\r\n required\r\n hideInlineError>\r\n </sd-select>\r\n } @else if (conditionLv2.dayInfo.type === 'DATETIME') {\r\n <sd-datetime\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n (sdChange)=\"onChangeDateInfo(conditionLv2)\"\r\n required\r\n hideInlineError>\r\n </sd-datetime>\r\n } @else if (conditionLv2.dayInfo.type === 'ATTRIBUTE') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n [items]=\"dateAttributes\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n hideInlineError></sd-autocomplete>\r\n }\r\n } @else if (fieldAttribute.type === 'boolean') {\r\n <sd-select\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n [items]=\"[\r\n { value: true, display: fieldAttribute.displayOnTrue },\r\n { value: false, display: fieldAttribute.displayOnFalse }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-select>\r\n } @else if (fieldAttribute.type === 'values') {\r\n <sd-autocomplete\r\n size=\"sm\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"conditionLv2.value\"\r\n [items]=\"fieldAttribute.values\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n }\r\n }\r\n <sd-button\r\n class=\"ml-auto\"\r\n prefixIcon=\"delete\"\r\n tooltip=\"Xóa\"\r\n (click)=\"remove(conditionLv1.conditions, idxLv1)\"></sd-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n </sd-modal>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport {\r\n Attribute,\r\n GetAttributes,\r\n SdFormGenericComponent,\r\n SdFormGenericExpression,\r\n SdFormGenericGroup,\r\n SdFormGenericVariable\r\n} from '../../../../models';\r\nimport { FormGenericService } from '../../../../services';\r\nimport { ExpressionBuilderComponent } from '../expression-builder/expression-builder.component';\r\n\r\n// Component xây dựng Expression dựa vào SdFormGenericExpression\r\n@Component({\r\n selector: 'attribute-expression',\r\n templateUrl: './attribute-expression.component.html',\r\n styleUrl: './attribute-expression.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ExpressionBuilderComponent],\r\n})\r\nexport class AttributeExpression {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n attributes: Attribute[] = [];\r\n @Input() label?: string;\r\n model?: SdFormGenericExpression;\r\n @Input({ alias: 'model', required: true }) set _model(model: SdFormGenericExpression | undefined) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<SdFormGenericExpression>();\r\n @Output() sdChange = new EventEmitter<SdFormGenericExpression>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private formGenericService: FormGenericService\r\n ) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n onEdit = async () => {\r\n this.attributes = await this.#getAttributes(this.components, this.variables);\r\n this.ref.markForCheck();\r\n };\r\n \r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n };\r\n\r\n // Từ components map thành các attributes\r\n #getAttributes = async (\r\n components: (SdFormGenericComponent | SdFormGenericGroup)[],\r\n variables: SdFormGenericVariable[]\r\n ): Promise<Attribute[]> => {\r\n const attributes: Attribute[] = [];\r\n if (components?.length) {\r\n for (const component of components) {\r\n if (component.type === 'group') {\r\n attributes.push(...GetAttributes(component.components));\r\n } else if (component.type === 'textfield' || component.type === 'textarea') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n } else if (component.type === 'number') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'number',\r\n });\r\n } else if (component.type === 'checkbox') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'boolean',\r\n displayOnTrue: 'YES',\r\n displayOnFalse: 'NO',\r\n });\r\n } else if (component.type === 'radio' || component.type === 'select') {\r\n if (component.values?.length) {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'values',\r\n values: component.values.map(e => ({\r\n value: e.value,\r\n display: e.label,\r\n })),\r\n });\r\n } else {\r\n const values = await this.formGenericService.selection.items(component.valuesKey, {\r\n entity: {},\r\n component,\r\n });\r\n // Nếu là mảng thì push vào\r\n if (Array.isArray(values)) {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'values',\r\n values,\r\n });\r\n } else {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (variables?.length) {\r\n for (const variable of variables) {\r\n attributes.push({\r\n value: variable.key,\r\n display: `[VARIABLE] ${variable.label}`,\r\n type: 'string',\r\n });\r\n }\r\n }\r\n return attributes;\r\n };\r\n}\r\n","\r\n\r\n<expression-builder class=\"d-block py-8\" [label]=\"label\" [(model)]=\"model\" [attributes]=\"attributes\" (sdChange)=\"onChange($event)\" (edit)=\"onEdit()\"></expression-builder>","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { SdInputNumber } from '@sd-angular/core/forms/input-number';\r\n\r\n@Component({\r\n selector: 'attribute-input-number',\r\n templateUrl: './attribute-input-number.component.html',\r\n imports: [SdInputNumber],\r\n})\r\nexport class AttributeInputNumber {\r\n label?: string | null;\r\n @Input('label') set _label(label: string | undefined | null) {\r\n this.label = label;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n model?: number | null;\r\n @Input('model') set _model(model: number | undefined | null) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<number>();\r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(value);\r\n };\r\n}\r\n","<!-- <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <sd-input-number\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [(model)]=\"model\"\r\n [disabled]=\"disabled\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-input-number>\r\n</div> -->\r\n<sd-input-number\r\n class=\"py-8\"\r\n [label]=\"label!\"\r\n [(model)]=\"model\"\r\n [disabled]=\"disabled\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-input-number>\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\n\r\n@Component({\r\n selector: 'attribute-input',\r\n templateUrl: './attribute-input.component.html',\r\n imports: [SdInput],\r\n})\r\nexport class AttributeInput {\r\n @Input() form?: FormGroup;\r\n\r\n label?: string | null;\r\n @Input('label') set _label(label: string | undefined | null) {\r\n this.label = label;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n model?: string | null;\r\n @Input('model') set _model(model: string | undefined | null) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<string>();\r\n @Output() sdChange = new EventEmitter<string>();\r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n };\r\n}\r\n","<!-- <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <sd-input style=\"width: 200px\" size=\"sm\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-input>\r\n</div> -->\r\n<sd-input class=\"py-8\" [label]=\"label!\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-input>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSwitch } from '@sd-angular/core/forms/switch';\r\nimport { SdSelect } from '@sd-angular/core/forms/select';\r\n\r\n@Component({\r\n selector: 'attribute-switch',\r\n templateUrl: './attribute-switch.component.html',\r\n imports: [SdSelect],\r\n})\r\nexport class AttributeSwitch {\r\n @Input() form?: FormGroup;\r\n\r\n label?: string | null;\r\n @Input('label') set _label(label: string | undefined | null) {\r\n this.label = label;\r\n }\r\n\r\n model?: boolean;\r\n @Input('model') set _model(val: boolean | undefined | null) {\r\n if (this.model !== !!val) {\r\n this.model = !!val;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<boolean>();\r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(!!value);\r\n };\r\n}\r\n","<!-- <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <sd-switch size=\"sm\" [form]=\"form\" [(model)]=\"model\" (sdChange)=\"onChange($event)\" hideInlineError></sd-switch>\r\n</div> -->\r\n<sd-select\r\n class=\"py-8\"\r\n [label]=\"label!\"\r\n [form]=\"form\"\r\n [(model)]=\"model\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [items]=\"[\r\n { value: true, display: 'Có' },\r\n { value: false, display: 'Không' }\r\n ]\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-select>\r\n","import { Component, EventEmitter, Inject, Input, Output } from '@angular/core';\r\nimport { ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from '../../../../configurations';\r\nimport { SdFormGenericComponent, SdFormGenericTemplate } from '../../../../models';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\n\r\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\r\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\r\n@Component({\r\n selector: 'attribute-template',\r\n templateUrl: './attribute-template.component.html',\r\n imports: [SdAutocomplete],\r\n})\r\nexport class AttributeTemplate {\r\n templates: SdFormGenericTemplate[] = [];\r\n component!: SdFormGenericComponent;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericComponent) {\r\n this.component = component;\r\n this.templates = this.workflowConfiguration?.form?.templates?.filter(e => e.component?.type === this.component?.type) || [];\r\n }\r\n @Output() sdChange = new EventEmitter<SdFormGenericComponent>();\r\n constructor(@Inject(SD_WORKFLOW_CONFIGURATION) private workflowConfiguration: ISdWorkflowConfiguration) {}\r\n\r\n onChange = (value: string | number | null) => {\r\n if (typeof value === 'string') {\r\n const template = this.templates?.find(e => e.value === value);\r\n if (template?.component) {\r\n this.sdChange.emit(JSON.parse(JSON.stringify(template.component)));\r\n }\r\n }\r\n };\r\n}\r\n","@if (templates.length) {\r\n <!-- <div class=\"d-flex align-items-center py-4\">\r\n <div class=\"T14M\" style=\"flex: 1\">Dữ liệu mẫu</div>\r\n <sd-autocomplete\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [(model)]=\"component.template\"\r\n [items]=\"templates\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-autocomplete>\r\n </div> -->\r\n <sd-autocomplete\r\n class=\"py-8\"\r\n label=\"Dữ liệu mẫu\"\r\n [(model)]=\"component.template\"\r\n [items]=\"templates\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-autocomplete>\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\nimport { SdTextarea } from '@sd-angular/core/forms/textarea';\r\n\r\n@Component({\r\n selector: 'attribute-textarea',\r\n templateUrl: './attribute-textarea.component.html',\r\n imports: [SdTextarea],\r\n})\r\nexport class AttributeTextarea {\r\n @Input() form?: FormGroup;\r\n\r\n label?: string | null;\r\n @Input('label') set _label(label: string | undefined | null) {\r\n this.label = label;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n model?: string | null;\r\n @Input('model') set _model(model: string | undefined | null) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<string>();\r\n @Output() sdChange = new EventEmitter<string>();\r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n };\r\n}\r\n","<sd-textarea class=\"py-8\" [label]=\"label!\" [form]=\"form\" [(model)]=\"model\" [disabled]=\"disabled\" (sdChange)=\"onChange($event)\" hideInlineError></sd-textarea>","import { Injectable } from '@angular/core';\r\nimport { debounceTime, Subject } from 'rxjs';\r\nimport { SdFormGenericComponent, SdFormGenericGroup } from '../../../models';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class BuilderService {\r\n constructor() {}\r\n\r\n // Khi component change attribute, mong muốn re-render control để người dùng nhìn trực quan\r\n // Ví dụ:\r\n // Khi content html thay đổi (attribute), mong muốn bố cục (control) cũng sẽ hiển thị\r\n // Khi columns của table thay đổi, cập nhật bố cục\r\n #componentChanges = new Subject<SdFormGenericComponent | SdFormGenericGroup>();\r\n get componentEmitters() {\r\n return this.#componentChanges;\r\n }\r\n\r\n get componentListeners() {\r\n // Debound 0.2s để tránh trigger liên tục\r\n return this.#componentChanges.pipe(debounceTime(200));\r\n }\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { debounceTime, filter, Subscription } from 'rxjs';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericTextfield, SdFormGenericVariable } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeTextarea } from \"../../attribute-textarea/attribute-textarea.component\";\r\n\r\n@Component({\r\n selector: 'textfield-attribute',\r\n templateUrl: './textfield-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeExpression, AttributeInput, AttributeInputNumber, AttributeSwitch, AttributeTextarea],\r\n})\r\nexport class TextfieldAttribute {\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n component!: SdFormGenericTextfield;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextfield) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'textfield') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-textarea [form]=\"form\" label=\"Gợi ý\" [(model)]=\"component.helperText\"></attribute-textarea>\r\n <attribute-input [form]=\"form\" label=\"Giá trị mặc định\" [(model)]=\"component.defaultValue\"></attribute-input>\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n <attribute-input-number label=\"Ký tự tối đa\" [(model)]=\"component.validate!.maxlength\"></attribute-input-number>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n <attribute-input label=\"Expression\" [(model)]=\"component.validate!.pattern\"></attribute-input>\r\n <attribute-input label=\"Expression message\" [(model)]=\"component.validate!.patternErrorMessage\"></attribute-input>\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericTextfield } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'textfield-control',\r\n templateUrl: './textfield-control.component.html',\r\n styleUrls: ['./textfield-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TextFieldControl {\r\n component!: SdFormGenericTextfield;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextfield) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">\r\n Your input text\r\n </div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input\">{{component.defaultValue}}</div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { debounceTime, filter, Subscription } from 'rxjs';\r\nimport {\r\n SdFormatComponent,\r\n SdFormGenericComponent,\r\n SdFormGenericGroup,\r\n SdFormGenericTextarea,\r\n SdFormGenericVariable,\r\n} from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\r\n\r\n@Component({\r\n selector: 'textarea-attribute',\r\n templateUrl: './textarea-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeInputNumber, AttributeSwitch, AttributeExpression, AttributeTextarea],\r\n})\r\nexport class TextareaAttribute {\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n component!: SdFormGenericTextarea;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextarea) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'textarea') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-textarea [form]=\"form\" label=\"Gợi ý\" [(model)]=\"component.helperText\"></attribute-textarea>\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n <attribute-input-number label=\"Ký tự tối đa\" [(model)]=\"component.validate!.maxlength\"></attribute-input-number>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericTextarea } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { filter, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'textarea-control',\r\n templateUrl: './textarea-control.component.html',\r\n styleUrls: ['./textarea-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TextareaControl {\r\n component!: SdFormGenericTextarea;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTextarea) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">Your input text</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-textarea\"></div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericChipString } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'chip-string-control',\r\n templateUrl: './chip-string-control.component.html',\r\n styleUrls: ['./chip-string-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n})\r\nexport class ChipStringControl {\r\n component!: SdFormGenericChipString;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipString) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n // Vì đã đúng theo id nên có thể ép kiểu any\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">One, Two, Three</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input\">\r\n <span class=\"c-chip\">One</span>\r\n <span class=\"c-chip\">Two</span>\r\n <span class=\"c-chip\">Three</span>\r\n </div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormatComponent, SdFormGenericChipString, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericVariable } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\n\r\n@Component({\r\n selector: 'chip-string-attribute',\r\n templateUrl: './chip-string-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression],\r\n})\r\nexport class ChipStringAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericChipString;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipString) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'chip-string') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n onChanges = () => {\r\n this.#changes.next();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n @if (component.properties!.viewed) {\r\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\r\n }\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n @if (!component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n }\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericChipCalendar } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'chip-calendar-control',\r\n templateUrl: './chip-calendar-control.component.html',\r\n styleUrls: ['./chip-calendar-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n})\r\nexport class ChipCalendarControl {\r\n component!: SdFormGenericChipCalendar;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipCalendar) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n // Vì đã đúng theo id nên có thể ép kiểu any\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">One, Two, Three</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input\">\r\n <span class=\"c-chip\">One</span>\r\n <span class=\"c-chip\">Two</span>\r\n <span class=\"c-chip\">Three</span>\r\n </div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { SdFormatComponent, SdFormGenericChipCalendar, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericVariable } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\n\r\n@Component({\r\n selector: 'chip-calendar-attribute',\r\n templateUrl: './chip-calendar-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression],\r\n})\r\nexport class ChipCalendarAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericChipCalendar;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericChipCalendar) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'chip-string') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n onChanges = () => {\r\n this.#changes.next();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n @if (component.properties!.viewed) {\r\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\r\n }\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n @if (!component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n }\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericNumber, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeTextarea } from \"../../attribute-textarea/attribute-textarea.component\";\r\n\r\n@Component({\r\n selector: 'number-attribute',\r\n templateUrl: './number-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeInputNumber, AttributeSwitch, AttributeExpression, AttributeTextarea],\r\n})\r\nexport class NumberAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericNumber;\r\n isTemplate = false;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericNumber) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'number') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.isTemplate = true;\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-textarea [form]=\"form\" label=\"Gợi ý\" [(model)]=\"component.helperText\"></attribute-textarea>\r\n</sd-section>\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n <attribute-input-number label=\"Giá trị nhỏ nhất\" [(model)]=\"component.validate!.min\"></attribute-input-number>\r\n <attribute-input-number label=\"Giá trị lớn nhất\" [(model)]=\"component.validate!.max\"></attribute-input-number>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericNumber } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\nimport { NumberUtilities } from '@sd-angular/core/utilities/extensions';\r\n\r\n@Component({\r\n selector: 'number-control',\r\n templateUrl: './number-control.component.html',\r\n styleUrls: ['./number-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NumberControl {\r\n component!: SdFormGenericNumber;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericNumber) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n number = NumberUtilities.toISO(new Date().getTime());\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n // Vì đã đúng theo id nên có thể ép kiểu any\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">{{number}}</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input\"></div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { DateUtilities } from '@sd-angular/core/utilities';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { SdFormGenericDatetime } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'datetime-control',\r\n templateUrl: './datetime-control.component.html',\r\n styleUrls: ['./datetime-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [],\r\n})\r\nexport class DatetimeControl {\r\n component!: SdFormGenericDatetime;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericDatetime) {\r\n this.component = component;\r\n }\r\n\r\n date = DateUtilities.toFormat(new Date(), 'dd/MM/yyyy');\r\n datetime = DateUtilities.toFormat(new Date(), 'dd/MM/yyyy HH:mm');\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n \r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n \r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">{{ component.subtype === 'datetime' ? datetime : date }}</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input\">\r\n <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" fill=\"currentColor\" focusable=\"false\">\r\n <path\r\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>\r\n </svg>\r\n </div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSelect } from '@sd-angular/core/forms/select';\r\n\r\n@Component({\r\n selector: 'attribute-select',\r\n templateUrl: './attribute-select.component.html',\r\n imports: [SdSelect],\r\n})\r\nexport class AttributeSelect {\r\n @Input() form?: FormGroup;\r\n \r\n label?: string | null;\r\n @Input('label') set _label(label: string | undefined | null) {\r\n this.label = label;\r\n }\r\n\r\n disabled = false;\r\n @Input('disabled') set _disabled(val: '' | boolean | undefined | null) {\r\n this.disabled = val === '' || !!val;\r\n }\r\n\r\n multiple = false;\r\n @Input('multiple') set _multiple(val: '' | boolean | undefined | null) {\r\n this.multiple = val === '' || !!val;\r\n }\r\n\r\n items: Item[] = [];\r\n @Input({ alias: 'items', required: true }) set _items(items: Item[] | undefined | null) {\r\n if (Array.isArray(items) && this.items !== items) {\r\n this.items = items || [];\r\n } else {\r\n items = [];\r\n }\r\n }\r\n\r\n model?: any | any[];\r\n @Input('model') set _model(model: any | any[] | undefined | null) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<string>();\r\n @Output() sdChange = new EventEmitter<string>();\r\n\r\n onChange = (value: any) => {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n };\r\n}\r\n\r\ninterface Item {\r\n value: string;\r\n display: string;\r\n}\r\n","<!-- <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <sd-select\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [form]=\"form\"\r\n [(model)]=\"model\"\r\n [items]=\"items\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [disabled]=\"disabled\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-select>\r\n</div> -->\r\n<sd-select\r\n class=\"py-8\"\r\n [label]=\"label!\"\r\n [form]=\"form\"\r\n [(model)]=\"model\"\r\n [items]=\"items\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n [disabled]=\"disabled\"\r\n (sdChange)=\"onChange($event)\"\r\n hideInlineError></sd-select>","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericDatetime, SdFormGenericGroup, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { debounceTime, filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeTextarea } from \"../../attribute-textarea/attribute-textarea.component\";\r\n\r\n@Component({\r\n selector: 'datetime-attribute',\r\n templateUrl: './datetime-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeSwitch, AttributeSelect, AttributeExpression, AttributeTextarea],\r\n})\r\nexport class DatetimeAttribute {\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n component!: SdFormGenericDatetime;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericDatetime) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'datetime') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input [form]=\"form\" label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-select\r\n label=\"Định dạng\"\r\n [(model)]=\"component.subtype\"\r\n [items]=\"[\r\n { value: 'date', display: 'dd/MM/yyyy' },\r\n { value: 'datetime', display: 'dd/MM/yyyy HH:mm' }\r\n ]\"></attribute-select>\r\n <attribute-textarea [form]=\"form\" label=\"Gợi ý\" [(model)]=\"component.helperText\"></attribute-textarea>\r\n</sd-section>\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch [form]=\"form\" label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport {\r\n GetComponentAttributes,\r\n GetVariableAttributes,\r\n SdFormGenericComponent,\r\n SdFormGenericDefinitionSelection,\r\n SdFormGenericGroup,\r\n SdFormGenericVariable,\r\n} from '../../../../../../models';\r\nimport { startWith, Subject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'build-queries',\r\n templateUrl: './build-queries.component.html',\r\n styleUrl: './build-queries.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdAutocomplete, SdButton, SdModal],\r\n})\r\nexport class BuildQueries {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n @Input() label?: string;\r\n @Input({ required: true }) selections: SdFormGenericDefinitionSelection[] = [];\r\n valuesKey?: string | null;\r\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\r\n this.valuesKey = valuesKey;\r\n this.#inputChanges.next();\r\n }\r\n selection?: SdFormGenericDefinitionSelection;\r\n\r\n leftProperties?: Property[];\r\n rightProperties?: Property[];\r\n\r\n queryString?: string;\r\n model?: Record<string, any>;\r\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\r\n this.model = JSON.parse(JSON.stringify({ ...model }));\r\n // Parse JSON -> STRING để hiển thị trên UI\r\n this.queryString = JSON.stringify(this.model);\r\n }\r\n @Output() modelChange = new EventEmitter<Record<string, string>>();\r\n\r\n // Mỗi lần inputChanges thì tính lại selection\r\n #inputChanges = new Subject<void>();\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.#inputChanges.pipe(startWith('')).subscribe(() => {\r\n this.selection = this.selections?.find?.(e => e.value === this.valuesKey);\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n edit = async () => {\r\n this.leftProperties = this.selection?.queries?.items || [];\r\n this.rightProperties = [...GetComponentAttributes(this.components), ...GetVariableAttributes(this.variables)].map(e => ({\r\n value: '${' + e.value + '}',\r\n display: e.display,\r\n }));\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const result: Record<string, string> = {};\r\n for (const key of Object.keys(this.model!)) {\r\n const value = this.model?.[key];\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n }\r\n this.modelChange.emit(result);\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n}\r\n\r\nexport interface Property {\r\n value: string;\r\n display: string;\r\n}\r\n","@if (!!selection?.queries?.items?.length) {\r\n <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\r\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\r\n </div>\r\n </div>\r\n <sd-modal title=\"Thiết lập giá trị truy vấn\" width=\"400px\">\r\n <div class=\"c-builder\">\r\n @for (property of leftProperties; track property.value) {\r\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\r\n <div style=\"width: 150px\">\r\n <div class=\"text-secondary\">{{ property.value }}</div>\r\n <div class=\"T16M\">{{ property.display }}</div>\r\n </div>\r\n <sd-autocomplete\r\n label=\"Trường lấy giá trị\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"model![property.value]\"\r\n [items]=\"rightProperties\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n hideInlineError></sd-autocomplete>\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n </sd-modal>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport {\r\n GetComponentAttributes,\r\n GetVariableAttributes,\r\n SdFormGenericComponent,\r\n SdFormGenericDefinitionSelection,\r\n SdFormGenericGroup,\r\n SdFormGenericVariable,\r\n} from '../../../../../../models';\r\nimport { startWith, Subject, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'build-variables',\r\n templateUrl: './build-variables.component.html',\r\n styleUrl: './build-variables.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdAutocomplete, SdButton, SdModal],\r\n})\r\nexport class BuildVariables {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n @Input() label?: string;\r\n @Input({ required: true }) selections: SdFormGenericDefinitionSelection[] = [];\r\n valuesKey?: string | null;\r\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\r\n this.valuesKey = valuesKey;\r\n this.#inputChanges.next();\r\n }\r\n selection?: SdFormGenericDefinitionSelection;\r\n\r\n leftProperties?: Property[];\r\n rightProperties?: Property[];\r\n\r\n items: {\r\n id: string;\r\n key: string;\r\n value: any;\r\n }[] = [];\r\n queryString?: string;\r\n #model!: Record<string, any>;\r\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\r\n this.#model = JSON.parse(JSON.stringify({ ...model }));\r\n // Parse JSON -> STRING để hiển thị trên UI\r\n this.queryString = JSON.stringify(this.#model);\r\n this.items = Object.keys(this.#model).map(key => ({\r\n id: SdUtilities.randomId(),\r\n key,\r\n value: this.#model?.[key],\r\n }));\r\n }\r\n @Output() modelChange = new EventEmitter<Record<string, string>>();\r\n\r\n // Mỗi lần inputChanges thì tính lại selection\r\n #inputChanges = new Subject<void>();\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.#inputChanges.pipe(startWith('')).subscribe(() => {\r\n this.selection = this.selections?.find?.(e => e.value === this.valuesKey);\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n edit = async () => {\r\n this.leftProperties = [...GetComponentAttributes(this.components),...GetVariableAttributes(this.variables)];\r\n this.rightProperties =\r\n this.selection?.variables?.items?.map(e => ({\r\n value: '${' + e.value + '}',\r\n display: e.display,\r\n })) || [];\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n addField = () => {\r\n this.items.push({\r\n id: SdUtilities.randomId(),\r\n key: '',\r\n value: '',\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n remove = (idx: number) => {\r\n this.items.splice(idx, 1);\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const result: Record<string, string> = {};\r\n for (const { key, value } of this.items) {\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n }\r\n this.modelChange.emit(result);\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n}\r\n\r\nexport interface Property {\r\n value: string;\r\n display: string;\r\n}\r\n","@if (!!selection?.variables?.items?.length) {\r\n <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\r\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\r\n </div>\r\n </div>\r\n <sd-modal title=\"Thiết lập gán giá trị khi thay đổi\" width=\"500px\">\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button prefixIcon=\"add\" title=\"Thêm trường\" color=\"primary\" (click)=\"addField()\"></sd-button>\r\n </div>\r\n <!-- Cấp 1 -->\r\n @for (item of items; track item.id; let idx = $index) {\r\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\r\n <sd-autocomplete\r\n label=\"Trường muốn gán giá trị\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"item.key\"\r\n [items]=\"leftProperties\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n <sd-autocomplete\r\n label=\"Giá trị muốn gán\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"item.value\"\r\n [items]=\"rightProperties\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n </sd-modal>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\nimport {\r\n SdFormGenericComponent,\r\n SdFormGenericDefinitionSelection,\r\n SdFormGenericGroup,\r\n SdFormGenericSelectionStaticItem,\r\n SdFormGenericTableColumn,\r\n SdFormGenericValues,\r\n SdFormGenericVariable,\r\n} from '../../../../models';\r\nimport { FormGenericService } from '../../../../services';\r\nimport { BuildQueries } from \"./components/build-queries/build-queries.component\";\r\nimport { BuildVariables } from \"./components/build-variables/build-variables.component\";\r\n\r\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\r\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\r\n@Component({\r\n selector: 'attribute-selection',\r\n templateUrl: './attribute-selection.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdInput, SdAutocomplete, SdButton, SdSection, BuildQueries, BuildVariables],\r\n})\r\nexport class AttributeSelection {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n @Input({ required: true }) component!: SdFormGenericValues | SdFormGenericTableColumn;\r\n // ValuesKey\r\n valuesKey?: string;\r\n @Input({ alias: 'valuesKey', required: true }) set _valuesKey(valuesKey: string | undefined | null) {\r\n if (this.valuesKey !== valuesKey) {\r\n this.valuesKey = valuesKey?.toString();\r\n }\r\n }\r\n @Output() valuesKeyChange = new EventEmitter<string>();\r\n selections: SdFormGenericDefinitionSelection[] = [];\r\n\r\n // Values\r\n values: SdFormGenericSelectionStaticItem[] = [];\r\n @Input({ alias: 'values', required: true }) set _values(values: SdFormGenericSelectionStaticItem[] | undefined | null) {\r\n if (this.values !== values) {\r\n this.values = values || [];\r\n }\r\n }\r\n @Output() valuesChange = new EventEmitter<SdFormGenericSelectionStaticItem[]>();\r\n @Output() sdChange = new EventEmitter<SdFormGenericComponent>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private formGenericService: FormGenericService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.formGenericService.selection.definitions().then(selections => {\r\n // Nếu không phải là type select thì không hiển thị các lựa chọn lazyValues\r\n // Vì radio, checklist không thể load lazy\r\n if (this.component.type !== 'select') {\r\n this.selections = selections.filter(selection => !('lazyValues' in selection) && !('lazyValuesKey' in selection));\r\n } else {\r\n this.selections = selections;\r\n }\r\n this.ref.markForCheck();\r\n });\r\n }\r\n\r\n onChangeValuesKey = (value: any) => {\r\n this.valuesKeyChange.emit(value);\r\n // Gán values rỗng nếu đã sử dụng valuesKey\r\n this.values = [];\r\n this.valuesChange.emit(this.values);\r\n this.ref.markForCheck();\r\n };\r\n\r\n onChangeValues = () => {\r\n this.valuesChange.emit(this.values);\r\n };\r\n\r\n addItem = () => {\r\n this.values.push({\r\n value: `value_${new Date().getTime().toString(36)}`,\r\n label: `Label ${new Date().getTime().toString(36)}`,\r\n });\r\n this.valuesChange.emit(this.values);\r\n this.ref.markForCheck();\r\n };\r\n\r\n removeItem = (idx: number) => {\r\n this.values.splice(idx, 1);\r\n this.valuesChange.emit(this.values);\r\n this.ref.markForCheck();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Dữ liệu\" icon=\"format_list_bulleted\">\r\n @if (selections.length) {\r\n <div class=\"d-flex align-items-center py-4\">\r\n <div class=\"T14M\" style=\"flex: 1\">Dữ liệu API</div>\r\n <sd-autocomplete\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [(model)]=\"valuesKey\"\r\n [items]=\"selections\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChangeValuesKey($event)\"\r\n hideInlineError></sd-autocomplete>\r\n </div>\r\n <!-- Nếu là select từ API thì cho phép truyền thêm Query -->\r\n\r\n @if (component.type === 'select' && !!valuesKey) {\r\n <build-queries\r\n label=\"Điều kiện truy vấn\"\r\n [selections]=\"selections\"\r\n [valuesKey]=\"valuesKey\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.query\"></build-queries>\r\n <build-variables\r\n label=\"Gán giá trị\"\r\n [selections]=\"selections\"\r\n [valuesKey]=\"valuesKey\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.setVariables\"></build-variables>\r\n <!-- <div class=\"d-flex align-items-center py-4\">\r\n <div class=\"T14M\" style=\"flex: 1\">Điều kiện truy vấn</div>\r\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"component.properties!.query\" hideInlineError></sd-input>\r\n </div> -->\r\n }\r\n }\r\n @if (!valuesKey) {\r\n <div class=\"d-flex flex-column\" style=\"gap: 4px\">\r\n <div class=\"T14M\">Dữ liệu tĩnh</div>\r\n @for (item of values; track item.value; let idx = $index) {\r\n <div class=\"d-flex align-items-end py-4\" style=\"gap: 4px\">\r\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"item.value\" (sdChange)=\"onChangeValues()\" hideInlineError></sd-input>\r\n <sd-input style=\"width: 200px\" size=\"sm\" [(model)]=\"item.label\" (sdChange)=\"onChangeValues()\" hideInlineError></sd-input>\r\n <sd-button prefixIcon=\"delete\" (click)=\"removeItem(idx)\" color=\"error\"></sd-button>\r\n </div>\r\n }\r\n <sd-button prefixIcon=\"add\" title=\"Thêm dữ liệu\" (click)=\"addItem()\" color=\"primary\"></sd-button>\r\n </div>\r\n }\r\n</sd-section>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericSelect, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeSelection } from '../../attribute-selection/attribute-selection.component';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\n\r\n@Component({\r\n selector: 'select-attribute',\r\n templateUrl: './select-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeSelection, AttributeInput, AttributeSwitch, AttributeExpression],\r\n})\r\nexport class SelectAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericSelect;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericSelect) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChanges = () => {\r\n this.#changes.next();\r\n };\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'select') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-switch label=\"Chọn nhiều\" [(model)]=\"component.properties!.multiple\"></attribute-switch>\r\n @if (component.properties!.viewed) {\r\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\r\n }\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <attribute-selection\r\n [components]=\"components\"\r\n [component]=\"component\"\r\n [variables]=\"variables\"\r\n [(valuesKey)]=\"component.valuesKey\"\r\n [(values)]=\"component.values\"\r\n (valuesKeyChange)=\"onChanges()\"\r\n (valuesChange)=\"onChanges()\"></attribute-selection>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericSelect } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'select-control',\r\n templateUrl: './select-control.component.html',\r\n styleUrls: ['./select-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n})\r\nexport class SelectControl {\r\n component!: SdFormGenericSelect;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericSelect) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">Your dropdown selection</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-input c-select\">\r\n <svg width=\"8\" height=\"8\">\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n fill=\"currentColor\"\r\n stroke=\"currentColor\"\r\n stroke-width=\".5\"\r\n d=\"M7.75 1.336L4 6.125.258 1.335 0 1.54l4 5.125L8 1.54zm0 0\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericRadio } from '../../../../../models';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\n\r\n@Component({\r\n selector: 'radio-control',\r\n templateUrl: './radio-control.component.html',\r\n styleUrls: ['./radio-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n})\r\nexport class RadioControl {\r\n component!: SdFormGenericRadio;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericRadio) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n // Vì đã đúng theo id nên có thể ép kiểu any\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">Your radio selection</div>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"c-radio-item d-flex flex-wrap align-items-center\">\r\n @if (component.values?.length) {\r\n <div class=\"d-flex\" [class.flex-column]=\"component.properties?.direction === 'column'\" style=\"gap: 8px\">\r\n @for (item of component.values; track item.value) {\r\n <div class=\"d-flex align-items-center my-4\">\r\n <div class=\"c-rd-ip mr-4\"></div>\r\n <div class=\"T12M\">{{ item.label }}</div>\r\n </div>\r\n }\r\n </div>\r\n } @else if (component.valuesKey) {\r\n <div class=\"T12R text-secondary\">{{ component.valuesKey }}</div>\r\n }\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericRadio, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSelection } from '../../attribute-selection/attribute-selection.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { BuilderService } from '../../../services';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\n\r\n@Component({\r\n selector: 'radio-attribute',\r\n templateUrl: './radio-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeSelection, AttributeInput, AttributeSwitch, AttributeSelect, AttributeExpression],\r\n})\r\nexport class RadioAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericRadio;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericRadio) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'radio') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n onChanges = () => {\r\n this.#changes.next();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n @if (component.properties!.viewed) {\r\n <attribute-input label=\"Hyperlink\" [(model)]=\"component.properties!.hyperlink\"></attribute-input>\r\n }\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n <attribute-select\r\n [form]=\"form\"\r\n label=\"Bố cục\"\r\n [(model)]=\"component.properties!.direction\"\r\n [items]=\"[\r\n { value: 'row', display: 'Ngang' },\r\n { value: 'column', display: 'Dọc' }\r\n ]\"></attribute-select>\r\n </sd-section>\r\n @if (!component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n }\r\n <attribute-selection\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [component]=\"component\"\r\n [(valuesKey)]=\"component.valuesKey\"\r\n [(values)]=\"component.values\"\r\n (valuesKeyChange)=\"onChanges()\"\r\n (valuesChange)=\"onChanges()\"></attribute-selection>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { SdFormGenericCheckbox } from '../../../../../models';\r\n\r\n@Component({\r\n selector: 'checkbox-control',\r\n templateUrl: './checkbox-control.component.html',\r\n styleUrls: ['./checkbox-control.component.scss'],\r\n imports: [CommonModule],\r\n})\r\nexport class CheckboxControl {\r\n component!: SdFormGenericCheckbox;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericCheckbox) {\r\n this.component = component;\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <div class=\"T14M\">Có/Không</div>\r\n} @else {\r\n <div class=\"c-checkbox\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"c-box mr-4\"></div>\r\n <div class=\"T14R\">{{ component.label }}</div>\r\n </div>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericCheckbox, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { BuilderService } from '../../../services';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\n\r\n@Component({\r\n selector: 'checkbox-attribute',\r\n templateUrl: './checkbox-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeSwitch, AttributeExpression],\r\n})\r\nexport class CheckboxAttribute {\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n component!: SdFormGenericCheckbox;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericCheckbox) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'checkbox') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input [form]=\"form\" label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n</sd-section>\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { GetComponentAttributes, GetVariableAttributes, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericVariable } from '../../../../../../../models';\r\n\r\n@Component({\r\n selector: 'build-queries',\r\n templateUrl: './build-queries.component.html',\r\n styleUrl: './build-queries.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdAutocomplete, SdButton, SdModal],\r\n})\r\nexport class BuildQueries {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n form = new FormGroup({});\r\n @Input() label?: string;\r\n leftProperties?: Property[];\r\n @Input({ alias: 'queries', required: true }) set _queries(queries: { key: string; label: string }[] | undefined | null) {\r\n this.leftProperties =\r\n queries?.map(e => ({\r\n value: e.key,\r\n display: e.label,\r\n })) || [];\r\n }\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n rightProperties?: Property[];\r\n queryString?: string;\r\n model?: Record<string, any>;\r\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\r\n this.model = JSON.parse(JSON.stringify({ ...model }));\r\n // Parse JSON -> STRING để hiển thị trên UI\r\n this.queryString = JSON.stringify(this.model);\r\n }\r\n @Output() modelChange = new EventEmitter<Record<string, string>>();\r\n\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {}\r\n\r\n ngOnDestroy() {}\r\n\r\n edit = () => {\r\n this.rightProperties =\r\n [...GetComponentAttributes(this.components), ...GetVariableAttributes(this.variables)].map(e => ({\r\n value: '${' + e.value + '}',\r\n display: e.display,\r\n })) || [];\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const result: Record<string, string> = {};\r\n for (const key of Object.keys(this.model!)) {\r\n const value = this.model?.[key];\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n }\r\n this.modelChange.emit(result);\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n}\r\n\r\ninterface Property {\r\n value: string;\r\n display: string;\r\n}\r\n","@if (!!leftProperties?.length) {\r\n <div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\r\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\r\n </div>\r\n </div>\r\n <sd-modal title=\"Thiết lập giá trị truy vấn\" width=\"400px\">\r\n <div class=\"c-builder\">\r\n @for (property of leftProperties; track property.value) {\r\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\r\n <div class=\"T14M\" style=\"width: 150px\">{{ property.display }}</div>\r\n <sd-autocomplete\r\n label=\"Trường lấy giá trị\"\r\n [form]=\"form\"\r\n style=\"flex: 1\"\r\n [(model)]=\"model![property.value]\"\r\n [items]=\"rightProperties\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError></sd-autocomplete>\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n </sd-modal>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { debounceTime, filter, Subscription } from 'rxjs';\r\nimport {\r\n GetComponentAttributes,\r\n SdFormatComponent,\r\n SdFormGenericComponent,\r\n SdFormGenericDefinitionHtml,\r\n SdFormGenericGroup,\r\n SdFormGenericHtml,\r\n SdFormGenericVariable,\r\n} from '../../../../../models';\r\nimport { FormGenericService } from '../../../../../services';\r\nimport { BuilderService } from '../../../services';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\r\nimport { AttributeTextarea } from '../../attribute-textarea/attribute-textarea.component';\r\nimport { BuildQueries } from './components/build-queries/build-queries.component';\r\n\r\n@Component({\r\n selector: 'html-attribute',\r\n templateUrl: './html-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeInput, AttributeSelect, AttributeExpression, AttributeTextarea, BuildQueries],\r\n})\r\nexport class HtmlAttribute implements OnInit, AfterViewInit, OnDestroy {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n\r\n component!: SdFormGenericHtml;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n form = new FormGroup({});\r\n definitionHtmls: SdFormGenericDefinitionHtml[] = [];\r\n // Mong muốn là khi attribute changes thông báo cho control biết để control render content tương ứng\r\n @Output() attributeChanges = new EventEmitter();\r\n\r\n #subscription = new Subscription();\r\n rightProperties: { value: string; display: string }[] = [];\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private formGenericService: FormGenericService,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.formGenericService.html.definitions().then(htmls => {\r\n this.definitionHtmls = htmls;\r\n this.ref.markForCheck();\r\n });\r\n this.rightProperties =\r\n GetComponentAttributes(this.components).map(e => ({\r\n value: '${' + e.value + '}',\r\n display: e.display,\r\n })) || [];\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Khi content và variable thay đổi, delay 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeDefinition = async (value: string) => {\r\n const definition = this.definitionHtmls.find(e => e.value === value);\r\n if (definition) {\r\n this.component.content = await this.formGenericService.html.getContent(value);\r\n this.component.properties!.variables = JSON.parse(JSON.stringify(definition.variables || []));\r\n if (definition.type === 'query') {\r\n this.component.properties!.queries = JSON.parse(JSON.stringify(definition.queries || []));\r\n } else {\r\n this.component.properties!.queries = [];\r\n }\r\n delete this.component.properties?.query;\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n } else {\r\n this.component.properties!.variables = [];\r\n this.component.properties!.queries = [];\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n}\r\n","@if (!component.properties!.hidden) {\r\n <sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-select\r\n label=\"Dữ liệu mẫu\"\r\n [(model)]=\"component.template\"\r\n [items]=\"definitionHtmls\"\r\n (sdChange)=\"onChangeDefinition($event)\"></attribute-select>\r\n <attribute-input [form]=\"form\" label=\"Trường dữ liệu\" [(model)]=\"component.key\"></attribute-input>\r\n <attribute-textarea [form]=\"form\" label=\"Nội dung\" [(model)]=\"component.content\"></attribute-textarea>\r\n @if (component.properties?.queries?.length) {\r\n <build-queries\r\n label=\"Điều kiện truy vấn\"\r\n [queries]=\"component.properties?.queries\"\r\n [components]=\"components\"\r\n [variables]=\"variables\" \r\n [(model)]=\"component.properties!.query\"></build-queries>\r\n }\r\n </sd-section>\r\n @if (component.properties?.variables?.length) {\r\n <sd-section class=\"mt-8\" title=\"Tham số\" icon=\"format_list_bulleted\">\r\n @for (variable of component.properties?.variables; track variable.key) {\r\n <attribute-input [form]=\"form\" [label]=\"variable.label\" [(model)]=\"variable.value\"></attribute-input>\r\n }\r\n </sd-section>\r\n }\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericHtml } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { HtmlPipe } from '../../../../../pipes';\r\nimport { FormGenericService } from '../../../../../services';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\n\r\n@Component({\r\n selector: 'html-control',\r\n templateUrl: './html-control.component.html',\r\n styleUrls: ['./html-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [HtmlPipe],\r\n})\r\nexport class HtmlControl {\r\n component!: SdFormGenericHtml;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericHtml) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n this.content = this.component.content;\r\n }\r\n content?: string;\r\n hashed?: string; // Dùng để ép Angular nhận diện sự thay đổi của HTML khi content/variables\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService,\r\n private formGenericService: FormGenericService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(async () => {\r\n if (this.component.template) {\r\n this.content = await this.formGenericService.html.getContent(this.component.template);\r\n } else {\r\n this.content = this.component.content;\r\n }\r\n this.hashed = SdUtilities.hash({\r\n content: this.content,\r\n variables: this.component.properties?.variables?.reduce(\r\n (current, next) => ({\r\n ...current,\r\n [next.key]: next.value,\r\n }),\r\n {}\r\n ),\r\n });\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (!content) {\r\n <div class=\"c-html d-flex align-items-center justify-content-center\">\r\n <span class=\"material-icons\"> html </span>\r\n </div>\r\n} @else {\r\n <div [innerHTML]=\"hashed | htmlPipe: content: component\"></div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport {\r\n SdFormGenericComponent,\r\n SdFormGenericGroup,\r\n} from '../../../../models';\r\nimport { SdInput } from '@sd-angular/core/forms';\r\n\r\n@Component({\r\n selector: 'attribute-parameter',\r\n templateUrl: './attribute-parameter.component.html',\r\n styleUrl: './attribute-parameter.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ SdButton, SdModal , SdInput],\r\n})\r\nexport class AttributeParameter {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n form = new FormGroup({});\r\n @Input() label?: string;\r\n\r\n items: {\r\n id: string;\r\n key: string;\r\n value: any;\r\n }[] = [];\r\n queryString?: string;\r\n #model!: Record<string, any>;\r\n @Input({ alias: 'model', required: true }) set _model(model: Record<string, any> | undefined) {\r\n this.#model = JSON.parse(JSON.stringify({ ...model }));\r\n // Parse JSON -> STRING để hiển thị trên UI\r\n this.queryString = JSON.stringify(this.#model);\r\n this.items = Object.keys(this.#model).map(key => ({\r\n id: SdUtilities.randomId(),\r\n key,\r\n value: this.#model?.[key],\r\n }));\r\n }\r\n @Output() modelChange = new EventEmitter<Record<string, string>>();\r\n\r\n constructor(private ref: ChangeDetectorRef) {}\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n edit = async () => {\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n addField = () => {\r\n this.items.push({\r\n id: SdUtilities.randomId(),\r\n key: '',\r\n value: '',\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n remove = (idx: number) => {\r\n this.items.splice(idx, 1);\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const result: Record<string, string> = {};\r\n for (const { key, value } of this.items) {\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n }\r\n this.modelChange.emit(result);\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n}\r\n\r\nexport interface Property {\r\n value: string;\r\n display: string;\r\n}\r\n","<div class=\"d-flex align-items-center py-4\">\r\n @if (label) {\r\n <div class=\"T14R\" style=\"flex: 1\">{{ label }}</div>\r\n }\r\n <div style=\"width: 200px\" class=\"d-flex align-items-center\">\r\n <a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{ queryString }}</a>\r\n </div>\r\n</div>\r\n<sd-modal title=\"Gán giá trị Tham số\" width=\"500px\">\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button prefixIcon=\"add\" title=\"Thêm trường\" color=\"primary\" (click)=\"addField()\"></sd-button>\r\n </div>\r\n <!-- Cấp 1 -->\r\n @for (item of items; track item.id; let idx = $index) {\r\n <div class=\"d-flex align-items-center py-8\" style=\"gap: 8px\">\r\n <sd-input label=\"Tên tham số\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"item.key\" required hideInlineError></sd-input>\r\n <sd-input label=\"Giá trị tương ứng\" [form]=\"form\" style=\"flex: 1\" [(model)]=\"item.value\" required hideInlineError></sd-input>\r\n <div style=\"width: 32px; min-width: 32px\">\r\n <sd-button\r\n prefixIcon=\"delete\"\r\n tooltip=\"Xóa\"\r\n (click)=\"remove(idx)\"\r\n size=\"sm\"\r\n class=\"p-0\"\r\n ></sd-button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericUpload, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSelect } from '../../attribute-select/attribute-select.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\nimport { BuilderService } from '../../../services';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { debounceTime, filter, Subscription } from 'rxjs';\r\nimport { AttributeInputNumber } from '../../attribute-input-number/attribute-input-number.component';\r\nimport { AttributeParameter } from '../../attribute-parameter/attribute-parameter.component';\r\n\r\n@Component({\r\n selector: 'upload-attribute',\r\n templateUrl: './upload-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeInputNumber, AttributeSwitch, AttributeSelect, AttributeExpression , AttributeParameter],\r\n})\r\nexport class UploadAttribute {\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n component!: SdFormGenericUpload;\r\n extension?: string;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericUpload) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n this.extension = this.component.properties!.extensions?.join(',') || '';\r\n }\r\n\r\n #subscription = new Subscription();\r\n sources: {\r\n value: 'ALL' | 'PHOTO_LIBRARY' | 'CAPTURE';\r\n display: string;\r\n }[] = [{\r\n value: 'ALL',\r\n display: 'Tất cả'\r\n },{\r\n value: 'PHOTO_LIBRARY',\r\n display: 'Chọn từ thư viện'\r\n },{\r\n value: 'CAPTURE',\r\n display: 'Chụp ảnh'\r\n }];\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'upload') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.component.properties!.type = this.component.properties!.type || 'file';\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n onChangeExtension = (extension: string) => {\r\n this.extension = extension;\r\n this.component.properties!.extensions =\r\n extension\r\n ?.split(',')\r\n ?.map(val => val?.trim())\r\n ?.filter(val => !!val) || [];\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n <attribute-select\r\n label=\"Loại\"\r\n [(model)]=\"component.properties!.type\"\r\n [items]=\"[\r\n { value: 'file', display: 'Tệp' },\r\n { value: 'image', display: 'Ảnh' }\r\n ]\"></attribute-select>\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n <attribute-input-number label=\"SL tệp/ảnh tối đa\" [(model)]=\"component.properties!.max\"></attribute-input-number>\r\n <attribute-input-number label=\"Dung lượng (Mb)\" [(model)]=\"component.properties!.maxSize\"></attribute-input-number>\r\n @if (component.properties!.type === 'file') {\r\n <attribute-input label=\"Định dạng (VD: png,jpg ...)\" [model]=\"extension\" (modelChange)=\"onChangeExtension($event)\"></attribute-input>\r\n }\r\n @if (component.properties!.type === 'image') {\r\n <attribute-select label=\"Nguồn (mobile)\" [(model)]=\"component.properties!.source\" [items]=\"sources\"></attribute-select>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Tham số\" icon=\"settings\">\r\n <attribute-parameter label=\"Gán tham số\" [components]=\"components\" [(model)]=\"component.properties!.args\"></attribute-parameter>\r\n </sd-section>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericUpload } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { filter, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'upload-control',\r\n templateUrl: './upload-control.component.html',\r\n styleUrls: ['./upload-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UploadControl {\r\n component!: SdFormGenericUpload;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericUpload) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n <div class=\"d-block T12R text-secondary\">\r\n {{ component.label }}\r\n </div>\r\n <svg\r\n width=\"64\"\r\n height=\"64\"\r\n viewBox=\"0 0 1280 1280\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n stroke-linejoin=\"round\"\r\n stroke-miterlimit=\"2\"\r\n alt=\"This is an image placeholder\">\r\n <path fill=\"#e5e9ed\" d=\"M0 0h1280v1280H0z\"></path>\r\n <path d=\"M910 410H370v470h540V410zm-57.333 57.333v355.334H427.333V467.333h425.334z\" fill=\"#cad3db\"></path>\r\n <path d=\"M810 770H480v-60l100-170 130 170 100-65v125z\" fill=\"#cad3db\"></path>\r\n <circle cx=\"750\" cy=\"550\" r=\"50\" fill=\"#cad3db\" transform=\"translate(10 10)\"></circle>\r\n </svg>\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n <div class=\"c-upload-file d-flex align-items-center justify-content-between\">\r\n <svg\r\n width=\"64\"\r\n height=\"64\"\r\n viewBox=\"0 0 1280 1280\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n stroke-linejoin=\"round\"\r\n stroke-miterlimit=\"2\"\r\n alt=\"This is an image placeholder\">\r\n <path fill=\"#e5e9ed\" d=\"M0 0h1280v1280H0z\"></path>\r\n <path d=\"M910 410H370v470h540V410zm-57.333 57.333v355.334H427.333V467.333h425.334z\" fill=\"#cad3db\"></path>\r\n <path d=\"M810 770H480v-60l100-170 130 170 100-65v125z\" fill=\"#cad3db\"></path>\r\n <circle cx=\"750\" cy=\"550\" r=\"50\" fill=\"#cad3db\" transform=\"translate(10 10)\"></circle>\r\n </svg>\r\n </div>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { SdLabel } from '@sd-angular/core/forms/label';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from '../../../../configurations';\r\nimport {\r\n SdFormGenericComponent,\r\n SdFormGenericDefinitionTable,\r\n SdFormGenericGroup,\r\n SdFormGenericTableColumn,\r\n SdFormGenericVariable,\r\n TableColumnTypes,\r\n} from '../../../../models';\r\nimport { AttributeInput } from '../attribute-input/attribute-input.component';\r\nimport { AttributeSelect } from '../attribute-select/attribute-select.component';\r\nimport { AttributeSelection } from '../attribute-selection/attribute-selection.component';\r\nimport { AttributeSwitch } from '../attribute-switch/attribute-switch.component';\r\nimport { AttributeParameter } from '../attribute-parameter/attribute-parameter.component';\r\n\r\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\r\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\r\n@Component({\r\n selector: 'attribute-table',\r\n templateUrl: './attribute-table.component.html',\r\n imports: [\r\n MatIconModule,\r\n MatDividerModule,\r\n SdLabel,\r\n SdAutocomplete,\r\n SdButton,\r\n SdSection,\r\n SdModal,\r\n AttributeSelection,\r\n AttributeInput,\r\n AttributeSelect,\r\n AttributeSwitch,\r\n AttributeParameter\r\n ],\r\n})\r\nexport class AttributeTable {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n form = new FormGroup({});\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n // ColumnsKey\r\n columnsKey?: string;\r\n @Input({ alias: 'columnsKey', required: true }) set _columnsKey(columnsKey: string | undefined | null) {\r\n if (this.columnsKey !== columnsKey) {\r\n this.columnsKey = columnsKey?.toString();\r\n }\r\n }\r\n @Output() columnsKeyChange = new EventEmitter<string>();\r\n tables: SdFormGenericDefinitionTable[] = [];\r\n\r\n // Columns\r\n types = TableColumnTypes;\r\n columns: SdFormGenericTableColumn[] = [];\r\n @Input({ alias: 'columns', required: true }) set _columns(columns: SdFormGenericTableColumn[] | undefined | null) {\r\n if (this.columns !== columns) {\r\n this.columns = columns || [];\r\n }\r\n }\r\n @Output() columnsChange = new EventEmitter<SdFormGenericTableColumn[]>();\r\n column?: SdFormGenericTableColumn;\r\n constructor(@Inject(SD_WORKFLOW_CONFIGURATION) private workflowConfiguration: ISdWorkflowConfiguration) {\r\n this.tables = this.workflowConfiguration?.form?.tables || [];\r\n }\r\n\r\n onChangeColumnsKey = (value: any) => {\r\n this.columnsKeyChange.emit(value);\r\n const table = this.tables.find(e => e.value === value);\r\n if (table) {\r\n this.columns = table.columns();\r\n } else {\r\n this.columns = [];\r\n }\r\n this.columnsChange.emit(this.columns);\r\n };\r\n\r\n addColumn = () => {\r\n this.selectedIdx = undefined;\r\n this.column = {\r\n key: SdUtilities.randomId('key'),\r\n label: SdUtilities.randomId('label'),\r\n type: 'string',\r\n width: '100px',\r\n validate: {},\r\n };\r\n this.modal?.open();\r\n };\r\n\r\n selectedIdx? = 0;\r\n editColumn = (idx: number) => {\r\n if (this.columns[idx]) {\r\n this.selectedIdx = idx;\r\n this.column = JSON.parse(JSON.stringify(this.columns[idx]));\r\n this.column!.validate = this.column?.validate || {};\r\n this.modal?.open();\r\n }\r\n };\r\n\r\n removeColumn = (idx: number) => {\r\n this.columns.splice(idx, 1);\r\n this.columnsChange.emit(this.columns);\r\n };\r\n\r\n onConfirm = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n if (this.column) {\r\n if (this.selectedIdx! >= 0) {\r\n this.columns.splice(this.selectedIdx!, 1, this.column);\r\n } else {\r\n this.columns.push(this.column);\r\n }\r\n this.columnsChange.emit(this.columns);\r\n }\r\n this.modal?.close();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Dữ liệu\" icon=\"format_list_bulleted\">\r\n @if (tables.length) {\r\n <!-- <div class=\"d-flex align-items-center py-4\">\r\n <div class=\"T14M\" style=\"flex: 1\">Dữ liệu cột</div>\r\n <sd-autocomplete\r\n style=\"width: 200px\"\r\n size=\"sm\"\r\n [(model)]=\"columnsKey\"\r\n [items]=\"tables\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChangeColumnsKey($event)\"\r\n hideInlineError></sd-autocomplete>\r\n </div> -->\r\n <sd-autocomplete\r\n class=\"py-8\"\r\n label=\"Dữ liệu cột\"\r\n [(model)]=\"columnsKey\"\r\n [items]=\"tables\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n (sdChange)=\"onChangeColumnsKey($event)\"\r\n hideInlineError></sd-autocomplete>\r\n }\r\n @if (!columnsKey) {\r\n <div class=\"d-flex flex-column\" style=\"gap: 4px\">\r\n <div class=\"T14M\">Danh sách cột</div>\r\n @for (item of columns; track item.key; let idx = $index) {\r\n <div class=\"d-flex align-items-center py-4\" style=\"gap: 4px; justify-content: space-between\">\r\n <div class=\"d-flex flex-column\">\r\n <sd-label [label]=\"item.label\" [required]=\"item.validate?.required\"></sd-label>\r\n <div class=\"T12R text-secondary\">{{ item.key }}</div>\r\n </div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 4px\">\r\n <mat-icon class=\"text-secondary\" style=\"cursor: pointer\" [fontIcon]=\"'edit'\" (click)=\"editColumn(idx)\"></mat-icon>\r\n <mat-icon class=\"text-secondary\" style=\"cursor: pointer\" [fontIcon]=\"'cancel'\" (click)=\"removeColumn(idx)\"></mat-icon>\r\n </div>\r\n </div>\r\n }\r\n <sd-button prefixIcon=\"add\" title=\"Thêm cột\" (click)=\"addColumn()\" color=\"primary\"></sd-button>\r\n </div>\r\n }\r\n</sd-section>\r\n<sd-modal title=\"Cấu hình cột\" width=\"600px\">\r\n @if (column) {\r\n <sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-input [form]=\"form\" label=\"Trường dữ liệu\" [(model)]=\"column.key\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên cột\" [(model)]=\"column.label\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Chiều rộng\" [(model)]=\"column.width\"></attribute-input>\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"column.validate!.required\"></attribute-switch>\r\n <attribute-select [form]=\"form\" label=\"Loại dữ liệu\" [(model)]=\"column.type\" [items]=\"types\"></attribute-select>\r\n </sd-section>\r\n @if (column.type === 'boolean') {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"info\">\r\n <attribute-input [form]=\"form\" label=\"Hiển thị khi TRUE\" [(model)]=\"column.displayOnTrue\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Hiển thị khi FALSE\" [(model)]=\"column.displayOnFalse\"></attribute-input>\r\n </sd-section>\r\n } @else if (column.type === 'values') {\r\n <attribute-selection\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [component]=\"column\"\r\n [(valuesKey)]=\"column.valuesKey\"\r\n [(values)]=\"column.values\"></attribute-selection>\r\n } @else if (column.type === 'file' || column.type === 'image') {\r\n <sd-section class=\"mt-8\" title=\"Tham số\" icon=\"settings\">\r\n <attribute-parameter label=\"Gán tham số\" [components]=\"components\" [(model)]=\"column!.args\"></attribute-parameter>\r\n </sd-section>\r\n }\r\n }\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Lưu\" (click)=\"onConfirm()\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdSection } from '@sd-angular/core/components/section';\r\nimport { SdFormatComponent, SdFormGenericComponent, SdFormGenericGroup, SdFormGenericTable, SdFormGenericVariable } from '../../../../../models';\r\nimport { AttributeInput } from '../../attribute-input/attribute-input.component';\r\nimport { AttributeSwitch } from '../../attribute-switch/attribute-switch.component';\r\nimport { AttributeTemplate } from '../../attribute-template/attribute-template.component';\r\nimport { AttributeTable } from '../../attribute-table/attribute-table.component';\r\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\r\nimport { BuilderService } from '../../../services';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { AttributeExpression } from '../../attribute-expression/attribute-expression.component';\r\n\r\n@Component({\r\n selector: 'table-attribute',\r\n templateUrl: './table-attribute.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdSection, AttributeTemplate, AttributeInput, AttributeSwitch, AttributeTable, AttributeExpression],\r\n})\r\nexport class TableAttribute {\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n @Input({ required: true }) variables!: SdFormGenericVariable[];\r\n form = new FormGroup({});\r\n component!: SdFormGenericTable;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTable) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n\r\n #changes = new Subject<void>();\r\n #subscription = new Subscription();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n this.#changes.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n // Khi thay đổi, debound 0.5s rồi mới emit output\r\n this.#subscription.add(\r\n this.form.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.builderService.componentEmitters.next(this.component);\r\n })\r\n );\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n onChangeTemplate = (template: SdFormGenericComponent) => {\r\n if (template && template.type === 'table') {\r\n // Dùng Object Assign để không bị tạo ra reference mới\r\n Object.assign(this.component, {\r\n ...template,\r\n id: this.component.id, // Giữ lại id để componentEmitters định danh được component nào bị thay đổi\r\n });\r\n SdFormatComponent(this.component);\r\n this.builderService.componentEmitters.next(this.component);\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n onChanges = () => {\r\n this.#changes.next();\r\n };\r\n}\r\n","<sd-section class=\"mt-8\" title=\"Thông tin chung\" icon=\"info\">\r\n <attribute-template [component]=\"component\" (sdChange)=\"onChangeTemplate($event)\"></attribute-template>\r\n <attribute-input label=\"Trường dữ liệu\" [(model)]=\"component.key\" [disabled]=\"!!component.template\"></attribute-input>\r\n <attribute-input [form]=\"form\" label=\"Tên hiển thị\" [(model)]=\"component.label\"></attribute-input>\r\n</sd-section>\r\n\r\n@if (!component.properties!.hidden && !component.properties!.viewed) {\r\n <sd-section class=\"mt-8\" title=\"Hiển thị\" icon=\"visibility\">\r\n <attribute-switch label=\"Vô hiệu\" [(model)]=\"component.disabled\"></attribute-switch>\r\n <attribute-expression\r\n label=\"Hiển thị khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.visibleWhenExpression\"></attribute-expression>\r\n <attribute-expression\r\n label=\"Ẩn khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.hiddenWhenExpression\"></attribute-expression>\r\n @if (!component.disabled) {\r\n <attribute-expression\r\n label=\"Vô hiệu khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.disabledWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <sd-section class=\"mt-8\" title=\"Ràng buộc\" icon=\"verified_user\">\r\n <attribute-switch [form]=\"form\" label=\"Bắt buộc\" [(model)]=\"component.validate!.required\"></attribute-switch>\r\n @if (!component.validate!.required) {\r\n <attribute-expression\r\n label=\"Bắt buộc khi\"\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(model)]=\"component.properties!.requiredWhenExpression\"></attribute-expression>\r\n }\r\n </sd-section>\r\n <attribute-table\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [(columnsKey)]=\"component.columnsKey\"\r\n [(columns)]=\"component.columns\"\r\n (columnsKeyChange)=\"onChanges()\"\r\n (columnsChange)=\"onChanges()\"></attribute-table>\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\r\nimport { SdFormatComponent, SdFormGenericTable } from '../../../../../models';\r\nimport { BuilderService } from '../../../services';\r\nimport { filter, Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'table-control',\r\n templateUrl: './table-control.component.html',\r\n styleUrls: ['./table-control.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule],\r\n})\r\nexport class TableControl {\r\n component!: SdFormGenericTable;\r\n @Input({ alias: 'component', required: true }) set _component(component: SdFormGenericTable) {\r\n if (this.component !== component) {\r\n this.component = component;\r\n SdFormatComponent(this.component);\r\n }\r\n }\r\n\r\n #subscription = new Subscription();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private builderService: BuilderService\r\n ) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.#subscription.add(\r\n // Chỉ lắng nghe sự kiện thay đổi tương ứng với component dựa vào id\r\n this.builderService.componentListeners.pipe(filter(component => component.id === this.component.id)).subscribe(component => {\r\n if (component) {\r\n this.ref.markForCheck();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n}\r\n","@if (component.properties?.viewed) {\r\n @if (component.columns?.length) {\r\n <div class=\"c-table\">\r\n <div class=\"c-header d-flex align-items-center bg-secondary-light\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"c-item\" [style.width]=\"column.width\">\r\n {{ column.label }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"c-content\">\r\n <div class=\"row-table d-flex align-items-center\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"c-item text-secondary\" [style.width]=\"column.width\">{{ column.key }}</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n} @else {\r\n <div class=\"d-block mb-0 T14M\">\r\n {{ component.label }}\r\n @if (component.validate?.required) {\r\n <span class=\"text-error mb-2\">*</span>\r\n }\r\n </div>\r\n @if (component.columns?.length) {\r\n <div class=\"c-table\">\r\n <div class=\"c-header d-flex align-items-center bg-primary-light\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"c-item\" [style.width]=\"column.width\">\r\n {{ column.label }}\r\n </div>\r\n }\r\n </div>\r\n <div class=\"c-content\">\r\n <div class=\"row-table d-flex align-items-center\">\r\n @for (column of component.columns; track column.key) {\r\n <div class=\"c-item text-secondary\" [style.width]=\"column.width\">{{ column.key }}</div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n// Định nghĩa các Components của Form Render\r\nimport { SdFormGenericExpression } from './form-generic-expression.model';\r\n\r\nexport type SdFormGenericValidation = ValidationExpression | ValidationFunction;\r\n\r\ninterface ValidationBase {\r\n alert: 'warning' | 'error'; //\r\n}\r\n\r\nexport const ValidationAlerts = [\r\n {\r\n value: 'error',\r\n display: 'Lỗi',\r\n },\r\n {\r\n value: 'warning',\r\n display: 'Cảnh báo',\r\n },\r\n];\r\n\r\ninterface ValidationExpression extends ValidationBase {\r\n type: 'expression';\r\n expression: SdFormGenericExpression;\r\n message: string; // Có thể là html\r\n}\r\n\r\ninterface ValidationFunction extends ValidationBase {\r\n type: 'function';\r\n code: string; // Lấy từ value của SdFormGenericValidationFunction\r\n}\r\n\r\ninterface ValidateArgs {\r\n entity: Record<string, any>;\r\n}\r\n\r\nexport interface SdFormGenericValidationFunction {\r\n value: string;\r\n display: string;\r\n validate: (args: ValidateArgs) => Promise<string | undefined | null>; // Hàm trả về string message nếu có lỗi, message có thể là html\r\n}\r\n\r\nexport interface SdFormGenericValidationConfiguration {\r\n // Danh sách các functions validate được cấu hình sẵn để làm dữ liêu cho dropdown\r\n functions?: SdFormGenericValidationFunction[];\r\n}\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdInput, SdLabel, SdSelect } from '@sd-angular/core/forms';\r\nimport { SdUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport { ISdWorkflowConfiguration, SD_WORKFLOW_CONFIGURATION } from '../../../../configurations';\r\nimport { Attribute, GetAttributes } from '../../../../models';\r\nimport { SdFormGenericValidation, SdFormGenericValidationFunction, ValidationAlerts } from '../../../../models/form-generic-validation.model';\r\nimport { SdFormGeneric } from '../../../../models/form-generic.model';\r\nimport { ExpressionBuilderComponent } from '../expression-builder/expression-builder.component';\r\n\r\n@Component({\r\n selector: 'configure-validation',\r\n templateUrl: './configure-validation.component.html',\r\n styleUrl: './configure-validation.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatMenuModule, SdModal, SdButton, SdInput, SdSelect, ExpressionBuilderComponent, MatIconModule],\r\n})\r\nexport class ConfigureValidationComponent {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n form = new FormGroup({});\r\n attributes: Attribute[] = [];\r\n validations: SdFormGenericValidation[] = [];\r\n functions: SdFormGenericValidationFunction[] = [];\r\n alerts = ValidationAlerts;\r\n @Output() accept = new EventEmitter<SdFormGenericValidation[]>();\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n @Inject(SD_WORKFLOW_CONFIGURATION) private workflowConfiguration: ISdWorkflowConfiguration\r\n ) {\r\n this.functions = this.workflowConfiguration?.form?.validation?.functions || [];\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // this.#subscription.add(\r\n // this.#validationsChanges.pipe(debounceTime(200), startWith(this.validations)).subscribe(() => {\r\n // // Khi component thay đổi thì sync lại\r\n // this.ref.markForCheck();\r\n // })\r\n // );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n open = (formGeneric: SdFormGeneric) => {\r\n // Xử lý gán validations\r\n if (Array.isArray(formGeneric?.validations)) {\r\n this.validations = JSON.parse(JSON.stringify(formGeneric?.validations));\r\n } else {\r\n this.validations = [];\r\n }\r\n this.attributes = GetAttributes(formGeneric.components)\r\n if (formGeneric) {\r\n this.modal?.open();\r\n this.ref.markForCheck();\r\n }\r\n };\r\n\r\n addValidation = (type: SdFormGenericValidation['type']) => {\r\n if (type === 'expression') {\r\n this.validations.push({\r\n alert: 'error',\r\n type,\r\n expression: {\r\n key: SdUtilities.randomId(),\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n },\r\n message: '',\r\n });\r\n } else if (type === 'function') {\r\n this.validations.push({\r\n alert: 'error',\r\n type,\r\n code: '',\r\n });\r\n }\r\n this.ref.markForCheck();\r\n };\r\n\r\n removaValidation = (index: number) => {\r\n this.validations.splice(index, 1);\r\n this.ref.markForCheck();\r\n };\r\n\r\n updateValidations = () => {\r\n this.accept.emit(this.validations);\r\n this.modal?.close();\r\n };\r\n}\r\n","<sd-modal title=\"Cấu hình xác thực lỗi/cảnh báo\" view=\"dialog\" width=\"800px\" #popupConfigureVariables>\r\n @for (validation of validations; track $index; let idx = $index) {\r\n <div class=\"mat-elevation-z2 position-relative p-8 mb-16\" style=\"border-radius: 8px;\">\r\n <div class=\"row mx-0\">\r\n <sd-select\r\n class=\"col-3\"\r\n label=\"Loại thông báo\"\r\n [(model)]=\"validation.alert\"\r\n [items]=\"alerts\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required></sd-select>\r\n @if (validation.type === 'expression') {\r\n <sd-input class=\"col-9\" [form]=\"form\" label=\"Thông báo hiển thị\" [(model)]=\"validation.message\" required></sd-input>\r\n <expression-builder class=\"col-12\" label=\"Biểu thức điều kiện\" [(model)]=\"validation.expression\" [attributes]=\"attributes\"></expression-builder>\r\n } @else if (validation.type === 'function') {\r\n <sd-select\r\n class=\"col-9\"\r\n [form]=\"form\"\r\n [(model)]=\"validation.code\"\r\n [items]=\"functions\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required></sd-select>\r\n }\r\n <mat-icon class=\"c-close-icon\" (click)=\"removaValidation(idx)\">delete</mat-icon>\r\n <!-- <sd-button\r\n \r\n prefixIcon=\"delete\"\r\n (click)=\"removaValidation(idx)\"\r\n color=\"error\"\r\n type=\"link\"></sd-button> -->\r\n </div>\r\n </div>\r\n }\r\n <sd-button title=\"Thêm xác thực\" [matMenuTriggerFor]=\"menu\" prefixIcon=\"add\" color=\"primary\" type=\"link\"></sd-button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button (click)=\"addValidation('expression')\" mat-menu-item type=\"button\">\r\n <!-- <mat-icon fontIcon=\"warning\"></mat-icon> -->\r\n <span>Biểu thức</span>\r\n </button>\r\n <button (click)=\"addValidation('function')\" mat-menu-item type=\"button\">\r\n <!-- <mat-icon fontIcon=\"error\"></mat-icon> -->\r\n <span>Phương thức sẵn có</span>\r\n </button>\r\n </mat-menu>\r\n <ng-container sdFooter>\r\n <sd-button type=\"fill\" title=\"Lưu\" (click)=\"updateValidations()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/* eslint-disable @typescript-eslint/no-unused-vars */\r\nimport { CdkDragDrop, CdkDragMove, DragDropModule, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, Input, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SdBaseSecureComponent } from '@sd-angular/core/components/base';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\nimport { SdTextarea } from '@sd-angular/core/forms/textarea';\r\nimport { SdSafeHtmlPipe } from '@sd-angular/core/pipes';\r\nimport { SdConfirmService, SdNotifyService } from '@sd-angular/core/services';\r\nimport { SdUtilities } from '@sd-angular/core/utilities';\r\nimport { debounceTime, startWith, Subject, Subscription } from 'rxjs';\r\nimport {\r\n FormBuilderComponent,\r\n FormBuilderComponents,\r\n GenerateId,\r\n GenerateKey,\r\n SdFormGenericComponent,\r\n SdFormGenericGroup,\r\n SdFormGenericVariable,\r\n} from '../../models';\r\nimport { SdFormGenericValidation } from '../../models/form-generic-validation.model';\r\nimport { SdFormGeneric } from '../../models/form-generic.model';\r\nimport { SdFormRender } from '../form-render/form-render.component';\r\nimport {\r\n CheckboxAttribute,\r\n CheckboxControl,\r\n ChipCalendarAttribute,\r\n ChipCalendarControl,\r\n ChipStringAttribute,\r\n ChipStringControl,\r\n DatetimeAttribute,\r\n DatetimeControl,\r\n HtmlAttribute,\r\n HtmlControl,\r\n NumberAttribute,\r\n NumberControl,\r\n RadioAttribute,\r\n RadioControl,\r\n SelectAttribute,\r\n SelectControl,\r\n TableAttribute,\r\n TableControl,\r\n TextareaAttribute,\r\n TextareaControl,\r\n TextfieldAttribute,\r\n TextFieldControl,\r\n UploadAttribute,\r\n UploadControl,\r\n} from './components';\r\nimport { ConfigureValidationComponent } from './components/configure-validation/configure-validation.component';\r\nimport { BuilderService } from './services';\r\n\r\ninterface DragDropRowItem {\r\n items: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n rowIndex?: number;\r\n}\r\n\r\n@Component({\r\n selector: 'sd-form-builder',\r\n templateUrl: './form-builder.component.html',\r\n styleUrl: './form-builder.component.scss',\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n DragDropModule,\r\n // Core Pipes\r\n SdSafeHtmlPipe,\r\n // Controls\r\n TextFieldControl,\r\n TextfieldAttribute,\r\n TextareaControl,\r\n TextareaAttribute,\r\n ChipStringControl,\r\n ChipStringAttribute,\r\n ChipCalendarControl,\r\n ChipCalendarAttribute,\r\n NumberControl,\r\n NumberAttribute,\r\n SelectControl,\r\n SelectAttribute,\r\n DatetimeControl,\r\n DatetimeAttribute,\r\n RadioControl,\r\n RadioAttribute,\r\n CheckboxControl,\r\n CheckboxAttribute,\r\n HtmlControl,\r\n HtmlAttribute,\r\n UploadControl,\r\n UploadAttribute,\r\n TableControl,\r\n TableAttribute,\r\n SdModal,\r\n SdInput,\r\n SdTextarea,\r\n SdButton,\r\n SdFormRender,\r\n ConfigureValidationComponent,\r\n ],\r\n})\r\nexport class SdFormBuilder extends SdBaseSecureComponent {\r\n @ViewChild('popupViewJSON') popupViewJSON?: SdModal;\r\n @ViewChild('popupConfigureVariables') popupConfigureVariables?: SdModal;\r\n @ViewChild(ConfigureValidationComponent) configureValidation?: ConfigureValidationComponent;\r\n @ViewChild(SdFormRender) formRender?: SdFormRender;\r\n form = new FormGroup({});\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private notifyService: SdNotifyService,\r\n private confirmService: SdConfirmService,\r\n private builderService: BuilderService\r\n ) {\r\n super();\r\n }\r\n components: Required<SdFormGeneric>['components'] = [];\r\n variables: Required<SdFormGeneric>['variables'] = [];\r\n validations: Required<SdFormGeneric>['validations'] = [];\r\n // @Input('components') set _components(components: (SdFormGenericComponent | SdFormGenericGroup)[] | undefined | null) {\r\n // // Luôn clone components để tránh ảnh hưởng đến tham số truyền vào\r\n // if (Array.isArray(components)) {\r\n // this.components = JSON.parse(JSON.stringify(components));\r\n // } else {\r\n // this.components = [];\r\n // }\r\n // this.#componentsChanges.next();\r\n // }\r\n\r\n // Mỗi lần mở popup thì sử dụng clone variables vào clonedVariables, khi nào bấm ok thì mới gán ngược lại clonedVariables vào variables\r\n clonedVariables: SdFormGenericVariable[] = [];\r\n // @Input('variables') set _variables(variables: SdFormGenericVariable[] | undefined | null) {\r\n // // Luôn clone components để tránh ảnh hưởng đến tham số truyền vào\r\n // if (Array.isArray(variables)) {\r\n // this.variables = JSON.parse(JSON.stringify(variables));\r\n // } else {\r\n // this.variables = [];\r\n // }\r\n // this.#variablesChanges.next();\r\n // }\r\n\r\n @Input('formGeneric') set _formGeneric(formGeneric: SdFormGeneric) {\r\n // Luôn clone (JSONS stringfy) để tránh ảnh hưởng đến tham số truyền vào\r\n // Xử lý gán components\r\n if (Array.isArray(formGeneric?.components)) {\r\n this.components = JSON.parse(JSON.stringify(formGeneric?.components));\r\n } else {\r\n this.components = [];\r\n }\r\n this.#componentsChanges.next();\r\n // Xử lý gán variables\r\n if (Array.isArray(formGeneric?.variables)) {\r\n this.variables = JSON.parse(JSON.stringify(formGeneric?.variables));\r\n } else {\r\n this.variables = [];\r\n }\r\n this.#variablesChanges.next();\r\n // Xử lý gán validations\r\n if (Array.isArray(formGeneric?.validations)) {\r\n this.validations = JSON.parse(JSON.stringify(formGeneric?.validations));\r\n } else {\r\n this.validations = [];\r\n }\r\n this.#validationsChanges.next();\r\n }\r\n\r\n formBuilderComponents = FormBuilderComponents;\r\n selectedComponent?: SdFormGenericComponent | SdFormGenericGroup;\r\n expand = true;\r\n dragDropRows: DragDropRowItem[] = [];\r\n isDragging = false;\r\n targetItem?: DragDropRowItem = undefined;\r\n\r\n #componentsChanges = new Subject<void>();\r\n #variablesChanges = new Subject<void>();\r\n #validationsChanges = new Subject<void>();\r\n #subscription = new Subscription();\r\n isPreview = false;\r\n ngOnInit() {\r\n this.#subscription.add(\r\n this.#componentsChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\r\n // Khi component thay đổi thì sync lại\r\n this.#syncComponentsToRows();\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#variablesChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\r\n // Khi component thay đổi thì sync lại\r\n this.ref.markForCheck();\r\n })\r\n );\r\n this.#subscription.add(\r\n this.#validationsChanges.pipe(debounceTime(200), startWith('')).subscribe(() => {\r\n // Khi component thay đổi thì sync lại\r\n this.ref.markForCheck();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n addComponent = (item: FormBuilderComponent, index?: number) => {\r\n const id = GenerateId();\r\n const key = GenerateKey();\r\n const formRenderComponent: SdFormGenericComponent = {\r\n id,\r\n key,\r\n type: item.type as any,\r\n label: item.type,\r\n layout: {\r\n columns: '12',\r\n },\r\n validate: {\r\n required: false,\r\n },\r\n disabled: false,\r\n properties: {},\r\n };\r\n if (index !== undefined) {\r\n this.components.splice(index, 0, formRenderComponent);\r\n } else {\r\n this.components.push(formRenderComponent);\r\n }\r\n\r\n this.#recountTabIndex();\r\n this.selectedComponent = this.components?.find(component => component.id === id);\r\n this.selectComponent(this.selectedComponent);\r\n this.ref.markForCheck();\r\n };\r\n\r\n removeComponent = (id: string) => {\r\n this.components = this.components.filter((t: { id: string }) => t.id !== id);\r\n this.#recountTabIndex();\r\n };\r\n\r\n selectComponent = (item?: SdFormGenericComponent | SdFormGenericGroup) => {\r\n this.selectedComponent = item;\r\n this.ref.markForCheck();\r\n };\r\n\r\n onClickedOutside = (e: any) => {\r\n const classList = (e.target as Element).classList;\r\n if (!classList.length || classList.contains('components') || classList.contains('cdk-drop-list')) {\r\n this.selectedComponent = undefined;\r\n }\r\n };\r\n\r\n clickFormContentEmpty = () => {\r\n if (!this.dragDropRows?.length) {\r\n this.selectedComponent = undefined;\r\n }\r\n };\r\n\r\n drop = (event: CdkDragDrop<any[]>) => {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n this.#syncRowsToComponents();\r\n // xử lý kéo chéo\r\n if (!event.isPointerOverContainer) {\r\n const dragItemId = event.item.element.nativeElement.id;\r\n if (dragItemId) {\r\n const dragItem = this.components.find((t: { id: string }) => t.id === dragItemId);\r\n this.xuLyKeoCheo(dragItem);\r\n }\r\n }\r\n } else {\r\n const drop = event.previousContainer.data[0];\r\n if ('icon' in drop) {\r\n // transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\r\n const droppedItem = event.previousContainer.data[event.previousIndex] as FormBuilderComponent;\r\n const rowIndex = event.currentIndex;\r\n const rowItem = this.dragDropRows?.find(t => t.rowIndex === rowIndex);\r\n if (rowItem) {\r\n this.addComponent(droppedItem, +(rowItem.items[0]?.layout?.row || 12) - 1);\r\n // this.addComponent(droppedItem, parseInt(rowItem.items[rowItem.items.length - 1].layout.row, 0));\r\n } else {\r\n this.addComponent(droppedItem);\r\n }\r\n } else {\r\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\r\n }\r\n }\r\n this.#recountTabIndex();\r\n };\r\n\r\n dragStartComponentItem = (event: any) => {\r\n this.isDragging = true;\r\n };\r\n\r\n dragEndComponentItem = (event: any) => {\r\n this.isDragging = false;\r\n };\r\n\r\n onMouseover = (event: MouseEvent, rowItem: DragDropRowItem) => {\r\n if (this.isDragging) {\r\n this.targetItem = rowItem;\r\n }\r\n };\r\n\r\n // Mouseover thì phải có Focus không thì thẻ sẽ báo lỗi\r\n onFocus = (event: FocusEvent) => {\r\n //console.log(event);\r\n };\r\n\r\n xuLyKeoCheo = (dragItem?: SdFormGenericComponent | SdFormGenericGroup) => {\r\n if (dragItem) {\r\n if (this.targetItem) {\r\n // kiểm tra target đã full column chưa?\r\n const totalColumnInRow = this.targetItem.items.map(t => +t.layout!.columns || 12).reduce((acc, curr) => acc + curr, 0);\r\n if (totalColumnInRow + +dragItem.layout!.columns <= 12) {\r\n // xóa vị trí cũ\r\n this.dragDropRows.forEach(t => {\r\n if (t.items.some((k: { id: any }) => k.id === dragItem.id)) {\r\n t.items = t.items.filter((k: { id: any }) => k.id !== dragItem.id) || [];\r\n }\r\n });\r\n // thêm vào vị trí mới\r\n this.targetItem.items.push(dragItem);\r\n this.#syncRowsToComponents();\r\n } else {\r\n this.notifyService.warning('Không thể di chuyển tới dòng này vì tổng kích thước vượt quá 12 cột');\r\n }\r\n }\r\n }\r\n this.targetItem = undefined;\r\n };\r\n\r\n noReturnPredicate = () => {\r\n return false;\r\n };\r\n\r\n #recountTabIndex = () => {\r\n // Tránh dùng map vì nó sẽ sinh ra reference mới\r\n this.components.forEach((item, index) => {\r\n if (item.layout) {\r\n item.layout!.row = `${index + 1}`;\r\n item.layout!.columns = item.layout?.columns || '12';\r\n } else {\r\n item.layout = {\r\n row: `${index + 1}`,\r\n columns: '12',\r\n };\r\n }\r\n });\r\n if (this.selectedComponent && this.selectedComponent?.layout?.row) {\r\n this.selectedComponent.layout.row = this.components.find(t => t.id === this.selectedComponent?.id)?.layout?.row;\r\n }\r\n this.#syncComponentsToRows();\r\n };\r\n\r\n // Hàm xử lý chuyển đổi components -> dragDropRows\r\n // Dựa vào columns của component để quyết định dragDropRows có bao nhiêu items trên row, đảm bảo columns tổng số items <= 12\r\n #syncComponentsToRows = () => {\r\n this.dragDropRows = [];\r\n for (const component of this.components) {\r\n // lấy dòng cuối cùng của dragDropList\r\n let lastRow: DragDropRowItem = { rowIndex: this.dragDropRows.length, items: [] };\r\n if (this.dragDropRows.length) {\r\n lastRow = this.dragDropRows[this.dragDropRows.length - 1];\r\n } else {\r\n this.dragDropRows.push(lastRow);\r\n }\r\n // tính tổng cột trên 1 dòng\r\n const columns = +component.layout!.columns || 12;\r\n const totalColumnInRow = lastRow.items.map(t => +t.layout!.columns || 12).reduce((acc: number, curr) => acc + curr, 0);\r\n if (+totalColumnInRow + columns <= 12) {\r\n lastRow.items.push(component);\r\n } else {\r\n const newRow = { rowIndex: this.dragDropRows.length, items: [component] };\r\n this.dragDropRows.push(newRow);\r\n }\r\n }\r\n };\r\n\r\n // Hàm xử lý chuyển đổi dragDropRows -> components\r\n // Vì khi kéo thả sẽ thay đổi vị trí, do đó cần sắp xếp lại components\r\n #syncRowsToComponents = () => {\r\n // rải data ma trận droplist => schema.components\r\n this.components = this.dragDropRows?.map(e => e.items)?.reduce((current, next) => [...current, ...next], []) || [];\r\n };\r\n\r\n changeSizeControl = async (\r\n event: CdkDragMove<SdFormGenericComponent | SdFormGenericGroup>,\r\n item: SdFormGenericComponent | SdFormGenericGroup,\r\n items: (SdFormGenericComponent | SdFormGenericGroup)[],\r\n currentIndex: number\r\n ) => {\r\n // const totalColumnInRow = items.map(k => k.layout.columns).reduce((acc, curr) => acc + parseInt(curr, 0), 0);\r\n const totalColumnBeforeItem = items\r\n .map(k => +k.layout!.columns || 12)\r\n .reduce((acc, curr, index) => {\r\n if (index < currentIndex) {\r\n acc = acc + curr;\r\n }\r\n return acc;\r\n }, 0);\r\n const rect = document.getElementById('frmComponent')?.getBoundingClientRect() as DOMRect;\r\n const left = rect.left;\r\n const right = rect.right - left;\r\n const mouse = event.pointerPosition.x - left!;\r\n const t = Math.round(12 / (100 / ((100 * mouse) / right))) - totalColumnBeforeItem;\r\n if (t > 12) {\r\n item.layout!.columns = '12';\r\n } else if (t < 2) {\r\n item.layout!.columns = '2';\r\n } else {\r\n item.layout!.columns = `${t}` as any;\r\n }\r\n\r\n // document.getElementById('test').innerHTML = `<pre>\r\n // left: ${left}\r\n // right: ${document.getElementById('frmComponent').getBoundingClientRect().right}\r\n // right-left: ${right}\r\n // mouse: ${event.pointerPosition.x}\r\n // mouse-left: ${mouse}\r\n // t: ${t}\r\n // columns: ${item.layout.columns}\r\n // </pre>`;\r\n };\r\n\r\n dragEndChangeSizeControl = (event: any) => {\r\n this.#recountTabIndex();\r\n };\r\n\r\n onChangeViewed = (component: SdFormGenericComponent) => {\r\n component.properties!.viewed = !component.properties!.viewed;\r\n // Emit khi có sự thay đổi để control và attribute lắng nghe và render lại\r\n this.builderService.componentEmitters.next(component);\r\n };\r\n\r\n onChangeHidden = (component: SdFormGenericComponent | SdFormGenericGroup) => {\r\n component.properties!.hidden = !component.properties!.hidden;\r\n // Emit khi có sự thay đổi để control và attribute lắng nghe và render lại\r\n this.builderService.componentEmitters.next(component);\r\n };\r\n\r\n // Duplicate component nhưng sẽ clear id và key để tránh trùng lặp\r\n onDuplicate = (component: SdFormGenericComponent | SdFormGenericGroup) => {\r\n const clonedComponent = JSON.parse(JSON.stringify(component));\r\n clonedComponent.id = GenerateId();\r\n clonedComponent.key = GenerateKey();\r\n this.components.push(clonedComponent);\r\n this.#recountTabIndex();\r\n this.selectedComponent = this.components?.find(t => t.id === clonedComponent.id);\r\n this.selectComponent(this.selectedComponent);\r\n this.ref.markForCheck();\r\n };\r\n\r\n // Copy form hiện tại\r\n jsonString?: string;\r\n viewJSON = () => {\r\n this.jsonString = JSON.stringify({ components: this.components });\r\n this.popupViewJSON?.open();\r\n this.ref.markForCheck();\r\n };\r\n\r\n updateJSON = () => {\r\n try {\r\n if (this.jsonString) {\r\n const json: Record<string, any> = JSON.parse(this.jsonString);\r\n if ('components' in json) {\r\n this.components = json['components'];\r\n this.popupViewJSON?.close();\r\n this.#syncComponentsToRows();\r\n this.ref.markForCheck();\r\n } else {\r\n throw new Error('Invalid JSON');\r\n }\r\n }\r\n } catch (err: any) {\r\n console.error(err);\r\n this.notifyService.warning(err?.message);\r\n }\r\n };\r\n\r\n configureVariables = () => {\r\n this.clonedVariables = JSON.parse(JSON.stringify(this.variables || []));\r\n this.popupConfigureVariables?.open();\r\n this.ref.markForCheck();\r\n };\r\n\r\n addVariables = () => {\r\n this.clonedVariables.push({\r\n id: SdUtilities.randomId(),\r\n key: '',\r\n label: '',\r\n });\r\n };\r\n\r\n removeVariables = (id: string) => {\r\n const idx = this.clonedVariables.findIndex(e => e.id === id);\r\n this.clonedVariables.splice(idx, 1);\r\n };\r\n\r\n updateVariables = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n this.ref.markForCheck();\r\n return;\r\n }\r\n this.variables = this.clonedVariables;\r\n this.popupConfigureVariables?.close();\r\n this.ref.markForCheck();\r\n };\r\n\r\n // Chìa ra cho bên ngoài lấy components hiện tại\r\n getComponents = (): (SdFormGenericComponent | SdFormGenericGroup)[] => {\r\n this.#syncRowsToComponents();\r\n return JSON.parse(JSON.stringify(this.components || []));\r\n };\r\n\r\n // Chìa ra cho bên ngoài lấy variables hiện tại\r\n getVariables = (): SdFormGenericVariable[] => {\r\n return JSON.parse(JSON.stringify(this.variables || []));\r\n };\r\n\r\n #getValidations = (): SdFormGenericValidation[] => {\r\n return JSON.parse(JSON.stringify(this.validations || []));\r\n };\r\n\r\n getForm = (): SdFormGeneric => {\r\n return {\r\n components: this.getComponents(),\r\n variables: this.getVariables(),\r\n validations: this.#getValidations(),\r\n };\r\n };\r\n\r\n openConfigureValidation = () => {\r\n this.configureValidation?.open(this.getForm());\r\n };\r\n\r\n onUpdateValidations = (validations: SdFormGenericValidation[]) => {\r\n this.validations = validations;\r\n };\r\n\r\n onValidate = async () => {\r\n const errorMessages = await this.formRender?.getValidationMessages('error');\r\n if (errorMessages?.length) {\r\n this.notifyService.error(errorMessages);\r\n return;\r\n }\r\n const warningMessages = await this.formRender?.getValidationMessages('warning');\r\n if (warningMessages?.length) {\r\n this.confirmService.confirm(warningMessages.join(', ')).then(() => {\r\n this.notifyService.success('Submit success');\r\n });\r\n } else {\r\n this.notifyService.success('Submit success');\r\n }\r\n };\r\n}\r\n","<div class=\"d-flex form-editor\">\r\n <div class=\"d-flex flex-column form-menu\">\r\n <div class=\"c-header\">Components</div>\r\n <div class=\"component-container\" style=\"flex: 1\">\r\n <div class=\"form-editor-group\" cdkDropList [cdkDropListData]=\"formBuilderComponents\" [cdkDropListEnterPredicate]=\"noReturnPredicate\">\r\n @for (formBuilderComponent of formBuilderComponents; track formBuilderComponent.type) {\r\n <div cdkDrag class=\"form-item\" (click)=\"addComponent(formBuilderComponent)\" aria-hidden=\"true\">\r\n <div class=\"c-form-item\">\r\n <span [innerHtml]=\"formBuilderComponent.icon | sdSafeHtml\"></span>\r\n <div class=\"title\">\r\n {{ formBuilderComponent.name }}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex flex-column form-content\">\r\n <div class=\"c-header d-flex align-items-center justify-content-between\">\r\n <div>Bố cục</div>\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px\">\r\n <mat-icon matTooltip=\"Xem JSON\" fontIcon=\"code\" (click)=\"viewJSON()\"></mat-icon>\r\n <mat-icon matTooltip=\"Cấu hình biến\" fontIcon=\"scatter_plot\" (click)=\"configureVariables()\"></mat-icon>\r\n <mat-icon matTooltip=\"Cấu hình xác thực cảnh báo/lỗi\" fontIcon=\"error\" (click)=\"openConfigureValidation()\"></mat-icon>\r\n <mat-icon\r\n [matTooltip]=\"isPreview ? 'Trở về thiết kế' : 'Xem thử'\"\r\n [fontIcon]=\"isPreview ? 'stop_circle' : 'play_circle'\"\r\n (click)=\"isPreview = !isPreview\"></mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"p-12 components\" style=\"flex: 1; overflow-y: auto\" id=\"frmComponent\">\r\n @if (isPreview) {\r\n <sd-form-render [configuration]=\"{ components: this.components, validations: this.validations }\"></sd-form-render>\r\n <sd-button title=\"Validate\" (click)=\"onValidate()\"></sd-button>\r\n } @else {\r\n <div\r\n cdkDropList\r\n cdkDropListOrientation=\"vertical\"\r\n [cdkDropListData]=\"dragDropRows\"\r\n class=\"listY\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n (click)=\"clickFormContentEmpty()\"\r\n aria-hidden=\"true\">\r\n @for (row of dragDropRows; track row.rowIndex) {\r\n <div\r\n cdkDrag\r\n (mouseover)=\"onMouseover($event, row)\"\r\n (focus)=\"onFocus($event)\"\r\n id=\"row_{{ row.rowIndex }}\"\r\n class=\"row-item\"\r\n aria-hidden=\"true\">\r\n <div class=\"btn-drag-row-item\"><mat-icon matTooltip=\"Kéo lên / xuống\">drag_indicator</mat-icon></div>\r\n <div\r\n class=\"c-row-item\"\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"row.items\"\r\n (cdkDropListDropped)=\"drop($event)\">\r\n @for (item of row.items; track item.id; let i = $index) {\r\n <div\r\n cdkDrag\r\n [id]=\"item.id\"\r\n class=\"component-item column-{{ item.layout?.columns || 12 }}\"\r\n [class.active]=\"item.id === selectedComponent?.id\"\r\n (click)=\"selectComponent(item)\"\r\n (clickOutside)=\"onClickedOutside($event)\"\r\n (cdkDragStarted)=\"dragStartComponentItem($event)\"\r\n (cdkDragEnded)=\"dragEndComponentItem($event)\"\r\n aria-hidden=\"true\">\r\n <div class=\"c-component-item\" [class.c-hidden]=\"item.properties?.hidden\">\r\n <div class=\"c-actions\">\r\n @if (item.type !== 'group') {\r\n <mat-icon\r\n [matTooltip]=\"item.properties?.viewed ? 'Bỏ chỉ xem' : 'Chỉ xem'\"\r\n (click)=\"onChangeViewed(item)\"\r\n fontSet=\"material-icons-outlined\"\r\n style=\"font-size: 16px; cursor: pointer\"\r\n [class.text-warning]=\"item.properties?.viewed\">\r\n edit_off\r\n </mat-icon>\r\n }\r\n <mat-icon\r\n matTooltip=\"Nhân bản\"\r\n (click)=\"onDuplicate(item)\"\r\n fontSet=\"material-icons-outlined\"\r\n style=\"font-size: 16px; cursor: pointer\">\r\n content_copy\r\n </mat-icon>\r\n <mat-icon\r\n [matTooltip]=\"item.properties?.hidden ? 'Hiện' : 'Ẩn'\"\r\n (click)=\"onChangeHidden(item)\"\r\n fontSet=\"material-icons-outlined\"\r\n style=\"font-size: 16px; cursor: pointer\"\r\n [class.text-warning]=\"item.properties?.hidden\">\r\n visibility_off\r\n </mat-icon>\r\n <mat-icon\r\n matTooltip=\"Xóa\"\r\n (click)=\"removeComponent(item.id)\"\r\n fontSet=\"material-icons-outlined\"\r\n style=\"font-size: 16px; cursor: pointer\"\r\n class=\"text-error\">\r\n delete\r\n </mat-icon>\r\n </div>\r\n @if (item.type === 'textfield') {\r\n <textfield-control [component]=\"item\"></textfield-control>\r\n } @else if (item.type === 'textarea') {\r\n <textarea-control [component]=\"item\"></textarea-control>\r\n } @else if (item.type === 'chip-string') {\r\n <chip-string-control [component]=\"item\"></chip-string-control>\r\n } @else if (item.type === 'chip-calendar') {\r\n <chip-calendar-control [component]=\"item\"></chip-calendar-control>\r\n } @else if (item.type === 'number') {\r\n <number-control [component]=\"item\"></number-control>\r\n } @else if (item.type === 'datetime') {\r\n <datetime-control [component]=\"item\"></datetime-control>\r\n } @else if (item.type === 'select') {\r\n <select-control [component]=\"item\"></select-control>\r\n } @else if (item.type === 'radio') {\r\n <radio-control [component]=\"item\"></radio-control>\r\n } @else if (item.type === 'checkbox') {\r\n <checkbox-control [component]=\"item\"></checkbox-control>\r\n } @else if (item.type === 'html') {\r\n <html-control [component]=\"item\" #html></html-control>\r\n } @else if (item.type === 'upload') {\r\n <upload-control [component]=\"item\"></upload-control>\r\n } @else if (item.type === 'table') {\r\n <table-control [component]=\"item\"></table-control>\r\n }\r\n <div class=\"c-item-backdrop\"></div>\r\n </div>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\">\r\n <div\r\n cdkDrag\r\n (cdkDragMoved)=\"changeSizeControl($event, item, row.items, i)\"\r\n (cdkDragEnded)=\"dragEndChangeSizeControl($event)\"\r\n class=\"c-bar-resize-right\"\r\n matTooltip=\"Co dãn\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"d-flex flex-column form-attributes\">\r\n <div class=\"c-header\">Thuộc tính</div>\r\n @if (selectedComponent) {\r\n <div class=\"attributes\" style=\"flex: 1\" aria-hidden=\"true\">\r\n @if (selectedComponent.type === 'textfield') {\r\n <textfield-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></textfield-attribute>\r\n } @else if (selectedComponent.type === 'textarea') {\r\n <textarea-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></textarea-attribute>\r\n } @else if (selectedComponent.type === 'chip-string') {\r\n <chip-string-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></chip-string-attribute>\r\n } @else if (selectedComponent.type === 'chip-calendar') {\r\n <chip-calendar-attribute\r\n [components]=\"components\"\r\n [variables]=\"variables\"\r\n [component]=\"selectedComponent\"></chip-calendar-attribute>\r\n } @else if (selectedComponent.type === 'number') {\r\n <number-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></number-attribute>\r\n } @else if (selectedComponent.type === 'datetime') {\r\n <datetime-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></datetime-attribute>\r\n } @else if (selectedComponent.type === 'select') {\r\n <select-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></select-attribute>\r\n } @else if (selectedComponent.type === 'radio') {\r\n <radio-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></radio-attribute>\r\n } @else if (selectedComponent.type === 'checkbox') {\r\n <checkbox-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></checkbox-attribute>\r\n } @else if (selectedComponent.type === 'html') {\r\n <html-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></html-attribute>\r\n } @else if (selectedComponent.type === 'upload') {\r\n <upload-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></upload-attribute>\r\n } @else if (selectedComponent.type === 'table') {\r\n <table-attribute [components]=\"components\" [variables]=\"variables\" [component]=\"selectedComponent\"></table-attribute>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<sd-modal title=\"JSON\" view=\"dialog\" width=\"80%\" #popupViewJSON>\r\n <sd-textarea [(model)]=\"jsonString\"></sd-textarea>\r\n <ng-container sdFooter>\r\n <sd-button type=\"fill\" title=\"Lưu\" (click)=\"updateJSON()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n<sd-modal title=\"Cấu hình biến\" view=\"dialog\" width=\"800px\" #popupConfigureVariables>\r\n @for (variable of clonedVariables; track variable.id) {\r\n <div class=\"d-flex align-items-center\" style=\"gap: 8px\">\r\n <sd-input [form]=\"form\" label=\"Trường dữ liệu\" [(model)]=\"variable.key\" required></sd-input>\r\n <sd-input [form]=\"form\" label=\"Nhãn hiển thị\" [(model)]=\"variable.label\" required></sd-input>\r\n <sd-button prefixIcon=\"delete\" (click)=\"removeVariables(variable.id)\" color=\"error\"></sd-button>\r\n </div>\r\n }\r\n <a href=\"javascript:;\" (click)=\"addVariables()\">Thêm biến</a>\r\n <ng-container sdFooter>\r\n <sd-button type=\"fill\" title=\"Lưu\" (click)=\"updateVariables()\" prefixIcon=\"save\" color=\"primary\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n<configure-validation (accept)=\"onUpdateValidations($event)\"></configure-validation>\r\n","/* eslint-disable @angular-eslint/no-input-rename */\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { SdBaseSecureComponent } from '@sd-angular/core/components/base';\r\nimport { SdButton } from '@sd-angular/core/components/button';\r\nimport { SdModal } from '@sd-angular/core/components/modal';\r\nimport { SdAutocomplete } from '@sd-angular/core/forms/autocomplete';\r\nimport { SdInput } from '@sd-angular/core/forms/input';\r\nimport { SdInputNumber } from '@sd-angular/core/forms/input-number';\r\nimport { SdSelect } from '@sd-angular/core/forms/select';\r\nimport { ArrayUtilities } from '@sd-angular/core/utilities/extensions';\r\nimport {\r\n Attribute,\r\n AttributeOperators,\r\n GetAttributes,\r\n SdFormGenericComponent,\r\n SdFormGenericExpression,\r\n SdFormGenericGroup,\r\n} from '../../models';\r\nimport { ExpressionFeelPipe } from '../../pipes';\r\nimport { FormGenericService } from '../../services';\r\n\r\n// Template là các mẫu do Portal định nghĩa sẵn (key, label ....) để người dùng chọn nhanh\r\n// Khi thực hiện sao chép 1 template chúng ta sẽ CLONE để tránh ảnh hưởng template gốc\r\n@Component({\r\n selector: 'sd-feel-expression',\r\n templateUrl: './sd-feel-expression.component.html',\r\n styleUrl: './sd-feel-expression.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [SdInput, SdInputNumber, SdSelect, SdAutocomplete, SdButton, SdSelect, SdModal],\r\n})\r\nexport class SdFeelExpression extends SdBaseSecureComponent {\r\n @ViewChild(SdModal) modal?: SdModal;\r\n form = new FormGroup({});\r\n attributeOperators = AttributeOperators;\r\n attributes: Attribute[] = [];\r\n attribute: Record<string, Attribute> = {};\r\n @Input({ required: true }) components!: (SdFormGenericComponent | SdFormGenericGroup)[];\r\n // ValuesKey\r\n expression?: SdFormGenericExpression;\r\n @Input({ alias: 'expression', required: true }) set _expression(expression: SdFormGenericExpression | undefined) {\r\n if (this.expression !== expression) {\r\n this.expression = expression;\r\n }\r\n this.expression = this.expression || {\r\n key: `${new Date().getTime().toString(36)}`,\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n };\r\n }\r\n @Output() expressionChange = new EventEmitter<SdFormGenericExpression>();\r\n\r\n //\r\n model?: string;\r\n @Input({ alias: 'model', required: true }) set _model(model: string | undefined) {\r\n if (this.model !== model) {\r\n this.model = model;\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter<string>();\r\n\r\n @Output() sdChange = new EventEmitter<{ model?: string; expression?: SdFormGenericExpression }>();\r\n\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n private expressionFeelPipe: ExpressionFeelPipe,\r\n private formGenericService: FormGenericService\r\n ) {\r\n super()\r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n edit = async () => {\r\n this.attributes = await this.#getAttributes(this.components);\r\n this.attribute = ArrayUtilities.toObject('value', this.attributes);\r\n this.modal?.open?.();\r\n this.ref.markForCheck();\r\n };\r\n\r\n addCondition = (conditions: SdFormGenericExpression['conditions']) => {\r\n conditions.push({\r\n key: `${new Date().getTime().toString(36)}`,\r\n type: 'condition',\r\n field: undefined,\r\n operator: 'EQUAL',\r\n value: undefined,\r\n dayInfo: {}\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n addCombinator = (conditions: SdFormGenericExpression['conditions']) => {\r\n conditions.push({\r\n key: `${new Date().getTime().toString(36)}`,\r\n type: 'combinator',\r\n combinator: '&&',\r\n conditions: [],\r\n });\r\n this.ref.markForCheck();\r\n };\r\n\r\n remove = (conditions: SdFormGenericExpression['conditions'], idx: number) => {\r\n conditions.splice(idx, 1);\r\n this.ref.markForCheck();\r\n };\r\n\r\n onAccept = () => {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n if (this.expression) {\r\n this.model = this.expressionFeelPipe.transform(this.expression!);\r\n this.expressionChange.emit(this.expression);\r\n } else {\r\n this.model = '';\r\n }\r\n this.modelChange.emit(this.model);\r\n this.sdChange.emit({\r\n model: this.model,\r\n expression: this.expression,\r\n });\r\n this.modal?.close();\r\n this.ref.markForCheck();\r\n };\r\n\r\n // Từ components map thành các attributes\r\n #getAttributes = async (components: (SdFormGenericComponent | SdFormGenericGroup)[]): Promise<Attribute[]> => {\r\n const attributes: Attribute[] = [];\r\n if (components.length) {\r\n for (const component of components) {\r\n if (component.type === 'group') {\r\n attributes.push(...GetAttributes(component.components));\r\n } else if (component.type === 'textfield' || component.type === 'textarea') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n } else if (component.type === 'number') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'number',\r\n });\r\n } else if (component.type === 'checkbox') {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'boolean',\r\n displayOnTrue: 'YES',\r\n displayOnFalse: 'NO',\r\n });\r\n } else if (component.type === 'radio' || component.type === 'select') {\r\n if (component.values?.length) {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'values',\r\n values: component.values.map(e => ({\r\n value: e.value,\r\n display: e.label,\r\n })),\r\n });\r\n } else {\r\n const values = await this.formGenericService.selection.items(component.valuesKey, {\r\n entity: {},\r\n component,\r\n });\r\n // Nếu là mảng thì push vào\r\n if (Array.isArray(values)) {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'values',\r\n values,\r\n });\r\n } else {\r\n attributes.push({\r\n value: component.key,\r\n display: component.label,\r\n type: 'string',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return attributes;\r\n };\r\n}\r\n","<a class=\"T12R\" href=\"javascript:;\" (click)=\"edit()\">{{model || '--'}}</a>\r\n@if (expression) {\r\n<sd-modal title=\"Thiết lập biểu thức\">\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button prefixIcon=\"calculate\" class=\"mr-4\" title=\"Nhóm điều kiện\" color=\"primary\" (click)=\"addCombinator(expression.conditions)\"></sd-button>\r\n <sd-button prefixIcon=\"add\" title=\"Điều kiện\" color=\"primary\" (click)=\"addCondition(expression.conditions)\" type=\"fill\"></sd-button>\r\n </div>\r\n <!-- Cấp 1 -->\r\n @for (conditionLv1 of expression.conditions; track conditionLv1.key; let idxLv1 = $index) {\r\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px;\">\r\n <div class=\"c-condition\">\r\n <!-- Dòng 1 chỉ hiện WHERE -->\r\n @if (idxLv1 === 0) {\r\n <div class=\"c-where\">WHERE</div>\r\n }\r\n <!-- Dòng 2 hiển thị combinator -->\r\n @if (idxLv1 === 1) {\r\n <div class=\"c-select\">\r\n <sd-select\r\n size=\"sm\"\r\n [(model)]=\"expression.combinator\"\r\n [items]=\"[\r\n { value: '&&', display: 'AND' },\r\n { value: '||', display: 'OR' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError=\"\"></sd-select>\r\n </div>\r\n }\r\n </div>\r\n @if (conditionLv1.type === 'condition') {\r\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"width: 200px;\" [(model)]=\"conditionLv1.field\" [items]=\"attributes\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\r\n @let fieldAttribute = attribute[conditionLv1.field!];\r\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>\r\n @if(!!fieldAttribute?.type && conditionLv1.operator && conditionLv1.operator !== 'NULL' && conditionLv1.operator !== 'NOT_NULL') {\r\n @if(fieldAttribute.type === 'string') {\r\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input>\r\n } @else if(fieldAttribute.type === 'number') {\r\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" required hideInlineError></sd-input-number>\r\n } @else if(fieldAttribute.type === 'boolean') {\r\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>\r\n }@else if(fieldAttribute.type === 'values') {\r\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv1.value\" [items]=\"fieldAttribute.values\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\r\n }\r\n }\r\n <sd-button\r\n class=\"ml-auto\"\r\n prefixIcon=\"delete\"\r\n tooltip=\"Xóa\"\r\n (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\r\n \r\n } @else if (conditionLv1.type === 'combinator') {\r\n <div class=\"c-builder\">\r\n <div class=\"d-flex justify-content-end\">\r\n <sd-button\r\n class=\"mr-4\"\r\n prefixIcon=\"delete\"\r\n tooltip=\"Xóa\"\r\n (click)=\"remove(expression.conditions, idxLv1)\"></sd-button>\r\n <sd-button prefixIcon=\"add\" title=\"Điều kiện\" size=\"sm\" color=\"primary\" (click)=\"addCondition(conditionLv1.conditions)\" type=\"fill\"></sd-button>\r\n </div>\r\n <!-- Cấp 2 -->\r\n @for (conditionLv2 of conditionLv1.conditions; track conditionLv2.key; let idxLv2 = $index) {\r\n <div class=\"d-flex align-items-end py-8\" style=\"gap: 8px;\">\r\n <div class=\"c-condition\">\r\n <!-- Dòng 1 chỉ hiện WHERE -->\r\n @if (idxLv2 === 0) {\r\n <div class=\"c-where\">WHERE</div>\r\n }\r\n <!-- Dòng 2 hiển thị combinator -->\r\n @if (idxLv2 === 1) {\r\n <div class=\"c-select\">\r\n <sd-select\r\n size=\"sm\"\r\n [(model)]=\"conditionLv1.combinator\"\r\n [items]=\"[\r\n { value: '&&', display: 'AND' },\r\n { value: '||', display: 'OR' }\r\n ]\"\r\n valueField=\"value\"\r\n displayField=\"display\"\r\n required\r\n hideInlineError=\"\"></sd-select>\r\n </div>\r\n }\r\n </div>\r\n @if (conditionLv2.type === 'condition') {\r\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"width: 200px;\" [(model)]=\"conditionLv2.field\" [items]=\"attributes\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\r\n @let fieldAttribute = attribute[conditionLv2.field!];\r\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>\r\n @if(!!fieldAttribute?.type && conditionLv2.operator && conditionLv2.operator !== 'NULL' && conditionLv2.operator !== 'NOT_NULL') {\r\n @if(fieldAttribute.type === 'string') {\r\n <sd-input size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" required hideInlineError></sd-input>\r\n } @else if(fieldAttribute.type === 'number') {\r\n <sd-input-number size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" required hideInlineError></sd-input-number>\r\n } @else if(fieldAttribute.type === 'boolean') {\r\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>\r\n }@else if(fieldAttribute.type === 'values') {\r\n <sd-autocomplete size=\"sm\" [form]=\"form\" style=\"flex:1\" [(model)]=\"conditionLv2.value\" [items]=\"fieldAttribute.values\" valueField=\"value\" displayField=\"display\" required hideInlineError></sd-autocomplete>\r\n }\r\n }\r\n <sd-button\r\n class=\"ml-auto\"\r\n prefixIcon=\"delete\"\r\n tooltip=\"Xóa\"\r\n (click)=\"remove(conditionLv1.conditions, idxLv1)\"></sd-button>\r\n \r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <ng-container sdFooter>\r\n <sd-button prefixIcon=\"save\" title=\"Xác nhận\" (click)=\"onAccept()\" color=\"primary\" type=\"fill\"></sd-button>\r\n </ng-container>\r\n</sd-modal>\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.ComponentViewedPipe","DateUtilities","i2.FormGenericService","SdUtilities","i1","i2","StringUtilities","i3","i1.FormGenericService","SdInputNumber","startWith","debounceTime","SdInput","SdSelect","SdAutocomplete","i1.BuilderService","BuildQueries","i2.BuilderService","i1.ExpressionFeelPipe"],"mappings":"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"}