@rchemist/listgrid 0.2.6

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 (592) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +343 -0
  3. package/dist/adapters/next/NextListGridProvider.d.ts +5 -0
  4. package/dist/adapters/next/NextListGridProvider.js +7 -0
  5. package/dist/adapters/next/NextRouterAdapter.d.ts +2 -0
  6. package/dist/adapters/next/NextRouterAdapter.js +34 -0
  7. package/dist/adapters/next/NextUrlStateAdapter.d.ts +2 -0
  8. package/dist/adapters/next/NextUrlStateAdapter.js +31 -0
  9. package/dist/adapters/next/index.d.ts +4 -0
  10. package/dist/adapters/next/index.js +12 -0
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.js +3 -0
  13. package/dist/listgrid/api/ApiClient.d.ts +20 -0
  14. package/dist/listgrid/api/ApiClient.js +32 -0
  15. package/dist/listgrid/api/index.d.ts +4 -0
  16. package/dist/listgrid/api/index.js +2 -0
  17. package/dist/listgrid/api/types.d.ts +21 -0
  18. package/dist/listgrid/api/types.js +30 -0
  19. package/dist/listgrid/auth/AuthContext.d.ts +12 -0
  20. package/dist/listgrid/auth/AuthContext.js +25 -0
  21. package/dist/listgrid/auth/SessionProvider.d.ts +4 -0
  22. package/dist/listgrid/auth/SessionProvider.js +16 -0
  23. package/dist/listgrid/auth/index.d.ts +6 -0
  24. package/dist/listgrid/auth/index.js +17 -0
  25. package/dist/listgrid/auth/types.d.ts +15 -0
  26. package/dist/listgrid/auth/types.js +12 -0
  27. package/dist/listgrid/common/func.d.ts +16 -0
  28. package/dist/listgrid/common/func.js +351 -0
  29. package/dist/listgrid/common/type.d.ts +35 -0
  30. package/dist/listgrid/common/type.js +46 -0
  31. package/dist/listgrid/components/api/ApiSpecificationButton.d.ts +5 -0
  32. package/dist/listgrid/components/api/ApiSpecificationButton.js +16 -0
  33. package/dist/listgrid/components/api/Type.d.ts +23 -0
  34. package/dist/listgrid/components/api/Type.js +8 -0
  35. package/dist/listgrid/components/api/ViewApiSpecification.d.ts +2 -0
  36. package/dist/listgrid/components/api/ViewApiSpecification.js +32 -0
  37. package/dist/listgrid/components/fields/ApplyFullAddressFields.d.ts +45 -0
  38. package/dist/listgrid/components/fields/ApplyFullAddressFields.js +177 -0
  39. package/dist/listgrid/components/fields/BirthdayField.d.ts +39 -0
  40. package/dist/listgrid/components/fields/BirthdayField.js +205 -0
  41. package/dist/listgrid/components/fields/BooleanField.d.ts +38 -0
  42. package/dist/listgrid/components/fields/BooleanField.js +141 -0
  43. package/dist/listgrid/components/fields/CheckboxField.d.ts +23 -0
  44. package/dist/listgrid/components/fields/CheckboxField.js +33 -0
  45. package/dist/listgrid/components/fields/ColorField.d.ts +18 -0
  46. package/dist/listgrid/components/fields/ColorField.js +63 -0
  47. package/dist/listgrid/components/fields/ColorPresetField.d.ts +19 -0
  48. package/dist/listgrid/components/fields/ColorPresetField.js +56 -0
  49. package/dist/listgrid/components/fields/CustomOptionField.d.ts +45 -0
  50. package/dist/listgrid/components/fields/CustomOptionField.js +176 -0
  51. package/dist/listgrid/components/fields/DateField.d.ts +34 -0
  52. package/dist/listgrid/components/fields/DateField.js +116 -0
  53. package/dist/listgrid/components/fields/DatetimeField.d.ts +29 -0
  54. package/dist/listgrid/components/fields/DatetimeField.js +93 -0
  55. package/dist/listgrid/components/fields/EmailField.d.ts +37 -0
  56. package/dist/listgrid/components/fields/EmailField.js +144 -0
  57. package/dist/listgrid/components/fields/FileField.d.ts +36 -0
  58. package/dist/listgrid/components/fields/FileField.js +157 -0
  59. package/dist/listgrid/components/fields/HtmlField.d.ts +24 -0
  60. package/dist/listgrid/components/fields/HtmlField.js +70 -0
  61. package/dist/listgrid/components/fields/ImageField.d.ts +34 -0
  62. package/dist/listgrid/components/fields/ImageField.js +125 -0
  63. package/dist/listgrid/components/fields/InlineMapField.d.ts +40 -0
  64. package/dist/listgrid/components/fields/InlineMapField.js +85 -0
  65. package/dist/listgrid/components/fields/LinkField.d.ts +26 -0
  66. package/dist/listgrid/components/fields/LinkField.js +61 -0
  67. package/dist/listgrid/components/fields/ManyToOneField.d.ts +80 -0
  68. package/dist/listgrid/components/fields/ManyToOneField.js +416 -0
  69. package/dist/listgrid/components/fields/MappedJoinField.d.ts +16 -0
  70. package/dist/listgrid/components/fields/MappedJoinField.js +29 -0
  71. package/dist/listgrid/components/fields/MarkdownField.d.ts +20 -0
  72. package/dist/listgrid/components/fields/MarkdownField.js +58 -0
  73. package/dist/listgrid/components/fields/MessageViewField.d.ts +20 -0
  74. package/dist/listgrid/components/fields/MessageViewField.js +27 -0
  75. package/dist/listgrid/components/fields/MonthField.d.ts +25 -0
  76. package/dist/listgrid/components/fields/MonthField.js +68 -0
  77. package/dist/listgrid/components/fields/MultiSelectField.d.ts +59 -0
  78. package/dist/listgrid/components/fields/MultiSelectField.js +74 -0
  79. package/dist/listgrid/components/fields/MultipleAssetField.d.ts +31 -0
  80. package/dist/listgrid/components/fields/MultipleAssetField.js +200 -0
  81. package/dist/listgrid/components/fields/NumberField.d.ts +54 -0
  82. package/dist/listgrid/components/fields/NumberField.js +216 -0
  83. package/dist/listgrid/components/fields/PasswordField.d.ts +23 -0
  84. package/dist/listgrid/components/fields/PasswordField.js +70 -0
  85. package/dist/listgrid/components/fields/PhoneNumberField.d.ts +39 -0
  86. package/dist/listgrid/components/fields/PhoneNumberField.js +91 -0
  87. package/dist/listgrid/components/fields/Preset.d.ts +68 -0
  88. package/dist/listgrid/components/fields/Preset.js +306 -0
  89. package/dist/listgrid/components/fields/ProfileField.d.ts +14 -0
  90. package/dist/listgrid/components/fields/ProfileField.js +25 -0
  91. package/dist/listgrid/components/fields/QrField.d.ts +21 -0
  92. package/dist/listgrid/components/fields/QrField.js +31 -0
  93. package/dist/listgrid/components/fields/RuleField.d.ts +11 -0
  94. package/dist/listgrid/components/fields/RuleField.js +24 -0
  95. package/dist/listgrid/components/fields/SelectField.d.ts +223 -0
  96. package/dist/listgrid/components/fields/SelectField.js +379 -0
  97. package/dist/listgrid/components/fields/SelectFieldRenderer.d.ts +35 -0
  98. package/dist/listgrid/components/fields/SelectFieldRenderer.js +363 -0
  99. package/dist/listgrid/components/fields/StatusChangeReasonModal.d.ts +18 -0
  100. package/dist/listgrid/components/fields/StatusChangeReasonModal.js +25 -0
  101. package/dist/listgrid/components/fields/StringField.d.ts +34 -0
  102. package/dist/listgrid/components/fields/StringField.js +131 -0
  103. package/dist/listgrid/components/fields/TagField.d.ts +35 -0
  104. package/dist/listgrid/components/fields/TagField.js +75 -0
  105. package/dist/listgrid/components/fields/TelephoneNumberField.d.ts +35 -0
  106. package/dist/listgrid/components/fields/TelephoneNumberField.js +121 -0
  107. package/dist/listgrid/components/fields/TextareaField.d.ts +27 -0
  108. package/dist/listgrid/components/fields/TextareaField.js +47 -0
  109. package/dist/listgrid/components/fields/TimeField.d.ts +21 -0
  110. package/dist/listgrid/components/fields/TimeField.js +40 -0
  111. package/dist/listgrid/components/fields/XrefAvailableDateMappingField.d.ts +22 -0
  112. package/dist/listgrid/components/fields/XrefAvailableDateMappingField.js +39 -0
  113. package/dist/listgrid/components/fields/XrefMappingField.d.ts +30 -0
  114. package/dist/listgrid/components/fields/XrefMappingField.js +59 -0
  115. package/dist/listgrid/components/fields/XrefPreferMappingField.d.ts +30 -0
  116. package/dist/listgrid/components/fields/XrefPreferMappingField.js +53 -0
  117. package/dist/listgrid/components/fields/XrefPriceMappingField.d.ts +33 -0
  118. package/dist/listgrid/components/fields/XrefPriceMappingField.js +56 -0
  119. package/dist/listgrid/components/fields/YearField.d.ts +32 -0
  120. package/dist/listgrid/components/fields/YearField.js +99 -0
  121. package/dist/listgrid/components/fields/abstract/AbstractDateField.d.ts +33 -0
  122. package/dist/listgrid/components/fields/abstract/AbstractDateField.js +61 -0
  123. package/dist/listgrid/components/fields/abstract/AbstractManyToOneField.d.ts +97 -0
  124. package/dist/listgrid/components/fields/abstract/AbstractManyToOneField.js +50 -0
  125. package/dist/listgrid/components/fields/abstract/CheckButtonValidationField.d.ts +22 -0
  126. package/dist/listgrid/components/fields/abstract/CheckButtonValidationField.js +92 -0
  127. package/dist/listgrid/components/fields/abstract/FormField.d.ts +250 -0
  128. package/dist/listgrid/components/fields/abstract/FormField.js +606 -0
  129. package/dist/listgrid/components/fields/abstract/ListableFormField.d.ts +140 -0
  130. package/dist/listgrid/components/fields/abstract/ListableFormField.js +285 -0
  131. package/dist/listgrid/components/fields/abstract/OptionalField.d.ts +96 -0
  132. package/dist/listgrid/components/fields/abstract/OptionalField.js +310 -0
  133. package/dist/listgrid/components/fields/abstract/index.d.ts +6 -0
  134. package/dist/listgrid/components/fields/abstract/index.js +12 -0
  135. package/dist/listgrid/components/fields/address/AddressFieldView.d.ts +9 -0
  136. package/dist/listgrid/components/fields/address/AddressFieldView.js +92 -0
  137. package/dist/listgrid/components/fields/address/AddressMapField.d.ts +33 -0
  138. package/dist/listgrid/components/fields/address/AddressMapField.js +49 -0
  139. package/dist/listgrid/components/fields/address/KakaoMap.d.ts +10 -0
  140. package/dist/listgrid/components/fields/address/KakaoMap.js +50 -0
  141. package/dist/listgrid/components/fields/address/PostCodeSelector.d.ts +9 -0
  142. package/dist/listgrid/components/fields/address/PostCodeSelector.js +125 -0
  143. package/dist/listgrid/components/fields/contentasset/ContentAssetField.d.ts +61 -0
  144. package/dist/listgrid/components/fields/contentasset/ContentAssetField.js +80 -0
  145. package/dist/listgrid/components/fields/contentasset/ContentAssetItem.d.ts +17 -0
  146. package/dist/listgrid/components/fields/contentasset/ContentAssetItem.js +67 -0
  147. package/dist/listgrid/components/fields/contentasset/components/AddContentDialog.d.ts +11 -0
  148. package/dist/listgrid/components/fields/contentasset/components/AddContentDialog.js +68 -0
  149. package/dist/listgrid/components/fields/contentasset/components/ContentAssetItemUI.d.ts +30 -0
  150. package/dist/listgrid/components/fields/contentasset/components/ContentAssetItemUI.js +38 -0
  151. package/dist/listgrid/components/fields/contentasset/hooks/useContentAsset.d.ts +36 -0
  152. package/dist/listgrid/components/fields/contentasset/hooks/useContentAsset.js +188 -0
  153. package/dist/listgrid/components/fields/contentasset/index.d.ts +2 -0
  154. package/dist/listgrid/components/fields/contentasset/index.js +1 -0
  155. package/dist/listgrid/components/fields/contentasset/types.d.ts +50 -0
  156. package/dist/listgrid/components/fields/contentasset/types.js +48 -0
  157. package/dist/listgrid/components/fields/filter/DatetimeFilter.d.ts +7 -0
  158. package/dist/listgrid/components/fields/filter/DatetimeFilter.js +46 -0
  159. package/dist/listgrid/components/fields/filter/NumberFilter.d.ts +7 -0
  160. package/dist/listgrid/components/fields/filter/NumberFilter.js +74 -0
  161. package/dist/listgrid/components/fields/rule/RuleBasedFieldView.d.ts +15 -0
  162. package/dist/listgrid/components/fields/rule/RuleBasedFieldView.js +351 -0
  163. package/dist/listgrid/components/fields/rule/RuleBasedSelector.d.ts +13 -0
  164. package/dist/listgrid/components/fields/rule/RuleBasedSelector.js +75 -0
  165. package/dist/listgrid/components/fields/rule/RuleCondition.d.ts +14 -0
  166. package/dist/listgrid/components/fields/rule/RuleCondition.js +173 -0
  167. package/dist/listgrid/components/fields/rule/RuleFieldRenderer.d.ts +7 -0
  168. package/dist/listgrid/components/fields/rule/RuleFieldRenderer.js +21 -0
  169. package/dist/listgrid/components/fields/rule/RuleFieldView.d.ts +7 -0
  170. package/dist/listgrid/components/fields/rule/RuleFieldView.js +28 -0
  171. package/dist/listgrid/components/fields/rule/Type.d.ts +54 -0
  172. package/dist/listgrid/components/fields/rule/Type.js +72 -0
  173. package/dist/listgrid/components/fields/view/CardManyToOneView.d.ts +93 -0
  174. package/dist/listgrid/components/fields/view/CardManyToOneView.js +409 -0
  175. package/dist/listgrid/components/fields/view/CopyableTextView.d.ts +11 -0
  176. package/dist/listgrid/components/fields/view/CopyableTextView.js +44 -0
  177. package/dist/listgrid/components/fields/view/DynamicSelectFieldView.d.ts +28 -0
  178. package/dist/listgrid/components/fields/view/DynamicSelectFieldView.js +119 -0
  179. package/dist/listgrid/components/fields/view/LinkFieldView.d.ts +14 -0
  180. package/dist/listgrid/components/fields/view/LinkFieldView.js +41 -0
  181. package/dist/listgrid/components/fields/view/ManyToOneListView.d.ts +8 -0
  182. package/dist/listgrid/components/fields/view/ManyToOneListView.js +25 -0
  183. package/dist/listgrid/components/fields/view/ManyToOneMultiFilterView.d.ts +12 -0
  184. package/dist/listgrid/components/fields/view/ManyToOneMultiFilterView.js +142 -0
  185. package/dist/listgrid/components/fields/view/ManyToOneView.d.ts +8 -0
  186. package/dist/listgrid/components/fields/view/ManyToOneView.js +322 -0
  187. package/dist/listgrid/components/fields/view/MultipleAssetUpload.d.ts +7 -0
  188. package/dist/listgrid/components/fields/view/MultipleAssetUpload.js +47 -0
  189. package/dist/listgrid/components/fields/view/PhoneNumberFieldView.d.ts +19 -0
  190. package/dist/listgrid/components/fields/view/PhoneNumberFieldView.js +82 -0
  191. package/dist/listgrid/components/fields/view/PhoneNumberListView.d.ts +9 -0
  192. package/dist/listgrid/components/fields/view/PhoneNumberListView.js +49 -0
  193. package/dist/listgrid/components/fields/view/SelectBoxManyToOneView.d.ts +47 -0
  194. package/dist/listgrid/components/fields/view/SelectBoxManyToOneView.js +286 -0
  195. package/dist/listgrid/components/fields/view/SmsModal.d.ts +6 -0
  196. package/dist/listgrid/components/fields/view/SmsModal.js +124 -0
  197. package/dist/listgrid/components/fields/view/TreeSelectView.d.ts +11 -0
  198. package/dist/listgrid/components/fields/view/TreeSelectView.js +118 -0
  199. package/dist/listgrid/components/fields/view/XrefAvailableDateMappingView.d.ts +19 -0
  200. package/dist/listgrid/components/fields/view/XrefAvailableDateMappingView.js +305 -0
  201. package/dist/listgrid/components/fields/view/XrefMappingView.d.ts +16 -0
  202. package/dist/listgrid/components/fields/view/XrefMappingView.js +173 -0
  203. package/dist/listgrid/components/fields/view/XrefPiceMappingView.d.ts +19 -0
  204. package/dist/listgrid/components/fields/view/XrefPiceMappingView.js +319 -0
  205. package/dist/listgrid/components/fields/view/XrefPreferMappingView.d.ts +19 -0
  206. package/dist/listgrid/components/fields/view/XrefPreferMappingView.js +261 -0
  207. package/dist/listgrid/components/fields/view/XrefPriorityMappingView.d.ts +19 -0
  208. package/dist/listgrid/components/fields/view/XrefPriorityMappingView.js +180 -0
  209. package/dist/listgrid/components/form/FieldRenderer.d.ts +23 -0
  210. package/dist/listgrid/components/form/FieldRenderer.js +292 -0
  211. package/dist/listgrid/components/form/SubCollectionRenderer.d.ts +22 -0
  212. package/dist/listgrid/components/form/SubCollectionRenderer.js +46 -0
  213. package/dist/listgrid/components/form/ViewEntityForm.d.ts +14 -0
  214. package/dist/listgrid/components/form/ViewEntityForm.js +124 -0
  215. package/dist/listgrid/components/form/ViewFieldGroup.d.ts +27 -0
  216. package/dist/listgrid/components/form/ViewFieldGroup.js +164 -0
  217. package/dist/listgrid/components/form/ViewTab.d.ts +24 -0
  218. package/dist/listgrid/components/form/ViewTab.js +68 -0
  219. package/dist/listgrid/components/form/ViewTabPanel.d.ts +14 -0
  220. package/dist/listgrid/components/form/ViewTabPanel.js +32 -0
  221. package/dist/listgrid/components/form/context/EntityFormThemeContext.d.ts +52 -0
  222. package/dist/listgrid/components/form/context/EntityFormThemeContext.js +129 -0
  223. package/dist/listgrid/components/form/context/index.d.ts +1 -0
  224. package/dist/listgrid/components/form/context/index.js +1 -0
  225. package/dist/listgrid/components/form/hooks/useAlertManager.d.ts +12 -0
  226. package/dist/listgrid/components/form/hooks/useAlertManager.js +103 -0
  227. package/dist/listgrid/components/form/hooks/useEntityFormAutoSave.d.ts +23 -0
  228. package/dist/listgrid/components/form/hooks/useEntityFormAutoSave.js +145 -0
  229. package/dist/listgrid/components/form/hooks/useEntityFormInitializer.d.ts +24 -0
  230. package/dist/listgrid/components/form/hooks/useEntityFormInitializer.js +109 -0
  231. package/dist/listgrid/components/form/hooks/useEntityFormLogic.d.ts +63 -0
  232. package/dist/listgrid/components/form/hooks/useEntityFormLogic.js +513 -0
  233. package/dist/listgrid/components/form/hooks/useEntityFormSave.d.ts +28 -0
  234. package/dist/listgrid/components/form/hooks/useEntityFormSave.js +89 -0
  235. package/dist/listgrid/components/form/hooks/useEntityFormTitle.d.ts +12 -0
  236. package/dist/listgrid/components/form/hooks/useEntityFormTitle.js +53 -0
  237. package/dist/listgrid/components/form/themes/defaultTheme.d.ts +11 -0
  238. package/dist/listgrid/components/form/themes/defaultTheme.js +129 -0
  239. package/dist/listgrid/components/form/themes/index.d.ts +1 -0
  240. package/dist/listgrid/components/form/themes/index.js +1 -0
  241. package/dist/listgrid/components/form/types/ViewEntityForm.types.d.ts +169 -0
  242. package/dist/listgrid/components/form/types/ViewEntityForm.types.js +1 -0
  243. package/dist/listgrid/components/form/types/ViewEntityFormAlerts.types.d.ts +26 -0
  244. package/dist/listgrid/components/form/types/ViewEntityFormAlerts.types.js +1 -0
  245. package/dist/listgrid/components/form/types/ViewEntityFormButtons.types.d.ts +49 -0
  246. package/dist/listgrid/components/form/types/ViewEntityFormButtons.types.js +1 -0
  247. package/dist/listgrid/components/form/types/ViewEntityFormTheme.types.d.ts +518 -0
  248. package/dist/listgrid/components/form/types/ViewEntityFormTheme.types.js +1 -0
  249. package/dist/listgrid/components/form/ui/AlertItem.d.ts +7 -0
  250. package/dist/listgrid/components/form/ui/AlertItem.js +18 -0
  251. package/dist/listgrid/components/form/ui/CreateStepButtons.d.ts +25 -0
  252. package/dist/listgrid/components/form/ui/CreateStepButtons.js +18 -0
  253. package/dist/listgrid/components/form/ui/CreateStepView.d.ts +39 -0
  254. package/dist/listgrid/components/form/ui/CreateStepView.js +50 -0
  255. package/dist/listgrid/components/form/ui/ViewEntityError.d.ts +13 -0
  256. package/dist/listgrid/components/form/ui/ViewEntityError.js +90 -0
  257. package/dist/listgrid/components/form/ui/ViewEntityFormAlerts.d.ts +3 -0
  258. package/dist/listgrid/components/form/ui/ViewEntityFormAlerts.js +24 -0
  259. package/dist/listgrid/components/form/ui/ViewEntityFormButtons.d.ts +24 -0
  260. package/dist/listgrid/components/form/ui/ViewEntityFormButtons.js +208 -0
  261. package/dist/listgrid/components/form/ui/ViewEntityFormErrors.d.ts +25 -0
  262. package/dist/listgrid/components/form/ui/ViewEntityFormErrors.js +9 -0
  263. package/dist/listgrid/components/form/ui/ViewEntityFormFields.d.ts +38 -0
  264. package/dist/listgrid/components/form/ui/ViewEntityFormFields.js +25 -0
  265. package/dist/listgrid/components/form/ui/ViewEntityFormSkeleton.d.ts +16 -0
  266. package/dist/listgrid/components/form/ui/ViewEntityFormSkeleton.js +79 -0
  267. package/dist/listgrid/components/form/ui/ViewEntityFormTitle.d.ts +15 -0
  268. package/dist/listgrid/components/form/ui/ViewEntityFormTitle.js +21 -0
  269. package/dist/listgrid/components/form/ui/ViewFieldError.d.ts +5 -0
  270. package/dist/listgrid/components/form/ui/ViewFieldError.js +12 -0
  271. package/dist/listgrid/components/form/ui/ViewHelpIcon.d.ts +5 -0
  272. package/dist/listgrid/components/form/ui/ViewHelpIcon.js +13 -0
  273. package/dist/listgrid/components/form/ui/ViewHelpText.d.ts +5 -0
  274. package/dist/listgrid/components/form/ui/ViewHelpText.js +10 -0
  275. package/dist/listgrid/components/form/ui/buttons/ClosePopupButton.d.ts +8 -0
  276. package/dist/listgrid/components/form/ui/buttons/ClosePopupButton.js +32 -0
  277. package/dist/listgrid/components/form/ui/buttons/DeleteButton.d.ts +2 -0
  278. package/dist/listgrid/components/form/ui/buttons/DeleteButton.js +101 -0
  279. package/dist/listgrid/components/form/ui/buttons/ListButton.d.ts +2 -0
  280. package/dist/listgrid/components/form/ui/buttons/ListButton.js +55 -0
  281. package/dist/listgrid/components/form/ui/buttons/SaveButton.d.ts +2 -0
  282. package/dist/listgrid/components/form/ui/buttons/SaveButton.js +55 -0
  283. package/dist/listgrid/components/helper/FieldRendererHelper.d.ts +23 -0
  284. package/dist/listgrid/components/helper/FieldRendererHelper.js +27 -0
  285. package/dist/listgrid/components/helper/ShowNotifications.d.ts +13 -0
  286. package/dist/listgrid/components/helper/ShowNotifications.js +58 -0
  287. package/dist/listgrid/components/list/AdvancedSearchForm.d.ts +17 -0
  288. package/dist/listgrid/components/list/AdvancedSearchForm.js +113 -0
  289. package/dist/listgrid/components/list/AdvancedSearchFormV2.d.ts +19 -0
  290. package/dist/listgrid/components/list/AdvancedSearchFormV2.js +347 -0
  291. package/dist/listgrid/components/list/ListGridHeader.d.ts +2 -0
  292. package/dist/listgrid/components/list/ListGridHeader.js +21 -0
  293. package/dist/listgrid/components/list/QuickSearchBar.d.ts +22 -0
  294. package/dist/listgrid/components/list/QuickSearchBar.js +17 -0
  295. package/dist/listgrid/components/list/RowItem.d.ts +2 -0
  296. package/dist/listgrid/components/list/RowItem.js +70 -0
  297. package/dist/listgrid/components/list/SubCollectionButtons.d.ts +2 -0
  298. package/dist/listgrid/components/list/SubCollectionButtons.js +36 -0
  299. package/dist/listgrid/components/list/ViewFieldSelector.d.ts +10 -0
  300. package/dist/listgrid/components/list/ViewFieldSelector.js +48 -0
  301. package/dist/listgrid/components/list/ViewListGrid.d.ts +2 -0
  302. package/dist/listgrid/components/list/ViewListGrid.js +359 -0
  303. package/dist/listgrid/components/list/context/EntityFormScopeContext.d.ts +39 -0
  304. package/dist/listgrid/components/list/context/EntityFormScopeContext.js +75 -0
  305. package/dist/listgrid/components/list/context/ListGridThemeContext.d.ts +70 -0
  306. package/dist/listgrid/components/list/context/ListGridThemeContext.js +157 -0
  307. package/dist/listgrid/components/list/context/index.d.ts +2 -0
  308. package/dist/listgrid/components/list/context/index.js +1 -0
  309. package/dist/listgrid/components/list/hooks/searchFormUrlSync.d.ts +42 -0
  310. package/dist/listgrid/components/list/hooks/searchFormUrlSync.js +212 -0
  311. package/dist/listgrid/components/list/hooks/urlStateParsers.d.ts +63 -0
  312. package/dist/listgrid/components/list/hooks/urlStateParsers.js +241 -0
  313. package/dist/listgrid/components/list/hooks/useCardSubCollectionData.d.ts +34 -0
  314. package/dist/listgrid/components/list/hooks/useCardSubCollectionData.js +181 -0
  315. package/dist/listgrid/components/list/hooks/useListGridHeader.d.ts +6 -0
  316. package/dist/listgrid/components/list/hooks/useListGridHeader.js +92 -0
  317. package/dist/listgrid/components/list/hooks/useListGridLogic.d.ts +2 -0
  318. package/dist/listgrid/components/list/hooks/useListGridLogic.js +625 -0
  319. package/dist/listgrid/components/list/hooks/useListGridUrlState.d.ts +45 -0
  320. package/dist/listgrid/components/list/hooks/useListGridUrlState.js +131 -0
  321. package/dist/listgrid/components/list/hooks/useQuickSearchBar.d.ts +22 -0
  322. package/dist/listgrid/components/list/hooks/useQuickSearchBar.js +104 -0
  323. package/dist/listgrid/components/list/hooks/useSubCollectionExpansion.d.ts +21 -0
  324. package/dist/listgrid/components/list/hooks/useSubCollectionExpansion.js +62 -0
  325. package/dist/listgrid/components/list/themes/defaultListGridTheme.d.ts +14 -0
  326. package/dist/listgrid/components/list/themes/defaultListGridTheme.js +169 -0
  327. package/dist/listgrid/components/list/themes/index.d.ts +4 -0
  328. package/dist/listgrid/components/list/themes/index.js +4 -0
  329. package/dist/listgrid/components/list/themes/variants/mainTheme.d.ts +8 -0
  330. package/dist/listgrid/components/list/themes/variants/mainTheme.js +37 -0
  331. package/dist/listgrid/components/list/themes/variants/modalTheme.d.ts +8 -0
  332. package/dist/listgrid/components/list/themes/variants/modalTheme.js +47 -0
  333. package/dist/listgrid/components/list/themes/variants/subCollectionTheme.d.ts +8 -0
  334. package/dist/listgrid/components/list/themes/variants/subCollectionTheme.js +101 -0
  335. package/dist/listgrid/components/list/types/ListGridHeader.types.d.ts +35 -0
  336. package/dist/listgrid/components/list/types/ListGridHeader.types.js +3 -0
  337. package/dist/listgrid/components/list/types/RowItem.types.d.ts +57 -0
  338. package/dist/listgrid/components/list/types/RowItem.types.js +1 -0
  339. package/dist/listgrid/components/list/types/SubCollectionButtons.type.d.ts +29 -0
  340. package/dist/listgrid/components/list/types/SubCollectionButtons.type.js +1 -0
  341. package/dist/listgrid/components/list/types/ViewListGrid.types.d.ts +152 -0
  342. package/dist/listgrid/components/list/types/ViewListGrid.types.js +2 -0
  343. package/dist/listgrid/components/list/types/ViewListGridTheme.types.d.ts +374 -0
  344. package/dist/listgrid/components/list/types/ViewListGridTheme.types.js +1 -0
  345. package/dist/listgrid/components/list/ui/CardFieldRenderer.d.ts +31 -0
  346. package/dist/listgrid/components/list/ui/CardFieldRenderer.js +71 -0
  347. package/dist/listgrid/components/list/ui/CardFieldSection.d.ts +27 -0
  348. package/dist/listgrid/components/list/ui/CardFieldSection.js +108 -0
  349. package/dist/listgrid/components/list/ui/CardItem.d.ts +28 -0
  350. package/dist/listgrid/components/list/ui/CardItem.js +376 -0
  351. package/dist/listgrid/components/list/ui/CardSubCollectionModal.d.ts +38 -0
  352. package/dist/listgrid/components/list/ui/CardSubCollectionModal.js +80 -0
  353. package/dist/listgrid/components/list/ui/CardSubCollectionView.d.ts +44 -0
  354. package/dist/listgrid/components/list/ui/CardSubCollectionView.js +238 -0
  355. package/dist/listgrid/components/list/ui/DataTransferModal.d.ts +12 -0
  356. package/dist/listgrid/components/list/ui/DataTransferModal.js +10 -0
  357. package/dist/listgrid/components/list/ui/EntireChecker.d.ts +11 -0
  358. package/dist/listgrid/components/list/ui/EntireChecker.js +46 -0
  359. package/dist/listgrid/components/list/ui/FieldSelector.d.ts +11 -0
  360. package/dist/listgrid/components/list/ui/FieldSelector.js +40 -0
  361. package/dist/listgrid/components/list/ui/FilterButton.d.ts +7 -0
  362. package/dist/listgrid/components/list/ui/FilterButton.js +5 -0
  363. package/dist/listgrid/components/list/ui/FilterDropdown.d.ts +15 -0
  364. package/dist/listgrid/components/list/ui/FilterDropdown.js +106 -0
  365. package/dist/listgrid/components/list/ui/FilterView.d.ts +12 -0
  366. package/dist/listgrid/components/list/ui/FilterView.js +22 -0
  367. package/dist/listgrid/components/list/ui/HeaderActionButtons.d.ts +10 -0
  368. package/dist/listgrid/components/list/ui/HeaderActionButtons.js +39 -0
  369. package/dist/listgrid/components/list/ui/HeaderField.d.ts +19 -0
  370. package/dist/listgrid/components/list/ui/HeaderField.js +32 -0
  371. package/dist/listgrid/components/list/ui/HeaderFieldFilter.d.ts +14 -0
  372. package/dist/listgrid/components/list/ui/HeaderFieldFilter.js +166 -0
  373. package/dist/listgrid/components/list/ui/HeaderTitle.d.ts +4 -0
  374. package/dist/listgrid/components/list/ui/HeaderTitle.js +13 -0
  375. package/dist/listgrid/components/list/ui/InlineSubCollectionView.d.ts +30 -0
  376. package/dist/listgrid/components/list/ui/InlineSubCollectionView.js +260 -0
  377. package/dist/listgrid/components/list/ui/MemoizedFilterField.d.ts +14 -0
  378. package/dist/listgrid/components/list/ui/MemoizedFilterField.js +67 -0
  379. package/dist/listgrid/components/list/ui/QuickSearchInput.d.ts +9 -0
  380. package/dist/listgrid/components/list/ui/QuickSearchInput.js +17 -0
  381. package/dist/listgrid/components/list/ui/SearchBarActions.d.ts +19 -0
  382. package/dist/listgrid/components/list/ui/SearchBarActions.js +39 -0
  383. package/dist/listgrid/components/list/ui/SortField.d.ts +8 -0
  384. package/dist/listgrid/components/list/ui/SortField.js +42 -0
  385. package/dist/listgrid/components/list/ui/SubCollectionInlineView.d.ts +23 -0
  386. package/dist/listgrid/components/list/ui/SubCollectionInlineView.js +47 -0
  387. package/dist/listgrid/components/list/ui/SubCollectionModal.d.ts +15 -0
  388. package/dist/listgrid/components/list/ui/SubCollectionModal.js +34 -0
  389. package/dist/listgrid/components/list/ui/SubCollectionViewModal.d.ts +13 -0
  390. package/dist/listgrid/components/list/ui/SubCollectionViewModal.js +33 -0
  391. package/dist/listgrid/components/list/ui/SyncTopScrollbar.d.ts +18 -0
  392. package/dist/listgrid/components/list/ui/SyncTopScrollbar.js +91 -0
  393. package/dist/listgrid/components/list/ui/TableSubCollectionView.d.ts +25 -0
  394. package/dist/listgrid/components/list/ui/TableSubCollectionView.js +213 -0
  395. package/dist/listgrid/components/list/ui/ViewColumn.d.ts +2 -0
  396. package/dist/listgrid/components/list/ui/ViewColumn.js +56 -0
  397. package/dist/listgrid/components/list/ui/ViewListGridSkeleton.d.ts +20 -0
  398. package/dist/listgrid/components/list/ui/ViewListGridSkeleton.js +82 -0
  399. package/dist/listgrid/components/list/ui/ViewRows.d.ts +15 -0
  400. package/dist/listgrid/components/list/ui/ViewRows.js +283 -0
  401. package/dist/listgrid/components/list/ui/buttons/CacheClearButton.d.ts +9 -0
  402. package/dist/listgrid/components/list/ui/buttons/CacheClearButton.js +35 -0
  403. package/dist/listgrid/components/list/ui/buttons/CreateButton.d.ts +13 -0
  404. package/dist/listgrid/components/list/ui/buttons/CreateButton.js +13 -0
  405. package/dist/listgrid/components/list/ui/buttons/PriorityButton.d.ts +11 -0
  406. package/dist/listgrid/components/list/ui/buttons/PriorityButton.js +49 -0
  407. package/dist/listgrid/components/list/ui/headerFilterStore.d.ts +8 -0
  408. package/dist/listgrid/components/list/ui/headerFilterStore.js +13 -0
  409. package/dist/listgrid/components/list/utils/mappedByFieldFilter.d.ts +21 -0
  410. package/dist/listgrid/components/list/utils/mappedByFieldFilter.js +54 -0
  411. package/dist/listgrid/components/list/utils/performanceLogger.d.ts +48 -0
  412. package/dist/listgrid/components/list/utils/performanceLogger.js +67 -0
  413. package/dist/listgrid/components/revision/RevisionField.d.ts +13 -0
  414. package/dist/listgrid/components/revision/RevisionField.js +194 -0
  415. package/dist/listgrid/config/AdvancedSearchOpenCache.d.ts +3 -0
  416. package/dist/listgrid/config/AdvancedSearchOpenCache.js +48 -0
  417. package/dist/listgrid/config/CardSubCollectionField.d.ts +133 -0
  418. package/dist/listgrid/config/CardSubCollectionField.js +164 -0
  419. package/dist/listgrid/config/CommonType.d.ts +4 -0
  420. package/dist/listgrid/config/CommonType.js +15 -0
  421. package/dist/listgrid/config/Config.d.ts +251 -0
  422. package/dist/listgrid/config/Config.js +299 -0
  423. package/dist/listgrid/config/EntityField.d.ts +148 -0
  424. package/dist/listgrid/config/EntityField.js +1 -0
  425. package/dist/listgrid/config/EntityFieldGroup.d.ts +37 -0
  426. package/dist/listgrid/config/EntityFieldGroup.js +55 -0
  427. package/dist/listgrid/config/EntityForm.d.ts +101 -0
  428. package/dist/listgrid/config/EntityForm.js +859 -0
  429. package/dist/listgrid/config/EntityFormButton.d.ts +56 -0
  430. package/dist/listgrid/config/EntityFormButton.js +42 -0
  431. package/dist/listgrid/config/EntityFormMethod.d.ts +32 -0
  432. package/dist/listgrid/config/EntityFormMethod.js +152 -0
  433. package/dist/listgrid/config/EntityFormTypes.d.ts +62 -0
  434. package/dist/listgrid/config/EntityFormTypes.js +1 -0
  435. package/dist/listgrid/config/EntityItem.d.ts +86 -0
  436. package/dist/listgrid/config/EntityItem.js +1 -0
  437. package/dist/listgrid/config/EntityTab.d.ts +26 -0
  438. package/dist/listgrid/config/EntityTab.js +68 -0
  439. package/dist/listgrid/config/InlineSubCollectionField.d.ts +184 -0
  440. package/dist/listgrid/config/InlineSubCollectionField.js +194 -0
  441. package/dist/listgrid/config/ListGrid.d.ts +56 -0
  442. package/dist/listgrid/config/ListGrid.js +183 -0
  443. package/dist/listgrid/config/ListGridViewFieldCache.d.ts +3 -0
  444. package/dist/listgrid/config/ListGridViewFieldCache.js +53 -0
  445. package/dist/listgrid/config/OnChangeEntityForm.d.ts +43 -0
  446. package/dist/listgrid/config/OnChangeEntityForm.js +266 -0
  447. package/dist/listgrid/config/RuntimeConfig.d.ts +18 -0
  448. package/dist/listgrid/config/RuntimeConfig.js +22 -0
  449. package/dist/listgrid/config/SubCollectionField.d.ts +119 -0
  450. package/dist/listgrid/config/SubCollectionField.js +241 -0
  451. package/dist/listgrid/config/TableSubCollectionField.d.ts +66 -0
  452. package/dist/listgrid/config/TableSubCollectionField.js +132 -0
  453. package/dist/listgrid/config/form/EntityFormActions.d.ts +69 -0
  454. package/dist/listgrid/config/form/EntityFormActions.js +459 -0
  455. package/dist/listgrid/config/form/EntityFormBase.d.ts +204 -0
  456. package/dist/listgrid/config/form/EntityFormBase.js +526 -0
  457. package/dist/listgrid/config/form/EntityFormData.d.ts +32 -0
  458. package/dist/listgrid/config/form/EntityFormData.js +184 -0
  459. package/dist/listgrid/config/form/EntityFormExtensions.d.ts +37 -0
  460. package/dist/listgrid/config/form/EntityFormExtensions.js +105 -0
  461. package/dist/listgrid/config/form/EntityFormValidation.d.ts +28 -0
  462. package/dist/listgrid/config/form/EntityFormValidation.js +128 -0
  463. package/dist/listgrid/extensions/EntityFormExtension.types.d.ts +52 -0
  464. package/dist/listgrid/extensions/EntityFormExtension.types.js +19 -0
  465. package/dist/listgrid/extensions/FieldExtensions.d.ts +5 -0
  466. package/dist/listgrid/extensions/FieldExtensions.js +21 -0
  467. package/dist/listgrid/form/SearchForm.d.ts +153 -0
  468. package/dist/listgrid/form/SearchForm.js +689 -0
  469. package/dist/listgrid/form/TagsInput/types.d.ts +133 -0
  470. package/dist/listgrid/form/TagsInput/types.js +1 -0
  471. package/dist/listgrid/form/Type.d.ts +50 -0
  472. package/dist/listgrid/form/Type.js +95 -0
  473. package/dist/listgrid/index.d.ts +205 -0
  474. package/dist/listgrid/index.js +244 -0
  475. package/dist/listgrid/loading/index.d.ts +6 -0
  476. package/dist/listgrid/loading/index.js +17 -0
  477. package/dist/listgrid/menu/MenuPermissionChecker.d.ts +15 -0
  478. package/dist/listgrid/menu/MenuPermissionChecker.js +15 -0
  479. package/dist/listgrid/menu/index.d.ts +1 -0
  480. package/dist/listgrid/menu/index.js +1 -0
  481. package/dist/listgrid/message/MessageProvider.d.ts +19 -0
  482. package/dist/listgrid/message/MessageProvider.js +62 -0
  483. package/dist/listgrid/message/index.d.ts +1 -0
  484. package/dist/listgrid/message/index.js +1 -0
  485. package/dist/listgrid/misc/index.d.ts +64 -0
  486. package/dist/listgrid/misc/index.js +478 -0
  487. package/dist/listgrid/router/RouterProvider.d.ts +12 -0
  488. package/dist/listgrid/router/RouterProvider.js +34 -0
  489. package/dist/listgrid/router/index.d.ts +3 -0
  490. package/dist/listgrid/router/index.js +1 -0
  491. package/dist/listgrid/router/types.d.ts +34 -0
  492. package/dist/listgrid/router/types.js +6 -0
  493. package/dist/listgrid/store/index.d.ts +24 -0
  494. package/dist/listgrid/store/index.js +40 -0
  495. package/dist/listgrid/transfer/DataExportProcessor.d.ts +18 -0
  496. package/dist/listgrid/transfer/DataExportProcessor.js +102 -0
  497. package/dist/listgrid/transfer/DataExportService.d.ts +37 -0
  498. package/dist/listgrid/transfer/DataExportService.js +225 -0
  499. package/dist/listgrid/transfer/DataExporter.d.ts +10 -0
  500. package/dist/listgrid/transfer/DataExporter.js +85 -0
  501. package/dist/listgrid/transfer/DataImportDescription.d.ts +8 -0
  502. package/dist/listgrid/transfer/DataImportDescription.js +18 -0
  503. package/dist/listgrid/transfer/DataImportProcessor.d.ts +24 -0
  504. package/dist/listgrid/transfer/DataImportProcessor.js +59 -0
  505. package/dist/listgrid/transfer/DataImportResultView.d.ts +13 -0
  506. package/dist/listgrid/transfer/DataImportResultView.js +64 -0
  507. package/dist/listgrid/transfer/DataImportSample.d.ts +10 -0
  508. package/dist/listgrid/transfer/DataImportSample.js +105 -0
  509. package/dist/listgrid/transfer/DataImporter.d.ts +8 -0
  510. package/dist/listgrid/transfer/DataImporter.js +335 -0
  511. package/dist/listgrid/transfer/DynamicDataImporter.d.ts +4 -0
  512. package/dist/listgrid/transfer/DynamicDataImporter.js +13 -0
  513. package/dist/listgrid/transfer/ExcelPasswordField.d.ts +9 -0
  514. package/dist/listgrid/transfer/ExcelPasswordField.js +23 -0
  515. package/dist/listgrid/transfer/Provider/ExcelProvider.d.ts +24 -0
  516. package/dist/listgrid/transfer/Provider/ExcelProvider.js +194 -0
  517. package/dist/listgrid/transfer/Type.d.ts +176 -0
  518. package/dist/listgrid/transfer/Type.js +568 -0
  519. package/dist/listgrid/ui/GlobalModalManager.d.ts +22 -0
  520. package/dist/listgrid/ui/GlobalModalManager.js +65 -0
  521. package/dist/listgrid/ui/UIProvider.d.ts +151 -0
  522. package/dist/listgrid/ui/UIProvider.js +292 -0
  523. package/dist/listgrid/ui/index.d.ts +2 -0
  524. package/dist/listgrid/ui/index.js +2 -0
  525. package/dist/listgrid/urlState/UrlStateProvider.d.ts +8 -0
  526. package/dist/listgrid/urlState/UrlStateProvider.js +20 -0
  527. package/dist/listgrid/urlState/index.d.ts +4 -0
  528. package/dist/listgrid/urlState/index.js +2 -0
  529. package/dist/listgrid/urlState/types.d.ts +21 -0
  530. package/dist/listgrid/urlState/types.js +14 -0
  531. package/dist/listgrid/utils/BooleanUtil.d.ts +1 -0
  532. package/dist/listgrid/utils/BooleanUtil.js +9 -0
  533. package/dist/listgrid/utils/CompareUtil.d.ts +7 -0
  534. package/dist/listgrid/utils/CompareUtil.js +87 -0
  535. package/dist/listgrid/utils/PhoneUtil.d.ts +19 -0
  536. package/dist/listgrid/utils/PhoneUtil.js +38 -0
  537. package/dist/listgrid/utils/RequestUtil.d.ts +6 -0
  538. package/dist/listgrid/utils/RequestUtil.js +6 -0
  539. package/dist/listgrid/utils/StringUtil.d.ts +32 -0
  540. package/dist/listgrid/utils/StringUtil.js +316 -0
  541. package/dist/listgrid/utils/classNames.d.ts +21 -0
  542. package/dist/listgrid/utils/classNames.js +29 -0
  543. package/dist/listgrid/utils/cn.d.ts +12 -0
  544. package/dist/listgrid/utils/cn.js +15 -0
  545. package/dist/listgrid/utils/hash.d.ts +1 -0
  546. package/dist/listgrid/utils/hash.js +15 -0
  547. package/dist/listgrid/utils/i18n.d.ts +16 -0
  548. package/dist/listgrid/utils/i18n.js +31 -0
  549. package/dist/listgrid/utils/index.d.ts +10 -0
  550. package/dist/listgrid/utils/index.js +17 -0
  551. package/dist/listgrid/utils/jsonUtils.d.ts +4 -0
  552. package/dist/listgrid/utils/jsonUtils.js +77 -0
  553. package/dist/listgrid/utils/lazy.d.ts +10 -0
  554. package/dist/listgrid/utils/lazy.js +13 -0
  555. package/dist/listgrid/utils/simpleCrypt.d.ts +4 -0
  556. package/dist/listgrid/utils/simpleCrypt.js +79 -0
  557. package/dist/listgrid/validations/CustomValidation.d.ts +8 -0
  558. package/dist/listgrid/validations/CustomValidation.js +10 -0
  559. package/dist/listgrid/validations/EmailValidation.d.ts +4 -0
  560. package/dist/listgrid/validations/EmailValidation.js +7 -0
  561. package/dist/listgrid/validations/IpAddressValidation.d.ts +26 -0
  562. package/dist/listgrid/validations/IpAddressValidation.js +57 -0
  563. package/dist/listgrid/validations/MinMaxNumberValidation.d.ts +14 -0
  564. package/dist/listgrid/validations/MinMaxNumberValidation.js +28 -0
  565. package/dist/listgrid/validations/PasswordValidation.d.ts +4 -0
  566. package/dist/listgrid/validations/PasswordValidation.js +7 -0
  567. package/dist/listgrid/validations/PhoneNumberValidation.d.ts +12 -0
  568. package/dist/listgrid/validations/PhoneNumberValidation.js +24 -0
  569. package/dist/listgrid/validations/RegexFormularValidation.d.ts +7 -0
  570. package/dist/listgrid/validations/RegexFormularValidation.js +28 -0
  571. package/dist/listgrid/validations/RegexValidation.d.ts +8 -0
  572. package/dist/listgrid/validations/RegexValidation.js +17 -0
  573. package/dist/listgrid/validations/RequiredValidation.d.ts +7 -0
  574. package/dist/listgrid/validations/RequiredValidation.js +12 -0
  575. package/dist/listgrid/validations/StringValidation.d.ts +17 -0
  576. package/dist/listgrid/validations/StringValidation.js +33 -0
  577. package/dist/listgrid/validations/TelephoneNumberValidation.d.ts +12 -0
  578. package/dist/listgrid/validations/TelephoneNumberValidation.js +24 -0
  579. package/dist/listgrid/validations/Validation.d.ts +63 -0
  580. package/dist/listgrid/validations/Validation.js +72 -0
  581. package/dist/listgrid/view/ViewEntityFormWrapper.d.ts +16 -0
  582. package/dist/listgrid/view/ViewEntityFormWrapper.js +98 -0
  583. package/dist/listgrid/view/ViewListGridWrapper.d.ts +10 -0
  584. package/dist/listgrid/view/ViewListGridWrapper.js +96 -0
  585. package/dist/styles/base.css +116 -0
  586. package/dist/styles/components.css +1404 -0
  587. package/dist/styles/layouts.css +3206 -0
  588. package/dist/styles/primitives.css +1542 -0
  589. package/dist/styles/tokens.css +218 -0
  590. package/dist/styles.css +6486 -0
  591. package/docs/PRIMITIVES.md +271 -0
  592. package/package.json +201 -0
