@ldquocc/dynamic-form 0.0.9 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/fesm2022/ldquocc-dynamic-form.mjs +4928 -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 +22 -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,16 +0,0 @@
1
- import { TestBed } from '@angular/core/testing';
2
-
3
- import { FormDataService } from './form-data.service';
4
-
5
- describe('FormDataService', () => {
6
- let service: FormDataService;
7
-
8
- beforeEach(() => {
9
- TestBed.configureTestingModule({});
10
- service = TestBed.inject(FormDataService);
11
- });
12
-
13
- it('should be created', () => {
14
- expect(service).toBeTruthy();
15
- });
16
- });
@@ -1,114 +0,0 @@
1
- import { Injectable, signal, untracked, WritableSignal } from '@angular/core';
2
-
3
-
4
- @Injectable({
5
- providedIn: 'root',
6
- })
7
- export class FormDataService {
8
- // Lưu một hoặc nhiều form data.
9
- private formDataMap = new Map<string, WritableSignal<Record<string, unknown>>>();
10
-
11
- /**
12
- * Kiểm tra xem đã tồn tại form data với form id truyền vào.
13
- * @param formId Id của form.
14
- * @returns true nếu có và ngược lại
15
- */
16
- has(formId: string): boolean {
17
- if (!this.formDataMap.has(formId)) return false;
18
- return true;
19
- }
20
-
21
- /**
22
- * Cập nhật giá trị của một hoặc nhiều field vào form data theo form id.
23
- * @param formId Id của form.
24
- * @param data Đối tượng các field theo dạng key:value.
25
- */
26
- patch(formId: string, data: Record<string, unknown>) {
27
- // Lấy form data từ formDataMap.
28
- let formData = this.formDataMap.get(formId);
29
-
30
- // Nếu chưa có form data trong formDataMap thì thêm mới. Ngược lại cập nhật field data vào formData.
31
- if (!formData) {
32
- formData = signal(data);
33
- } else {
34
- formData.update(curr => ({ ...curr, ...data }));
35
- }
36
-
37
- // Tiến hành cập nhật vào formDataMap.
38
- this.formDataMap.set(formId, formData);
39
- }
40
-
41
- /**
42
- * Gán form data theo form id.
43
- * @param formId Id của form.
44
- * @param data Đối tượng các field theo dạng key:value.
45
- */
46
- set(formId: string, data: Record<string, unknown>) {
47
- this.formDataMap.set(formId, signal(data));
48
- }
49
-
50
- /**
51
- * Lấy giá trị của form data theo form id có track signal.
52
- * @param formId Id của form.
53
- * @returns Record<string, unknown> nếu có giá trị. Ngược lại undefined.
54
- */
55
- get(formId: string): Record<string, unknown> | undefined {
56
- const formData = this.formDataMap.get(formId);
57
-
58
- if (!formData) return undefined;
59
-
60
- return formData();
61
- }
62
-
63
- /**
64
- * Lấy giá trị của form data theo form id không track signal.
65
- * @param formId Id của form.
66
- * @returns Record<string, unknown> nếu có giá trị. Ngược lại undefined.
67
- */
68
- getSnapshot(formId: string): Record<string, unknown> | undefined {
69
- const formData = this.formDataMap.get(formId);
70
-
71
- if (!formData) return undefined;
72
-
73
- return untracked(() => formData());
74
- }
75
-
76
- /**
77
- * Clear giá trị form data theo form id. Clear chứ không xóa khỏi formDataMap hoàn toàn.
78
- * @param formId Id của form.
79
- */
80
- clear(formId: string) {
81
- let formData = this.formDataMap.get(formId);
82
-
83
- if (formData) {
84
- formData.set({});
85
- this.formDataMap.set(formId, formData);
86
- }
87
- }
88
-
89
- /**
90
- * Delete form data theo form id khỏi formDataMap.
91
- * @param formId Id của form.
92
- */
93
- delete(formId: string) {
94
- let formData = this.formDataMap.get(formId);
95
- if (formData) this.formDataMap.delete(formId);
96
- }
97
-
98
- /**
99
- *
100
- * @param formId Id của form.
101
- * @param key mã trường trong object form data.
102
- * @returns unknown.
103
- */
104
- getFieldValue(formId: string, key: string): unknown {
105
- let formData = this.formDataMap.get(formId);
106
- let fieldValue: unknown = undefined;
107
-
108
- if (formData) {
109
- fieldValue = formData()?.[key];
110
- }
111
-
112
- return fieldValue;
113
- }
114
- }
@@ -1,52 +0,0 @@
1
- import { format } from 'date-fns';
2
-
3
- export class FormUtils {
4
- public static makeFileNameEncode(str: string): string {
5
- str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');
6
- str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e');
7
- str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');
8
- str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');
9
- str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');
10
- str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');
11
- str = str.replace(/đ/g, 'd');
12
- str = str.replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, 'A');
13
- str = str.replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, 'E');
14
- str = str.replace(/Ì|Í|Ị|Ỉ|Ĩ/g, 'I');
15
- str = str.replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, 'O');
16
- str = str.replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, 'U');
17
- str = str.replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, 'Y');
18
- str = str.replace(/Đ/g, 'D');
19
- str = str.replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, '');
20
- str = str.replace(/\u02C6|\u0306|\u031B/g, '');
21
- return str;
22
- }
23
-
24
- public static randomFileName(name: string): string {
25
- const ns = name.split('.');
26
- const extension = ns.pop();
27
- const encodedName = FormUtils.makeFileNameEncode(ns.join('.'));
28
- return `${encodedName}_${Math.floor(Math.random() * 90000) + 10000}.${extension}`.toLocaleLowerCase();
29
- }
30
-
31
- public static convertViewDate(date: unknown, ft: string = 'dd/MM/yyyy'): string {
32
- let d: Date | null = null;
33
- if (date instanceof Date) {
34
- d = date;
35
- } else if (typeof date === 'string') {
36
- if (/^\d{4}-\d{2}-\d{2}/.test(date)) {
37
- d = new Date(date);
38
- } else if (/^\d{2}\/\d{2}\/\d{4}\s\d{2}:\d{2}:\d{2}$/.test(date)) {
39
- const [datePart, timePart] = date.split(' ');
40
- const [month, day, year] = datePart.split('/').map(Number);
41
- const [hour, min, sec] = timePart.split(':').map(Number);
42
- d = new Date(year, month - 1, day, hour, min, sec);
43
- } else {
44
- const parsed = new Date(date);
45
- if (!isNaN(parsed.getTime())) {
46
- d = parsed;
47
- }
48
- }
49
- }
50
- return d && !isNaN(d.getTime()) ? format(d, ft) : '';
51
- }
52
- }
@@ -1,16 +0,0 @@
1
- import { TestBed } from '@angular/core/testing';
2
-
3
- import { SuffixService } from './suffix.service';
4
-
5
- describe('SuffixService', () => {
6
- let service: SuffixService;
7
-
8
- beforeEach(() => {
9
- TestBed.configureTestingModule({});
10
- service = TestBed.inject(SuffixService);
11
- });
12
-
13
- it('should be created', () => {
14
- expect(service).toBeTruthy();
15
- });
16
- });
@@ -1,16 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
-
4
- @Injectable({
5
- providedIn: 'root',
6
- })
7
- export class SuffixService {
8
- private suffixClick$ = new Subject<{ key: string; formId: string }>();
9
-
10
- suffixClick = this.suffixClick$.asObservable(); // expose ra ngoài.
11
-
12
- onSuffixClick(key: string, formId: string) {
13
- this.suffixClick$.next({ key, formId });
14
- }
15
- constructor() {}
16
- }
@@ -1,16 +0,0 @@
1
- import { TestBed } from '@angular/core/testing';
2
-
3
- import { ValidationService } from './validation.service';
4
-
5
- describe('ValidationService', () => {
6
- let service: ValidationService;
7
-
8
- beforeEach(() => {
9
- TestBed.configureTestingModule({});
10
- service = TestBed.inject(ValidationService);
11
- });
12
-
13
- it('should be created', () => {
14
- expect(service).toBeTruthy();
15
- });
16
- });
@@ -1,38 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { AbstractControl } from '@angular/forms';
3
- import { BaseField } from '../models/fields/field.model';
4
-
5
- @Injectable({
6
- providedIn: 'root',
7
- })
8
- export class ValidationService {
9
- constructor() {}
10
-
11
- getFirstError(control: AbstractControl, field: BaseField<any>, fields: BaseField<any>[]): string {
12
- // if (field.key === 'reminder') console.log("control?.errors", field.key, control?.errors);
13
- if (!control?.errors || !field) return '';
14
-
15
- const errorKey = Object.keys(control.errors)?.[0] || '';
16
- const errorValue = control.errors?.[errorKey];
17
-
18
- return this.getErrorMessage(errorKey, errorValue, field, fields);
19
- }
20
-
21
- private getErrorMessage(
22
- errorKey: string,
23
- errorValue: any,
24
- field: BaseField<any>,
25
- allFields: BaseField<any>[],
26
- ): string {
27
- let finalErrorMessage = '';
28
-
29
- const customMessage = field.errorMessages?.[errorKey];
30
- if (customMessage) return customMessage;
31
-
32
- // 2. Nếu field có hàm getErrorMessage riêng.
33
- const defaultErrorMessage = field.getErrorMessage(errorKey, errorValue, allFields);
34
- if (defaultErrorMessage) return defaultErrorMessage;
35
-
36
- return `Chưa cấu hình message lỗi cho trường ${field.key}`;
37
- }
38
- }
@@ -1,52 +0,0 @@
1
- import { BaseField } from '../../models/fields/field.model';
2
-
3
- // Kiểm tra tính hợp lệ của JSON string.
4
- export const isValidJSON = (str: string): boolean => {
5
- try {
6
- JSON.parse(str);
7
- } catch (e) {
8
- return false;
9
- }
10
- return true;
11
- };
12
-
13
- // Tạo một chuỗi uuid.
14
- export const uuidGenerator = (): string => {
15
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
16
- var r = (Math.random() * 16) | 0,
17
- v = c == 'x' ? r : (r & 0x3) | 0x8;
18
- return v.toString(16);
19
- });
20
- };
21
-
22
- export const lowerCaseFirstChar = (str: string): string => {
23
- return str.charAt(0).toLowerCase() + str.slice(1);
24
- };
25
-
26
- export const upperCaseFirstChar = (str: string): string => {
27
- return str.charAt(0).toUpperCase() + str.slice(1);
28
- };
29
-
30
- export const deepCopyArray = (array: BaseField<any>[]): BaseField<any>[] => {
31
- return array.map(item => {
32
- if (Array.isArray(item)) {
33
- return deepCopyArray(item); // Deep copy nếu phần tử là mảng lồng nhau
34
- } else if (item && typeof item === 'object') {
35
- return deepCopyObject(item); // Deep copy nếu phần tử là đối tượng
36
- }
37
- return item; // Trả về giá trị gốc nếu không phải mảng hoặc đối tượng
38
- }) as BaseField<any>[];
39
- };
40
-
41
- export const deepCopyObject = (obj: BaseField<any>): BaseField<any> => {
42
- return Object.fromEntries(
43
- Object.entries(obj).map(([key, value]) => {
44
- if (Array.isArray(value)) {
45
- return [key, deepCopyArray(value)]; // Deep copy nếu giá trị là mảng
46
- } else if (value && typeof value === 'object') {
47
- return [key, deepCopyObject(value)]; // Deep copy nếu giá trị là đối tượng
48
- }
49
- return [key, value]; // Trả về giá trị gốc
50
- }),
51
- ) as BaseField<any>;
52
- };
@@ -1,129 +0,0 @@
1
- import { FORMAT_DATE_PATTERNS } from '../../consts/fields';
2
-
3
- // Chuyển đổi đối tượng Date thành string có format DDMMYYYY.
4
- export const formatDateToDDMMYYYY = (date: Date, separator: '-' | '/' = '-'): string => {
5
- const dd = String(date.getDate()).padStart(2, '0');
6
- const mm = String(date.getMonth() + 1).padStart(2, '0');
7
- const yyyy = date.getFullYear();
8
-
9
- return `${dd}${separator}${mm}${separator}${yyyy}`;
10
- };
11
-
12
- // Chuyển đổi đối tượng Date thành string có format DDMMYYYY.
13
- export const formatDateToYYYYMMDD = (date: Date, separator: '-' | '/' = '-'): string => {
14
- const dd = String(date.getDate()).padStart(2, '0');
15
- const mm = String(date.getMonth() + 1).padStart(2, '0');
16
- const yyyy = date.getFullYear();
17
-
18
- return `${yyyy}${separator}${mm}${separator}${dd}`;
19
- };
20
-
21
- // Chuyển đổi string ở các dạng: YYYY-MM-DD, DD-MM-YYYY, MM-DD-YYYY đến Date, nếu sẵn là Date thì mặc định không đổi.
22
- export const normalizeToDate = (input: string | Date | undefined): Date | null => {
23
- if (!input) return null;
24
-
25
- if (input instanceof Date && !isNaN(input.getTime())) return input;
26
- if (typeof input !== 'string') return null;
27
-
28
- const inputTrimed = input.trim();
29
-
30
- let match: RegExpMatchArray | null;
31
- let year: number, month: number, day: number;
32
- let hour = 0,
33
- minute = 0,
34
- second = 0;
35
-
36
- if ((match = inputTrimed.match(FORMAT_DATE_PATTERNS.YYYY_MM_DD))) {
37
- year = +match[1];
38
- month = +match[3] - 1;
39
- day = +match[4];
40
- } else if ((match = inputTrimed.match(FORMAT_DATE_PATTERNS.DD_MM_YYYY))) {
41
- day = +match[1];
42
- month = +match[3] - 1;
43
- year = +match[4];
44
- } else if ((match = inputTrimed.match(FORMAT_DATE_PATTERNS.MM_DD_YYYY))) {
45
- month = +match[1] - 1;
46
- day = +match[3];
47
- year = +match[4];
48
- } else if ((match = inputTrimed.match(FORMAT_DATE_PATTERNS.MM_DD_YYYY_HMS))) {
49
- month = +match[1] - 1;
50
- day = +match[3];
51
- year = +match[4];
52
- hour = +match[5];
53
- minute = +match[6];
54
- second = +match[7];
55
- } else {
56
- console.warn('Sai định dạng chuỗi date');
57
- return null;
58
- }
59
-
60
- const date = new Date(year, month, day, hour, minute, second);
61
-
62
- if (
63
- date.getFullYear() === year &&
64
- date.getMonth() === month &&
65
- date.getDate() === day &&
66
- date.getHours() === hour &&
67
- date.getMinutes() === minute &&
68
- date.getSeconds() === second
69
- ) {
70
- return date;
71
- }
72
-
73
- console.warn('Ngày hoặc giờ không hợp lệ');
74
- return null;
75
- };
76
-
77
- export const normalizeToDate1 = (input: string | Date | undefined): Date | null => {
78
- if (input) {
79
- if (input instanceof Date && !isNaN(input.getTime())) return input;
80
- if (typeof input !== 'string') return null;
81
- const inputTrimed = String(input).trim();
82
- let match: RegExpMatchArray | null;
83
- let year: number, month: number, day: number;
84
- if ((match = inputTrimed.match(FORMAT_DATE_PATTERNS.YYYY_MM_DD))) {
85
- year = +match[1];
86
- month = +match[3] - 1;
87
- day = +match[4];
88
- } else if ((match = inputTrimed.match(FORMAT_DATE_PATTERNS.DD_MM_YYYY))) {
89
- day = +match[1];
90
- month = +match[3] - 1;
91
- year = +match[4];
92
- } else if ((match = inputTrimed.match(FORMAT_DATE_PATTERNS.MM_DD_YYYY))) {
93
- month = +match[1] - 1;
94
- day = +match[3];
95
- year = +match[4];
96
- } else {
97
- console.warn('Sai định dạng chuỗi date');
98
- return null;
99
- }
100
- const date = new Date(year, month, day); // Validate: kiểm tra lại giá trị date (28/29/30/31 hợp lệ)
101
- if (date.getFullYear() === year && date.getMonth() === month && date.getDate() === day) {
102
- return date;
103
- } else {
104
- console.warn('Ngày đưa vào không hợp lệ');
105
- return null;
106
- }
107
- }
108
- return null;
109
- };
110
-
111
- // Tạo danh sách năm chạy ngược từ hiện tại đến năm chỉ định.
112
- export const generateYearsDesc = (from: number): number[] => {
113
- const currentYear = new Date().getFullYear();
114
- const years: number[] = [];
115
- for (let year = currentYear; year >= from; year--) {
116
- years.push(year);
117
- }
118
- return years;
119
- };
120
-
121
- // Tạo danh sách năm chạy từ năm chỉ định đến năm hiện tại.
122
- export const generateYearsAsc = (from: number): number[] => {
123
- const currentYear = new Date().getFullYear();
124
- const years: number[] = [];
125
- for (let year = from; year <= currentYear; year++) {
126
- years.push(year);
127
- }
128
- return years;
129
- };
File without changes
@@ -1,114 +0,0 @@
1
- import { AbstractControl, FormGroup } from "@angular/forms";
2
- import { BaseField } from "../../models/fields/field.model";
3
- import { FormMode } from "../../models/form";
4
- import { FormModeEnum } from "../../enums/form";
5
- import { SelectBaseField } from "../../models/fields/select/select-base-field.model";
6
- import { InputPasswordField } from "../../models/fields/input";
7
- import { FieldTypeEnum } from "../../enums/fields";
8
-
9
- export const buildForm = (
10
- fields: BaseField<any>[],
11
- mode: FormMode,
12
- model?: Record<string, any>,
13
- ): FormGroup => {
14
- const groupObj: Record<string, AbstractControl<any, any>> = {};
15
- // console.log("model", model);
16
-
17
- for (const field of fields) {
18
- // Loại bỏ nếu quyết định ẩn field đi.
19
- if (field.isHidden) continue;
20
- // Nếu là dạng InputPasswordField nhưng ở mode edit và view thì không được dùng.
21
- if (
22
- field instanceof InputPasswordField &&
23
- (mode === FormModeEnum.Edit || mode === FormModeEnum.View)
24
- )
25
- continue;
26
-
27
- const fieldKey = field?.key;
28
- // field.value = field.allowSetValue ? (model?.[fieldKey] || field.value) : null;
29
-
30
- if (field.allowSetValue) {
31
- field.value = field.getDefaultValue();
32
- field.modelValue = null;
33
- if (model?.[fieldKey]) {
34
- field.value = field.toFormValue(model[fieldKey]);
35
- field.modelValue = model[fieldKey];
36
- }
37
-
38
- field.initialValue = field.value;
39
- }
40
- // console.log("e", field.value );
41
- // field.value = field.allowSetValue ? field.toFormValue(model?.[fieldKey] | field.getDefaultValue()) : field.getDefaultValue();
42
- const control = field.toFormControl();
43
- control.reset(field.value);
44
- if (field.isDisabled) {
45
- //console.log(field.key, 'dfdfdfdf');
46
-
47
- control?.disable();
48
- }
49
- groupObj[fieldKey] = control;
50
- }
51
-
52
- return new FormGroup(groupObj);
53
- };
54
-
55
- // Tạo tự động placeholder cho các dạng control nhập với label hoặc key từ field
56
- export const createInputPlaceholder = (field: BaseField<any>): string => {
57
- const label = field?.label;
58
- if (label) return `Nhập ${label?.toLowerCase()}`;
59
-
60
- return `Nhập ${field.key?.toLowerCase()}`;
61
- };
62
-
63
- // Tạo tự động placeholder cho các dạng single select với label hoặc key từ field
64
- export const createSingleSelectPlaceholder = (
65
- field: BaseField<any>,
66
- ): string => {
67
- const label = field?.label;
68
- if (label) return `Chọn ${label?.toLowerCase()}`;
69
-
70
- return `Chọn ${field.key?.toLowerCase()}`;
71
- };
72
-
73
- // Tạo tự động placeholder cho các dạng multi select với label hoặc key từ field
74
- export const createMultiSelectPlaceholder = (field: BaseField<any>): string => {
75
- const label = field?.label;
76
- if (label) return `Chọn các ${label?.toLowerCase()}`;
77
-
78
- return `Chọn các ${field.key?.toLowerCase()}`;
79
- };
80
-
81
- // Tạo tự động placeholder cho các dạng date-picker với label hoặc key từ field
82
- export const createDatePickerPlaceholder = (field: BaseField<any>): string => {
83
- const label = field?.label;
84
- if (label) return `Chọn ${label?.toLowerCase()}`;
85
-
86
- return `Chọn ${field.key?.toLowerCase()}`;
87
- };
88
-
89
- // Tạo placeholder mặc định cho các dạng Input, Textarea.
90
- export const createPlaceholder = (field: BaseField<any>): string => {
91
- const placeholder = field?.placeholder;
92
- if (placeholder) return placeholder;
93
-
94
- const label = field?.label;
95
- if (label) return `Nhập ${label?.toLowerCase()}`;
96
-
97
- return `Nhập ${field.key?.toLowerCase()}`;
98
- };
99
-
100
- // Tạo placeholder mặc định cho các dạng Select.
101
- export const createSelectPlaceholder = <K>(
102
- field: SelectBaseField<K>,
103
- ): string => {
104
- const placeholder = field?.placeholder;
105
- if (placeholder) return placeholder;
106
-
107
- const label = field?.label;
108
- if (label) {
109
- const isSingleSelect = field?.type === FieldTypeEnum.SingleSelect;
110
- return `Chọn ${isSingleSelect ? "" : "các"} ${label?.toLowerCase()}`;
111
- }
112
-
113
- return `Nhập ${field.key?.toLowerCase()}`;
114
- };
File without changes
@@ -1,78 +0,0 @@
1
- import { ControlTypeEnum } from '../../enums/controls';
2
- import { FieldTypeEnum, InputFieldTypeEnum } from '../../enums/fields';
3
- import { DateFieldTypeEnum } from '../../enums/fields/date-field.enum';
4
- import { SelectFieldTypeEnum } from '../../enums/fields/select-field.enum';
5
- import { UploadFieldTypeEnum } from '../../enums/fields/upload-field.enum';
6
- import { DatePickerField } from '../../models/fields/date/date-picker-field.model';
7
- import { DateRangeField } from '../../models/fields/date/date-range-field.model';
8
- import { FieldGroup, GroupedFields } from '../../models/fields/field-group.model';
9
- import { BaseField } from '../../models/fields/field.model';
10
- import { InputPasswordField, InputTextField } from '../../models/fields/input';
11
- import { MultiSelectField } from '../../models/fields/select/multi-select-field.model';
12
- import { SingleSelectField } from '../../models/fields/select/single-select-field.model';
13
- import { AvatarUploadField } from '../../models/fields/upload/avatar-upload-field.model';
14
- import { MultiFileUploadField } from '../../models/fields/upload/multi-file-upload-field.model';
15
- import { SingleFileUploadField } from '../../models/fields/upload/single-file-upload-field.model';
16
-
17
- export const isInputTextField = (field: BaseField<any>): field is InputTextField => {
18
- return field.controlType === ControlTypeEnum.Input && field.type === FieldTypeEnum.InputText;
19
- };
20
-
21
- export const isInputPasswordField = (field: BaseField<any>): field is InputPasswordField => {
22
- return field.controlType === ControlTypeEnum.Input && field.type === FieldTypeEnum.InputPassword;
23
- };
24
-
25
- export const isSingleSelectField = (field: BaseField<any>): field is SingleSelectField => {
26
- return field.controlType === ControlTypeEnum.Select && field.type === FieldTypeEnum.SingleSelect;
27
- };
28
-
29
- export const isMultiSelectField = (field: BaseField<any>): field is MultiSelectField => {
30
- return field.controlType === ControlTypeEnum.Select && field.type === FieldTypeEnum.MultiSelect;
31
- };
32
-
33
- export const isDatePickerField = (field: BaseField<any>): field is DatePickerField => {
34
- return field.controlType === ControlTypeEnum.Date && field.type === FieldTypeEnum.DatePicker;
35
- };
36
-
37
- export const isDateRangeField = (field: BaseField<any>): field is DateRangeField => {
38
- return field.controlType === ControlTypeEnum.Date && field.type === FieldTypeEnum.DateRange;
39
- };
40
-
41
- export const isSingleFileUploadField = (field: BaseField<any>): field is SingleFileUploadField => {
42
- return (
43
- field.controlType === ControlTypeEnum.Upload && field.type === FieldTypeEnum.SingleFileUpload
44
- );
45
- };
46
-
47
- export const isMultiFileUploadField = (field: BaseField<any>): field is MultiFileUploadField => {
48
- return (
49
- field.controlType === ControlTypeEnum.Upload && field.type === FieldTypeEnum.MultiFileUpload
50
- );
51
- };
52
-
53
- export const isAvatarUploadField = (field: BaseField<any>): field is AvatarUploadField => {
54
- return field.controlType === ControlTypeEnum.Upload && field.type === FieldTypeEnum.AvatarUpload;
55
- };
56
-
57
- // Tạo FieldGroup render UI từ thông tin fields và groups truyền vào cho dynamic-form.
58
- export const buildGroupedFields = (
59
- fields: BaseField<any>[],
60
- groups: FieldGroup[] = [],
61
- ): GroupedFields => {
62
- const noGroup = fields.filter(
63
- field => !field?.groupCode || field?.groupCode.toLowerCase() === 'none',
64
- );
65
-
66
- const sortedGroups = [...groups].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
67
- const grouped = sortedGroups
68
- .map(group => ({
69
- group,
70
- fields: fields.filter(field => field.groupCode?.toLowerCase() === group.code.toLowerCase()),
71
- }))
72
- .filter(groupedFields => groupedFields.fields.length > 0);
73
-
74
- return new GroupedFields({
75
- noGroup,
76
- grouped,
77
- });
78
- };