@ldquocc/dynamic-form 0.0.8 → 0.0.9

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 (298) hide show
  1. package/ng-package.json +15 -0
  2. package/package.json +20 -31
  3. package/src/lib/dynamic-form.component.html +121 -0
  4. package/src/lib/dynamic-form.component.scss +7 -0
  5. package/src/lib/dynamic-form.component.spec.ts +21 -0
  6. package/src/lib/dynamic-form.component.ts +237 -0
  7. package/src/lib/dynamic-form.service.spec.ts +16 -0
  8. package/src/lib/dynamic-form.service.ts +9 -0
  9. package/src/lib/shared/base/base-select.component.ts +183 -0
  10. package/src/lib/shared/base/base-value-accessor.ts +192 -0
  11. package/{lib/shared/components/component.d.ts → src/lib/shared/components/component.ts} +34 -14
  12. package/src/lib/shared/components/d-form-testing/d-form-testing.component.html +197 -0
  13. package/src/lib/shared/components/d-form-testing/d-form-testing.component.less +12 -0
  14. package/src/lib/shared/components/d-form-testing/d-form-testing.component.spec.ts +22 -0
  15. package/src/lib/shared/components/d-form-testing/d-form-testing.component.ts +197 -0
  16. package/src/lib/shared/components/dynamic-field/dynamic-field.component.html +218 -0
  17. package/src/lib/shared/components/dynamic-field/dynamic-field.component.scss +28 -0
  18. package/src/lib/shared/components/dynamic-field/dynamic-field.component.spec.ts +21 -0
  19. package/src/lib/shared/components/dynamic-field/dynamic-field.component.ts +67 -0
  20. package/src/lib/shared/components/field-user-config/field-user-config.component.html +38 -0
  21. package/src/lib/shared/components/field-user-config/field-user-config.component.scss +29 -0
  22. package/src/lib/shared/components/field-user-config/field-user-config.component.ts +33 -0
  23. package/src/lib/shared/components/fields/components/suffix/suffix.component.html +42 -0
  24. package/src/lib/shared/components/fields/components/suffix/suffix.component.scss +3 -0
  25. package/src/lib/shared/components/fields/components/suffix/suffix.component.spec.ts +22 -0
  26. package/src/lib/shared/components/fields/components/suffix/suffix.component.ts +32 -0
  27. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.html +20 -0
  28. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.scss +5 -0
  29. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.spec.ts +21 -0
  30. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.ts +148 -0
  31. package/src/lib/shared/components/fields/date/date-range/date-range.component.html +33 -0
  32. package/src/lib/shared/components/fields/date/date-range/date-range.component.scss +22 -0
  33. package/src/lib/shared/components/fields/date/date-range/date-range.component.spec.ts +21 -0
  34. package/src/lib/shared/components/fields/date/date-range/date-range.component.ts +133 -0
  35. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.html +31 -0
  36. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.scss +3 -0
  37. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.spec.ts +21 -0
  38. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.ts +148 -0
  39. package/src/lib/shared/components/fields/input/input-password/input-password.component.html +18 -0
  40. package/src/lib/shared/components/fields/input/input-password/input-password.component.scss +0 -0
  41. package/src/lib/shared/components/fields/input/input-password/input-password.component.spec.ts +21 -0
  42. package/src/lib/shared/components/fields/input/input-password/input-password.component.ts +56 -0
  43. package/src/lib/shared/components/fields/input/input-text/input-text.component.html +73 -0
  44. package/src/lib/shared/components/fields/input/input-text/input-text.component.scss +0 -0
  45. package/src/lib/shared/components/fields/input/input-text/input-text.component.spec.ts +21 -0
  46. package/src/lib/shared/components/fields/input/input-text/input-text.component.ts +98 -0
  47. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.html +73 -0
  48. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.scss +21 -0
  49. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.spec.ts +21 -0
  50. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.ts +212 -0
  51. package/src/lib/shared/components/fields/select/single-select/single-select.component.html +55 -0
  52. package/src/lib/shared/components/fields/select/single-select/single-select.component.scss +1 -0
  53. package/src/lib/shared/components/fields/select/single-select/single-select.component.spec.ts +21 -0
  54. package/src/lib/shared/components/fields/select/single-select/single-select.component.ts +217 -0
  55. package/src/lib/shared/components/fields/select/single-select/sl.component.old.txt +337 -0
  56. package/src/lib/shared/components/fields/select/single-select/sl.component.old2.txt +340 -0
  57. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.html +38 -0
  58. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.scss +1 -0
  59. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.spec.ts +21 -0
  60. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.ts +401 -0
  61. package/src/lib/shared/components/fields/textarea/textarea.component.html +29 -0
  62. package/src/lib/shared/components/fields/textarea/textarea.component.scss +17 -0
  63. package/src/lib/shared/components/fields/textarea/textarea.component.spec.ts +21 -0
  64. package/src/lib/shared/components/fields/textarea/textarea.component.ts +76 -0
  65. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.html +30 -0
  66. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.scss +22 -0
  67. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.spec.ts +22 -0
  68. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.ts +217 -0
  69. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.html +101 -0
  70. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.scss +117 -0
  71. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.spec.ts +22 -0
  72. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.ts +480 -0
  73. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.html +82 -0
  74. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.less +80 -0
  75. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.spec.ts +22 -0
  76. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.ts +288 -0
  77. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.html +104 -0
  78. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.scss +37 -0
  79. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.spec.ts +21 -0
  80. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.ts +317 -0
  81. package/src/lib/shared/config/dynamic-form.config.ts +11 -0
  82. package/src/lib/shared/consts/common/common.const.ts +5 -0
  83. package/src/lib/shared/consts/common/field-dependency.const.ts +1 -0
  84. package/src/lib/shared/consts/common/file.const.ts +130 -0
  85. package/{lib/shared/consts/common/index.d.ts → src/lib/shared/consts/common/index.ts} +4 -4
  86. package/src/lib/shared/consts/common/sample-test.const.ts +1648 -0
  87. package/src/lib/shared/consts/common/standalone-import.const.ts +51 -0
  88. package/src/lib/shared/consts/controls/control.const.ts +11 -0
  89. package/{lib/shared/consts/controls/index.d.ts → src/lib/shared/consts/controls/index.ts} +1 -1
  90. package/src/lib/shared/consts/fields/date-field.const.ts +12 -0
  91. package/src/lib/shared/consts/fields/field.const.ts +23 -0
  92. package/{lib/shared/consts/fields/index.d.ts → src/lib/shared/consts/fields/index.ts} +5 -5
  93. package/src/lib/shared/consts/fields/input-field.const.ts +4 -0
  94. package/src/lib/shared/consts/fields/input-formatted-field.const.ts +35 -0
  95. package/src/lib/shared/consts/fields/radio-field.const.ts +31 -0
  96. package/src/lib/shared/consts/fields/select-field.const.ts +7 -0
  97. package/src/lib/shared/consts/fields/upload-field.const.ts +1 -0
  98. package/src/lib/shared/consts/validators/index.ts +0 -0
  99. package/src/lib/shared/consts/validators/pattern.const.ts +117 -0
  100. package/src/lib/shared/enums/common/component-ui.enum.ts +8 -0
  101. package/src/lib/shared/enums/common/field-dependency.enum.ts +10 -0
  102. package/src/lib/shared/enums/common/file-size-type.enum.ts +6 -0
  103. package/{lib/shared/enums/common/index.d.ts → src/lib/shared/enums/common/index.ts} +4 -4
  104. package/src/lib/shared/enums/common/output-value-type.enum.ts +22 -0
  105. package/src/lib/shared/enums/common/view-mode.enum.ts +4 -0
  106. package/src/lib/shared/enums/controls/control.enum.ts +12 -0
  107. package/{lib/shared/enums/controls/index.d.ts → src/lib/shared/enums/controls/index.ts} +1 -1
  108. package/src/lib/shared/enums/fields/date-field.enum.ts +4 -0
  109. package/src/lib/shared/enums/fields/field.enum.ts +21 -0
  110. package/{lib/shared/enums/fields/index.d.ts → src/lib/shared/enums/fields/index.ts} +6 -6
  111. package/src/lib/shared/enums/fields/input-field.enum.ts +6 -0
  112. package/src/lib/shared/enums/fields/input-formatted-field.enum.ts +6 -0
  113. package/src/lib/shared/enums/fields/select-field.enum.ts +4 -0
  114. package/src/lib/shared/enums/fields/upload-field.enum.ts +5 -0
  115. package/src/lib/shared/enums/form/dynamic-form.enum.ts +6 -0
  116. package/{lib/shared/enums/form/index.d.ts → src/lib/shared/enums/form/index.ts} +1 -1
  117. package/{lib/shared/enums/validators/index.d.ts → src/lib/shared/enums/validators/index.ts} +2 -2
  118. package/src/lib/shared/enums/validators/regex.enum.ts +47 -0
  119. package/src/lib/shared/enums/validators/validators.enum.ts +17 -0
  120. package/src/lib/shared/factories/auto-numeric-options.factory.ts +14 -0
  121. package/src/lib/shared/models/common/api-config.model.ts +7 -0
  122. package/src/lib/shared/models/common/api-response.model.ts +20 -0
  123. package/src/lib/shared/models/common/common.model.ts +39 -0
  124. package/src/lib/shared/models/common/field-dependency.model.ts +27 -0
  125. package/src/lib/shared/models/common/file-config.model.ts +22 -0
  126. package/{lib/shared/models/common/index.d.ts → src/lib/shared/models/common/index.ts} +7 -7
  127. package/src/lib/shared/models/common/obj-field.model.ts +68 -0
  128. package/src/lib/shared/models/common/object-storage.model.ts +15 -0
  129. package/{lib/shared/models/common/output-value-type.model.d.ts → src/lib/shared/models/common/output-value-type.model.ts} +4 -4
  130. package/src/lib/shared/models/common/table-models.ts +16 -0
  131. package/{lib/shared/models/common/view-mode.model.d.ts → src/lib/shared/models/common/view-mode.model.ts} +1 -1
  132. package/{lib/shared/models/controls/control.model.d.ts → src/lib/shared/models/controls/control.model.ts} +3 -2
  133. package/{lib/shared/models/controls/index.d.ts → src/lib/shared/models/controls/index.ts} +1 -1
  134. package/src/lib/shared/models/fields/date/base-date-field.model.ts +52 -0
  135. package/src/lib/shared/models/fields/date/date-picker-field.model.ts +43 -0
  136. package/src/lib/shared/models/fields/date/date-range-field.model.ts +52 -0
  137. package/{lib/shared/models/fields/date/index.d.ts → src/lib/shared/models/fields/date/index.ts} +3 -3
  138. package/src/lib/shared/models/fields/field-grid.model.ts +10 -0
  139. package/src/lib/shared/models/fields/field-group.model.ts +50 -0
  140. package/src/lib/shared/models/fields/field-user-config.model.ts +8 -0
  141. package/src/lib/shared/models/fields/field.model.ts +184 -0
  142. package/{lib/shared/models/fields/index.d.ts → src/lib/shared/models/fields/index.ts} +2 -2
  143. package/{lib/shared/models/fields/input/index.d.ts → src/lib/shared/models/fields/input/index.ts} +4 -4
  144. package/src/lib/shared/models/fields/input/input-field.model.ts +111 -0
  145. package/src/lib/shared/models/fields/input/input-formatted-field.model.ts +38 -0
  146. package/src/lib/shared/models/fields/input/input-password-field.model.ts +38 -0
  147. package/src/lib/shared/models/fields/input/input-text-field.model.ts +26 -0
  148. package/src/lib/shared/models/fields/radio/index.ts +0 -0
  149. package/src/lib/shared/models/fields/radio/radio-base-field.model.ts +84 -0
  150. package/src/lib/shared/models/fields/select/index.ts +0 -0
  151. package/src/lib/shared/models/fields/select/multi-select-field.model.ts +46 -0
  152. package/src/lib/shared/models/fields/select/select-base-field.model.ts +125 -0
  153. package/src/lib/shared/models/fields/select/single-select-field.model.ts +43 -0
  154. package/src/lib/shared/models/fields/select/tree-select-field.model.ts +44 -0
  155. package/src/lib/shared/models/fields/textarea/index.ts +0 -0
  156. package/src/lib/shared/models/fields/textarea/textarea-field.model.ts +97 -0
  157. package/src/lib/shared/models/fields/upload/avatar-upload-field.model.ts +33 -0
  158. package/src/lib/shared/models/fields/upload/base-upload-field.model.ts +105 -0
  159. package/{lib/shared/models/fields/upload/index.d.ts → src/lib/shared/models/fields/upload/index.ts} +5 -5
  160. package/src/lib/shared/models/fields/upload/multi-file-upload-field.model.ts +34 -0
  161. package/src/lib/shared/models/fields/upload/multi-image-upload-field.model.ts +42 -0
  162. package/src/lib/shared/models/fields/upload/single-file-upload-field.model.ts +33 -0
  163. package/{lib/shared/models/form/dynamic-form.model.d.ts → src/lib/shared/models/form/dynamic-form.model.ts} +1 -1
  164. package/{lib/shared/models/form/index.d.ts → src/lib/shared/models/form/index.ts} +1 -1
  165. package/src/lib/shared/models/validations/index.ts +1 -0
  166. package/src/lib/shared/models/validations/validations.model.ts +14 -0
  167. package/src/lib/shared/services/dynamic-form.service.spec.ts +16 -0
  168. package/src/lib/shared/services/dynamic-form.service.ts +251 -0
  169. package/src/lib/shared/services/field.service.spec.ts +16 -0
  170. package/src/lib/shared/services/field.service.ts +152 -0
  171. package/src/lib/shared/services/file.service.spec.ts +16 -0
  172. package/src/lib/shared/services/file.service.ts +53 -0
  173. package/src/lib/shared/services/form-config.service.ts +53 -0
  174. package/src/lib/shared/services/form-data.service.spec.ts +16 -0
  175. package/src/lib/shared/services/form-data.service.ts +114 -0
  176. package/src/lib/shared/services/form-utils.ts +52 -0
  177. package/src/lib/shared/services/suffix.service.spec.ts +16 -0
  178. package/src/lib/shared/services/suffix.service.ts +16 -0
  179. package/src/lib/shared/services/validation.service.spec.ts +16 -0
  180. package/src/lib/shared/services/validation.service.ts +38 -0
  181. package/src/lib/shared/utils/common/common.utils.ts +52 -0
  182. package/{lib/shared/utils/common/index.d.ts → src/lib/shared/utils/common/index.ts} +1 -1
  183. package/src/lib/shared/utils/date/date.utils.ts +129 -0
  184. package/{lib/shared/utils/date/index.d.ts → src/lib/shared/utils/date/index.ts} +1 -1
  185. package/src/lib/shared/utils/dynamic-field/dynamic-field.ts +0 -0
  186. package/src/lib/shared/utils/dynamic-field/index.ts +0 -0
  187. package/src/lib/shared/utils/dynamic-form/dynamic-form.ts +114 -0
  188. package/src/lib/shared/utils/dynamic-form/index.ts +0 -0
  189. package/src/lib/shared/utils/fields/fields.ts +78 -0
  190. package/{lib/shared/utils/fields/index.d.ts → src/lib/shared/utils/fields/index.ts} +1 -1
  191. package/src/lib/shared/utils/file/file.utils.ts +37 -0
  192. package/{lib/shared/utils/file/index.d.ts → src/lib/shared/utils/file/index.ts} +1 -1
  193. package/src/lib/shared/utils/validators/custom-validators.ts +158 -0
  194. package/src/lib/shared/utils/validators/default-error-message.ts +42 -0
  195. package/{lib/shared/utils/validators/index.d.ts → src/lib/shared/utils/validators/index.ts} +3 -3
  196. package/src/lib/shared/utils/validators/pattern.ts +26 -0
  197. package/{public-api.d.ts → src/public-api.ts} +68 -28
  198. package/tsconfig.lib.json +15 -0
  199. package/tsconfig.lib.prod.json +11 -0
  200. package/tsconfig.spec.json +15 -0
  201. package/fesm2022/ldquocc-dynamic-form.mjs +0 -4938
  202. package/fesm2022/ldquocc-dynamic-form.mjs.map +0 -1
  203. package/index.d.ts +0 -5
  204. package/lib/dynamic-form.component.d.ts +0 -67
  205. package/lib/shared/base/base-select.component.d.ts +0 -19
  206. package/lib/shared/base/base-value-accessor.d.ts +0 -69
  207. package/lib/shared/components/dynamic-field/dynamic-field.component.d.ts +0 -23
  208. package/lib/shared/components/field-user-config/field-user-config.component.d.ts +0 -10
  209. package/lib/shared/components/fields/components/suffix/suffix.component.d.ts +0 -12
  210. package/lib/shared/components/fields/date/date-picker/date-picker.component.d.ts +0 -17
  211. package/lib/shared/components/fields/date/date-range/date-range.component.d.ts +0 -17
  212. package/lib/shared/components/fields/input/input-formatted/input-formatted.component.d.ts +0 -20
  213. package/lib/shared/components/fields/input/input-password/input-password.component.d.ts +0 -12
  214. package/lib/shared/components/fields/input/input-text/input-text.component.d.ts +0 -14
  215. package/lib/shared/components/fields/select/multi-select/multi-select.component.d.ts +0 -21
  216. package/lib/shared/components/fields/select/single-select/single-select.component.d.ts +0 -21
  217. package/lib/shared/components/fields/select/tree-select/tree-select.component.d.ts +0 -28
  218. package/lib/shared/components/fields/textarea/textarea.component.d.ts +0 -14
  219. package/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.d.ts +0 -25
  220. package/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.d.ts +0 -76
  221. package/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.d.ts +0 -27
  222. package/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.d.ts +0 -29
  223. package/lib/shared/config/dynamic-form.config.d.ts +0 -9
  224. package/lib/shared/consts/common/common.const.d.ts +0 -5
  225. package/lib/shared/consts/common/field-dependency.const.d.ts +0 -1
  226. package/lib/shared/consts/common/file.const.d.ts +0 -148
  227. package/lib/shared/consts/common/standalone-import.const.d.ts +0 -7
  228. package/lib/shared/consts/controls/control.const.d.ts +0 -1
  229. package/lib/shared/consts/fields/date-field.const.d.ts +0 -7
  230. package/lib/shared/consts/fields/field.const.d.ts +0 -4
  231. package/lib/shared/consts/fields/input-field.const.d.ts +0 -4
  232. package/lib/shared/consts/fields/input-formatted-field.const.d.ts +0 -4
  233. package/lib/shared/consts/fields/radio-field.const.d.ts +0 -10
  234. package/lib/shared/consts/fields/select-field.const.d.ts +0 -6
  235. package/lib/shared/consts/fields/upload-field.const.d.ts +0 -1
  236. package/lib/shared/consts/validators/pattern.const.d.ts +0 -2
  237. package/lib/shared/enums/common/field-dependency.enum.d.ts +0 -9
  238. package/lib/shared/enums/common/file-size-type.enum.d.ts +0 -6
  239. package/lib/shared/enums/common/output-value-type.enum.d.ts +0 -19
  240. package/lib/shared/enums/common/view-mode.enum.d.ts +0 -4
  241. package/lib/shared/enums/controls/control.enum.d.ts +0 -11
  242. package/lib/shared/enums/fields/date-field.enum.d.ts +0 -4
  243. package/lib/shared/enums/fields/field.enum.d.ts +0 -20
  244. package/lib/shared/enums/fields/input-field.enum.d.ts +0 -6
  245. package/lib/shared/enums/fields/input-formatted-field.enum.d.ts +0 -6
  246. package/lib/shared/enums/fields/select-field.enum.d.ts +0 -4
  247. package/lib/shared/enums/fields/upload-field.enum.d.ts +0 -5
  248. package/lib/shared/enums/form/dynamic-form.enum.d.ts +0 -6
  249. package/lib/shared/enums/validators/regex.enum.d.ts +0 -38
  250. package/lib/shared/enums/validators/validators.enum.d.ts +0 -14
  251. package/lib/shared/factories/auto-numeric-options.factory.d.ts +0 -5
  252. package/lib/shared/models/common/api-config.model.d.ts +0 -4
  253. package/lib/shared/models/common/api-response.model.d.ts +0 -19
  254. package/lib/shared/models/common/common.model.d.ts +0 -29
  255. package/lib/shared/models/common/field-dependency.model.d.ts +0 -16
  256. package/lib/shared/models/common/file-config.model.d.ts +0 -11
  257. package/lib/shared/models/common/obj-field.model.d.ts +0 -59
  258. package/lib/shared/models/common/object-storage.model.d.ts +0 -15
  259. package/lib/shared/models/common/table-models.d.ts +0 -15
  260. package/lib/shared/models/fields/date/base-date-field.model.d.ts +0 -19
  261. package/lib/shared/models/fields/date/date-picker-field.model.d.ts +0 -12
  262. package/lib/shared/models/fields/date/date-range-field.model.d.ts +0 -12
  263. package/lib/shared/models/fields/field-grid.model.d.ts +0 -9
  264. package/lib/shared/models/fields/field-group.model.d.ts +0 -21
  265. package/lib/shared/models/fields/field-user-config.model.d.ts +0 -3
  266. package/lib/shared/models/fields/field.model.d.ts +0 -57
  267. package/lib/shared/models/fields/input/input-field.model.d.ts +0 -31
  268. package/lib/shared/models/fields/input/input-formatted-field.model.d.ts +0 -13
  269. package/lib/shared/models/fields/input/input-password-field.model.d.ts +0 -11
  270. package/lib/shared/models/fields/input/input-text-field.model.d.ts +0 -9
  271. package/lib/shared/models/fields/radio/radio-base-field.model.d.ts +0 -26
  272. package/lib/shared/models/fields/select/multi-select-field.model.d.ts +0 -11
  273. package/lib/shared/models/fields/select/select-base-field.model.d.ts +0 -40
  274. package/lib/shared/models/fields/select/single-select-field.model.d.ts +0 -9
  275. package/lib/shared/models/fields/select/tree-select-field.model.d.ts +0 -10
  276. package/lib/shared/models/fields/textarea/textarea-field.model.d.ts +0 -20
  277. package/lib/shared/models/fields/upload/avatar-upload-field.model.d.ts +0 -9
  278. package/lib/shared/models/fields/upload/base-upload-field.model.d.ts +0 -25
  279. package/lib/shared/models/fields/upload/multi-file-upload-field.model.d.ts +0 -10
  280. package/lib/shared/models/fields/upload/multi-image-upload-field.model.d.ts +0 -12
  281. package/lib/shared/models/fields/upload/single-file-upload-field.model.d.ts +0 -11
  282. package/lib/shared/services/dynamic-form.service.d.ts +0 -48
  283. package/lib/shared/services/field.service.d.ts +0 -41
  284. package/lib/shared/services/file.service.d.ts +0 -20
  285. package/lib/shared/services/form-config.service.d.ts +0 -10
  286. package/lib/shared/services/form-data.service.d.ts +0 -53
  287. package/lib/shared/services/form-utils.d.ts +0 -5
  288. package/lib/shared/services/suffix.service.d.ts +0 -12
  289. package/lib/shared/services/validation.service.d.ts +0 -10
  290. package/lib/shared/utils/common/common.utils.d.ts +0 -7
  291. package/lib/shared/utils/date/date.utils.d.ts +0 -6
  292. package/lib/shared/utils/dynamic-form/dynamic-form.d.ts +0 -11
  293. package/lib/shared/utils/fields/fields.d.ts +0 -20
  294. package/lib/shared/utils/file/file.utils.d.ts +0 -4
  295. package/lib/shared/utils/validators/custom-validators.d.ts +0 -11
  296. package/lib/shared/utils/validators/default-error-message.d.ts +0 -6
  297. package/lib/shared/utils/validators/pattern.d.ts +0 -4
  298. /package/{styles → src/lib/shared/styles}/_common-form.scss +0 -0
