@ldquocc/dynamic-form 0.0.9 → 0.0.10

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/fesm2022/ldquocc-dynamic-form.mjs +4909 -0
  2. package/fesm2022/ldquocc-dynamic-form.mjs.map +1 -0
  3. package/index.d.ts +5 -0
  4. package/lib/dynamic-form.component.d.ts +67 -0
  5. package/lib/shared/base/base-select.component.d.ts +19 -0
  6. package/lib/shared/base/base-value-accessor.d.ts +69 -0
  7. package/{src/lib/shared/components/component.ts → lib/shared/components/component.d.ts} +14 -34
  8. package/lib/shared/components/dynamic-field/dynamic-field.component.d.ts +23 -0
  9. package/lib/shared/components/field-user-config/field-user-config.component.d.ts +10 -0
  10. package/lib/shared/components/fields/components/suffix/suffix.component.d.ts +12 -0
  11. package/lib/shared/components/fields/date/date-picker/date-picker.component.d.ts +17 -0
  12. package/lib/shared/components/fields/date/date-range/date-range.component.d.ts +17 -0
  13. package/lib/shared/components/fields/input/input-formatted/input-formatted.component.d.ts +20 -0
  14. package/lib/shared/components/fields/input/input-password/input-password.component.d.ts +12 -0
  15. package/lib/shared/components/fields/input/input-text/input-text.component.d.ts +14 -0
  16. package/lib/shared/components/fields/select/multi-select/multi-select.component.d.ts +21 -0
  17. package/lib/shared/components/fields/select/single-select/single-select.component.d.ts +21 -0
  18. package/lib/shared/components/fields/select/tree-select/tree-select.component.d.ts +28 -0
  19. package/lib/shared/components/fields/textarea/textarea.component.d.ts +14 -0
  20. package/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.d.ts +25 -0
  21. package/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.d.ts +76 -0
  22. package/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.d.ts +27 -0
  23. package/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.d.ts +29 -0
  24. package/lib/shared/config/dynamic-form.config.d.ts +9 -0
  25. package/lib/shared/consts/common/common.const.d.ts +5 -0
  26. package/lib/shared/consts/common/field-dependency.const.d.ts +1 -0
  27. package/lib/shared/consts/common/file.const.d.ts +148 -0
  28. package/{src/lib/shared/consts/common/index.ts → lib/shared/consts/common/index.d.ts} +4 -4
  29. package/lib/shared/consts/common/standalone-import.const.d.ts +7 -0
  30. package/lib/shared/consts/controls/control.const.d.ts +1 -0
  31. package/{src/lib/shared/consts/controls/index.ts → lib/shared/consts/controls/index.d.ts} +1 -1
  32. package/lib/shared/consts/fields/date-field.const.d.ts +7 -0
  33. package/lib/shared/consts/fields/field.const.d.ts +4 -0
  34. package/{src/lib/shared/consts/fields/index.ts → lib/shared/consts/fields/index.d.ts} +5 -5
  35. package/lib/shared/consts/fields/input-field.const.d.ts +4 -0
  36. package/lib/shared/consts/fields/input-formatted-field.const.d.ts +4 -0
  37. package/lib/shared/consts/fields/radio-field.const.d.ts +10 -0
  38. package/lib/shared/consts/fields/select-field.const.d.ts +6 -0
  39. package/lib/shared/consts/fields/upload-field.const.d.ts +1 -0
  40. package/lib/shared/consts/validators/pattern.const.d.ts +2 -0
  41. package/lib/shared/enums/common/field-dependency.enum.d.ts +9 -0
  42. package/lib/shared/enums/common/file-size-type.enum.d.ts +6 -0
  43. package/{src/lib/shared/enums/common/index.ts → lib/shared/enums/common/index.d.ts} +4 -4
  44. package/lib/shared/enums/common/output-value-type.enum.d.ts +19 -0
  45. package/lib/shared/enums/common/view-mode.enum.d.ts +4 -0
  46. package/lib/shared/enums/controls/control.enum.d.ts +11 -0
  47. package/{src/lib/shared/enums/controls/index.ts → lib/shared/enums/controls/index.d.ts} +1 -1
  48. package/lib/shared/enums/fields/date-field.enum.d.ts +4 -0
  49. package/lib/shared/enums/fields/field.enum.d.ts +20 -0
  50. package/{src/lib/shared/enums/fields/index.ts → lib/shared/enums/fields/index.d.ts} +6 -6
  51. package/lib/shared/enums/fields/input-field.enum.d.ts +6 -0
  52. package/lib/shared/enums/fields/input-formatted-field.enum.d.ts +6 -0
  53. package/lib/shared/enums/fields/select-field.enum.d.ts +4 -0
  54. package/lib/shared/enums/fields/upload-field.enum.d.ts +5 -0
  55. package/lib/shared/enums/form/dynamic-form.enum.d.ts +6 -0
  56. package/{src/lib/shared/enums/form/index.ts → lib/shared/enums/form/index.d.ts} +1 -1
  57. package/{src/lib/shared/enums/validators/index.ts → lib/shared/enums/validators/index.d.ts} +2 -2
  58. package/lib/shared/enums/validators/regex.enum.d.ts +38 -0
  59. package/lib/shared/enums/validators/validators.enum.d.ts +14 -0
  60. package/lib/shared/factories/auto-numeric-options.factory.d.ts +5 -0
  61. package/lib/shared/models/common/api-config.model.d.ts +4 -0
  62. package/lib/shared/models/common/api-response.model.d.ts +19 -0
  63. package/lib/shared/models/common/common.model.d.ts +29 -0
  64. package/lib/shared/models/common/field-dependency.model.d.ts +16 -0
  65. package/lib/shared/models/common/file-config.model.d.ts +11 -0
  66. package/{src/lib/shared/models/common/index.ts → lib/shared/models/common/index.d.ts} +7 -7
  67. package/lib/shared/models/common/obj-field.model.d.ts +59 -0
  68. package/lib/shared/models/common/object-storage.model.d.ts +15 -0
  69. package/{src/lib/shared/models/common/output-value-type.model.ts → lib/shared/models/common/output-value-type.model.d.ts} +4 -4
  70. package/lib/shared/models/common/table-models.d.ts +15 -0
  71. package/{src/lib/shared/models/common/view-mode.model.ts → lib/shared/models/common/view-mode.model.d.ts} +1 -1
  72. package/{src/lib/shared/models/controls/control.model.ts → lib/shared/models/controls/control.model.d.ts} +2 -3
  73. package/{src/lib/shared/models/controls/index.ts → lib/shared/models/controls/index.d.ts} +1 -1
  74. package/lib/shared/models/fields/date/base-date-field.model.d.ts +19 -0
  75. package/lib/shared/models/fields/date/date-picker-field.model.d.ts +12 -0
  76. package/lib/shared/models/fields/date/date-range-field.model.d.ts +12 -0
  77. package/{src/lib/shared/models/fields/date/index.ts → lib/shared/models/fields/date/index.d.ts} +3 -3
  78. package/lib/shared/models/fields/field-grid.model.d.ts +9 -0
  79. package/lib/shared/models/fields/field-group.model.d.ts +21 -0
  80. package/lib/shared/models/fields/field-user-config.model.d.ts +3 -0
  81. package/lib/shared/models/fields/field.model.d.ts +57 -0
  82. package/{src/lib/shared/models/fields/index.ts → lib/shared/models/fields/index.d.ts} +2 -2
  83. package/{src/lib/shared/models/fields/input/index.ts → lib/shared/models/fields/input/index.d.ts} +4 -4
  84. package/lib/shared/models/fields/input/input-field.model.d.ts +31 -0
  85. package/lib/shared/models/fields/input/input-formatted-field.model.d.ts +13 -0
  86. package/lib/shared/models/fields/input/input-password-field.model.d.ts +11 -0
  87. package/lib/shared/models/fields/input/input-text-field.model.d.ts +9 -0
  88. package/lib/shared/models/fields/radio/radio-base-field.model.d.ts +26 -0
  89. package/lib/shared/models/fields/select/multi-select-field.model.d.ts +11 -0
  90. package/lib/shared/models/fields/select/select-base-field.model.d.ts +40 -0
  91. package/lib/shared/models/fields/select/single-select-field.model.d.ts +9 -0
  92. package/lib/shared/models/fields/select/tree-select-field.model.d.ts +10 -0
  93. package/lib/shared/models/fields/textarea/textarea-field.model.d.ts +20 -0
  94. package/lib/shared/models/fields/upload/avatar-upload-field.model.d.ts +9 -0
  95. package/lib/shared/models/fields/upload/base-upload-field.model.d.ts +25 -0
  96. package/{src/lib/shared/models/fields/upload/index.ts → lib/shared/models/fields/upload/index.d.ts} +5 -5
  97. package/lib/shared/models/fields/upload/multi-file-upload-field.model.d.ts +10 -0
  98. package/lib/shared/models/fields/upload/multi-image-upload-field.model.d.ts +12 -0
  99. package/lib/shared/models/fields/upload/single-file-upload-field.model.d.ts +11 -0
  100. package/{src/lib/shared/models/form/dynamic-form.model.ts → lib/shared/models/form/dynamic-form.model.d.ts} +1 -1
  101. package/{src/lib/shared/models/form/index.ts → lib/shared/models/form/index.d.ts} +1 -1
  102. package/lib/shared/services/dynamic-form.service.d.ts +48 -0
  103. package/lib/shared/services/field.service.d.ts +41 -0
  104. package/lib/shared/services/file.service.d.ts +20 -0
  105. package/lib/shared/services/form-config.service.d.ts +10 -0
  106. package/lib/shared/services/form-data.service.d.ts +53 -0
  107. package/lib/shared/services/form-utils.d.ts +5 -0
  108. package/lib/shared/services/suffix.service.d.ts +12 -0
  109. package/lib/shared/services/validation.service.d.ts +10 -0
  110. package/lib/shared/utils/common/common.utils.d.ts +7 -0
  111. package/{src/lib/shared/utils/common/index.ts → lib/shared/utils/common/index.d.ts} +1 -1
  112. package/lib/shared/utils/date/date.utils.d.ts +6 -0
  113. package/{src/lib/shared/utils/date/index.ts → lib/shared/utils/date/index.d.ts} +1 -1
  114. package/lib/shared/utils/dynamic-form/dynamic-form.d.ts +11 -0
  115. package/lib/shared/utils/fields/fields.d.ts +20 -0
  116. package/{src/lib/shared/utils/fields/index.ts → lib/shared/utils/fields/index.d.ts} +1 -1
  117. package/lib/shared/utils/file/file.utils.d.ts +4 -0
  118. package/{src/lib/shared/utils/file/index.ts → lib/shared/utils/file/index.d.ts} +1 -1
  119. package/lib/shared/utils/validators/custom-validators.d.ts +11 -0
  120. package/lib/shared/utils/validators/default-error-message.d.ts +6 -0
  121. package/{src/lib/shared/utils/validators/index.ts → lib/shared/utils/validators/index.d.ts} +3 -3
  122. package/lib/shared/utils/validators/pattern.d.ts +4 -0
  123. package/package.json +31 -20
  124. package/{src/public-api.ts → public-api.d.ts} +29 -68
  125. package/ng-package.json +0 -15
  126. package/src/lib/dynamic-form.component.html +0 -121
  127. package/src/lib/dynamic-form.component.scss +0 -7
  128. package/src/lib/dynamic-form.component.spec.ts +0 -21
  129. package/src/lib/dynamic-form.component.ts +0 -237
  130. package/src/lib/dynamic-form.service.spec.ts +0 -16
  131. package/src/lib/dynamic-form.service.ts +0 -9
  132. package/src/lib/shared/base/base-select.component.ts +0 -183
  133. package/src/lib/shared/base/base-value-accessor.ts +0 -192
  134. package/src/lib/shared/components/d-form-testing/d-form-testing.component.html +0 -197
  135. package/src/lib/shared/components/d-form-testing/d-form-testing.component.less +0 -12
  136. package/src/lib/shared/components/d-form-testing/d-form-testing.component.spec.ts +0 -22
  137. package/src/lib/shared/components/d-form-testing/d-form-testing.component.ts +0 -197
  138. package/src/lib/shared/components/dynamic-field/dynamic-field.component.html +0 -218
  139. package/src/lib/shared/components/dynamic-field/dynamic-field.component.scss +0 -28
  140. package/src/lib/shared/components/dynamic-field/dynamic-field.component.spec.ts +0 -21
  141. package/src/lib/shared/components/dynamic-field/dynamic-field.component.ts +0 -67
  142. package/src/lib/shared/components/field-user-config/field-user-config.component.html +0 -38
  143. package/src/lib/shared/components/field-user-config/field-user-config.component.scss +0 -29
  144. package/src/lib/shared/components/field-user-config/field-user-config.component.ts +0 -33
  145. package/src/lib/shared/components/fields/components/suffix/suffix.component.html +0 -42
  146. package/src/lib/shared/components/fields/components/suffix/suffix.component.scss +0 -3
  147. package/src/lib/shared/components/fields/components/suffix/suffix.component.spec.ts +0 -22
  148. package/src/lib/shared/components/fields/components/suffix/suffix.component.ts +0 -32
  149. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.html +0 -20
  150. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.scss +0 -5
  151. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.spec.ts +0 -21
  152. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.ts +0 -148
  153. package/src/lib/shared/components/fields/date/date-range/date-range.component.html +0 -33
  154. package/src/lib/shared/components/fields/date/date-range/date-range.component.scss +0 -22
  155. package/src/lib/shared/components/fields/date/date-range/date-range.component.spec.ts +0 -21
  156. package/src/lib/shared/components/fields/date/date-range/date-range.component.ts +0 -133
  157. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.html +0 -31
  158. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.scss +0 -3
  159. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.spec.ts +0 -21
  160. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.ts +0 -148
  161. package/src/lib/shared/components/fields/input/input-password/input-password.component.html +0 -18
  162. package/src/lib/shared/components/fields/input/input-password/input-password.component.scss +0 -0
  163. package/src/lib/shared/components/fields/input/input-password/input-password.component.spec.ts +0 -21
  164. package/src/lib/shared/components/fields/input/input-password/input-password.component.ts +0 -56
  165. package/src/lib/shared/components/fields/input/input-text/input-text.component.html +0 -73
  166. package/src/lib/shared/components/fields/input/input-text/input-text.component.scss +0 -0
  167. package/src/lib/shared/components/fields/input/input-text/input-text.component.spec.ts +0 -21
  168. package/src/lib/shared/components/fields/input/input-text/input-text.component.ts +0 -98
  169. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.html +0 -73
  170. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.scss +0 -21
  171. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.spec.ts +0 -21
  172. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.ts +0 -212
  173. package/src/lib/shared/components/fields/select/single-select/single-select.component.html +0 -55
  174. package/src/lib/shared/components/fields/select/single-select/single-select.component.scss +0 -1
  175. package/src/lib/shared/components/fields/select/single-select/single-select.component.spec.ts +0 -21
  176. package/src/lib/shared/components/fields/select/single-select/single-select.component.ts +0 -217
  177. package/src/lib/shared/components/fields/select/single-select/sl.component.old.txt +0 -337
  178. package/src/lib/shared/components/fields/select/single-select/sl.component.old2.txt +0 -340
  179. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.html +0 -38
  180. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.scss +0 -1
  181. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.spec.ts +0 -21
  182. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.ts +0 -401
  183. package/src/lib/shared/components/fields/textarea/textarea.component.html +0 -29
  184. package/src/lib/shared/components/fields/textarea/textarea.component.scss +0 -17
  185. package/src/lib/shared/components/fields/textarea/textarea.component.spec.ts +0 -21
  186. package/src/lib/shared/components/fields/textarea/textarea.component.ts +0 -76
  187. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.html +0 -30
  188. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.scss +0 -22
  189. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.spec.ts +0 -22
  190. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.ts +0 -217
  191. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.html +0 -101
  192. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.scss +0 -117
  193. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.spec.ts +0 -22
  194. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.ts +0 -480
  195. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.html +0 -82
  196. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.less +0 -80
  197. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.spec.ts +0 -22
  198. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.ts +0 -288
  199. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.html +0 -104
  200. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.scss +0 -37
  201. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.spec.ts +0 -21
  202. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.ts +0 -317
  203. package/src/lib/shared/config/dynamic-form.config.ts +0 -11
  204. package/src/lib/shared/consts/common/common.const.ts +0 -5
  205. package/src/lib/shared/consts/common/field-dependency.const.ts +0 -1
  206. package/src/lib/shared/consts/common/file.const.ts +0 -130
  207. package/src/lib/shared/consts/common/sample-test.const.ts +0 -1648
  208. package/src/lib/shared/consts/common/standalone-import.const.ts +0 -51
  209. package/src/lib/shared/consts/controls/control.const.ts +0 -11
  210. package/src/lib/shared/consts/fields/date-field.const.ts +0 -12
  211. package/src/lib/shared/consts/fields/field.const.ts +0 -23
  212. package/src/lib/shared/consts/fields/input-field.const.ts +0 -4
  213. package/src/lib/shared/consts/fields/input-formatted-field.const.ts +0 -35
  214. package/src/lib/shared/consts/fields/radio-field.const.ts +0 -31
  215. package/src/lib/shared/consts/fields/select-field.const.ts +0 -7
  216. package/src/lib/shared/consts/fields/upload-field.const.ts +0 -1
  217. package/src/lib/shared/consts/validators/index.ts +0 -0
  218. package/src/lib/shared/consts/validators/pattern.const.ts +0 -117
  219. package/src/lib/shared/enums/common/component-ui.enum.ts +0 -8
  220. package/src/lib/shared/enums/common/field-dependency.enum.ts +0 -10
  221. package/src/lib/shared/enums/common/file-size-type.enum.ts +0 -6
  222. package/src/lib/shared/enums/common/output-value-type.enum.ts +0 -22
  223. package/src/lib/shared/enums/common/view-mode.enum.ts +0 -4
  224. package/src/lib/shared/enums/controls/control.enum.ts +0 -12
  225. package/src/lib/shared/enums/fields/date-field.enum.ts +0 -4
  226. package/src/lib/shared/enums/fields/field.enum.ts +0 -21
  227. package/src/lib/shared/enums/fields/input-field.enum.ts +0 -6
  228. package/src/lib/shared/enums/fields/input-formatted-field.enum.ts +0 -6
  229. package/src/lib/shared/enums/fields/select-field.enum.ts +0 -4
  230. package/src/lib/shared/enums/fields/upload-field.enum.ts +0 -5
  231. package/src/lib/shared/enums/form/dynamic-form.enum.ts +0 -6
  232. package/src/lib/shared/enums/validators/regex.enum.ts +0 -47
  233. package/src/lib/shared/enums/validators/validators.enum.ts +0 -17
  234. package/src/lib/shared/factories/auto-numeric-options.factory.ts +0 -14
  235. package/src/lib/shared/models/common/api-config.model.ts +0 -7
  236. package/src/lib/shared/models/common/api-response.model.ts +0 -20
  237. package/src/lib/shared/models/common/common.model.ts +0 -39
  238. package/src/lib/shared/models/common/field-dependency.model.ts +0 -27
  239. package/src/lib/shared/models/common/file-config.model.ts +0 -22
  240. package/src/lib/shared/models/common/obj-field.model.ts +0 -68
  241. package/src/lib/shared/models/common/object-storage.model.ts +0 -15
  242. package/src/lib/shared/models/common/table-models.ts +0 -16
  243. package/src/lib/shared/models/fields/date/base-date-field.model.ts +0 -52
  244. package/src/lib/shared/models/fields/date/date-picker-field.model.ts +0 -43
  245. package/src/lib/shared/models/fields/date/date-range-field.model.ts +0 -52
  246. package/src/lib/shared/models/fields/field-grid.model.ts +0 -10
  247. package/src/lib/shared/models/fields/field-group.model.ts +0 -50
  248. package/src/lib/shared/models/fields/field-user-config.model.ts +0 -8
  249. package/src/lib/shared/models/fields/field.model.ts +0 -184
  250. package/src/lib/shared/models/fields/input/input-field.model.ts +0 -111
  251. package/src/lib/shared/models/fields/input/input-formatted-field.model.ts +0 -38
  252. package/src/lib/shared/models/fields/input/input-password-field.model.ts +0 -38
  253. package/src/lib/shared/models/fields/input/input-text-field.model.ts +0 -26
  254. package/src/lib/shared/models/fields/radio/index.ts +0 -0
  255. package/src/lib/shared/models/fields/radio/radio-base-field.model.ts +0 -84
  256. package/src/lib/shared/models/fields/select/index.ts +0 -0
  257. package/src/lib/shared/models/fields/select/multi-select-field.model.ts +0 -46
  258. package/src/lib/shared/models/fields/select/select-base-field.model.ts +0 -125
  259. package/src/lib/shared/models/fields/select/single-select-field.model.ts +0 -43
  260. package/src/lib/shared/models/fields/select/tree-select-field.model.ts +0 -44
  261. package/src/lib/shared/models/fields/textarea/index.ts +0 -0
  262. package/src/lib/shared/models/fields/textarea/textarea-field.model.ts +0 -97
  263. package/src/lib/shared/models/fields/upload/avatar-upload-field.model.ts +0 -33
  264. package/src/lib/shared/models/fields/upload/base-upload-field.model.ts +0 -105
  265. package/src/lib/shared/models/fields/upload/multi-file-upload-field.model.ts +0 -34
  266. package/src/lib/shared/models/fields/upload/multi-image-upload-field.model.ts +0 -42
  267. package/src/lib/shared/models/fields/upload/single-file-upload-field.model.ts +0 -33
  268. package/src/lib/shared/models/validations/index.ts +0 -1
  269. package/src/lib/shared/models/validations/validations.model.ts +0 -14
  270. package/src/lib/shared/services/dynamic-form.service.spec.ts +0 -16
  271. package/src/lib/shared/services/dynamic-form.service.ts +0 -251
  272. package/src/lib/shared/services/field.service.spec.ts +0 -16
  273. package/src/lib/shared/services/field.service.ts +0 -152
  274. package/src/lib/shared/services/file.service.spec.ts +0 -16
  275. package/src/lib/shared/services/file.service.ts +0 -53
  276. package/src/lib/shared/services/form-config.service.ts +0 -53
  277. package/src/lib/shared/services/form-data.service.spec.ts +0 -16
  278. package/src/lib/shared/services/form-data.service.ts +0 -114
  279. package/src/lib/shared/services/form-utils.ts +0 -52
  280. package/src/lib/shared/services/suffix.service.spec.ts +0 -16
  281. package/src/lib/shared/services/suffix.service.ts +0 -16
  282. package/src/lib/shared/services/validation.service.spec.ts +0 -16
  283. package/src/lib/shared/services/validation.service.ts +0 -38
  284. package/src/lib/shared/utils/common/common.utils.ts +0 -52
  285. package/src/lib/shared/utils/date/date.utils.ts +0 -129
  286. package/src/lib/shared/utils/dynamic-field/dynamic-field.ts +0 -0
  287. package/src/lib/shared/utils/dynamic-field/index.ts +0 -0
  288. package/src/lib/shared/utils/dynamic-form/dynamic-form.ts +0 -114
  289. package/src/lib/shared/utils/dynamic-form/index.ts +0 -0
  290. package/src/lib/shared/utils/fields/fields.ts +0 -78
  291. package/src/lib/shared/utils/file/file.utils.ts +0 -37
  292. package/src/lib/shared/utils/validators/custom-validators.ts +0 -158
  293. package/src/lib/shared/utils/validators/default-error-message.ts +0 -42
  294. package/src/lib/shared/utils/validators/pattern.ts +0 -26
  295. package/tsconfig.lib.json +0 -15
  296. package/tsconfig.lib.prod.json +0 -11
  297. package/tsconfig.spec.json +0 -15
  298. /package/{src/lib/shared/styles → styles}/_common-form.scss +0 -0
