@ldquocc/dynamic-form 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/ng-package.json +15 -0
  2. package/package.json +20 -31
  3. package/src/lib/dynamic-form.component.html +121 -0
  4. package/src/lib/dynamic-form.component.scss +7 -0
  5. package/src/lib/dynamic-form.component.spec.ts +21 -0
  6. package/src/lib/dynamic-form.component.ts +237 -0
  7. package/src/lib/dynamic-form.service.spec.ts +16 -0
  8. package/src/lib/dynamic-form.service.ts +9 -0
  9. package/src/lib/shared/base/base-select.component.ts +183 -0
  10. package/src/lib/shared/base/base-value-accessor.ts +192 -0
  11. package/{lib/shared/components/component.d.ts → src/lib/shared/components/component.ts} +34 -14
  12. package/src/lib/shared/components/d-form-testing/d-form-testing.component.html +197 -0
  13. package/src/lib/shared/components/d-form-testing/d-form-testing.component.less +12 -0
  14. package/src/lib/shared/components/d-form-testing/d-form-testing.component.spec.ts +22 -0
  15. package/src/lib/shared/components/d-form-testing/d-form-testing.component.ts +197 -0
  16. package/src/lib/shared/components/dynamic-field/dynamic-field.component.html +218 -0
  17. package/src/lib/shared/components/dynamic-field/dynamic-field.component.scss +28 -0
  18. package/src/lib/shared/components/dynamic-field/dynamic-field.component.spec.ts +21 -0
  19. package/src/lib/shared/components/dynamic-field/dynamic-field.component.ts +67 -0
  20. package/src/lib/shared/components/field-user-config/field-user-config.component.html +38 -0
  21. package/src/lib/shared/components/field-user-config/field-user-config.component.scss +29 -0
  22. package/src/lib/shared/components/field-user-config/field-user-config.component.ts +33 -0
  23. package/src/lib/shared/components/fields/components/suffix/suffix.component.html +42 -0
  24. package/src/lib/shared/components/fields/components/suffix/suffix.component.scss +3 -0
  25. package/src/lib/shared/components/fields/components/suffix/suffix.component.spec.ts +22 -0
  26. package/src/lib/shared/components/fields/components/suffix/suffix.component.ts +32 -0
  27. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.html +20 -0
  28. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.scss +5 -0
  29. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.spec.ts +21 -0
  30. package/src/lib/shared/components/fields/date/date-picker/date-picker.component.ts +148 -0
  31. package/src/lib/shared/components/fields/date/date-range/date-range.component.html +33 -0
  32. package/src/lib/shared/components/fields/date/date-range/date-range.component.scss +22 -0
  33. package/src/lib/shared/components/fields/date/date-range/date-range.component.spec.ts +21 -0
  34. package/src/lib/shared/components/fields/date/date-range/date-range.component.ts +133 -0
  35. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.html +31 -0
  36. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.scss +3 -0
  37. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.spec.ts +21 -0
  38. package/src/lib/shared/components/fields/input/input-formatted/input-formatted.component.ts +148 -0
  39. package/src/lib/shared/components/fields/input/input-password/input-password.component.html +18 -0
  40. package/src/lib/shared/components/fields/input/input-password/input-password.component.scss +0 -0
  41. package/src/lib/shared/components/fields/input/input-password/input-password.component.spec.ts +21 -0
  42. package/src/lib/shared/components/fields/input/input-password/input-password.component.ts +56 -0
  43. package/src/lib/shared/components/fields/input/input-text/input-text.component.html +73 -0
  44. package/src/lib/shared/components/fields/input/input-text/input-text.component.scss +0 -0
  45. package/src/lib/shared/components/fields/input/input-text/input-text.component.spec.ts +21 -0
  46. package/src/lib/shared/components/fields/input/input-text/input-text.component.ts +98 -0
  47. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.html +73 -0
  48. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.scss +21 -0
  49. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.spec.ts +21 -0
  50. package/src/lib/shared/components/fields/select/multi-select/multi-select.component.ts +212 -0
  51. package/src/lib/shared/components/fields/select/single-select/single-select.component.html +55 -0
  52. package/src/lib/shared/components/fields/select/single-select/single-select.component.scss +1 -0
  53. package/src/lib/shared/components/fields/select/single-select/single-select.component.spec.ts +21 -0
  54. package/src/lib/shared/components/fields/select/single-select/single-select.component.ts +217 -0
  55. package/src/lib/shared/components/fields/select/single-select/sl.component.old.txt +337 -0
  56. package/src/lib/shared/components/fields/select/single-select/sl.component.old2.txt +340 -0
  57. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.html +38 -0
  58. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.scss +1 -0
  59. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.spec.ts +21 -0
  60. package/src/lib/shared/components/fields/select/tree-select/tree-select.component.ts +401 -0
  61. package/src/lib/shared/components/fields/textarea/textarea.component.html +29 -0
  62. package/src/lib/shared/components/fields/textarea/textarea.component.scss +17 -0
  63. package/src/lib/shared/components/fields/textarea/textarea.component.spec.ts +21 -0
  64. package/src/lib/shared/components/fields/textarea/textarea.component.ts +76 -0
  65. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.html +30 -0
  66. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.scss +22 -0
  67. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.spec.ts +22 -0
  68. package/src/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.ts +217 -0
  69. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.html +101 -0
  70. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.scss +117 -0
  71. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.spec.ts +22 -0
  72. package/src/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.ts +480 -0
  73. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.html +82 -0
  74. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.less +80 -0
  75. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.spec.ts +22 -0
  76. package/src/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.ts +288 -0
  77. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.html +104 -0
  78. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.scss +37 -0
  79. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.spec.ts +21 -0
  80. package/src/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.ts +317 -0
  81. package/src/lib/shared/config/dynamic-form.config.ts +11 -0
  82. package/src/lib/shared/consts/common/common.const.ts +5 -0
  83. package/src/lib/shared/consts/common/field-dependency.const.ts +1 -0
  84. package/src/lib/shared/consts/common/file.const.ts +130 -0
  85. package/{lib/shared/consts/common/index.d.ts → src/lib/shared/consts/common/index.ts} +4 -4
  86. package/src/lib/shared/consts/common/sample-test.const.ts +1648 -0
  87. package/src/lib/shared/consts/common/standalone-import.const.ts +51 -0
  88. package/src/lib/shared/consts/controls/control.const.ts +11 -0
  89. package/{lib/shared/consts/controls/index.d.ts → src/lib/shared/consts/controls/index.ts} +1 -1
  90. package/src/lib/shared/consts/fields/date-field.const.ts +12 -0
  91. package/src/lib/shared/consts/fields/field.const.ts +23 -0
  92. package/{lib/shared/consts/fields/index.d.ts → src/lib/shared/consts/fields/index.ts} +5 -5
  93. package/src/lib/shared/consts/fields/input-field.const.ts +4 -0
  94. package/src/lib/shared/consts/fields/input-formatted-field.const.ts +35 -0
  95. package/src/lib/shared/consts/fields/radio-field.const.ts +31 -0
  96. package/src/lib/shared/consts/fields/select-field.const.ts +7 -0
  97. package/src/lib/shared/consts/fields/upload-field.const.ts +1 -0
  98. package/src/lib/shared/consts/validators/index.ts +0 -0
  99. package/src/lib/shared/consts/validators/pattern.const.ts +117 -0
  100. package/src/lib/shared/enums/common/component-ui.enum.ts +8 -0
  101. package/src/lib/shared/enums/common/field-dependency.enum.ts +10 -0
  102. package/src/lib/shared/enums/common/file-size-type.enum.ts +6 -0
  103. package/{lib/shared/enums/common/index.d.ts → src/lib/shared/enums/common/index.ts} +4 -4
  104. package/src/lib/shared/enums/common/output-value-type.enum.ts +22 -0
  105. package/src/lib/shared/enums/common/view-mode.enum.ts +4 -0
  106. package/src/lib/shared/enums/controls/control.enum.ts +12 -0
  107. package/{lib/shared/enums/controls/index.d.ts → src/lib/shared/enums/controls/index.ts} +1 -1
  108. package/src/lib/shared/enums/fields/date-field.enum.ts +4 -0
  109. package/src/lib/shared/enums/fields/field.enum.ts +21 -0
  110. package/{lib/shared/enums/fields/index.d.ts → src/lib/shared/enums/fields/index.ts} +6 -6
  111. package/src/lib/shared/enums/fields/input-field.enum.ts +6 -0
  112. package/src/lib/shared/enums/fields/input-formatted-field.enum.ts +6 -0
  113. package/src/lib/shared/enums/fields/select-field.enum.ts +4 -0
  114. package/src/lib/shared/enums/fields/upload-field.enum.ts +5 -0
  115. package/src/lib/shared/enums/form/dynamic-form.enum.ts +6 -0
  116. package/{lib/shared/enums/form/index.d.ts → src/lib/shared/enums/form/index.ts} +1 -1
  117. package/{lib/shared/enums/validators/index.d.ts → src/lib/shared/enums/validators/index.ts} +2 -2
  118. package/src/lib/shared/enums/validators/regex.enum.ts +47 -0
  119. package/src/lib/shared/enums/validators/validators.enum.ts +17 -0
  120. package/src/lib/shared/factories/auto-numeric-options.factory.ts +14 -0
  121. package/src/lib/shared/models/common/api-config.model.ts +7 -0
  122. package/src/lib/shared/models/common/api-response.model.ts +20 -0
  123. package/src/lib/shared/models/common/common.model.ts +39 -0
  124. package/src/lib/shared/models/common/field-dependency.model.ts +27 -0
  125. package/src/lib/shared/models/common/file-config.model.ts +22 -0
  126. package/{lib/shared/models/common/index.d.ts → src/lib/shared/models/common/index.ts} +7 -7
  127. package/src/lib/shared/models/common/obj-field.model.ts +68 -0
  128. package/src/lib/shared/models/common/object-storage.model.ts +15 -0
  129. package/{lib/shared/models/common/output-value-type.model.d.ts → src/lib/shared/models/common/output-value-type.model.ts} +4 -4
  130. package/src/lib/shared/models/common/table-models.ts +16 -0
  131. package/{lib/shared/models/common/view-mode.model.d.ts → src/lib/shared/models/common/view-mode.model.ts} +1 -1
  132. package/{lib/shared/models/controls/control.model.d.ts → src/lib/shared/models/controls/control.model.ts} +3 -2
  133. package/{lib/shared/models/controls/index.d.ts → src/lib/shared/models/controls/index.ts} +1 -1
  134. package/src/lib/shared/models/fields/date/base-date-field.model.ts +52 -0
  135. package/src/lib/shared/models/fields/date/date-picker-field.model.ts +43 -0
  136. package/src/lib/shared/models/fields/date/date-range-field.model.ts +52 -0
  137. package/{lib/shared/models/fields/date/index.d.ts → src/lib/shared/models/fields/date/index.ts} +3 -3
  138. package/src/lib/shared/models/fields/field-grid.model.ts +10 -0
  139. package/src/lib/shared/models/fields/field-group.model.ts +50 -0
  140. package/src/lib/shared/models/fields/field-user-config.model.ts +8 -0
  141. package/src/lib/shared/models/fields/field.model.ts +184 -0
  142. package/{lib/shared/models/fields/index.d.ts → src/lib/shared/models/fields/index.ts} +2 -2
  143. package/{lib/shared/models/fields/input/index.d.ts → src/lib/shared/models/fields/input/index.ts} +4 -4
  144. package/src/lib/shared/models/fields/input/input-field.model.ts +111 -0
  145. package/src/lib/shared/models/fields/input/input-formatted-field.model.ts +38 -0
  146. package/src/lib/shared/models/fields/input/input-password-field.model.ts +38 -0
  147. package/src/lib/shared/models/fields/input/input-text-field.model.ts +26 -0
  148. package/src/lib/shared/models/fields/radio/index.ts +0 -0
  149. package/src/lib/shared/models/fields/radio/radio-base-field.model.ts +84 -0
  150. package/src/lib/shared/models/fields/select/index.ts +0 -0
  151. package/src/lib/shared/models/fields/select/multi-select-field.model.ts +46 -0
  152. package/src/lib/shared/models/fields/select/select-base-field.model.ts +125 -0
  153. package/src/lib/shared/models/fields/select/single-select-field.model.ts +43 -0
  154. package/src/lib/shared/models/fields/select/tree-select-field.model.ts +44 -0
  155. package/src/lib/shared/models/fields/textarea/index.ts +0 -0
  156. package/src/lib/shared/models/fields/textarea/textarea-field.model.ts +97 -0
  157. package/src/lib/shared/models/fields/upload/avatar-upload-field.model.ts +33 -0
  158. package/src/lib/shared/models/fields/upload/base-upload-field.model.ts +105 -0
  159. package/{lib/shared/models/fields/upload/index.d.ts → src/lib/shared/models/fields/upload/index.ts} +5 -5
  160. package/src/lib/shared/models/fields/upload/multi-file-upload-field.model.ts +34 -0
  161. package/src/lib/shared/models/fields/upload/multi-image-upload-field.model.ts +42 -0
  162. package/src/lib/shared/models/fields/upload/single-file-upload-field.model.ts +33 -0
  163. package/{lib/shared/models/form/dynamic-form.model.d.ts → src/lib/shared/models/form/dynamic-form.model.ts} +1 -1
  164. package/{lib/shared/models/form/index.d.ts → src/lib/shared/models/form/index.ts} +1 -1
  165. package/src/lib/shared/models/validations/index.ts +1 -0
  166. package/src/lib/shared/models/validations/validations.model.ts +14 -0
  167. package/src/lib/shared/services/dynamic-form.service.spec.ts +16 -0
  168. package/src/lib/shared/services/dynamic-form.service.ts +251 -0
  169. package/src/lib/shared/services/field.service.spec.ts +16 -0
  170. package/src/lib/shared/services/field.service.ts +152 -0
  171. package/src/lib/shared/services/file.service.spec.ts +16 -0
  172. package/src/lib/shared/services/file.service.ts +53 -0
  173. package/src/lib/shared/services/form-config.service.ts +53 -0
  174. package/src/lib/shared/services/form-data.service.spec.ts +16 -0
  175. package/src/lib/shared/services/form-data.service.ts +114 -0
  176. package/src/lib/shared/services/form-utils.ts +52 -0
  177. package/src/lib/shared/services/suffix.service.spec.ts +16 -0
  178. package/src/lib/shared/services/suffix.service.ts +16 -0
  179. package/src/lib/shared/services/validation.service.spec.ts +16 -0
  180. package/src/lib/shared/services/validation.service.ts +38 -0
  181. package/src/lib/shared/utils/common/common.utils.ts +52 -0
  182. package/{lib/shared/utils/common/index.d.ts → src/lib/shared/utils/common/index.ts} +1 -1
  183. package/src/lib/shared/utils/date/date.utils.ts +129 -0
  184. package/{lib/shared/utils/date/index.d.ts → src/lib/shared/utils/date/index.ts} +1 -1
  185. package/src/lib/shared/utils/dynamic-field/dynamic-field.ts +0 -0
  186. package/src/lib/shared/utils/dynamic-field/index.ts +0 -0
  187. package/src/lib/shared/utils/dynamic-form/dynamic-form.ts +114 -0
  188. package/src/lib/shared/utils/dynamic-form/index.ts +0 -0
  189. package/src/lib/shared/utils/fields/fields.ts +78 -0
  190. package/{lib/shared/utils/fields/index.d.ts → src/lib/shared/utils/fields/index.ts} +1 -1
  191. package/src/lib/shared/utils/file/file.utils.ts +37 -0
  192. package/{lib/shared/utils/file/index.d.ts → src/lib/shared/utils/file/index.ts} +1 -1
  193. package/src/lib/shared/utils/validators/custom-validators.ts +158 -0
  194. package/src/lib/shared/utils/validators/default-error-message.ts +42 -0
  195. package/{lib/shared/utils/validators/index.d.ts → src/lib/shared/utils/validators/index.ts} +3 -3
  196. package/src/lib/shared/utils/validators/pattern.ts +26 -0
  197. package/{public-api.d.ts → src/public-api.ts} +68 -28
  198. package/tsconfig.lib.json +15 -0
  199. package/tsconfig.lib.prod.json +11 -0
  200. package/tsconfig.spec.json +15 -0
  201. package/fesm2022/ldquocc-dynamic-form.mjs +0 -4938
  202. package/fesm2022/ldquocc-dynamic-form.mjs.map +0 -1
  203. package/index.d.ts +0 -5
  204. package/lib/dynamic-form.component.d.ts +0 -67
  205. package/lib/shared/base/base-select.component.d.ts +0 -19
  206. package/lib/shared/base/base-value-accessor.d.ts +0 -69
  207. package/lib/shared/components/dynamic-field/dynamic-field.component.d.ts +0 -23
  208. package/lib/shared/components/field-user-config/field-user-config.component.d.ts +0 -10
  209. package/lib/shared/components/fields/components/suffix/suffix.component.d.ts +0 -12
  210. package/lib/shared/components/fields/date/date-picker/date-picker.component.d.ts +0 -17
  211. package/lib/shared/components/fields/date/date-range/date-range.component.d.ts +0 -17
  212. package/lib/shared/components/fields/input/input-formatted/input-formatted.component.d.ts +0 -20
  213. package/lib/shared/components/fields/input/input-password/input-password.component.d.ts +0 -12
  214. package/lib/shared/components/fields/input/input-text/input-text.component.d.ts +0 -14
  215. package/lib/shared/components/fields/select/multi-select/multi-select.component.d.ts +0 -21
  216. package/lib/shared/components/fields/select/single-select/single-select.component.d.ts +0 -21
  217. package/lib/shared/components/fields/select/tree-select/tree-select.component.d.ts +0 -28
  218. package/lib/shared/components/fields/textarea/textarea.component.d.ts +0 -14
  219. package/lib/shared/components/fields/upload/avatar-upload/avatar-upload.component.d.ts +0 -25
  220. package/lib/shared/components/fields/upload/multi-file-upload/multi-file-upload.component.d.ts +0 -76
  221. package/lib/shared/components/fields/upload/multi-image-upload/multi-image-upload.component.d.ts +0 -27
  222. package/lib/shared/components/fields/upload/single-file-upload/single-file-upload.component.d.ts +0 -29
  223. package/lib/shared/config/dynamic-form.config.d.ts +0 -9
  224. package/lib/shared/consts/common/common.const.d.ts +0 -5
  225. package/lib/shared/consts/common/field-dependency.const.d.ts +0 -1
  226. package/lib/shared/consts/common/file.const.d.ts +0 -148
  227. package/lib/shared/consts/common/standalone-import.const.d.ts +0 -7
  228. package/lib/shared/consts/controls/control.const.d.ts +0 -1
  229. package/lib/shared/consts/fields/date-field.const.d.ts +0 -7
  230. package/lib/shared/consts/fields/field.const.d.ts +0 -4
  231. package/lib/shared/consts/fields/input-field.const.d.ts +0 -4
  232. package/lib/shared/consts/fields/input-formatted-field.const.d.ts +0 -4
  233. package/lib/shared/consts/fields/radio-field.const.d.ts +0 -10
  234. package/lib/shared/consts/fields/select-field.const.d.ts +0 -6
  235. package/lib/shared/consts/fields/upload-field.const.d.ts +0 -1
  236. package/lib/shared/consts/validators/pattern.const.d.ts +0 -2
  237. package/lib/shared/enums/common/field-dependency.enum.d.ts +0 -9
  238. package/lib/shared/enums/common/file-size-type.enum.d.ts +0 -6
  239. package/lib/shared/enums/common/output-value-type.enum.d.ts +0 -19
  240. package/lib/shared/enums/common/view-mode.enum.d.ts +0 -4
  241. package/lib/shared/enums/controls/control.enum.d.ts +0 -11
  242. package/lib/shared/enums/fields/date-field.enum.d.ts +0 -4
  243. package/lib/shared/enums/fields/field.enum.d.ts +0 -20
  244. package/lib/shared/enums/fields/input-field.enum.d.ts +0 -6
  245. package/lib/shared/enums/fields/input-formatted-field.enum.d.ts +0 -6
  246. package/lib/shared/enums/fields/select-field.enum.d.ts +0 -4
  247. package/lib/shared/enums/fields/upload-field.enum.d.ts +0 -5
  248. package/lib/shared/enums/form/dynamic-form.enum.d.ts +0 -6
  249. package/lib/shared/enums/validators/regex.enum.d.ts +0 -38
  250. package/lib/shared/enums/validators/validators.enum.d.ts +0 -14
  251. package/lib/shared/factories/auto-numeric-options.factory.d.ts +0 -5
  252. package/lib/shared/models/common/api-config.model.d.ts +0 -4
  253. package/lib/shared/models/common/api-response.model.d.ts +0 -19
  254. package/lib/shared/models/common/common.model.d.ts +0 -29
  255. package/lib/shared/models/common/field-dependency.model.d.ts +0 -16
  256. package/lib/shared/models/common/file-config.model.d.ts +0 -11
  257. package/lib/shared/models/common/obj-field.model.d.ts +0 -59
  258. package/lib/shared/models/common/object-storage.model.d.ts +0 -15
  259. package/lib/shared/models/common/table-models.d.ts +0 -15
  260. package/lib/shared/models/fields/date/base-date-field.model.d.ts +0 -19
  261. package/lib/shared/models/fields/date/date-picker-field.model.d.ts +0 -12
  262. package/lib/shared/models/fields/date/date-range-field.model.d.ts +0 -12
  263. package/lib/shared/models/fields/field-grid.model.d.ts +0 -9
  264. package/lib/shared/models/fields/field-group.model.d.ts +0 -21
  265. package/lib/shared/models/fields/field-user-config.model.d.ts +0 -3
  266. package/lib/shared/models/fields/field.model.d.ts +0 -57
  267. package/lib/shared/models/fields/input/input-field.model.d.ts +0 -31
  268. package/lib/shared/models/fields/input/input-formatted-field.model.d.ts +0 -13
  269. package/lib/shared/models/fields/input/input-password-field.model.d.ts +0 -11
  270. package/lib/shared/models/fields/input/input-text-field.model.d.ts +0 -9
  271. package/lib/shared/models/fields/radio/radio-base-field.model.d.ts +0 -26
  272. package/lib/shared/models/fields/select/multi-select-field.model.d.ts +0 -11
  273. package/lib/shared/models/fields/select/select-base-field.model.d.ts +0 -40
  274. package/lib/shared/models/fields/select/single-select-field.model.d.ts +0 -9
  275. package/lib/shared/models/fields/select/tree-select-field.model.d.ts +0 -10
  276. package/lib/shared/models/fields/textarea/textarea-field.model.d.ts +0 -20
  277. package/lib/shared/models/fields/upload/avatar-upload-field.model.d.ts +0 -9
  278. package/lib/shared/models/fields/upload/base-upload-field.model.d.ts +0 -25
  279. package/lib/shared/models/fields/upload/multi-file-upload-field.model.d.ts +0 -10
  280. package/lib/shared/models/fields/upload/multi-image-upload-field.model.d.ts +0 -12
  281. package/lib/shared/models/fields/upload/single-file-upload-field.model.d.ts +0 -11
  282. package/lib/shared/services/dynamic-form.service.d.ts +0 -48
  283. package/lib/shared/services/field.service.d.ts +0 -41
  284. package/lib/shared/services/file.service.d.ts +0 -20
  285. package/lib/shared/services/form-config.service.d.ts +0 -10
  286. package/lib/shared/services/form-data.service.d.ts +0 -53
  287. package/lib/shared/services/form-utils.d.ts +0 -5
  288. package/lib/shared/services/suffix.service.d.ts +0 -12
  289. package/lib/shared/services/validation.service.d.ts +0 -10
  290. package/lib/shared/utils/common/common.utils.d.ts +0 -7
  291. package/lib/shared/utils/date/date.utils.d.ts +0 -6
  292. package/lib/shared/utils/dynamic-form/dynamic-form.d.ts +0 -11
  293. package/lib/shared/utils/fields/fields.d.ts +0 -20
  294. package/lib/shared/utils/file/file.utils.d.ts +0 -4
  295. package/lib/shared/utils/validators/custom-validators.d.ts +0 -11
  296. package/lib/shared/utils/validators/default-error-message.d.ts +0 -6
  297. package/lib/shared/utils/validators/pattern.d.ts +0 -4
  298. /package/{styles → src/lib/shared/styles}/_common-form.scss +0 -0