@@ -0,0 +1,859 @@
1
+ import { STATUS_TAB_INFO } from './Config';
2
+ import { AbstractManyToOneField, CheckButtonValidationField, FormField, } from '../components/fields/abstract';
3
+ import { callExternalHttpRequest, endsWith, getExternalApiDataWithError, isEmpty, isTrue, parse, } from '../utils';
4
+ import { ResponseData } from '../api';
5
+ import { useSession } from '../auth';
6
+ import { CustomOptionField, getCustomOptionValues } from '../components/fields/CustomOptionField';
7
+ import { delay, entityErrorToString } from './EntityFormMethod';
8
+ import { EntityFormExtensions } from './form/EntityFormExtensions';
9
+ import { ExtensionPoint } from '../extensions/EntityFormExtension.types';
10
+ import { PhoneNumberField } from '../components/fields/PhoneNumberField';
11
+ import { createSmsHistoryField } from '../extensions/FieldExtensions';
12
+ import { hasAnyRole } from '../auth';
13
+ export class EntityForm extends EntityFormExtensions {
14
+ constructor(name, url) {
15
+ super(name, url);
16
+ }
17
+ clone(includeValue) {
18
+ const cloned = new EntityForm(this.name, this.url);
19
+ return this.cloneWithEntityForm(cloned, includeValue);
20
+ }
21
+ cloneWithEntityForm(entityForm, includeValue) {
22
+ entityForm.parentId = this.parentId;
23
+ entityForm.id = this.id;
24
+ entityForm.title = this.title;
25
+ entityForm.menuUrl = this.menuUrl;
26
+ entityForm.neverDelete = this.neverDelete;
27
+ entityForm.revisionEntityName = this.revisionEntityName;
28
+ entityForm.createStep = this.getCreateStep();
29
+ entityForm.manageEntityForm = this.manageEntityForm;
30
+ entityForm.session = this.session;
31
+ // Extensions 복사
32
+ entityForm.clientExtensions = new Map(this.clientExtensions);
33
+ const tabs = new Map();
34
+ Array.from(this.tabs.values()).forEach((tab) => {
35
+ tabs.set(tab.id, tab.clone());
36
+ });
37
+ entityForm.tabs = tabs;
38
+ // clone errors
39
+ if (isTrue(includeValue)) {
40
+ entityForm.errors = this.errors === undefined ? undefined : [...this.errors];
41
+ }
42
+ // clone alert messages
43
+ entityForm.alertMessages = [...this.alertMessages];
44
+ // clone validation states
45
+ entityForm.fieldValidationStates = new Map(this.fieldValidationStates);
46
+ // clone fields
47
+ const fields = new Map();
48
+ Array.from(this.fields.values()).forEach((field) => {
49
+ fields.set(field.getName(), field.clone(includeValue));
50
+ });
51
+ entityForm.fields = fields;
52
+ // clone subCollections
53
+ const collections = new Map();
54
+ Array.from(this.collections.values()).forEach((collection) => {
55
+ const c = collection.clone();
56
+ collections.set(collection.getName(), c);
57
+ });
58
+ entityForm.collections = collections;
59
+ entityForm.excludeListFields = this.excludeListFields ? [...this.excludeListFields] : undefined;
60
+ entityForm.sessionRequired = this.sessionRequired;
61
+ entityForm.attributes = this.attributes ? new Map(this.attributes) : undefined;
62
+ entityForm.cacheKeyFunc = this.cacheKeyFunc;
63
+ entityForm.onChanges = this.onChanges ? [...this.onChanges] : undefined;
64
+ entityForm.onFetchData = this.onFetchData ? [...this.onFetchData] : undefined;
65
+ entityForm.onInitialize = this.onInitialize ? [...this.onInitialize] : undefined;
66
+ entityForm.onFetchListData = this.onFetchListData ? [...this.onFetchListData] : undefined;
67
+ entityForm.appendAdvancedSearchFields = this.appendAdvancedSearchFields
68
+ ? [...this.appendAdvancedSearchFields]
69
+ : undefined;
70
+ entityForm.readonly = this.readonly;
71
+ entityForm.dataPreloaded = this.dataPreloaded;
72
+ entityForm.fetchedEntity = this.fetchedEntity;
73
+ entityForm.onSave = this.onSave;
74
+ entityForm.postSave = this.postSave;
75
+ entityForm.postDelete = this.postDelete;
76
+ entityForm.overrideSubmitData = this.overrideSubmitData;
77
+ entityForm.overrideFetchData = this.overrideFetchData;
78
+ entityForm.buttons = this.buttons;
79
+ entityForm.headerArea = this.headerArea;
80
+ if (this.dataTransferConfig !== undefined) {
81
+ entityForm.withDataTransferConfig(this.dataTransferConfig);
82
+ }
83
+ Object.setPrototypeOf(entityForm, EntityForm.prototype);
84
+ return entityForm;
85
+ }
86
+ executeOnChanges(fieldName) {
87
+ this.onChanges?.forEach((onChange) => {
88
+ onChange(this, fieldName);
89
+ });
90
+ return Promise.resolve();
91
+ }
92
+ merge(origin) {
93
+ // entityForm 의 모든 속성을 cloned 의 속성으로 덮어 쓴다.
94
+ origin.cloneWithEntityForm(this, true);
95
+ return this;
96
+ }
97
+ setFetchedValue(fieldName, value) {
98
+ const field = this.getField(fieldName);
99
+ if (field) {
100
+ let fieldValue = field.value ?? {};
101
+ fieldValue['fetched'] = value;
102
+ if (fieldValue.current === undefined) {
103
+ fieldValue['current'] = value;
104
+ }
105
+ field.value = fieldValue;
106
+ this.fields.set(field.getName(), field);
107
+ }
108
+ return this;
109
+ }
110
+ withAppendAdvancedSearchFields(...fields) {
111
+ this.appendAdvancedSearchFields = fields;
112
+ return this;
113
+ }
114
+ /**
115
+ * ViewEntityForm 에서 최초 setEntityForm 을 할 때 initialize 를 호출해야 한다.
116
+ */
117
+ async initialize(props) {
118
+ let entityForm = this.clone(true);
119
+ entityForm.session = this.session ?? props.session;
120
+ const list = isTrue(props.list);
121
+ // initialize 후 entityForm 에 id 가 있으면 fetch 도 해 온다.
122
+ // dataPreloaded가 true이면 이미 setFetchedValues()로 데이터가 로드되었으므로 중복 fetch를 건너뛴다.
123
+ let fetchedEntity = null;
124
+ if (!list) {
125
+ if (this.isAbleFetch() && !this.dataPreloaded) {
126
+ try {
127
+ const response = await this.fetchData();
128
+ // fetch data and set values
129
+ if (!response.isError()) {
130
+ fetchedEntity = response.data.data;
131
+ entityForm = await entityForm.setFetchedValues(fetchedEntity);
132
+ entityForm.id = response.data.data.id;
133
+ }
134
+ else {
135
+ try {
136
+ if (response.entityError) {
137
+ throw new Error(entityErrorToString(response.entityError));
138
+ }
139
+ else if (response.error) {
140
+ throw new Error(response.error);
141
+ }
142
+ throw new Error('response error');
143
+ }
144
+ catch (e) {
145
+ console.error(e);
146
+ if (e instanceof Error && e.message === '만료된 토큰 정보 입니다.') {
147
+ throw new Error('만료된 토큰 정보 입니다.', { cause: e });
148
+ }
149
+ return { entityForm: entityForm, errors: ['데이터를 조회할 수 없습니다.'] };
150
+ }
151
+ }
152
+ }
153
+ catch (e) {
154
+ console.error('Error during fetchData:', e);
155
+ return { entityForm: entityForm, errors: ['데이터를 조회할 수 없습니다.'] };
156
+ }
157
+ }
158
+ else {
159
+ // delay 0.1 sec
160
+ // 여기서 딜레이를 주지 않으면 모달 창에서 탭 순서가 엉망이 되어 버린다.
161
+ await delay(100);
162
+ }
163
+ }
164
+ // fields 에 CustomOptionField 가 있다면 CustomOption 정보를 조회해 SelectOption 값을 넣어 준다.
165
+ // 이 작업은 CustomOptionField 에서도 options 가 없다면 동일하게 이뤄지지만 listgrid 에서 최초 1회 실행하기 위해 여기에 넣어 준다.
166
+ for (const field of entityForm.fields.values()) {
167
+ if (field instanceof CustomOptionField) {
168
+ const options = await getCustomOptionValues(field.alias);
169
+ const newField = field.withOptions(options).clone(true);
170
+ entityForm.fields.set(field.getName(), newField);
171
+ }
172
+ // PhoneNumberField 가 있다면 sourceType, enableSms 설정
173
+ if (field instanceof PhoneNumberField) {
174
+ // 만약 이 PhoneNumberField 의 enableSMS 가 true 라면, view 페이지에서 SMS 발송 이력 필드를 자동으로 추가한다.
175
+ if (isTrue(field.enableSms) &&
176
+ hasAnyRole(entityForm.session, 'ROLE_SUPER_ADMIN', 'ROLE_ADMIN', 'ROLE_STAFF')) {
177
+ // SMS 발송 이력 탭 정의 (STATUS_TAB_INFO.order - 10 = 999990)
178
+ const SMS_HISTORY_TAB = {
179
+ id: 'smsHistory',
180
+ label: 'SMS 발송 이력',
181
+ order: STATUS_TAB_INFO.order - 10,
182
+ hidden: false,
183
+ };
184
+ const smsHistoryField = createSmsHistoryField(field.getName() + 'SmsHistory', field.getOrder() + 1, field.getName());
185
+ if (smsHistoryField) {
186
+ smsHistoryField.withLabel('SMS 발송 이력').withModifyOnly().withHideLabel(true);
187
+ entityForm.addFields({
188
+ tab: SMS_HISTORY_TAB,
189
+ items: [smsHistoryField],
190
+ });
191
+ }
192
+ }
193
+ }
194
+ }
195
+ if (!list) {
196
+ if (entityForm.onInitialize && !isEmpty(entityForm.onInitialize)) {
197
+ for (const init of [...entityForm.onInitialize]) {
198
+ try {
199
+ entityForm = await init(entityForm, props.session);
200
+ }
201
+ catch (e) {
202
+ // nothing to do
203
+ console.error(e);
204
+ }
205
+ }
206
+ }
207
+ // onInitialize 에서 동적으로 추가된 필드에 대해 fetch 된 데이터를 바인딩한다.
208
+ // setFetchedValues 시점에 존재하지 않았던 필드는 값이 누락되므로 여기서 보완한다.
209
+ if (fetchedEntity) {
210
+ entityForm.fields.forEach((field, key) => {
211
+ // fetched 값이 없는 필드만 처리 (setFetchedValues 에서 이미 처리된 필드는 건너뜀)
212
+ if (field.value?.fetched !== undefined)
213
+ return;
214
+ if (key.includes('.')) {
215
+ const keyParts = key.split('.');
216
+ let objectValue = fetchedEntity;
217
+ for (let i = 0; i < keyParts.length - 1; i++) {
218
+ objectValue = objectValue?.[keyParts[i]];
219
+ if (objectValue === undefined || objectValue === null)
220
+ break;
221
+ }
222
+ if (objectValue !== undefined && objectValue !== null) {
223
+ const fieldName = keyParts[keyParts.length - 1];
224
+ if (objectValue[fieldName] !== undefined) {
225
+ field.value = {
226
+ current: objectValue[fieldName],
227
+ fetched: objectValue[fieldName],
228
+ default: field.value?.default,
229
+ };
230
+ }
231
+ }
232
+ }
233
+ else {
234
+ if (fetchedEntity[key] !== undefined) {
235
+ field.value = {
236
+ current: fetchedEntity[key],
237
+ fetched: fetchedEntity[key],
238
+ default: field.value?.default,
239
+ };
240
+ }
241
+ }
242
+ });
243
+ }
244
+ }
245
+ return { entityForm: entityForm };
246
+ }
247
+ /**
248
+ * 필드, 필드그룹, 탭의 숨김 상태를 설정합니다.
249
+ *
250
+ * 이 메소드는 세 가지 타입의 숨김 처리를 통합하여 제공합니다:
251
+ * - FIELD: 개별 필드나 컬렉션의 숨김 상태 설정
252
+ * - GROUP: 특정 탭 내 필드그룹의 모든 필드를 일괄 숨김 처리
253
+ * - TAB: 탭 전체와 그 하위 모든 필드를 일괄 숨김 처리
254
+ *
255
+ * @param props 숨김 설정 옵션 또는 필드명 (기존 호환성용)
256
+ * @param props.type 숨김 대상 타입 ('FIELD' | 'GROUP' | 'TAB')
257
+ * @param props.hidden 숨김 여부 (true: 숨김, false: 표시)
258
+ * @param props.fieldName [FIELD 타입] 대상 필드 또는 컬렉션의 이름
259
+ * @param props.tabId [GROUP/TAB 타입] 대상 탭 ID
260
+ * @param props.fieldGroupId [GROUP 타입] 대상 필드그룹 ID
261
+ * @param hidden 기존 API 호환성을 위한 숨김 여부 (props가 string일 때만 사용)
262
+ *
263
+ * @returns EntityForm 인스턴스 (메소드 체이닝 지원)
264
+ *
265
+ * @example
266
+ * // 개별 필드 숨김
267
+ * entityForm.withHidden({ type: 'FIELD', hidden: true, fieldName: 'email' });
268
+ *
269
+ * @example
270
+ * // 필드그룹 전체 숨김
271
+ * entityForm.withHidden({
272
+ * type: 'GROUP',
273
+ * hidden: true,
274
+ * tabId: 'education',
275
+ * fieldGroupId: 'university'
276
+ * });
277
+ *
278
+ * @example
279
+ * // 탭 전체 숨김
280
+ * entityForm.withHidden({ type: 'TAB', hidden: true, tabId: 'advancedSettings' });
281
+ *
282
+ * @example
283
+ * // 기존 API 호환성 (deprecated)
284
+ * entityForm.withHidden('fieldName', true);
285
+ *
286
+ * @since 1.0.0
287
+ */
288
+ withHidden(props, hidden) {
289
+ if (typeof props === 'string') {
290
+ const name = props;
291
+ const hiddenValue = hidden ?? false;
292
+ const field = this.getField(name);
293
+ if (field) {
294
+ this.fields.set(name, field.withHidden(hiddenValue));
295
+ return this;
296
+ }
297
+ const collection = this.getCollection(name);
298
+ if (collection) {
299
+ this.collections.set(name, collection.withHidden(hiddenValue));
300
+ return this;
301
+ }
302
+ return this;
303
+ }
304
+ const { type, hidden: hiddenValue } = props;
305
+ switch (type) {
306
+ case 'FIELD':
307
+ const { fieldName } = props;
308
+ const field = this.getField(fieldName);
309
+ if (field) {
310
+ this.fields.set(fieldName, field.withHidden(hiddenValue));
311
+ }
312
+ else {
313
+ const collection = this.getCollection(fieldName);
314
+ if (collection) {
315
+ this.collections.set(fieldName, collection.withHidden(hiddenValue));
316
+ }
317
+ }
318
+ break;
319
+ case 'GROUP':
320
+ const { tabId, fieldGroupId } = props;
321
+ const tab = this.getTab(tabId);
322
+ if (tab) {
323
+ const fieldGroup = tab.fieldGroups.find((group) => group.id === fieldGroupId);
324
+ if (fieldGroup) {
325
+ let affectedFields = 0;
326
+ fieldGroup.fields.forEach((field) => {
327
+ this.withHidden({ type: 'FIELD', hidden: hiddenValue, fieldName: field.name });
328
+ affectedFields++;
329
+ });
330
+ }
331
+ }
332
+ break;
333
+ case 'TAB':
334
+ const { tabId: targetTabId } = props;
335
+ const targetTab = this.getTab(targetTabId);
336
+ if (targetTab) {
337
+ targetTab.hidden = hiddenValue;
338
+ let affectedFields = 0;
339
+ targetTab.fieldGroups.forEach((fieldGroup) => {
340
+ fieldGroup.fields.forEach((field) => {
341
+ this.withHidden({ type: 'FIELD', hidden: hiddenValue, fieldName: field.name });
342
+ affectedFields++;
343
+ });
344
+ });
345
+ }
346
+ break;
347
+ }
348
+ return this;
349
+ }
350
+ async delete() {
351
+ if (!(this instanceof EntityForm)) {
352
+ throw new Error('EntityFormActions.delete() can only be called on EntityForm');
353
+ }
354
+ if (this.getRenderType() === 'create') {
355
+ const result = { entityForm: this };
356
+ result.errors = ['생성된 데이터만 삭제 가능합니다.'];
357
+ return result;
358
+ }
359
+ return await this.deleteAll([this.id]);
360
+ }
361
+ async deleteAll(idList) {
362
+ if (!(this instanceof EntityForm)) {
363
+ throw new Error('EntityFormActions.deleteAll() can only be called on EntityForm');
364
+ }
365
+ const result = { entityForm: this };
366
+ if (isEmpty(idList)) {
367
+ result.errors = ['삭제할 대상이 없습니다.'];
368
+ return result;
369
+ }
370
+ const url = `${this.getUrl()}/delete`;
371
+ const formData = {};
372
+ formData['revisionEntityName'] = this.getRevisionEntityName();
373
+ formData['ids'] = idList;
374
+ const response = await getExternalApiDataWithError({
375
+ url: url,
376
+ method: 'DELETE',
377
+ formData: formData,
378
+ });
379
+ if (response.data) {
380
+ // 정상 삭제된 경우
381
+ result.refreshOrList = true;
382
+ // 성공 시 Alert 메시지 초기화
383
+ this.clearAlertMessages(true);
384
+ }
385
+ else {
386
+ result.errors = [response.error ?? '데이터 삭제 중 오류가 발생했습니다.'];
387
+ }
388
+ if (this.postDelete) {
389
+ await this.postDelete(this, idList);
390
+ }
391
+ return result;
392
+ }
393
+ getFields(type, orderByView) {
394
+ if (!(this instanceof EntityForm)) {
395
+ throw new Error('EntityFormActions.getFields() can only be called on EntityForm');
396
+ }
397
+ const fields = [];
398
+ Array.from(this.fields.values()).forEach((field) => {
399
+ if (type === undefined || field.type === type) {
400
+ const target = isTrue(orderByView)
401
+ ? field.withOrder(this.getViewOrder(field.getTabId(), field.getFieldGroupId(), field.order))
402
+ : field;
403
+ fields.push(target);
404
+ }
405
+ });
406
+ fields.sort((a, b) => a.order - b.order); // sort by order
407
+ return fields;
408
+ }
409
+ withOverrideSubmitData(fn) {
410
+ this.overrideSubmitData = fn;
411
+ return this;
412
+ }
413
+ async setFetchedValues(entity) {
414
+ // 원본 엔티티 객체를 저장 (등록된 필드 외 속성 접근용)
415
+ this.fetchedEntity = entity;
416
+ // 서버 응답에 manageEntityForm이 있으면 설정
417
+ if (entity.manageEntityForm) {
418
+ this.manageEntityForm = entity.manageEntityForm;
419
+ }
420
+ this.fields.forEach((field, key) => {
421
+ // key 에 . 이 찍혀 있으면 객체가 값으로 들어와 있다는 뜻이다.
422
+ if (key.includes('.')) {
423
+ const keyParts = key.split('.');
424
+ // 재귀적으로 중첩 객체에 접근한다. (score.student.name 같은 3단계 이상 중첩 지원)
425
+ let objectValue = entity;
426
+ for (let i = 0; i < keyParts.length - 1; i++) {
427
+ objectValue = objectValue?.[keyParts[i]];
428
+ if (objectValue === undefined || objectValue === null) {
429
+ break;
430
+ }
431
+ }
432
+ if (objectValue !== undefined && objectValue !== null) {
433
+ const fieldName = keyParts[keyParts.length - 1];
434
+ field.value = {
435
+ current: objectValue[fieldName],
436
+ fetched: objectValue[fieldName],
437
+ default: field.value?.default,
438
+ };
439
+ }
440
+ }
441
+ else {
442
+ if (entity[key] !== undefined) {
443
+ field.value = {
444
+ current: entity[key],
445
+ fetched: entity[key],
446
+ default: field.value?.default,
447
+ };
448
+ }
449
+ else {
450
+ // json 에 데이터가 없다는 것은 해당 field 가 비어 있다는 뜻이다.
451
+ field.value = { current: undefined, fetched: undefined, default: field.value?.default };
452
+ }
453
+ }
454
+ });
455
+ let entityForm = this;
456
+ // onFetchData 콜백 실행
457
+ if (this.onFetchData && !isEmpty(this.onFetchData) && this instanceof EntityForm) {
458
+ for (const postFetch of [...this.onFetchData]) {
459
+ try {
460
+ entityForm = await postFetch(this, entity);
461
+ }
462
+ catch (e) {
463
+ // nothing to do
464
+ console.error(e);
465
+ }
466
+ }
467
+ }
468
+ // 데이터가 로드되었음을 표시 - initialize()에서 중복 fetch 방지
469
+ entityForm.dataPreloaded = true;
470
+ return entityForm;
471
+ }
472
+ async fetchData(fetchUrl = this.getFetchUrl()) {
473
+ if (this.overrideFetchData !== undefined) {
474
+ return this.overrideFetchData(fetchUrl, this);
475
+ }
476
+ if (this.isSessionRequired()) {
477
+ // eslint-disable-next-line react-hooks/rules-of-hooks
478
+ const session = useSession();
479
+ if (session === undefined) {
480
+ const response = new ResponseData();
481
+ response.status = 500;
482
+ response.error = 'Session is not valid';
483
+ return Promise.resolve(response);
484
+ }
485
+ }
486
+ try {
487
+ return await callExternalHttpRequest({
488
+ url: fetchUrl,
489
+ method: 'GET',
490
+ });
491
+ }
492
+ catch (error) {
493
+ console.error('Error during external HTTP request:', error);
494
+ const response = new ResponseData();
495
+ response.status = 500;
496
+ response.error = 'Failed to fetch data';
497
+ return Promise.resolve(response);
498
+ }
499
+ }
500
+ async internalSave(session, skipValidation, forceIncludeExceptOnSave) {
501
+ // 아래는 기본 저장 로직이다.
502
+ const renderType = this.getRenderType();
503
+ // 필드 에러 초기화
504
+ this.errors = [];
505
+ let form = this.clone(true);
506
+ if (renderType === 'update' && !this.isDirty()) {
507
+ // update 에서 변경된 정보가 전혀 없다면 수정할 내용이 없다는 에러를 낸다.
508
+ return { actionType: renderType, entityForm: form, errors: ['수정된 항목이 없습니다.'] };
509
+ }
510
+ const fieldErrors = isTrue(skipValidation)
511
+ ? []
512
+ : await this.validate({ fieldNames: undefined, session });
513
+ if (!isEmpty(fieldErrors)) {
514
+ return {
515
+ actionType: renderType,
516
+ entityForm: form.withErrors(fieldErrors),
517
+ errors: ['입력 값이 올바르지 않습니다.'],
518
+ };
519
+ }
520
+ const submitFormData = await this.getSubmitFormData(forceIncludeExceptOnSave);
521
+ if (submitFormData.error) {
522
+ const errorMessages = submitFormData.errors?.flatMap((e) => e.errors).filter(Boolean);
523
+ const errors = errorMessages?.length ? errorMessages : ['입력 값이 올바르지 않습니다.'];
524
+ return { actionType: renderType, entityForm: form.withErrors(submitFormData.errors), errors };
525
+ }
526
+ else {
527
+ const targetUrl = renderType === 'create' ? `${this.getUrl()}/add` : `${this.getUrl()}/${this.id}`;
528
+ const method = renderType === 'create' ? 'POST' : 'PUT';
529
+ // 서버 extension 처리를 위한 헤더 추가
530
+ const extensionPoint = renderType === 'create' ? ExtensionPoint.PRE_CREATE : ExtensionPoint.PRE_UPDATE;
531
+ const response = await getExternalApiDataWithError({
532
+ url: targetUrl,
533
+ method: method,
534
+ formData: submitFormData.data,
535
+ overrideHeaders: new Map([
536
+ ['X-EntityForm-Name', this.name],
537
+ ['X-Extension-Point', extensionPoint],
538
+ ]),
539
+ });
540
+ if (response.data) {
541
+ // entityForm 이 데이터로 넘어 온다.
542
+ form.id = response.data.id;
543
+ // 성공 시 Alert 메시지 초기화
544
+ form.clearAlertMessages(true);
545
+ form = await form.setFetchedValues(response.data);
546
+ if (form.onInitialize && !isEmpty(form.onInitialize)) {
547
+ for (const init of [...form.onInitialize]) {
548
+ try {
549
+ form = await init(form);
550
+ }
551
+ catch (e) {
552
+ // nothing to do
553
+ console.error(e);
554
+ }
555
+ }
556
+ }
557
+ const result = {
558
+ actionType: renderType,
559
+ entityForm: form,
560
+ errors: [],
561
+ };
562
+ // 확장 포인트 처리
563
+ await this.postSave?.(result);
564
+ return result;
565
+ }
566
+ else {
567
+ let jsonError = false;
568
+ const fieldErrors = [];
569
+ let globalError;
570
+ if (response.error) {
571
+ try {
572
+ // intentional: errorObject shape varies by backend error variant
573
+ let errorObject;
574
+ // entityError가 있으면 구조화된 정보 사용
575
+ if (response.entityError) {
576
+ // entityError.error가 객체인지 문자열인지 확인
577
+ if (typeof response.entityError.error === 'object' &&
578
+ response.entityError.error !== null) {
579
+ errorObject = response.entityError.error;
580
+ }
581
+ else if (typeof response.entityError.error === 'string') {
582
+ // 문자열인 경우 message로 설정
583
+ errorObject = { message: response.entityError.error };
584
+ }
585
+ else {
586
+ // entityError 전체를 사용
587
+ errorObject = response.entityError;
588
+ }
589
+ jsonError = true;
590
+ }
591
+ else if (typeof response.error === 'string') {
592
+ // response.error가 문자열인 경우 JSON 파싱 시도
593
+ try {
594
+ const parsed = parse(response.error);
595
+ errorObject = parsed.error ?? parsed;
596
+ jsonError = true;
597
+ }
598
+ catch (parseError) {
599
+ // JSON이 아닌 단순 문자열인 경우
600
+ globalError = response.error;
601
+ jsonError = false;
602
+ }
603
+ }
604
+ else {
605
+ // response.error는 문자열 타입이므로 이 블록은 실행되지 않음
606
+ errorObject = response.error;
607
+ }
608
+ if (errorObject) {
609
+ // fieldError가 있는지 확인하고, 비어있지 않은 경우에만 처리
610
+ let hasFieldErrors = false;
611
+ if (errorObject.fieldError) {
612
+ if (errorObject.fieldError instanceof Map) {
613
+ // Map의 경우 size가 0보다 큰지 확인
614
+ if (errorObject.fieldError.size > 0) {
615
+ errorObject.fieldError.forEach((fieldError, fieldName) => {
616
+ const label = form.getLabel(fieldName) ?? '저장 오류';
617
+ fieldErrors.push({ name: fieldName, label: label, errors: fieldError });
618
+ hasFieldErrors = true;
619
+ });
620
+ }
621
+ }
622
+ else if (typeof errorObject.fieldError === 'object') {
623
+ // 일반 객체의 경우 빈 객체가 아닌지 확인
624
+ const entries = Object.entries(errorObject.fieldError);
625
+ if (entries.length > 0) {
626
+ entries.forEach(([fieldName, fieldError]) => {
627
+ const label = form.getLabel(fieldName) ?? '저장 오류';
628
+ fieldErrors.push({
629
+ name: fieldName,
630
+ label: label,
631
+ errors: fieldError,
632
+ });
633
+ hasFieldErrors = true;
634
+ });
635
+ }
636
+ }
637
+ }
638
+ // fieldError가 없거나 비어있는 경우에만 globalError 설정
639
+ if (!hasFieldErrors && errorObject.message) {
640
+ globalError = errorObject.message;
641
+ }
642
+ form.withErrors(fieldErrors);
643
+ form.withShouldReload(true);
644
+ jsonError = true;
645
+ }
646
+ }
647
+ catch (e) {
648
+ // 에러가 json 타입이 아니라면 실제 시스템 에러다.
649
+ console.error('Error processing exception:', response.error, e);
650
+ }
651
+ }
652
+ // fieldError가 있으면 에러 메시지를 표시하지 않음 (필드별로 표시되므로)
653
+ let errorMessage;
654
+ if (fieldErrors.length > 0) {
655
+ // 필드 에러가 있으면 일반 에러 메시지는 표시하지 않지만, 에러 상태임은 표시
656
+ return {
657
+ actionType: renderType,
658
+ entityForm: form.withErrors(fieldErrors),
659
+ errors: ['입력 값이 올바르지 않습니다.'],
660
+ };
661
+ }
662
+ else {
663
+ // 필드 에러가 없을 때만 일반 에러 메시지 표시
664
+ errorMessage =
665
+ (!jsonError ? response.error : globalError ? globalError : undefined) ??
666
+ '저장 중 오류가 발생했습니다.';
667
+ }
668
+ // errorMessage 가 있으면 errors 배열에 최소한 하나의 항목을 추가
669
+ // 이렇게 해야 호출하는 쪽에서 에러 상태임을 인식할 수 있음
670
+ const errors = [];
671
+ if (errorMessage) {
672
+ errors.push(errorMessage);
673
+ }
674
+ return { actionType: renderType, entityForm: form, errors };
675
+ }
676
+ }
677
+ }
678
+ async save(session, skipValidation, forceIncludeExceptOnSave) {
679
+ // 저장 로직이 오버라이드 됐다면
680
+ const actionType = this.getRenderType();
681
+ if (this.onSave) {
682
+ const form = this.clone(true);
683
+ const result = await this.onSave(form);
684
+ result.actionType = actionType;
685
+ if (isEmpty(result.errors)) {
686
+ // 성공한 것
687
+ // 성공 시 Alert 메시지 초기화
688
+ form.clearAlertMessages(true);
689
+ await form.postSave?.(result);
690
+ }
691
+ return result;
692
+ }
693
+ return await this.internalSave(session, skipValidation, forceIncludeExceptOnSave);
694
+ }
695
+ async getSubmitFormData(forceIncludeExceptOnSave) {
696
+ const renderType = this.getRenderType();
697
+ // intentional: generic entity payload assembled from heterogeneous fields
698
+ let data = {};
699
+ let error = false;
700
+ let modifiedFields = [];
701
+ const errors = [];
702
+ try {
703
+ // revisionEntityName 을 넣어 준다.
704
+ data['revisionEntityName'] = this.getRevisionEntityName();
705
+ const dataMap = new Map();
706
+ // ManyToOneField 처리를 위한 헬퍼 함수
707
+ const processManyToOneField = (field, value, targetObject, fieldNameOverride) => {
708
+ if (field instanceof AbstractManyToOneField) {
709
+ const manyToOneConfig = field.config;
710
+ const baseFieldName = fieldNameOverride || field.getName();
711
+ const lastPart = baseFieldName.includes('.')
712
+ ? baseFieldName.substring(baseFieldName.lastIndexOf('.') + 1)
713
+ : baseFieldName;
714
+ const idFieldName = endsWith(lastPart, 'Id') ? lastPart : `${lastPart}Id`;
715
+ if (value) {
716
+ const relationId = manyToOneConfig.field?.id ?? 'id';
717
+ targetObject[idFieldName] = value[relationId] ?? value;
718
+ }
719
+ else {
720
+ targetObject[idFieldName] = null;
721
+ }
722
+ return true;
723
+ }
724
+ return false;
725
+ };
726
+ // 권한 체크를 위해 session에서 userPermissions를 가져온다.
727
+ const userPermissions = this.session?.roles ?? this.session?.authentication?.roles;
728
+ for (const field of this.fields.values()) {
729
+ // 권한이 없는 필드는 저장 데이터에서 제외한다.
730
+ if (!field.isPermitted(userPermissions)) {
731
+ continue;
732
+ }
733
+ const value = await field.getSaveValue(this, renderType);
734
+ const modifiedOnCreate = renderType === 'create' && value !== undefined;
735
+ if (modifiedOnCreate ||
736
+ (field.isDirty() && (!isTrue(field.exceptOnSave) || forceIncludeExceptOnSave))) {
737
+ modifiedFields.push(field.getName());
738
+ // 만약 필드 이름에 . 가 있다면 특정 객체를 만들어야 한다.
739
+ const fieldName = field.getName();
740
+ const dotIndex = fieldName.indexOf('.');
741
+ if (dotIndex !== -1) {
742
+ const key = fieldName.substring(0, dotIndex);
743
+ const objectFieldName = fieldName.substring(dotIndex + 1);
744
+ if (!dataMap.has(key)) {
745
+ dataMap.set(key, {});
746
+ }
747
+ const targetObject = dataMap.get(key);
748
+ const targetValue = value != null ? (value[fieldName] ?? value) : value;
749
+ // 중첩된 필드도 ManyToOneField인지 확인
750
+ if (!processManyToOneField(field, targetValue, targetObject, objectFieldName)) {
751
+ targetObject[objectFieldName] = targetValue;
752
+ }
753
+ }
754
+ else {
755
+ // ManyToOneField 처리
756
+ if (!processManyToOneField(field, value, data)) {
757
+ data[field.getName()] = value;
758
+ }
759
+ }
760
+ if (dataMap.size > 0) {
761
+ // dataMap 의 key 를 iteration 해서 각 value 를 data 에 추가한다.
762
+ for (const key of dataMap.keys()) {
763
+ data[key] = dataMap.get(key);
764
+ }
765
+ }
766
+ }
767
+ }
768
+ if (renderType === 'update') {
769
+ // update 때는 수정된 필드만 따로 지정한다.
770
+ data['modifiedFields'] = modifiedFields;
771
+ }
772
+ }
773
+ catch (e) {
774
+ error = true;
775
+ console.error(e);
776
+ }
777
+ if (this.overrideSubmitData !== undefined) {
778
+ const result = await this.overrideSubmitData?.(this, data);
779
+ data = result.data;
780
+ if (isTrue(result.removePrevious)) {
781
+ modifiedFields = [...(result.modifiedFields ?? [])];
782
+ }
783
+ else {
784
+ if (result.modifiedFields) {
785
+ for (const field of result.modifiedFields) {
786
+ if (!modifiedFields.includes(field)) {
787
+ modifiedFields.push(field);
788
+ }
789
+ }
790
+ }
791
+ }
792
+ // overrideSubmitData 후 업데이트된 modifiedFields를 data에 반영
793
+ if (renderType === 'update' && modifiedFields.length > 0) {
794
+ data['modifiedFields'] = modifiedFields;
795
+ }
796
+ if (result.error !== undefined) {
797
+ error = result.error;
798
+ }
799
+ if (result.errors !== undefined && result.errors.length > 0) {
800
+ errors.push(...result.errors);
801
+ }
802
+ }
803
+ return {
804
+ data,
805
+ modifiedFields,
806
+ error,
807
+ errors,
808
+ };
809
+ }
810
+ async validate(props) {
811
+ const fieldNames = props?.fieldNames;
812
+ const session = props?.session;
813
+ const fieldErrors = [];
814
+ const useExplicitFields = fieldNames !== undefined && fieldNames.length > 0;
815
+ for (const field of this.fields.values()) {
816
+ if (useExplicitFields && !fieldNames.includes(field.getName())) {
817
+ continue;
818
+ }
819
+ const result = await field.validate(this, session);
820
+ const errorMessages = [];
821
+ if (Array.isArray(result)) {
822
+ // 실제 오류가 난 것이다.
823
+ for (const error of result) {
824
+ errorMessages.push(error.message);
825
+ }
826
+ }
827
+ else {
828
+ // 단수로 넘어 온 경우에는 error 여부를 확인해야 한다.
829
+ if (result.hasError()) {
830
+ errorMessages.push(result.message);
831
+ }
832
+ }
833
+ if (errorMessages.length > 0) {
834
+ fieldErrors.push({
835
+ name: field.getName(),
836
+ label: field.getLabel(),
837
+ errors: [...errorMessages],
838
+ tabId: field.getTabId(),
839
+ });
840
+ }
841
+ }
842
+ return fieldErrors;
843
+ }
844
+ withCheckDuplicate(fieldName, checkDuplicate) {
845
+ const field = this.getField(fieldName);
846
+ if (field && field instanceof CheckButtonValidationField) {
847
+ field.withCheckButtonValidation(checkDuplicate);
848
+ }
849
+ return this;
850
+ }
851
+ withFieldToLayout(layout) {
852
+ this.fields.forEach((value, key, map) => {
853
+ if (value instanceof FormField) {
854
+ value.withLayout(layout);
855
+ }
856
+ });
857
+ return this;
858
+ }
859
+ }