@@ -1,67 +0,0 @@
1
- import { Component, inject, input } from "@angular/core";
2
- import { BaseField } from "../../models/fields/field.model";
3
- import {
4
- AbstractControl,
5
- FormGroup,
6
- FormsModule,
7
- ReactiveFormsModule,
8
- } from "@angular/forms";
9
- import { FormMode } from "../../models/form";
10
- import { FORM_MODULES } from "../../consts/common";
11
- import { FIELD_COMPONENTS } from "../component";
12
- import { NzFormModule } from "ng-zorro-antd/form";
13
- import { FieldTypeEnum } from "../../enums/fields";
14
- import { FormModeEnum } from "../../enums/form";
15
- import { ValidationService } from "../../services/validation.service";
16
- import { NzGridModule } from "ng-zorro-antd/grid";
17
- import { FieldUserConfigComponent } from "../field-user-config/field-user-config.component";
18
- import { CommonModule } from "@angular/common";
19
- import { NzDropDownModule } from "ng-zorro-antd/dropdown";
20
- import { NzIconModule } from "ng-zorro-antd/icon";
21
- import { NzSwitchModule } from "ng-zorro-antd/switch";
22
- import { NzFlexModule } from "ng-zorro-antd/flex";
23
-
24
- const modules = [CommonModule, FormsModule, ReactiveFormsModule];
25
- const zorroModules = [
26
- NzFormModule,
27
- NzGridModule,
28
- NzDropDownModule,
29
- NzIconModule,
30
- NzSwitchModule,
31
- NzFlexModule,
32
- ];
33
- const components = [...FIELD_COMPONENTS, FieldUserConfigComponent];
34
-
35
- @Component({
36
- selector: "app-dynamic-field",
37
- standalone: true,
38
- imports: [...modules, ...zorroModules, ...components],
39
- templateUrl: "./dynamic-field.component.html",
40
- styleUrls: ["./dynamic-field.component.scss"],
41
- })
42
- export class DynamicFieldComponent {
43
- readonly field = input.required<BaseField<any>>();
44
- readonly fields = input.required<BaseField<any>[]>();
45
- readonly mode = input.required<FormMode>();
46
- readonly control = input.required<AbstractControl>();
47
- readonly formGroup = input.required<FormGroup>();
48
- readonly formId = input.required<string>();
49
-
50
- fieldTypeEnum = FieldTypeEnum;
51
- formModeEnum = FormModeEnum;
52
-
53
- private validationService = inject(ValidationService);
54
-
55
- /**
56
- * Lấy thông báo lỗi đầu tiên của trường đang thao tác dựa trên control và field.
57
- */
58
- protected getErrorMessage(): string {
59
- return (
60
- this.validationService.getFirstError(
61
- this.control(),
62
- this.field(),
63
- this.fields(),
64
- ) ?? ""
65
- );
66
- }
67
- }
@@ -1,38 +0,0 @@
1
- <!-- Cấu hình (Dropdown & Menu) chỉ hiện khi có bất kỳ config nào -->
2
- @if (field().userConfigs) {
3
- <!-- Trigger Nút Cấu hình -->
4
- <a
5
- nz-dropdown
6
- [nzDropdownMenu]="configMenu"
7
- nzTrigger="click"
8
- [nzClickHide]="false"
9
- [title]="'Cấu hình'"
10
- nzPlacement="bottomRight"
11
- >
12
- <span
13
- nz-icon
14
- nzType="setting"
15
- nzTheme="outline"
16
- class="config-trigger-icon"
17
- ></span>
18
- </a>
19
-
20
- <!-- Menu Cấu hình -->
21
- <nz-dropdown-menu #configMenu="nzDropdownMenu">
22
- <ul nz-menu>
23
- @if (field().userConfigs?.allowOverrideRequired) {
24
- <li nz-menu-item nzDisableItemHover class="config-menu-item">
25
- <div class="config-item-content">
26
- <span class="config-item-label">Bắt buộc nhập</span>
27
- <nz-switch
28
- nzSize="small"
29
- [ngModel]="field().required"
30
- [ngModelOptions]="{ standalone: true }"
31
- (ngModelChange)="onToggleUserRequired($event)"
32
- ></nz-switch>
33
- </div>
34
- </li>
35
- }
36
- </ul>
37
- </nz-dropdown-menu>
38
- }
@@ -1,29 +0,0 @@
1
- .config-trigger-icon {
2
- color: #bfbfbf;
3
- cursor: pointer;
4
- font-size: 16px;
5
- transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
6
- display: inline-block;
7
-
8
- &:hover {
9
- color: #1890ff; /* Màu xanh Ant Design */
10
- transform: rotate(90deg) scale(1.1);
11
- }
12
- }
13
-
14
- .config-menu-item {
15
- padding: 8px 12px;
16
- cursor: default;
17
- }
18
-
19
- .config-item-content {
20
- display: flex;
21
- justify-content: space-between;
22
- align-items: center;
23
- gap: 16px;
24
- min-width: 130px;
25
- }
26
-
27
- .config-item-label {
28
- font-size: 13px;
29
- }
@@ -1,33 +0,0 @@
1
- import { Component, input } from "@angular/core";
2
- import { BaseField } from "../../models/fields/field.model";
3
- import { AbstractControl, Validators } from "@angular/forms";
4
- import { NzDropDownModule } from "ng-zorro-antd/dropdown";
5
- import { NzIconModule } from "ng-zorro-antd/icon";
6
- import { NzSwitchModule } from "ng-zorro-antd/switch";
7
- import { FormsModule } from "@angular/forms";
8
-
9
- @Component({
10
- selector: "app-field-user-config",
11
- standalone: true,
12
- imports: [NzDropDownModule, NzIconModule, NzSwitchModule, FormsModule],
13
- templateUrl: "./field-user-config.component.html",
14
- styleUrls: ["./field-user-config.component.scss"],
15
- })
16
- export class FieldUserConfigComponent {
17
- readonly field = input.required<BaseField<any>>();
18
- readonly control = input.required<AbstractControl>();
19
-
20
- onToggleUserRequired(isRequired: boolean): void {
21
- this.field().required = isRequired;
22
- const ctrl = this.control();
23
-
24
- if (isRequired) {
25
- ctrl.addValidators(Validators.required);
26
- } else {
27
- ctrl.removeValidators(Validators.required);
28
- }
29
-
30
- // Cập nhật lại trạng thái validation ngay lập tức
31
- ctrl.updateValueAndValidity();
32
- }
33
- }
@@ -1,42 +0,0 @@
1
- <button
2
- nz-button
3
- nzType="primary"
4
- nzSize="small"
5
- [title]="suffixConfig.description"
6
- class="h-100 suffix-btn font-size-12"
7
- [ngClass]="suffixConfig.class ?? ''"
8
- (click)="handleSuffix()"
9
- >
10
- @if (suffixConfig.icon) {
11
- <span class="icon">
12
- <!-- Nếu là icon Zorro -->
13
- @if (suffixConfig.icon.type === 'zorro') {
14
- <span
15
- nz-icon
16
- [nzType]="suffixConfig.icon.value"
17
- nzTheme="outline"
18
- [ngClass]="suffixConfig.icon.class ?? ''"
19
- >
20
- </span>
21
- }
22
-
23
- <!-- Nếu là Boxicons -->
24
- @if (suffixConfig.icon.type === 'mdi') {
25
- <span [class]="'mdi ' + suffixConfig.icon.value" [ngClass]="suffixConfig.icon.class ?? ''">
26
- </span>
27
- }
28
- </span>
29
- }
30
-
31
- @if (suffixConfig.label) {
32
- <span class="label">
33
- {{ suffixConfig.label }}
34
- </span>
35
- }
36
-
37
- @if (!suffixConfig.icon && !suffixConfig.label) {
38
- <span class="label">
39
- {{ defaultText }}
40
- </span>
41
- }
42
- </button>
@@ -1,3 +0,0 @@
1
- .suffix-btn {
2
- margin-left: 0.5rem;
3
- }
@@ -1,22 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { SuffixComponent } from './suffix.component';
4
-
5
- describe('SuffixComponent', () => {
6
- let component: SuffixComponent;
7
- let fixture: ComponentFixture<SuffixComponent>;
8
-
9
- beforeEach(async () => {
10
- await TestBed.configureTestingModule({
11
- imports: [SuffixComponent],
12
- }).compileComponents();
13
-
14
- fixture = TestBed.createComponent(SuffixComponent);
15
- component = fixture.componentInstance;
16
- fixture.detectChanges();
17
- });
18
-
19
- it('should create', () => {
20
- expect(component).toBeTruthy();
21
- });
22
- });
@@ -1,32 +0,0 @@
1
- import { Component, inject, Input } from '@angular/core';
2
- import { Suffix } from '../../../../models/common/common.model';
3
- import { CORE_MODULES } from '../../../../consts/common';
4
- import { SuffixService } from '../../../../services/suffix.service';
5
- import { NzButtonModule } from 'ng-zorro-antd/button';
6
- import { NzIconModule } from 'ng-zorro-antd/icon';
7
-
8
- const ZORRO_MODULES = [NzButtonModule, NzIconModule];
9
-
10
- @Component({
11
- selector: 'app-suffix',
12
- standalone: true,
13
- imports: [...CORE_MODULES, ...ZORRO_MODULES],
14
- templateUrl: './suffix.component.html',
15
- styleUrl: './suffix.component.scss',
16
- })
17
- export class SuffixComponent {
18
- @Input() suffixConfig!: Suffix;
19
- @Input() formId = '';
20
-
21
- protected defaultText = '';
22
-
23
- private suffixService = inject(SuffixService);
24
-
25
- ngOnInit(): void {
26
- this.defaultText = `Suffix ${this.suffixConfig.key}`;
27
- }
28
-
29
- handleSuffix(): void {
30
- this.suffixService.onSuffixClick(this.suffixConfig.key, this.formId);
31
- }
32
- }
@@ -1,20 +0,0 @@
1
- @if (modeSignal() === formModeEnum.View) {
2
- <input
3
- nz-input
4
- [value]="viewDisplayValue()"
5
- [disabled]="true"
6
- class="modeView"
7
- />
8
- } @else {
9
- <nz-date-picker
10
- [id]="fieldKey()"
11
- [class]="'w-100'"
12
- [nzDisabled]="disabledSignal()"
13
- [nzPlaceHolder]="displayPlaceholder()"
14
- [nzFormat]="format()"
15
- [nzDisabledDate]="disabledDate()"
16
- [ngModel]="valueSignal()"
17
- (ngModelChange)="handleChangeDate($event)"
18
- >
19
- </nz-date-picker>
20
- }
@@ -1,5 +0,0 @@
1
- :host ::ng-deep {
2
- .ant-input[disabled] {
3
- background-color: #fff;
4
- }
5
- }
@@ -1,21 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { DatePickerComponent } from './date-picker.component';
4
-
5
- describe('DatePickerComponent', () => {
6
- let component: DatePickerComponent;
7
- let fixture: ComponentFixture<DatePickerComponent>;
8
-
9
- beforeEach(() => {
10
- TestBed.configureTestingModule({
11
- imports: [DatePickerComponent],
12
- });
13
- fixture = TestBed.createComponent(DatePickerComponent);
14
- component = fixture.componentInstance;
15
- fixture.detectChanges();
16
- });
17
-
18
- it('should create', () => {
19
- expect(component).toBeTruthy();
20
- });
21
- });
@@ -1,148 +0,0 @@
1
- import {
2
- Component,
3
- computed,
4
- effect,
5
- forwardRef,
6
- untracked,
7
- } from "@angular/core";
8
- import { FORM_MODULES } from "../../../../consts/common";
9
- import { NG_VALUE_ACCESSOR } from "@angular/forms";
10
- import { BaseValueAccessor } from "../../../../base/base-value-accessor";
11
- import { DatePickerField } from "../../../../models/fields/date/date-picker-field.model";
12
-
13
- import { differenceInCalendarDays } from "date-fns";
14
- import { DatePickerOutputValueTypeEnum } from "../../../../enums/common";
15
- import {
16
- formatDateToDDMMYYYY,
17
- formatDateToYYYYMMDD,
18
- } from "../../../../utils/date";
19
- import { DatePickerOutputValueType } from "../../../../models/common/output-value-type.model";
20
- import { NO_INFO_TEXT } from "../../../../consts/common/common.const";
21
- import { FieldTypeEnum } from "../../../../enums/fields";
22
- import { ControlTypeEnum } from "../../../../enums/controls";
23
- import { NzDatePickerModule } from "ng-zorro-antd/date-picker";
24
- import { NzInputModule } from "ng-zorro-antd/input";
25
- import { FormUtils } from "../../../../services/form-utils";
26
- import { createDatePickerPlaceholder } from "../../../../utils/dynamic-form/dynamic-form";
27
-
28
- const ZORRO_MODULES = [NzDatePickerModule, NzInputModule];
29
-
30
- @Component({
31
- selector: "app-date-picker",
32
- standalone: true,
33
- imports: [...FORM_MODULES, ...ZORRO_MODULES],
34
- templateUrl: "./date-picker.component.html",
35
- styleUrls: ["./date-picker.component.scss"],
36
- providers: [
37
- {
38
- provide: NG_VALUE_ACCESSOR,
39
- useExisting: forwardRef(() => DatePickerComponent),
40
- multi: true,
41
- },
42
- ],
43
- })
44
- export class DatePickerComponent extends BaseValueAccessor<string | Date> {
45
- readonly field = computed(() => {
46
- const base = this.fieldInput();
47
- if (
48
- !(base instanceof DatePickerField) ||
49
- (base.type !== FieldTypeEnum.DatePicker &&
50
- base.controlType !== ControlTypeEnum.Date)
51
- ) {
52
- throw new Error("Expected DatePickerField");
53
- }
54
- return base;
55
- });
56
-
57
- // Định dạng ngày
58
- format = computed(() => {
59
- return this.field().format ?? "dd-MM-yyyy";
60
- });
61
-
62
- // Kiểm tra có cho phép chọn ngày quá khứ hay ngày tương lai hay không?
63
- disabledDate = computed(() => {
64
- const field = this.field();
65
-
66
- return (current: Date): boolean => {
67
- if (field.disabledDateFn) {
68
- return field.disabledDateFn(current);
69
- }
70
- const today = new Date();
71
- const diff = differenceInCalendarDays(current, today);
72
-
73
- // if (field.onlyToday) return diff !== 0;
74
- if (!field.allowPastDates && diff < 0) return true;
75
- if (!field.allowFutureDates && diff > 0) return true;
76
-
77
- return false;
78
- };
79
- });
80
-
81
- readonly viewDisplayValue = computed(() => {
82
- // 1. Nếu không phải View thì không cần quan tâm text này
83
- if (!this.isView()) return "";
84
-
85
- // 2. Lấy giá trị từ valueSignal
86
- const val = this.valueSignal() as Date;
87
- return val ? FormUtils.convertViewDate(val, this.format()) : NO_INFO_TEXT;
88
- });
89
-
90
- constructor() {
91
- super();
92
- }
93
-
94
- // Xử lý tạo placeholder text tự động nếu chưa truyền placeholder vào config của field
95
- override resolvePlaceholderText(): string {
96
- return createDatePickerPlaceholder(this.field());
97
- }
98
-
99
- // Sự kiện khi người dùng chọn ngày
100
- handleChangeDate(date: Date): void {
101
- this.propagateValue(date);
102
- }
103
-
104
- // Chạy khi value form được gán bởi các hàm reset, patchValue, setValue
105
- protected override writeValueToView(value: Date): void {
106
- if (!this.isAddOrEdit()) return;
107
-
108
- const { outputAs } = this.field();
109
-
110
- this.fieldService.updateDependValuesMap(
111
- this.fieldKey(),
112
- value ? formatDateToYYYYMMDD(value) : "",
113
- );
114
-
115
- // Gán data vào đầu ra của form
116
- const newOutputValue = value && this.getValueByOutputAs(value, outputAs);
117
- this.patchFormData(this.fieldKey(), newOutputValue);
118
- }
119
-
120
- // Xử lý phụ thuộc khi change value
121
- protected override handleValueChange(value: Date): void {
122
- const { outputAs, isParent } = this.field();
123
-
124
- if (isParent) {
125
- this.fieldService.updateDependValuesMap(
126
- this.fieldKey(),
127
- value ? formatDateToYYYYMMDD(value) : "",
128
- );
129
- }
130
-
131
- // Gán data vào đầu ra của form
132
- const newOutputValue = value && this.getValueByOutputAs(value, outputAs);
133
- this.patchFormData(this.fieldKey(), newOutputValue);
134
- }
135
-
136
- // Biến đổi giá trị đầu ra theo outputAs
137
- private getValueByOutputAs(
138
- date: Date,
139
- outputAs: DatePickerOutputValueType,
140
- ): string | Date {
141
- let value: string | Date = date;
142
-
143
- if (outputAs === DatePickerOutputValueTypeEnum.String) {
144
- value = formatDateToYYYYMMDD(value);
145
- }
146
- return value;
147
- }
148
- }
@@ -1,33 +0,0 @@
1
- @if (modeSignal() === formModeEnum.View) {
2
- @if (valueSignal()!.length > 0) {
3
- <nz-range-picker
4
- [class]="'w-100'"
5
- [nzFormat]="format()"
6
- [nzDisabled]="true"
7
- [ngModel]="valueSignal()"
8
- class="modeView"
9
- [nzSuffixIcon]="suffixIcon"
10
- ></nz-range-picker>
11
- <ng-template #suffixIcon>
12
- <!-- Để trống, hoặc custom icon khác -->
13
- </ng-template>
14
- } @else {
15
- <input
16
- nz-input
17
- [value]="displayValueNoInfo"
18
- [disabled]="true"
19
- class="modeView"
20
- />
21
- }
22
- } @else {
23
- <nz-range-picker
24
- [id]="fieldKey()"
25
- class="w-100"
26
- [nzDisabled]="disabledSignal()"
27
- [nzFormat]="format()"
28
- [nzDisabledDate]="disabledDate()"
29
- [nzPlaceHolder]="placeholders()"
30
- [ngModel]="valueSignal()"
31
- (ngModelChange)="handleChangeDateRange($event)"
32
- ></nz-range-picker>
33
- }
@@ -1,22 +0,0 @@
1
- // @use "../../../../styles/common-form";
2
-
3
- :host ::ng-deep {
4
- .modeView {
5
- &.ant-picker.ant-picker-disabled {
6
- background-color: inherit !important;
7
- cursor: default;
8
- pointer-events: none;
9
- }
10
-
11
- .ant-picker-input > input[disabled] {
12
- color: #575757 !important;
13
- }
14
- }
15
- }
16
-
17
- .modeView {
18
- pointer-events: none;
19
- // background-color: white;
20
- // font-size: 12px;
21
- color: #575757 !important;
22
- }
@@ -1,21 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { DateRangeComponent } from './date-range.component';
4
-
5
- describe('DateRangeComponent', () => {
6
- let component: DateRangeComponent;
7
- let fixture: ComponentFixture<DateRangeComponent>;
8
-
9
- beforeEach(() => {
10
- TestBed.configureTestingModule({
11
- imports: [DateRangeComponent],
12
- });
13
- fixture = TestBed.createComponent(DateRangeComponent);
14
- component = fixture.componentInstance;
15
- fixture.detectChanges();
16
- });
17
-
18
- it('should create', () => {
19
- expect(component).toBeTruthy();
20
- });
21
- });
@@ -1,133 +0,0 @@
1
- import {
2
- Component,
3
- computed,
4
- effect,
5
- forwardRef,
6
- untracked,
7
- } from "@angular/core";
8
- import { FORM_MODULES } from "../../../../consts/common";
9
- import { NG_VALUE_ACCESSOR } from "@angular/forms";
10
- import { BaseValueAccessor } from "../../../../base/base-value-accessor";
11
- import { DateRangeField } from "../../../../models/fields/date/date-range-field.model";
12
- import { DateRangeOutputValueType } from "../../../../models/common/output-value-type.model";
13
- import { DateRangeOutputValueTypeEnum } from "../../../../enums/common";
14
- import { formatDateToYYYYMMDD, normalizeToDate } from "../../../../utils/date";
15
- import { NO_INFO_TEXT } from "../../../../consts/common/common.const";
16
- import { differenceInCalendarDays } from "date-fns";
17
- import { FieldTypeEnum } from "../../../../enums/fields";
18
- import { ControlTypeEnum } from "../../../../enums/controls";
19
- import { NzDatePickerModule } from "ng-zorro-antd/date-picker";
20
- import { NzInputModule } from "ng-zorro-antd/input";
21
-
22
- const ZORRO_MODULES = [NzDatePickerModule, NzInputModule];
23
-
24
- @Component({
25
- selector: "app-date-range",
26
- standalone: true,
27
- imports: [...FORM_MODULES, ...ZORRO_MODULES],
28
- templateUrl: "./date-range.component.html",
29
- styleUrls: ["./date-range.component.scss"],
30
- providers: [
31
- {
32
- provide: NG_VALUE_ACCESSOR,
33
- useExisting: forwardRef(() => DateRangeComponent),
34
- multi: true,
35
- },
36
- ],
37
- })
38
- export class DateRangeComponent extends BaseValueAccessor<
39
- string | string[] | Date[]
40
- > {
41
- readonly field = computed(() => {
42
- const base = this.fieldInput();
43
- if (
44
- !(base instanceof DateRangeField) ||
45
- (base.type !== FieldTypeEnum.DateRange &&
46
- base.controlType !== ControlTypeEnum.Date)
47
- ) {
48
- throw new Error("Expected DatePickerField");
49
- }
50
- return base;
51
- });
52
-
53
- // Định dạng ngày
54
- format = computed(() => {
55
- return this.field().format ?? "dd-MM-yyyy";
56
- });
57
-
58
- placeholders = computed(() => {
59
- return this.field().placeholders ?? ["Ngày bắt đầu", "Ngày kết thúc"];
60
- });
61
-
62
- // Nếu mảng date không lớn hơn 2
63
- displayValueNoInfo = NO_INFO_TEXT;
64
-
65
- // Kiểm tra có cho phép chọn ngày quá khứ hay ngày tương lai hay không?
66
- disabledDate = computed(() => {
67
- const field = this.field();
68
- return (current: Date): boolean => {
69
- const today = new Date();
70
- const diff = differenceInCalendarDays(current, today);
71
-
72
- // if (field.onlyToday) return diff !== 0;
73
- if (!field.allowPastDates && diff < 0) return true;
74
- if (!field.allowFutureDates && diff > 0) return true;
75
-
76
- return false;
77
- };
78
- });
79
-
80
- constructor() {
81
- super();
82
- }
83
-
84
- handleChangeDateRange(dateRange: Date[]): void {
85
- this.propagateValue(dateRange);
86
- }
87
-
88
- // Chạy khi value form được gán bởi các hàm reset, patchValue, setValue.
89
- protected override writeValueToView(value: Date[]): void {
90
- if (!this.isAddOrEdit()) return;
91
-
92
- const { outputAs } = untracked(() => this.field());
93
-
94
- // Gán data vào đầu ra của form.
95
- this.patchFormData(
96
- this.fieldKey(),
97
- value.length > 0 ? this.getValueByOutputAs(value, outputAs) : null,
98
- );
99
- }
100
-
101
- // Xử lý phụ thuộc khi change value
102
- protected override handleValueChange(value: Date[]): void {
103
- const { outputAs } = untracked(() => this.field());
104
-
105
- // Gán data vào đầu ra của form.
106
- this.patchFormData(
107
- this.fieldKey(),
108
- value.length > 0 ? this.getValueByOutputAs(value, outputAs) : null,
109
- );
110
- }
111
-
112
- // Xử lý output value đầu ra theo outputAs mà người dùng mong muốn.
113
- private getValueByOutputAs(
114
- dateRange: Date[],
115
- outputAs: DateRangeOutputValueType,
116
- ): string | string[] | Date[] {
117
- let value: string | string[] | Date[] = dateRange;
118
-
119
- if (dateRange.length > 0) {
120
- if (outputAs === DateRangeOutputValueTypeEnum.String) {
121
- value = `${formatDateToYYYYMMDD(dateRange[0])},${formatDateToYYYYMMDD(dateRange[1])}`;
122
- }
123
-
124
- if (outputAs === DateRangeOutputValueTypeEnum.StringArray) {
125
- value = [
126
- formatDateToYYYYMMDD(dateRange[0]),
127
- formatDateToYYYYMMDD(dateRange[1]),
128
- ];
129
- }
130
- }
131
- return value;
132
- }
133
- }