@@ -0,0 +1,317 @@
1
+ import { Component, computed, forwardRef, inject, signal } from "@angular/core";
2
+ import {
3
+ DELETE_FILE_ERROR,
4
+ NO_FILE_NAME,
5
+ NO_INFO_TEXT,
6
+ UPLOAD_FILE_ERROR,
7
+ UPLOAD_FILE_TEXT,
8
+ } from "../../../../consts/common";
9
+ import { BaseValueAccessor } from "../../../../base/base-value-accessor";
10
+ import { SingleFileUploadField } from "../../../../models/fields/upload/single-file-upload-field.model";
11
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
12
+ import {
13
+ NzUploadFile,
14
+ NzUploadModule,
15
+ NzUploadXHRArgs,
16
+ } from "ng-zorro-antd/upload";
17
+ import { finalize, Observable, of, Subscription } from "rxjs";
18
+ import { FileService } from "../../../../services/file.service";
19
+ import { ObjectStorage } from "../../../../models/common/object-storage.model";
20
+ import { FieldTypeEnum } from "../../../../enums/fields";
21
+ import { MyUploadFile } from "../../../../models/common/common.model";
22
+ import { formatFileSize, getExtensions } from "../../../../utils/file";
23
+ import { isValidJSON } from "../../../../utils/common";
24
+ import { ControlTypeEnum } from "../../../../enums/controls";
25
+ import { FileSizeTypeEnum } from "../../../../enums/common";
26
+ import { FormUtils } from "../../../../services/form-utils";
27
+ import { FormConfigService } from "../../../../services/form-config.service";
28
+ import { NzIconModule } from "ng-zorro-antd/icon";
29
+ import { NzInputModule } from "ng-zorro-antd/input";
30
+ import { NzButtonModule } from "ng-zorro-antd/button";
31
+ import { SuffixComponent } from "../../components/suffix/suffix.component";
32
+ import { NzSpinModule } from "ng-zorro-antd/spin";
33
+ import { NzNotificationService } from "ng-zorro-antd/notification";
34
+ import { CommonModule } from "@angular/common";
35
+
36
+ const modules = [CommonModule];
37
+ const zorroModules = [
38
+ NzUploadModule,
39
+ NzIconModule,
40
+ NzInputModule,
41
+ NzButtonModule,
42
+ NzSpinModule,
43
+ ];
44
+ const components = [SuffixComponent];
45
+
46
+ @Component({
47
+ selector: "app-single-file-upload",
48
+ standalone: true,
49
+ imports: [...modules, ...zorroModules, ...components],
50
+ templateUrl: "./single-file-upload.component.html",
51
+ styleUrls: ["./single-file-upload.component.scss"],
52
+ providers: [
53
+ {
54
+ provide: NG_VALUE_ACCESSOR,
55
+ useExisting: forwardRef(() => SingleFileUploadComponent),
56
+ multi: true,
57
+ },
58
+ ],
59
+ })
60
+ export class SingleFileUploadComponent extends BaseValueAccessor<
61
+ string | File | NzUploadFile
62
+ > {
63
+ readonly field = computed(() => {
64
+ const base = this.fieldInput();
65
+ if (
66
+ !(base instanceof SingleFileUploadField) ||
67
+ (base.type !== FieldTypeEnum.SingleFileUpload &&
68
+ base.controlType !== ControlTypeEnum.Upload)
69
+ ) {
70
+ throw new Error("Expected SingleFileUploadField");
71
+ }
72
+ return base;
73
+ });
74
+
75
+ // Inject services
76
+ private readonly fileService = inject(FileService);
77
+ private readonly nzNotification = inject(NzNotificationService);
78
+ private readonly formConfigService = inject(FormConfigService);
79
+
80
+ // Mảng lưu trữ objectStorage liên quan đến tập tin.
81
+ readonly objStorageList = signal<ObjectStorage[]>([]);
82
+
83
+ // Mảng đại diện các files.
84
+ readonly allFiles = signal<MyUploadFile[]>([]);
85
+
86
+ // Text hướng dẫn các loại extension được upload.
87
+ readonly fileExtensionGuide = computed(() => {
88
+ if (!this.isAddOrEdit()) return "";
89
+ const { acceptedMimeTypes } = this.field();
90
+ return `Hỗ trợ định dạng ${getExtensions(acceptedMimeTypes).join(", ")}`;
91
+ });
92
+
93
+ readonly viewDisplayValue = computed(() => {
94
+ // 1. Nếu không phải View thì không cần quan tâm text này
95
+ if (!this.isView()) return "";
96
+
97
+ if (this.allFiles().length === 0) return NO_INFO_TEXT;
98
+
99
+ const { objStorage } = this.allFiles()[0];
100
+ const { nameAlias, name } = objStorage;
101
+ if (!nameAlias && !name) return NO_INFO_TEXT;
102
+
103
+ return nameAlias ?? name;
104
+ });
105
+
106
+ readonly addEditDisplayValue = computed(() => {
107
+ if (!this.isAddOrEdit()) return "";
108
+
109
+ if (this.allFiles().length === 0) return UPLOAD_FILE_TEXT;
110
+
111
+ const { objStorage } = this.allFiles()[0];
112
+ const { nameAlias, name } = objStorage;
113
+ if (!nameAlias && !name) return NO_FILE_NAME;
114
+
115
+ return nameAlias ?? name;
116
+ });
117
+
118
+ readonly uploading = signal(false);
119
+
120
+ constructor() {
121
+ super();
122
+ }
123
+
124
+ // Chạy khi value form được gán bởi các hàm reset, patchValue, setValue.
125
+ protected override writeValueToView(value: string): void {
126
+ this.handleInitAllData(value);
127
+
128
+ if (!this.isAddOrEdit()) return;
129
+
130
+ // Gán data vào đầu ra của form.
131
+ this.patchFormData(this.fieldKey(), value);
132
+ }
133
+
134
+ // Xử lý init các data cần thiết: objStorage, myFile, fileList, lưu giữ first value.
135
+ // value sẽ là 1 string json mảng các objStorage.
136
+ private handleInitAllData(value: string): void {
137
+ // Reset khi đổi mode, hoặc model, hoặc fields.
138
+ this.objStorageList.set([]);
139
+ this.allFiles.set([]);
140
+
141
+ if (isValidJSON(value)) {
142
+ const objStorageList = JSON.parse(value) as ObjectStorage[];
143
+ this.objStorageList.set(objStorageList);
144
+
145
+ // Khởi tạo danh sách MyUploadFile từ data json.
146
+ const myUploadFiles = objStorageList.map(
147
+ (objStorage) =>
148
+ ({
149
+ objStorage,
150
+ isTemp: false,
151
+ previewUrl: `${this.formConfigService.getStorageUrl()}${objStorage.bucket}/${objStorage.path}`,
152
+ }) as MyUploadFile,
153
+ );
154
+ this.allFiles.set(myUploadFiles);
155
+ } else {
156
+ if (value) {
157
+ this.allFiles.set([
158
+ {
159
+ isTemp: false,
160
+ objStorage: { id: "", name: value },
161
+ previewUrl: "",
162
+ } as MyUploadFile,
163
+ ]);
164
+ }
165
+ }
166
+ }
167
+
168
+ beforeUpload = (
169
+ file: NzUploadFile,
170
+ fileList: NzUploadFile[],
171
+ ): boolean | Observable<boolean> => {
172
+ // const originFile = file?.originFileObj as unknown as File; // có thể ở version mới nhất đã fix lỗi NzUploadFile nhưng trả về File của tham số file.
173
+ // Xử lý gán vào CVA để tiến hành validation theo các props đã truyền vào.
174
+ const originFile = file as unknown as File;
175
+ this.propagateValue(originFile);
176
+
177
+ const { maxSizeInMB, acceptedMimeTypes } = this.field();
178
+ const fileSizeInMB = formatFileSize(file.size!, FileSizeTypeEnum.MB);
179
+ const fileType = file.type;
180
+ if (fileSizeInMB > maxSizeInMB || !acceptedMimeTypes.includes(fileType!)) {
181
+ return false;
182
+ }
183
+
184
+ return true;
185
+ };
186
+
187
+ customRequest = (item: NzUploadXHRArgs): Subscription => {
188
+ // const originFile = nzUploadFile?.originFileObj;
189
+ const originFile = item.file as unknown as File;
190
+
191
+ // Nếu validation không thỏa, dừng tại đây.
192
+ if (this.control?.invalid) {
193
+ return of(null).subscribe(); // fake subscription.
194
+ }
195
+
196
+ // Validation đã thỏa, tiến hành upload file.
197
+ return this.uploadFile(originFile);
198
+ };
199
+
200
+ private uploadFile(file: File) {
201
+ this.uploading.set(true);
202
+ const { apiFileConfig, uploadTemp } = this.field();
203
+ const newFileName = FormUtils.randomFileName(file.name);
204
+
205
+ const mimeCfg = apiFileConfig.perMimeTypeConfig?.[file.type]; // Lấy mimeTypes file upload.
206
+ const uploadUrl = mimeCfg?.uploadUrl ?? apiFileConfig.uploadUrl; // Nếu có config upload riêng cho mimeTypes đang kiểm tra.
207
+ const formData = mimeCfg?.buildFormData // Nếu có hàm custon buildFormData.
208
+ ? mimeCfg.buildFormData(file, {
209
+ fileName: newFileName,
210
+ })
211
+ : (() => {
212
+ // Mặc định
213
+ const fd = new FormData();
214
+ fd.append("File", file, newFileName);
215
+ if (apiFileConfig.uploadByPath && apiFileConfig.uploadPath) {
216
+ fd.append("path", apiFileConfig.uploadPath);
217
+ }
218
+
219
+ if (apiFileConfig.isOriginName) {
220
+ fd.append("nameAlias", file.name);
221
+ }
222
+ // fd.append('isTemp', 'true');
223
+ return fd;
224
+ })();
225
+
226
+ if (uploadTemp) formData.append("isTemp", "true");
227
+
228
+ return this.fileService
229
+ .uploadFile(file, formData, { uploadUrl })
230
+ .pipe(
231
+ this.takeUntilDestroy(),
232
+ finalize(() => this.uploading.set(false)),
233
+ )
234
+ .subscribe({
235
+ next: (res) => {
236
+ const { code, data, message } = res;
237
+ if (code === 0) {
238
+ this.objStorageList.set([data]);
239
+
240
+ this.allFiles.set([
241
+ {
242
+ objStorage: data,
243
+ isTemp: true,
244
+ previewUrl: uploadTemp
245
+ ? this.formConfigService.getViewFileUrl(data.name ?? "", true)
246
+ : `${this.formConfigService.getStorageUrl()}${data.bucket}/${data.path}`,
247
+ } as MyUploadFile,
248
+ ]);
249
+
250
+ this.patchFormData(
251
+ this.fieldKey(),
252
+ JSON.stringify(this.objStorageList()),
253
+ );
254
+ } else {
255
+ console.error(message);
256
+ }
257
+ },
258
+ error: () => {
259
+ console.error(UPLOAD_FILE_ERROR);
260
+ },
261
+ });
262
+ }
263
+
264
+ handleDelete(file: MyUploadFile): void {
265
+ const { objStorage } = file;
266
+ const { uploadTemp } = this.field();
267
+
268
+ this.objStorageList.set([]);
269
+
270
+ // Loại bỏ và cập nhật danh sách MyUploadFile.
271
+ const newAllFiles = this.allFiles().filter(
272
+ (item) => item.objStorage?.id !== objStorage?.id,
273
+ );
274
+ this.allFiles.set(newAllFiles);
275
+
276
+ if (!uploadTemp) {
277
+ this.deleteObjStorage(objStorage.id || "");
278
+ return;
279
+ }
280
+ this.patchFormData(this.fieldKey(), JSON.stringify(this.objStorageList()));
281
+
282
+ return;
283
+ }
284
+
285
+ deleteObjStorage(id: string) {
286
+ return this.fileService
287
+ .deleteObjStorage(id, {
288
+ deleteUrl: this.field().apiFileConfig.deleteUrl,
289
+ })
290
+ .pipe(this.takeUntilDestroy())
291
+ .subscribe({
292
+ next: (res) => {
293
+ const { code, message } = res;
294
+ if (code === 0) {
295
+ this.objStorageList.set([]);
296
+
297
+ this.patchFormData(
298
+ this.fieldKey(),
299
+ JSON.stringify(this.objStorageList()),
300
+ );
301
+ } else {
302
+ console.error(message);
303
+ }
304
+ },
305
+ error: () => {
306
+ console.error(DELETE_FILE_ERROR);
307
+ // Tạm do api xóa có vấn đề
308
+ this.objStorageList.set([]);
309
+
310
+ this.patchFormData(
311
+ this.fieldKey(),
312
+ JSON.stringify(this.objStorageList()),
313
+ );
314
+ },
315
+ });
316
+ }
317
+ }
@@ -0,0 +1,11 @@
1
+ import { InjectionToken } from '@angular/core';
2
+
3
+ export interface DynamicFormConfig {
4
+ prefix: string;
5
+ mainApiUrl: string;
6
+ systemApiUrl: string;
7
+ portalApiUrl: string;
8
+ storageUrl: string;
9
+ }
10
+
11
+ export const DYNAMIC_FORM_CONFIG = new InjectionToken<DynamicFormConfig>('DYNAMIC_FORM_CONFIG');
@@ -0,0 +1,5 @@
1
+ export const NO_INFO_TEXT = "Không có thông tin";
2
+ export const UPLOAD_FILE_TEXT = "Tải lên tập tin";
3
+ export const NO_FILE_NAME = "Chưa có thông tin tên tập tin";
4
+ export const UPLOAD_FILE_ERROR = "Lỗi trong quá trình tải tập tin đến máy chủ!";
5
+ export const DELETE_FILE_ERROR = "Lỗi trong quá trình xóa tập tin đến máy chủ!";
@@ -0,0 +1 @@
1
+ export const COMBINE_DEPEND_TYPES = ['skip', 'null', 'valid'] as const;
@@ -0,0 +1,130 @@
1
+ export const IMAGE_TYPES = {
2
+ apng: 'image/apng',
3
+ avif: 'image/avif',
4
+ bmp: 'image/bmp',
5
+ gif: 'image/gif',
6
+ jpeg: 'image/jpeg',
7
+ jpg: 'image/jpeg',
8
+ png: 'image/png',
9
+ svg: 'image/svg+xml',
10
+ tif: 'image/tiff',
11
+ tiff: 'image/tiff',
12
+ webp: 'image/webp',
13
+ };
14
+
15
+ export const AUDIO_TYPES = {
16
+ aac: 'audio/aac',
17
+ mp3: 'audio/mpeg',
18
+ oga: 'audio/ogg',
19
+ opus: 'audio/ogg',
20
+ wav: 'audio/wav',
21
+ weba: 'audio/webm',
22
+ };
23
+
24
+ export const VIDEO_TYPES = {
25
+ avi: 'video/avi',
26
+ mp4: 'video/mp4',
27
+ mpeg: 'video/mpeg',
28
+ ogv: 'video/ogg',
29
+ ts: 'video/mp2t',
30
+ webm: 'video/webm',
31
+ };
32
+
33
+ export const videoTypesPath = ['mp4', 'avi'];
34
+
35
+ export const TEXT_TYPES = {
36
+ css: 'text/css',
37
+ csv: 'text/csv',
38
+ html: 'text/html',
39
+ ics: 'text/calendar',
40
+ js: 'text/javascript ',
41
+ mjs: 'text/javascript ',
42
+ txt: 'text/plain',
43
+ };
44
+
45
+ export const APPLICATION_TYPES = {
46
+ abw: 'application/x-abiword',
47
+ arc: 'application/x-freearc',
48
+ azw: 'application/vnd.amazon.ebook',
49
+ bin: 'application/octet-stream',
50
+ bz: 'application/x-bzip',
51
+ bz2: 'application/x-bzip2',
52
+ cda: 'application/x-cdf',
53
+ csh: 'application/x-csh',
54
+ doc: 'application/msword',
55
+ docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
56
+ eot: 'application/vnd.ms-fontobject',
57
+ epub: 'application/epub+zip',
58
+ jar: 'application/java-archive',
59
+ json: 'application/json',
60
+ jsonld: 'application/ld+json',
61
+ mpkg: 'application/vnd.apple.installer+xml',
62
+ ods: 'application/vnd.oasis.opendocument.spreadsheet',
63
+ odt: 'application/vnd.oasis.opendocument.text',
64
+ ogx: 'application/ogg',
65
+ pdf: 'application/pdf',
66
+ php: 'application/x-httpd-php',
67
+ ppt: 'application/vnd.ms-powerpoint',
68
+ pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
69
+ rar: 'application/vnd.rar',
70
+ rarX: 'application/x-rar',
71
+ rtf: 'application/rtf',
72
+ sh: 'application/x-sh',
73
+ tar: 'application/x-tar',
74
+ vsd: 'application/vnd.visio',
75
+ xhtml: 'application/xhtml+xml',
76
+ xls: 'application/vnd.ms-excel',
77
+ xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
78
+ zip: 'application/x-zip-compressed',
79
+ zipN: 'application/zip',
80
+ sevenZ: 'application/x-7z-compressed',
81
+ csv: 'text/csv',
82
+ };
83
+
84
+ export const MIME_TYPES_TO_EXTENSION = Object.entries(APPLICATION_TYPES).reduce(
85
+ (acc, [key, value]) => {
86
+ acc[value] = key;
87
+ return acc;
88
+ },
89
+ {} as Record<string, string>,
90
+ );
91
+
92
+ export const ALL_MIME_TYPES = {
93
+ ...IMAGE_TYPES,
94
+ ...AUDIO_TYPES,
95
+ ...VIDEO_TYPES,
96
+ ...TEXT_TYPES,
97
+ ...APPLICATION_TYPES,
98
+ };
99
+
100
+ export const ALL_MIME_TYPES_VALUE = Object.values({
101
+ ...IMAGE_TYPES,
102
+ ...AUDIO_TYPES,
103
+ ...VIDEO_TYPES,
104
+ ...TEXT_TYPES,
105
+ ...APPLICATION_TYPES,
106
+ });
107
+
108
+ export const DEFAULT_ACCEPTED_MIME_TYPES = [
109
+ IMAGE_TYPES.jpg,
110
+ IMAGE_TYPES.jpeg,
111
+ IMAGE_TYPES.png,
112
+ IMAGE_TYPES.svg,
113
+ APPLICATION_TYPES.doc,
114
+ APPLICATION_TYPES.docx,
115
+ APPLICATION_TYPES.pdf,
116
+ APPLICATION_TYPES.xls,
117
+ APPLICATION_TYPES.xlsx,
118
+ APPLICATION_TYPES.zip,
119
+ APPLICATION_TYPES.zipN,
120
+ TEXT_TYPES.txt,
121
+ VIDEO_TYPES.mp4,
122
+ VIDEO_TYPES.avi,
123
+ ];
124
+
125
+ export const DEFAULT_ACCEPTED_IMAGE_MIME_TYPES = [
126
+ IMAGE_TYPES.jpg,
127
+ IMAGE_TYPES.jpeg,
128
+ IMAGE_TYPES.png,
129
+ IMAGE_TYPES.svg,
130
+ ];
@@ -1,4 +1,4 @@
1
- export * from './standalone-import.const';
2
- export * from './common.const';
3
- export * from './file.const';
4
- export * from './field-dependency.const';
1
+ export * from './standalone-import.const';
2
+ export * from './common.const';
3
+ export * from './file.const';
4
+ export * from './field-dependency.const';