@@ -0,0 +1,192 @@
1
+ import {
2
+ computed,
3
+ Directive,
4
+ inject,
5
+ input,
6
+ Input,
7
+ untracked,
8
+ signal,
9
+ effect,
10
+ } from "@angular/core";
11
+ import { AbstractControl, ControlValueAccessor } from "@angular/forms";
12
+ import { Subject, takeUntil } from "rxjs";
13
+ import { FormMode } from "../models/form";
14
+ import { FormModeEnum } from "../enums/form";
15
+ import { DynamicFormService } from "../services/dynamic-form.service";
16
+ import { FieldService } from "../services/field.service";
17
+ import { LastChangedParent } from "../models/common";
18
+ import { BaseField } from "../models/fields/field.model";
19
+ import { ViewModeEnum } from "../enums/common";
20
+ import { FormDataService } from "../services/form-data.service";
21
+
22
+ @Directive() // Dùng @Directive vì class này không có template riêng
23
+ export abstract class BaseValueAccessor<T> implements ControlValueAccessor {
24
+ // Control theo dạng field lấy từ reactive form.
25
+ @Input({ required: true }) formId!: string;
26
+
27
+ readonly fieldInput = input.required<BaseField<T>>();
28
+ protected readonly fieldKey = untracked(() =>
29
+ computed<string>(() => this.fieldInput().key),
30
+ );
31
+
32
+ @Input({ required: false }) control: AbstractControl<T> | null = null;
33
+
34
+ // Chế độ form: Add, Edit, View...
35
+ readonly modeSignal = input<FormMode>(FormModeEnum.Add);
36
+
37
+ readonly isAdd = computed(() => this.modeSignal() === "add");
38
+ readonly isEdit = computed(() => this.modeSignal() === "edit");
39
+ readonly isView = computed(() => this.modeSignal() === "view");
40
+ readonly isAddOrEdit = computed(() =>
41
+ ["add", "edit"].includes(this.modeSignal()),
42
+ );
43
+ readonly isEditOrView = computed(() =>
44
+ ["edit", "view"].includes(this.modeSignal()),
45
+ );
46
+
47
+ protected readonly formModeEnum = FormModeEnum;
48
+ protected readonly viewModeEnum = ViewModeEnum;
49
+
50
+ protected readonly destroy$ = new Subject<void>();
51
+
52
+ // Dành cho ControlValueAccessor.
53
+ protected value: T | null = null;
54
+ protected readonly valueSignal = signal<T | null>(null);
55
+ protected onChange: (value: T | null) => void = () => {};
56
+ protected onTouched: () => void = () => {};
57
+ protected isDisabled = false;
58
+ protected readonly disabledSignal = signal(false); // Đang có select dùng isDisableSignal nên sau này đồng bộ lại.
59
+
60
+ protected dFormService = inject(DynamicFormService);
61
+ protected formDataService = inject(FormDataService);
62
+ protected fieldService = inject(FieldService);
63
+
64
+ private readonly resetEffect = effect(() => {
65
+ const reset = this.dFormService.resetTrigger();
66
+ if (reset?.formId === this.formId) {
67
+ this.reset();
68
+ }
69
+ });
70
+
71
+ // Dành cho UI
72
+ protected readonly viewMode = computed(() => this.fieldInput().viewMode);
73
+
74
+ protected readonly displayPlaceholder = computed(() => {
75
+ if (!this.isAddOrEdit()) return "";
76
+
77
+ const placeholder = this.fieldInput()?.placeholder;
78
+ if (placeholder) return placeholder;
79
+
80
+ return this.resolvePlaceholderText();
81
+ });
82
+
83
+ // 2. Hàm sinh text mặc định (Component con có thể override hàm này)
84
+ protected resolvePlaceholderText(): string {
85
+ return "Nhập dữ liệu";
86
+ }
87
+
88
+ ngOnDestroy(): void {
89
+ this.destroy$.next();
90
+ this.destroy$.complete();
91
+ }
92
+
93
+ protected takeUntilDestroy<T>() {
94
+ return takeUntil<T>(this.destroy$);
95
+ }
96
+
97
+ writeValue(value: T | null): void {
98
+ this.value = value;
99
+ this.valueSignal.set(value);
100
+ this.writeValueToView(value); // 👈 component con override nếu cần.
101
+ }
102
+
103
+ registerOnChange(fn: (value: T | null) => void): void {
104
+ this.onChange = fn;
105
+ }
106
+
107
+ registerOnTouched(fn: () => void): void {
108
+ this.onTouched = fn;
109
+ }
110
+
111
+ setDisabledState(isDisabled: boolean): void {
112
+ this.isDisabled = isDisabled;
113
+ this.disabledSignal.set(isDisabled);
114
+ this.setDisabledOnView(isDisabled);
115
+ }
116
+
117
+ protected propagateValue(value: T | null): void {
118
+ this.value = value;
119
+ this.valueSignal.set(value);
120
+ this.fieldService.onFieldChange(this.fieldKey(), value);
121
+ this.onChange(this.value);
122
+ // Khi thay đổi value.
123
+ this.handleValueChange(value);
124
+ }
125
+
126
+ // Xử lý reset chung ban đầu.
127
+ protected reset(): void {
128
+ if (!this.control || !this.isAddOrEdit()) return;
129
+ const baseField = untracked(() => this.fieldInput());
130
+ this.control.reset(baseField.initialValue as T);
131
+ }
132
+
133
+ /**
134
+ * Thêm dữ liệu ở từng dạng field vào form data theo form id cụ thể.
135
+ * @param key Mã của field.
136
+ * @param value Giá trị của field.
137
+ */
138
+ protected patchFormData(key: string, value: T | null): void {
139
+ this.formDataService.patch(this.formId, { [key]: value });
140
+ }
141
+
142
+ // Update data ở từng prop vào dependValuesSignal. Cơ chế nếu falsy thì không được phép cho vào dependValuesSignal.
143
+ protected updateDependValues(key: string, value: string): void {
144
+ this.fieldService.removeDependValues(key);
145
+ if (value) {
146
+ this.fieldService.updateDependValues(key, value);
147
+ }
148
+ }
149
+
150
+ // Đánh dấu field có isParent là true vừa thay đổi.
151
+ protected updateLastChangedParent(key: string, value: unknown): void {
152
+ this.fieldService.updateLastChangedParent(key, value);
153
+ }
154
+
155
+ protected disableAndResetControl(): void {
156
+ this.control?.reset();
157
+ this.control?.disable();
158
+ }
159
+
160
+ protected disableControl(): void {
161
+ this.control?.disable();
162
+ }
163
+
164
+ protected enableControl(): void {
165
+ this.control?.enable();
166
+ }
167
+
168
+ protected resetControl(): void {
169
+ this.control?.reset();
170
+ }
171
+
172
+ /**
173
+ * Optional: để component override riêng.
174
+ */
175
+ // Xử lý giao diện khi ghi giá trị mới.
176
+ protected writeValueToView(value: T | null): void {}
177
+
178
+ // Khi value change.
179
+ protected handleValueChange(value: T | null): void {}
180
+
181
+ // Xử lý giao diện khi ghi thay đổi giá trị isDisabled.
182
+ protected setDisabledOnView(isDisabled: boolean): void {}
183
+
184
+ // Xử lý các logic riêng của reset ở add mode.
185
+ protected resetForAdd(): void {}
186
+
187
+ // Xử lý các logic riêng của reset ở edit mode.
188
+ protected resetForEdit(): void {}
189
+
190
+ // Xử lý các logic riêng chung cuối cùng.
191
+ protected finalizeReset(): void {}
192
+ }
@@ -1,14 +1,34 @@
1
- import { DatePickerComponent } from "./fields/date/date-picker/date-picker.component";
2
- import { DateRangeComponent } from "./fields/date/date-range/date-range.component";
3
- import { InputFormattedComponent } from "./fields/input/input-formatted/input-formatted.component";
4
- import { InputPasswordComponent } from "./fields/input/input-password/input-password.component";
5
- import { InputTextComponent } from "./fields/input/input-text/input-text.component";
6
- import { MultiSelectComponent } from "./fields/select/multi-select/multi-select.component";
7
- import { SingleSelectComponent } from "./fields/select/single-select/single-select.component";
8
- import { TreeSelectComponent } from "./fields/select/tree-select/tree-select.component";
9
- import { TextareaComponent } from "./fields/textarea/textarea.component";
10
- import { AvatarUploadComponent } from "./fields/upload/avatar-upload/avatar-upload.component";
11
- import { MultiFileUploadComponent } from "./fields/upload/multi-file-upload/multi-file-upload.component";
12
- import { MultiImageUploadComponent } from "./fields/upload/multi-image-upload/multi-image-upload.component";
13
- import { SingleFileUploadComponent } from "./fields/upload/single-file-upload/single-file-upload.component";
14
- export declare const FIELD_COMPONENTS: (typeof DatePickerComponent | typeof DateRangeComponent | typeof InputFormattedComponent | typeof InputPasswordComponent | typeof InputTextComponent | typeof MultiSelectComponent | typeof SingleSelectComponent | typeof TreeSelectComponent | typeof TextareaComponent | typeof AvatarUploadComponent | typeof MultiFileUploadComponent | typeof MultiImageUploadComponent | typeof SingleFileUploadComponent)[];
1
+ import { DatePickerComponent } from "./fields/date/date-picker/date-picker.component";
2
+ import { DateRangeComponent } from "./fields/date/date-range/date-range.component";
3
+ import { InputFormattedComponent } from "./fields/input/input-formatted/input-formatted.component";
4
+ import { InputPasswordComponent } from "./fields/input/input-password/input-password.component";
5
+ import { InputTextComponent } from "./fields/input/input-text/input-text.component";
6
+ import { MultiSelectComponent } from "./fields/select/multi-select/multi-select.component";
7
+ import { SingleSelectComponent } from "./fields/select/single-select/single-select.component";
8
+ import { TreeSelectComponent } from "./fields/select/tree-select/tree-select.component";
9
+ import { TextareaComponent } from "./fields/textarea/textarea.component";
10
+ import { AvatarUploadComponent } from "./fields/upload/avatar-upload/avatar-upload.component";
11
+ import { MultiFileUploadComponent } from "./fields/upload/multi-file-upload/multi-file-upload.component";
12
+ import { MultiImageUploadComponent } from "./fields/upload/multi-image-upload/multi-image-upload.component";
13
+ import { SingleFileUploadComponent } from "./fields/upload/single-file-upload/single-file-upload.component";
14
+
15
+ // Các field component đại diện cho giao diện của từng control.
16
+ export const FIELD_COMPONENTS = [
17
+ InputTextComponent,
18
+ InputPasswordComponent,
19
+ InputFormattedComponent,
20
+
21
+ SingleSelectComponent,
22
+ MultiSelectComponent,
23
+ TreeSelectComponent,
24
+
25
+ TextareaComponent,
26
+
27
+ DatePickerComponent,
28
+ DateRangeComponent,
29
+
30
+ SingleFileUploadComponent,
31
+ MultiFileUploadComponent,
32
+ MultiImageUploadComponent,
33
+ AvatarUploadComponent,
34
+ ];
@@ -0,0 +1,197 @@
1
+ @if (showTestFormInModal) {
2
+ <h4>
3
+ =============================================== FORM IN MODAL
4
+ ==================================================</h4
5
+ >
6
+ <div class="my-4">
7
+ <button
8
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
9
+ nz-button
10
+ nzType="primary"
11
+ (click)="openModal(formModeEnum.Add)"
12
+ >
13
+ <span>OpenModal add</span>
14
+ </button>
15
+
16
+ <button
17
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
18
+ nz-button
19
+ nzType="primary"
20
+ (click)="openModal(formModeEnum.Edit)"
21
+ >
22
+ <span>OpenModal edit</span>
23
+ </button>
24
+
25
+ <nz-modal
26
+ [nzVisible]="isVisibleModal"
27
+ [nzContent]="modalContent"
28
+ [nzWidth]="800"
29
+ (nzOnCancel)="handleCancel()"
30
+ (nzOnOk)="handleOk()"
31
+ [nzKeyboard]="false"
32
+ >
33
+ <ng-template #modalContent>
34
+ <app-dynamic-forms
35
+ [formId]="formId"
36
+ [mode]="formMode"
37
+ [fields]="fields"
38
+ [model]="model"
39
+ (formSubmit)="handleWhenFormSubmit($event)"
40
+ ></app-dynamic-forms>
41
+ </ng-template>
42
+ </nz-modal>
43
+ </div>
44
+ }
45
+
46
+ @if (showTestForm) {
47
+ <h4>
48
+ =============================================== FORM
49
+ ==================================================</h4
50
+ >
51
+ <div>
52
+ <app-dynamic-forms
53
+ [formId]="formId"
54
+ [mode]="formMode"
55
+ [fields]="fields"
56
+ [model]="model"
57
+ (formSubmit)="handleWhenFormSubmit($event)"
58
+ ></app-dynamic-forms>
59
+
60
+ <button
61
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
62
+ nz-button
63
+ nzType="primary"
64
+ (click)="handleSubmitDform()"
65
+ >
66
+ <span>Submit</span>
67
+ </button>
68
+
69
+ <button
70
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
71
+ nz-button
72
+ nzType="primary"
73
+ (click)="handleResetDform()"
74
+ >
75
+ <span>Reset</span>
76
+ </button>
77
+
78
+ <button
79
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
80
+ nz-button
81
+ nzType="primary"
82
+ (click)="handleChangeModelData()"
83
+ >
84
+ <span>Change model data</span>
85
+ </button>
86
+
87
+ <button
88
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
89
+ nz-button
90
+ nzType="primary"
91
+ (click)="handleChangeMode(formModeEnum.Add)"
92
+ >
93
+ <span>Change mode add</span>
94
+ </button>
95
+
96
+ <button
97
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
98
+ nz-button
99
+ nzType="primary"
100
+ (click)="handleChangeMode(formModeEnum.Edit)"
101
+ >
102
+ <span>Change mode edit</span>
103
+ </button>
104
+
105
+ <button
106
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
107
+ nz-button
108
+ nzType="primary"
109
+ (click)="handleChangeMode(formModeEnum.View)"
110
+ >
111
+ <span>Change mode view</span>
112
+ </button>
113
+
114
+ <button
115
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
116
+ nz-button
117
+ nzType="primary"
118
+ (click)="handleSetDataOutsideForm()"
119
+ >
120
+ <span>Set data outside form for field</span>
121
+ </button>
122
+ </div>
123
+ }
124
+
125
+ <!-- Test trường hợp nhiều dynamic form cùng một giao diện -->
126
+ @if (showTestMultiForm) {
127
+ <div class="multi-form">
128
+ <div>
129
+ <h2>Form A</h2>
130
+ <app-dynamic-forms
131
+ [formId]="multiFormIdA"
132
+ [mode]="multiFormMode"
133
+ [fields]="multiFormFieldsA"
134
+ [model]="multiFormModelA"
135
+ (formSubmit)="multiFormSubmitA($event)"
136
+ ></app-dynamic-forms>
137
+ </div>
138
+
139
+ <div>
140
+ <h2>Form B</h2>
141
+ <app-dynamic-forms
142
+ [formId]="multiFormIdB"
143
+ [mode]="multiFormMode"
144
+ [fields]="multiFormFieldsB"
145
+ [model]="multiFormModelB"
146
+ (formSubmit)="multiFormSubmitB($event)"
147
+ ></app-dynamic-forms>
148
+ </div>
149
+
150
+ <div>
151
+ <button
152
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
153
+ nz-button
154
+ nzType="primary"
155
+ (click)="submitMultiFormA()"
156
+ >
157
+ <span>Submit A</span>
158
+ </button>
159
+
160
+ <button
161
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
162
+ nz-button
163
+ nzType="primary"
164
+ (click)="submitMultiFormB()"
165
+ >
166
+ <span>Submit B</span>
167
+ </button>
168
+ </div>
169
+ </div>
170
+ }
171
+
172
+ <!-- Test trường hợp multi select field phụ thuộc vào parent -->
173
+ @if (showTestMultiSelectDependOnParent) {
174
+ <div class="multi-select-depend-on-parent">
175
+ <div>
176
+ <h2>Multi select depend on parent</h2>
177
+ <app-dynamic-forms
178
+ [formId]="multiSelectDependOnParentId"
179
+ [mode]="multiSelectDependOnParentFormMode"
180
+ [fields]="multiSelectDependOnParentFields"
181
+ [model]="multiSelectDependOnParentModel"
182
+ (formSubmit)="multiSelectDependOnParentResponse($event)"
183
+ ></app-dynamic-forms>
184
+ </div>
185
+
186
+ <div>
187
+ <button
188
+ class="btn-add-new d-inline-flex align-items-center mt-2 ms-2 me-2"
189
+ nz-button
190
+ nzType="primary"
191
+ (click)="multiSelectDependOnParentSubmit()"
192
+ >
193
+ <span>Submit</span>
194
+ </button>
195
+ </div>
196
+ </div>
197
+ }
@@ -0,0 +1,12 @@
1
+ .mb-4 {
2
+ margin-bottom: 1rem;
3
+ }
4
+
5
+ .mt-4 {
6
+ margin-top: 1rem;
7
+ }
8
+
9
+ .my-4 {
10
+ margin-bottom: 1rem;
11
+ margin-top: 1rem;
12
+ }
@@ -0,0 +1,22 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { DFormTestingComponent } from './d-form-testing.component';
4
+
5
+ describe('DFormTestingComponent', () => {
6
+ let component: DFormTestingComponent;
7
+ let fixture: ComponentFixture<DFormTestingComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ imports: [DFormTestingComponent],
12
+ }).compileComponents();
13
+
14
+ fixture = TestBed.createComponent(DFormTestingComponent);
15
+ component = fixture.componentInstance;
16
+ fixture.detectChanges();
17
+ });
18
+
19
+ it('should create', () => {
20
+ expect(component).toBeTruthy();
21
+ });
22
+ });
@@ -0,0 +1,197 @@
1
+ import { Component, inject } from "@angular/core";
2
+ import { uuidGenerator } from "../../utils/common";
3
+ import { BaseField } from "../../models/fields/field.model";
4
+ import { DynamicFormService } from "../../services/dynamic-form.service";
5
+ import { CORE_MODULES, FORM_MODULES } from "../../consts/common";
6
+ import {
7
+ sampleFields,
8
+ sampleFields2,
9
+ sampleModel,
10
+ sampleModel2,
11
+ sampleMultiFormFieldsA,
12
+ sampleMultiFormFieldsB,
13
+ sampleMultiFormModelA,
14
+ sampleMultiFormModelB,
15
+ sampleMultiSelectDependOnParent,
16
+ } from "../../consts/common/sample-test.const";
17
+ import { FormMode } from "../../models/form";
18
+ import { FormModeEnum } from "../../enums/form";
19
+ import { DynamicFormComponent } from "../../../dynamic-form.component";
20
+ import { NzModalModule, NzModalService } from "ng-zorro-antd/modal";
21
+ import { cloneDeep, isEqual } from "lodash-es";
22
+ import { SuffixService } from "../../services/suffix.service";
23
+ import { NzButtonModule } from "ng-zorro-antd/button";
24
+
25
+ const ZORRO_MODULES = [NzButtonModule, NzModalModule];
26
+ @Component({
27
+ selector: "app-d-form-testing",
28
+ imports: [
29
+ ...CORE_MODULES,
30
+ ...FORM_MODULES,
31
+ ...ZORRO_MODULES,
32
+ DynamicFormComponent,
33
+ ],
34
+ templateUrl: "./d-form-testing.component.html",
35
+ styleUrl: "./d-form-testing.component.less",
36
+ })
37
+ export class DFormTestingComponent {
38
+ formId = "";
39
+ formMode: FormMode = FormModeEnum.Add;
40
+ fields: BaseField<any>[] = [];
41
+ model: Record<string, unknown> = {
42
+ username: "get off",
43
+ province: { code: 35, name: "Hà Name" },
44
+ };
45
+
46
+ formModeEnum = FormModeEnum;
47
+
48
+ showTestForm = true;
49
+ showTestFormInModal = false;
50
+
51
+ isVisibleModal = false;
52
+
53
+ private dFormService = inject(DynamicFormService);
54
+ private modalService = inject(NzModalService);
55
+ private suffixService = inject(SuffixService);
56
+
57
+ ngOnInit(): void {
58
+ this.formId = uuidGenerator();
59
+ this.formMode = FormModeEnum.Add;
60
+ this.fields = sampleFields;
61
+ // this.fields = sampleFields2;
62
+ // this.model = sampleModel2
63
+
64
+ this.suffixService.suffixClick.subscribe(({ key }) => {
65
+ console.log("output ra với", key);
66
+ });
67
+ }
68
+
69
+ handleSubmitDform(): void {
70
+ this.dFormService.triggerSubmit(this.formId);
71
+ }
72
+
73
+ handleWhenFormSubmit(data: Record<string, unknown>): void {
74
+ console.log("submit data", data);
75
+
76
+ if (data["pictures"]) {
77
+ console.log(
78
+ "pictures",
79
+ JSON.parse(data["pictures"] as unknown as string),
80
+ );
81
+ }
82
+ }
83
+
84
+ handleResetDform(): void {
85
+ this.dFormService.triggerReset(this.formId);
86
+ }
87
+
88
+ handleChangeModelData(): void {
89
+ this.model = sampleModel2;
90
+ }
91
+
92
+ openModal(mode: FormMode): void {
93
+ this.formMode = mode;
94
+
95
+ if (mode === FormModeEnum.Add) {
96
+ // this.model = {};
97
+ this.model = sampleModel;
98
+ }
99
+
100
+ if (mode === FormModeEnum.Edit) {
101
+ // this.model = sampleModel;
102
+ this.model = sampleModel2;
103
+ }
104
+
105
+ this.isVisibleModal = true;
106
+ }
107
+
108
+ handleCancel(): void {
109
+ this.isVisibleModal = false;
110
+ // this.dFormService.triggerReset(this.formId)
111
+ }
112
+
113
+ handleOk(): void {
114
+ this.dFormService.triggerSubmit(this.formId);
115
+ }
116
+
117
+ handleChangeMode(mode: FormMode) {
118
+ // this.dFormService.triggerReset(this.formId);
119
+ this.formMode = mode;
120
+ const x = this.fields;
121
+ this.model = sampleModel2;
122
+ // this.fields = sampleFields;
123
+ if (mode === FormModeEnum.Add) {
124
+ // this.fields = sampleFields;
125
+ this.model = {};
126
+ }
127
+
128
+ if (mode === FormModeEnum.Edit) {
129
+ // this.fields = sampleFields2;
130
+ this.model = sampleModel2;
131
+ }
132
+ }
133
+
134
+ handleSetDataOutsideForm(): void {
135
+ if (
136
+ this.formMode === FormModeEnum.Add ||
137
+ this.formMode === FormModeEnum.Edit
138
+ ) {
139
+ // {
140
+ // code: 'ADMIN'
141
+ // }
142
+ // 'ADMIN'
143
+ this.dFormService.setFieldValue("role", {
144
+ code: "ADMIN",
145
+ });
146
+ } else {
147
+ alert("Không hỗ trợ cho view");
148
+ }
149
+ }
150
+
151
+ //#region Test Multi Form
152
+ showTestMultiForm = false;
153
+
154
+ multiFormMode: FormMode = FormModeEnum.Add;
155
+
156
+ multiFormIdA = uuidGenerator();
157
+ multiFormFieldsA: BaseField<any>[] = sampleMultiFormFieldsA;
158
+ multiFormModelA: Record<string, unknown> = sampleMultiFormModelA;
159
+
160
+ multiFormIdB = uuidGenerator();
161
+ multiFormFieldsB: BaseField<any>[] = sampleMultiFormFieldsB;
162
+ multiFormModelB: Record<string, unknown> = sampleMultiFormModelB;
163
+
164
+ submitMultiFormA(): void {
165
+ this.dFormService.triggerSubmit(this.multiFormIdA);
166
+ }
167
+
168
+ multiFormSubmitA(rawData: Record<string, unknown>): void {
169
+ console.log("submit data A", rawData);
170
+ }
171
+
172
+ submitMultiFormB(): void {
173
+ this.dFormService.triggerSubmit(this.multiFormIdB);
174
+ }
175
+
176
+ multiFormSubmitB(rawData: Record<string, unknown>): void {
177
+ console.log("submit data B", rawData);
178
+ }
179
+ //#endregion Test Multi Form
180
+
181
+ //#region Test Multi Select depend on Parent
182
+ showTestMultiSelectDependOnParent = false;
183
+ multiSelectDependOnParentFormMode: FormMode = FormModeEnum.Add;
184
+ multiSelectDependOnParentId = uuidGenerator();
185
+ multiSelectDependOnParentFields: BaseField<any>[] =
186
+ sampleMultiSelectDependOnParent;
187
+ multiSelectDependOnParentModel: Record<string, unknown> = {};
188
+
189
+ multiSelectDependOnParentSubmit(): void {
190
+ this.dFormService.triggerSubmit(this.multiSelectDependOnParentId);
191
+ }
192
+
193
+ multiSelectDependOnParentResponse(rawData: Record<string, unknown>): void {
194
+ console.log("Multi Select Depend On Parent Response", rawData);
195
+ }
196
+ //#endregion Test Multi Select depend on Parent
197
+ }