@j2-health/design-system 0.2.0 → 0.2.1

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 (310) hide show
  1. package/dist/index.cjs +96 -3614
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +48 -3551
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/AppConfigProvider.cjs +13 -0
  6. package/dist/src/AppConfigProvider.cjs.map +1 -0
  7. package/dist/src/AppConfigProvider.js +13 -0
  8. package/dist/src/AppConfigProvider.js.map +1 -0
  9. package/dist/src/appTheme.cjs +268 -0
  10. package/dist/src/appTheme.cjs.map +1 -0
  11. package/dist/src/appTheme.js +268 -0
  12. package/dist/src/appTheme.js.map +1 -0
  13. package/dist/src/components/alert/Alert.cjs +95 -0
  14. package/dist/src/components/alert/Alert.cjs.map +1 -0
  15. package/dist/src/components/alert/Alert.js +78 -0
  16. package/dist/src/components/alert/Alert.js.map +1 -0
  17. package/dist/src/components/alert/Alert.module.css.cjs +9 -0
  18. package/dist/src/components/alert/Alert.module.css.cjs.map +1 -0
  19. package/dist/src/components/alert/Alert.module.css.js +9 -0
  20. package/dist/src/components/alert/Alert.module.css.js.map +1 -0
  21. package/dist/src/components/barchart/BarChart.cjs +148 -0
  22. package/dist/src/components/barchart/BarChart.cjs.map +1 -0
  23. package/dist/src/components/barchart/BarChart.js +148 -0
  24. package/dist/src/components/barchart/BarChart.js.map +1 -0
  25. package/dist/src/components/barchart/chart.module.css.cjs +9 -0
  26. package/dist/src/components/barchart/chart.module.css.cjs.map +1 -0
  27. package/dist/src/components/barchart/chart.module.css.js +9 -0
  28. package/dist/src/components/barchart/chart.module.css.js.map +1 -0
  29. package/dist/src/components/breadcrumb/Breadcrumb.cjs +38 -0
  30. package/dist/src/components/breadcrumb/Breadcrumb.cjs.map +1 -0
  31. package/dist/src/components/breadcrumb/Breadcrumb.js +21 -0
  32. package/dist/src/components/breadcrumb/Breadcrumb.js.map +1 -0
  33. package/dist/src/components/bulkActionBar/BulkActionBar.cjs +81 -0
  34. package/dist/src/components/bulkActionBar/BulkActionBar.cjs.map +1 -0
  35. package/dist/src/components/bulkActionBar/BulkActionBar.js +81 -0
  36. package/dist/src/components/bulkActionBar/BulkActionBar.js.map +1 -0
  37. package/dist/src/components/button/Button.cjs +21 -0
  38. package/dist/src/components/button/Button.cjs.map +1 -0
  39. package/dist/src/components/button/Button.js +21 -0
  40. package/dist/src/components/button/Button.js.map +1 -0
  41. package/dist/src/components/card/Card.cjs +36 -0
  42. package/dist/src/components/card/Card.cjs.map +1 -0
  43. package/dist/src/components/card/Card.js +36 -0
  44. package/dist/src/components/card/Card.js.map +1 -0
  45. package/dist/src/components/checkbox/Checkbox.cjs +10 -0
  46. package/dist/src/components/checkbox/Checkbox.cjs.map +1 -0
  47. package/dist/src/components/checkbox/Checkbox.js +10 -0
  48. package/dist/src/components/checkbox/Checkbox.js.map +1 -0
  49. package/dist/src/components/checkboxTree/CheckboxTree.cjs +140 -0
  50. package/dist/src/components/checkboxTree/CheckboxTree.cjs.map +1 -0
  51. package/dist/src/components/checkboxTree/CheckboxTree.js +140 -0
  52. package/dist/src/components/checkboxTree/CheckboxTree.js.map +1 -0
  53. package/dist/src/components/checkboxTree/TreeNode.cjs +92 -0
  54. package/dist/src/components/checkboxTree/TreeNode.cjs.map +1 -0
  55. package/dist/src/components/checkboxTree/TreeNode.js +92 -0
  56. package/dist/src/components/checkboxTree/TreeNode.js.map +1 -0
  57. package/dist/src/components/checkboxTree/utils.cjs +59 -0
  58. package/dist/src/components/checkboxTree/utils.cjs.map +1 -0
  59. package/dist/src/components/checkboxTree/utils.js +59 -0
  60. package/dist/src/components/checkboxTree/utils.js.map +1 -0
  61. package/dist/src/components/collapse/Collapse.cjs +81 -0
  62. package/dist/src/components/collapse/Collapse.cjs.map +1 -0
  63. package/dist/src/components/collapse/Collapse.js +64 -0
  64. package/dist/src/components/collapse/Collapse.js.map +1 -0
  65. package/dist/src/components/collapse/Collapse.module.css.cjs +13 -0
  66. package/dist/src/components/collapse/Collapse.module.css.cjs.map +1 -0
  67. package/dist/src/components/collapse/Collapse.module.css.js +13 -0
  68. package/dist/src/components/collapse/Collapse.module.css.js.map +1 -0
  69. package/dist/src/components/drawer/Drawer.cjs +39 -0
  70. package/dist/src/components/drawer/Drawer.cjs.map +1 -0
  71. package/dist/src/components/drawer/Drawer.js +39 -0
  72. package/dist/src/components/drawer/Drawer.js.map +1 -0
  73. package/dist/src/components/dropdown/Dropdown.cjs +58 -0
  74. package/dist/src/components/dropdown/Dropdown.cjs.map +1 -0
  75. package/dist/src/components/dropdown/Dropdown.js +58 -0
  76. package/dist/src/components/dropdown/Dropdown.js.map +1 -0
  77. package/dist/src/components/filterform/FilterGroup.cjs +64 -0
  78. package/dist/src/components/filterform/FilterGroup.cjs.map +1 -0
  79. package/dist/src/components/filterform/FilterGroup.js +64 -0
  80. package/dist/src/components/filterform/FilterGroup.js.map +1 -0
  81. package/dist/src/components/filterform/FilterInput.cjs +175 -0
  82. package/dist/src/components/filterform/FilterInput.cjs.map +1 -0
  83. package/dist/src/components/filterform/FilterInput.js +158 -0
  84. package/dist/src/components/filterform/FilterInput.js.map +1 -0
  85. package/dist/src/components/filterform/FiltersForm.cjs +168 -0
  86. package/dist/src/components/filterform/FiltersForm.cjs.map +1 -0
  87. package/dist/src/components/filterform/FiltersForm.js +168 -0
  88. package/dist/src/components/filterform/FiltersForm.js.map +1 -0
  89. package/dist/src/components/filterform/FiltersForm.module.css.cjs +21 -0
  90. package/dist/src/components/filterform/FiltersForm.module.css.cjs.map +1 -0
  91. package/dist/src/components/filterform/FiltersForm.module.css.js +21 -0
  92. package/dist/src/components/filterform/FiltersForm.module.css.js.map +1 -0
  93. package/dist/src/components/filterform/filterHelpers.cjs +48 -0
  94. package/dist/src/components/filterform/filterHelpers.cjs.map +1 -0
  95. package/dist/src/components/filterform/filterHelpers.js +48 -0
  96. package/dist/src/components/filterform/filterHelpers.js.map +1 -0
  97. package/dist/src/components/filterform/useFilterField.cjs +210 -0
  98. package/dist/src/components/filterform/useFilterField.cjs.map +1 -0
  99. package/dist/src/components/filterform/useFilterField.js +193 -0
  100. package/dist/src/components/filterform/useFilterField.js.map +1 -0
  101. package/dist/src/components/filterform/useFiltersForm.cjs +160 -0
  102. package/dist/src/components/filterform/useFiltersForm.cjs.map +1 -0
  103. package/dist/src/components/filterform/useFiltersForm.js +160 -0
  104. package/dist/src/components/filterform/useFiltersForm.js.map +1 -0
  105. package/dist/src/components/form/Form.cjs +11 -0
  106. package/dist/src/components/form/Form.cjs.map +1 -0
  107. package/dist/src/components/form/Form.js +11 -0
  108. package/dist/src/components/form/Form.js.map +1 -0
  109. package/dist/src/components/icons/index.cjs +27 -0
  110. package/dist/src/components/icons/index.cjs.map +1 -0
  111. package/dist/src/components/icons/index.js +3 -0
  112. package/dist/src/components/icons/index.js.map +1 -0
  113. package/dist/src/components/input/AntdInput.cjs +13 -0
  114. package/dist/src/components/input/AntdInput.cjs.map +1 -0
  115. package/dist/src/components/input/AntdInput.js +13 -0
  116. package/dist/src/components/input/AntdInput.js.map +1 -0
  117. package/dist/src/components/input/AntdSearchInput.cjs +13 -0
  118. package/dist/src/components/input/AntdSearchInput.cjs.map +1 -0
  119. package/dist/src/components/input/AntdSearchInput.js +13 -0
  120. package/dist/src/components/input/AntdSearchInput.js.map +1 -0
  121. package/dist/src/components/input/Input.cjs +9 -0
  122. package/dist/src/components/input/Input.cjs.map +1 -0
  123. package/dist/src/components/input/Input.js +9 -0
  124. package/dist/src/components/input/Input.js.map +1 -0
  125. package/dist/src/components/inputnumber/InputNumber.cjs +32 -0
  126. package/dist/src/components/inputnumber/InputNumber.cjs.map +1 -0
  127. package/dist/src/components/inputnumber/InputNumber.js +32 -0
  128. package/dist/src/components/inputnumber/InputNumber.js.map +1 -0
  129. package/dist/src/components/inputnumber/InputNumber.module.css.cjs +9 -0
  130. package/dist/src/components/inputnumber/InputNumber.module.css.cjs.map +1 -0
  131. package/dist/src/components/inputnumber/InputNumber.module.css.js +9 -0
  132. package/dist/src/components/inputnumber/InputNumber.module.css.js.map +1 -0
  133. package/dist/src/components/legacyNavMenu/LegacyNavMenu.cjs +52 -0
  134. package/dist/src/components/legacyNavMenu/LegacyNavMenu.cjs.map +1 -0
  135. package/dist/src/components/legacyNavMenu/LegacyNavMenu.js +52 -0
  136. package/dist/src/components/legacyNavMenu/LegacyNavMenu.js.map +1 -0
  137. package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.cjs +48 -0
  138. package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.cjs.map +1 -0
  139. package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.js +48 -0
  140. package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.js.map +1 -0
  141. package/dist/src/components/legacyNavMenu/UserProfile.cjs +78 -0
  142. package/dist/src/components/legacyNavMenu/UserProfile.cjs.map +1 -0
  143. package/dist/src/components/legacyNavMenu/UserProfile.js +78 -0
  144. package/dist/src/components/legacyNavMenu/UserProfile.js.map +1 -0
  145. package/dist/src/components/legacyNavMenu/UserProfile.module.css.cjs +42 -0
  146. package/dist/src/components/legacyNavMenu/UserProfile.module.css.cjs.map +1 -0
  147. package/dist/src/components/legacyNavMenu/UserProfile.module.css.js +42 -0
  148. package/dist/src/components/legacyNavMenu/UserProfile.module.css.js.map +1 -0
  149. package/dist/src/components/listpopover/ListPopover.cjs +125 -0
  150. package/dist/src/components/listpopover/ListPopover.cjs.map +1 -0
  151. package/dist/src/components/listpopover/ListPopover.js +125 -0
  152. package/dist/src/components/listpopover/ListPopover.js.map +1 -0
  153. package/dist/src/components/listpopover/ListPopover.module.css.cjs +9 -0
  154. package/dist/src/components/listpopover/ListPopover.module.css.cjs.map +1 -0
  155. package/dist/src/components/listpopover/ListPopover.module.css.js +9 -0
  156. package/dist/src/components/listpopover/ListPopover.module.css.js.map +1 -0
  157. package/dist/src/components/menu/Menu.cjs +18 -0
  158. package/dist/src/components/menu/Menu.cjs.map +1 -0
  159. package/dist/src/components/menu/Menu.js +18 -0
  160. package/dist/src/components/menu/Menu.js.map +1 -0
  161. package/dist/src/components/menu/Menu.module.css.cjs +12 -0
  162. package/dist/src/components/menu/Menu.module.css.cjs.map +1 -0
  163. package/dist/src/components/menu/Menu.module.css.js +12 -0
  164. package/dist/src/components/menu/Menu.module.css.js.map +1 -0
  165. package/dist/src/components/message/Message.module.css.cjs +9 -0
  166. package/dist/src/components/message/Message.module.css.cjs.map +1 -0
  167. package/dist/src/components/message/Message.module.css.js +9 -0
  168. package/dist/src/components/message/Message.module.css.js.map +1 -0
  169. package/dist/src/components/message/useMessage.cjs +55 -0
  170. package/dist/src/components/message/useMessage.cjs.map +1 -0
  171. package/dist/src/components/message/useMessage.js +55 -0
  172. package/dist/src/components/message/useMessage.js.map +1 -0
  173. package/dist/src/components/modal/Modal.cjs +32 -0
  174. package/dist/src/components/modal/Modal.cjs.map +1 -0
  175. package/dist/src/components/modal/Modal.js +32 -0
  176. package/dist/src/components/modal/Modal.js.map +1 -0
  177. package/dist/src/components/navMenu/NavMenu.cjs +132 -0
  178. package/dist/src/components/navMenu/NavMenu.cjs.map +1 -0
  179. package/dist/src/components/navMenu/NavMenu.js +115 -0
  180. package/dist/src/components/navMenu/NavMenu.js.map +1 -0
  181. package/dist/src/components/navMenu/NavMenu.module.css.cjs +18 -0
  182. package/dist/src/components/navMenu/NavMenu.module.css.cjs.map +1 -0
  183. package/dist/src/components/navMenu/NavMenu.module.css.js +18 -0
  184. package/dist/src/components/navMenu/NavMenu.module.css.js.map +1 -0
  185. package/dist/src/components/notification/Notification.module.css.cjs +9 -0
  186. package/dist/src/components/notification/Notification.module.css.cjs.map +1 -0
  187. package/dist/src/components/notification/Notification.module.css.js +9 -0
  188. package/dist/src/components/notification/Notification.module.css.js.map +1 -0
  189. package/dist/src/components/notification/useNotification.cjs +52 -0
  190. package/dist/src/components/notification/useNotification.cjs.map +1 -0
  191. package/dist/src/components/notification/useNotification.js +52 -0
  192. package/dist/src/components/notification/useNotification.js.map +1 -0
  193. package/dist/src/components/notificationModal/NotifcationModal.module.css.cjs +21 -0
  194. package/dist/src/components/notificationModal/NotifcationModal.module.css.cjs.map +1 -0
  195. package/dist/src/components/notificationModal/NotifcationModal.module.css.js +21 -0
  196. package/dist/src/components/notificationModal/NotifcationModal.module.css.js.map +1 -0
  197. package/dist/src/components/notificationModal/NotificationModal.cjs +57 -0
  198. package/dist/src/components/notificationModal/NotificationModal.cjs.map +1 -0
  199. package/dist/src/components/notificationModal/NotificationModal.js +57 -0
  200. package/dist/src/components/notificationModal/NotificationModal.js.map +1 -0
  201. package/dist/src/components/pagination/Pagination.cjs +65 -0
  202. package/dist/src/components/pagination/Pagination.cjs.map +1 -0
  203. package/dist/src/components/pagination/Pagination.js +65 -0
  204. package/dist/src/components/pagination/Pagination.js.map +1 -0
  205. package/dist/src/components/pagination/Pagination.module.css.cjs +6 -0
  206. package/dist/src/components/pagination/Pagination.module.css.cjs.map +1 -0
  207. package/dist/src/components/pagination/Pagination.module.css.js +7 -0
  208. package/dist/src/components/pagination/Pagination.module.css.js.map +1 -0
  209. package/dist/src/components/popover/Popover.cjs +41 -0
  210. package/dist/src/components/popover/Popover.cjs.map +1 -0
  211. package/dist/src/components/popover/Popover.js +41 -0
  212. package/dist/src/components/popover/Popover.js.map +1 -0
  213. package/dist/src/components/popover/Popover.module.css.cjs +33 -0
  214. package/dist/src/components/popover/Popover.module.css.cjs.map +1 -0
  215. package/dist/src/components/popover/Popover.module.css.js +33 -0
  216. package/dist/src/components/popover/Popover.module.css.js.map +1 -0
  217. package/dist/src/components/progress/Progress.cjs +9 -0
  218. package/dist/src/components/progress/Progress.cjs.map +1 -0
  219. package/dist/src/components/progress/Progress.js +9 -0
  220. package/dist/src/components/progress/Progress.js.map +1 -0
  221. package/dist/src/components/radio/Radio.cjs +24 -0
  222. package/dist/src/components/radio/Radio.cjs.map +1 -0
  223. package/dist/src/components/radio/Radio.js +24 -0
  224. package/dist/src/components/radio/Radio.js.map +1 -0
  225. package/dist/src/components/rate/Rate.cjs +22 -0
  226. package/dist/src/components/rate/Rate.cjs.map +1 -0
  227. package/dist/src/components/rate/Rate.js +22 -0
  228. package/dist/src/components/rate/Rate.js.map +1 -0
  229. package/dist/src/components/select/AntdSelect.cjs +76 -0
  230. package/dist/src/components/select/AntdSelect.cjs.map +1 -0
  231. package/dist/src/components/select/AntdSelect.js +60 -0
  232. package/dist/src/components/select/AntdSelect.js.map +1 -0
  233. package/dist/src/components/select/Select.cjs +107 -0
  234. package/dist/src/components/select/Select.cjs.map +1 -0
  235. package/dist/src/components/select/Select.js +107 -0
  236. package/dist/src/components/select/Select.js.map +1 -0
  237. package/dist/src/components/select/SummarizedSelect.cjs +455 -0
  238. package/dist/src/components/select/SummarizedSelect.cjs.map +1 -0
  239. package/dist/src/components/select/SummarizedSelect.js +455 -0
  240. package/dist/src/components/select/SummarizedSelect.js.map +1 -0
  241. package/dist/src/components/select/SummarizedSelect.module.css.cjs +30 -0
  242. package/dist/src/components/select/SummarizedSelect.module.css.cjs.map +1 -0
  243. package/dist/src/components/select/SummarizedSelect.module.css.js +30 -0
  244. package/dist/src/components/select/SummarizedSelect.module.css.js.map +1 -0
  245. package/dist/src/components/skeleton/Skeleton.cjs +14 -0
  246. package/dist/src/components/skeleton/Skeleton.cjs.map +1 -0
  247. package/dist/src/components/skeleton/Skeleton.js +14 -0
  248. package/dist/src/components/skeleton/Skeleton.js.map +1 -0
  249. package/dist/src/components/spinner/Spinner.cjs +20 -0
  250. package/dist/src/components/spinner/Spinner.cjs.map +1 -0
  251. package/dist/src/components/spinner/Spinner.js +20 -0
  252. package/dist/src/components/spinner/Spinner.js.map +1 -0
  253. package/dist/src/components/steps/Steps.cjs +50 -0
  254. package/dist/src/components/steps/Steps.cjs.map +1 -0
  255. package/dist/src/components/steps/Steps.js +50 -0
  256. package/dist/src/components/steps/Steps.js.map +1 -0
  257. package/dist/src/components/steps/useSteps.cjs +56 -0
  258. package/dist/src/components/steps/useSteps.cjs.map +1 -0
  259. package/dist/src/components/steps/useSteps.js +56 -0
  260. package/dist/src/components/steps/useSteps.js.map +1 -0
  261. package/dist/src/components/switch/Switch.cjs +28 -0
  262. package/dist/src/components/switch/Switch.cjs.map +1 -0
  263. package/dist/src/components/switch/Switch.js +28 -0
  264. package/dist/src/components/switch/Switch.js.map +1 -0
  265. package/dist/src/components/table/Table.cjs +117 -0
  266. package/dist/src/components/table/Table.cjs.map +1 -0
  267. package/dist/src/components/table/Table.js +117 -0
  268. package/dist/src/components/table/Table.js.map +1 -0
  269. package/dist/src/components/table/Table.module.css.cjs +12 -0
  270. package/dist/src/components/table/Table.module.css.cjs.map +1 -0
  271. package/dist/src/components/table/Table.module.css.js +12 -0
  272. package/dist/src/components/table/Table.module.css.js.map +1 -0
  273. package/dist/src/components/tabs/Tabs.cjs +10 -0
  274. package/dist/src/components/tabs/Tabs.cjs.map +1 -0
  275. package/dist/src/components/tabs/Tabs.js +10 -0
  276. package/dist/src/components/tabs/Tabs.js.map +1 -0
  277. package/dist/src/components/tag/Tag.cjs +74 -0
  278. package/dist/src/components/tag/Tag.cjs.map +1 -0
  279. package/dist/src/components/tag/Tag.js +57 -0
  280. package/dist/src/components/tag/Tag.js.map +1 -0
  281. package/dist/src/components/tooltip/Tooltip.cjs +14 -0
  282. package/dist/src/components/tooltip/Tooltip.cjs.map +1 -0
  283. package/dist/src/components/tooltip/Tooltip.js +14 -0
  284. package/dist/src/components/tooltip/Tooltip.js.map +1 -0
  285. package/dist/src/components/vennDiagram/VennDiagram.cjs +47 -0
  286. package/dist/src/components/vennDiagram/VennDiagram.cjs.map +1 -0
  287. package/dist/src/components/vennDiagram/VennDiagram.js +47 -0
  288. package/dist/src/components/vennDiagram/VennDiagram.js.map +1 -0
  289. package/dist/src/svgs/ProgressCircle.svg.cjs +22 -0
  290. package/dist/src/svgs/ProgressCircle.svg.cjs.map +1 -0
  291. package/dist/src/svgs/ProgressCircle.svg.js +6 -0
  292. package/dist/src/svgs/ProgressCircle.svg.js.map +1 -0
  293. package/dist/src/svgs/j2-logo-menu-collapse.svg.cjs +22 -0
  294. package/dist/src/svgs/j2-logo-menu-collapse.svg.cjs.map +1 -0
  295. package/dist/src/svgs/j2-logo-menu-collapse.svg.js +6 -0
  296. package/dist/src/svgs/j2-logo-menu-collapse.svg.js.map +1 -0
  297. package/dist/src/svgs/j2-logo-menu.svg.cjs +22 -0
  298. package/dist/src/svgs/j2-logo-menu.svg.cjs.map +1 -0
  299. package/dist/src/svgs/j2-logo-menu.svg.js +6 -0
  300. package/dist/src/svgs/j2-logo-menu.svg.js.map +1 -0
  301. package/dist/src/svgs/menu-sidebar-collapse.svg.cjs +22 -0
  302. package/dist/src/svgs/menu-sidebar-collapse.svg.cjs.map +1 -0
  303. package/dist/src/svgs/menu-sidebar-collapse.svg.js +6 -0
  304. package/dist/src/svgs/menu-sidebar-collapse.svg.js.map +1 -0
  305. package/dist/src/svgs/menu-sidebar-expand.svg.cjs +22 -0
  306. package/dist/src/svgs/menu-sidebar-expand.svg.cjs.map +1 -0
  307. package/dist/src/svgs/menu-sidebar-expand.svg.js +6 -0
  308. package/dist/src/svgs/menu-sidebar-expand.svg.js.map +1 -0
  309. package/dist/style.css +646 -646
  310. package/package.json +1 -1
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const filterHelpers = require("./filterHelpers.cjs");
5
+ function _interopNamespaceDefault(e) {
6
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
7
+ if (e) {
8
+ for (const k in e) {
9
+ if (k !== "default") {
10
+ const d = Object.getOwnPropertyDescriptor(e, k);
11
+ Object.defineProperty(n, k, d.get ? d : {
12
+ enumerable: true,
13
+ get: () => e[k]
14
+ });
15
+ }
16
+ }
17
+ }
18
+ n.default = e;
19
+ return Object.freeze(n);
20
+ }
21
+ const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
22
+ const TypeToOperatorOptions = {
23
+ select: [
24
+ { label: "is any of", value: "equals" },
25
+ { label: "is not any of", value: "notEqual" },
26
+ { label: "has no value", value: "blank" },
27
+ { label: "has any value", value: "notBlank" }
28
+ ],
29
+ number: [
30
+ { label: "is", value: "equals" },
31
+ { label: "is not", value: "notEqual" },
32
+ { label: "is greater than", value: "greaterThan" },
33
+ { label: "is greater than or equal to", value: "greaterThanOrEqual" },
34
+ { label: "is less than", value: "lessThan" },
35
+ { label: "is less than or equal to", value: "lessThanOrEqual" },
36
+ { label: "has no value", value: "blank" },
37
+ { label: "has any value", value: "notBlank" },
38
+ { label: "is between", value: "inRange" }
39
+ ],
40
+ text: [
41
+ { label: "contains", value: "contains" },
42
+ { label: "does not contain", value: "notContains" },
43
+ { label: "starts with", value: "startsWith" },
44
+ { label: "ends with", value: "endsWith" },
45
+ { label: "has no value", value: "blank" },
46
+ { label: "has any value", value: "notBlank" }
47
+ ]
48
+ };
49
+ const buildValueInputConfig = (config, operator) => {
50
+ if (config.type === "select") {
51
+ if (operator === "blank" || operator === "notBlank") return;
52
+ return {
53
+ type: "select",
54
+ valueOptions: config.options || []
55
+ };
56
+ }
57
+ if (config.type === "number") {
58
+ if (operator === "blank" || operator === "notBlank") return;
59
+ return {
60
+ type: "number",
61
+ inputCount: operator === "inRange" ? 2 : 1,
62
+ numberOptions: config.options
63
+ };
64
+ }
65
+ if (config.type === "text") {
66
+ if (operator === "blank" || operator === "notBlank") return;
67
+ return {
68
+ type: "text"
69
+ };
70
+ }
71
+ };
72
+ const filterFieldReducer = (state, action) => {
73
+ var _a, _b, _c;
74
+ switch (action.type) {
75
+ case "setField": {
76
+ const config = state.filterConfigs.find(
77
+ (config2) => config2.field === action.payload
78
+ );
79
+ if (!config) return state;
80
+ const operatorOptions = config ? TypeToOperatorOptions[config.type] : [];
81
+ const newFilter = {
82
+ ...state.filter,
83
+ type: config.type,
84
+ field: action.payload,
85
+ operator: operatorOptions[0].value,
86
+ values: []
87
+ };
88
+ const pendingFilter = {
89
+ ...newFilter,
90
+ errors: filterHelpers.validateFormFilter(newFilter)
91
+ };
92
+ return {
93
+ ...state,
94
+ filter: pendingFilter,
95
+ config,
96
+ operatorOptions,
97
+ valueInputConfig: operatorOptions.length > 0 ? buildValueInputConfig(config, operatorOptions[0].value) : void 0
98
+ };
99
+ }
100
+ case "setOperator": {
101
+ if (!state.config) return state;
102
+ if (!action.payload) return state;
103
+ const pendingFilter = {
104
+ ...state.filter,
105
+ operator: action.payload,
106
+ values: []
107
+ };
108
+ return {
109
+ ...state,
110
+ filter: {
111
+ ...pendingFilter,
112
+ errors: filterHelpers.validateFormFilter(pendingFilter)
113
+ },
114
+ valueInputConfig: buildValueInputConfig(state.config, action.payload)
115
+ };
116
+ }
117
+ case "setValues": {
118
+ if (!state.filter) return state;
119
+ const values = state.filter.type === "number" ? action.payload.map((value) => Number(value)) : action.payload.filter(
120
+ (value) => value !== null && value !== void 0
121
+ );
122
+ const pendingFilter = {
123
+ ...state.filter,
124
+ values
125
+ };
126
+ pendingFilter.errors = filterHelpers.validateFormFilter(pendingFilter);
127
+ return {
128
+ ...state,
129
+ filter: pendingFilter
130
+ };
131
+ }
132
+ case "initialize": {
133
+ const field = ((_a = state.filter) == null ? void 0 : _a.field) || ((_b = state.filterConfigs.find((config2) => !config2.disabled)) == null ? void 0 : _b.field);
134
+ const config = state.filterConfigs.find(
135
+ (config2) => config2.field === field
136
+ );
137
+ if (!config) return state;
138
+ const operatorOptions = config ? TypeToOperatorOptions[config.type] : [];
139
+ const operator = ((_c = state.filter) == null ? void 0 : _c.operator) || operatorOptions[0].value;
140
+ const filter = state.filter ?? {
141
+ field,
142
+ type: config.type,
143
+ operator,
144
+ values: []
145
+ };
146
+ const errors = filterHelpers.validateFormFilter(filter);
147
+ filter.errors = errors;
148
+ return {
149
+ ...state,
150
+ config,
151
+ filter,
152
+ operatorOptions,
153
+ valueInputConfig: operatorOptions.length > 0 ? buildValueInputConfig(config, operator) : void 0
154
+ };
155
+ }
156
+ default:
157
+ return state;
158
+ }
159
+ };
160
+ const useFilterField = ({
161
+ filterConfigs,
162
+ filter: initialFilter
163
+ }) => {
164
+ const [{ filter, config, operatorOptions, valueInputConfig }, dispatch] = React__namespace.useReducer(
165
+ filterFieldReducer,
166
+ {
167
+ filter: initialFilter,
168
+ filterConfigs,
169
+ config: void 0,
170
+ operatorOptions: [],
171
+ valueInputConfig: void 0
172
+ },
173
+ (state) => {
174
+ return filterFieldReducer(state, {
175
+ type: "initialize",
176
+ payload: void 0
177
+ });
178
+ }
179
+ );
180
+ const handleFieldChange = (value) => {
181
+ dispatch({
182
+ type: "setField",
183
+ payload: value
184
+ });
185
+ };
186
+ const handleOperatorChange = (value) => {
187
+ dispatch({
188
+ type: "setOperator",
189
+ payload: value
190
+ });
191
+ };
192
+ const handleValuesChange = (value) => {
193
+ dispatch({
194
+ type: "setValues",
195
+ payload: value
196
+ });
197
+ };
198
+ return {
199
+ filter,
200
+ config,
201
+ operatorOptions,
202
+ valueInputConfig,
203
+ handleFieldChange,
204
+ handleOperatorChange,
205
+ handleValuesChange
206
+ };
207
+ };
208
+ exports.TypeToOperatorOptions = TypeToOperatorOptions;
209
+ exports.useFilterField = useFilterField;
210
+ //# sourceMappingURL=useFilterField.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFilterField.cjs","sources":["../../../../src/components/filterform/useFilterField.tsx"],"sourcesContent":["import * as React from 'react'\nimport {\n FilterConfig,\n FilterType,\n FormFilter,\n NumberOptionsType,\n Operator,\n SelectOptionsType,\n} from './types'\nimport { validateFormFilter } from './filterHelpers'\nexport type UseFilterFieldInputs = {\n filterConfigs: FilterConfig[]\n filter?: FormFilter\n}\n\ntype UseFilterFieldOutputs = {\n filter: FormFilter | undefined\n config: FilterConfig | undefined\n operatorOptions: { label: string; value: string }[]\n valueInputConfig: ValueInputConfig | undefined\n handleFieldChange: (value: string) => void\n handleOperatorChange: (value: string) => void\n handleValuesChange: (value: (string | number | undefined | null)[]) => void\n}\n\nexport const TypeToOperatorOptions: Record<\n FilterType,\n { label: string; value: Operator }[]\n> = {\n select: [\n { label: 'is any of', value: 'equals' },\n { label: 'is not any of', value: 'notEqual' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n ],\n number: [\n { label: 'is', value: 'equals' },\n { label: 'is not', value: 'notEqual' },\n { label: 'is greater than', value: 'greaterThan' },\n { label: 'is greater than or equal to', value: 'greaterThanOrEqual' },\n { label: 'is less than', value: 'lessThan' },\n { label: 'is less than or equal to', value: 'lessThanOrEqual' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n { label: 'is between', value: 'inRange' },\n ],\n text: [\n { label: 'contains', value: 'contains' },\n { label: 'does not contain', value: 'notContains' },\n { label: 'starts with', value: 'startsWith' },\n { label: 'ends with', value: 'endsWith' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n ],\n}\n\ntype SelectValueInputConfig = {\n type: 'select'\n valueOptions: { label: string; value: string }[]\n}\n\ntype NumberValueInputConfig = {\n type: 'number'\n inputCount: number\n numberOptions?: { max: number; min: number; step: number }\n}\n\ntype TextValueInputConfig = {\n type: 'text'\n}\n\nexport type ValueInputConfig =\n SelectValueInputConfig | NumberValueInputConfig | TextValueInputConfig\n\ntype FilterFieldState = {\n filter: FormFilter | undefined\n filterConfigs: FilterConfig[]\n config: FilterConfig | undefined\n operatorOptions: { label: string; value: string }[]\n valueInputConfig: ValueInputConfig | undefined\n}\n\ntype Action = {\n type: 'setField' | 'setOperator' | 'initialize'\n payload: string | undefined\n}\ntype SetValuesAction = {\n type: 'setValues'\n payload: (string | number | undefined | null)[]\n}\n\nconst buildValueInputConfig = (\n config: FilterConfig,\n operator: string\n): ValueInputConfig | undefined => {\n if (config.type === 'select') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'select',\n valueOptions: (config.options as SelectOptionsType) || [],\n }\n }\n\n if (config.type === 'number') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'number',\n inputCount: operator === 'inRange' ? 2 : 1,\n numberOptions: config.options as NumberOptionsType,\n }\n }\n\n if (config.type === 'text') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'text',\n }\n }\n}\n\nconst filterFieldReducer = (\n state: FilterFieldState,\n action: Action | SetValuesAction\n) => {\n switch (action.type) {\n case 'setField': {\n const config = state.filterConfigs.find(\n (config) => config.field === action.payload\n )\n\n if (!config) return state\n\n const operatorOptions = config ? TypeToOperatorOptions[config.type] : []\n\n const newFilter = {\n ...state.filter,\n type: config.type,\n field: action.payload,\n operator: operatorOptions[0].value,\n values: [],\n } as FormFilter\n\n const pendingFilter = {\n ...newFilter,\n errors: validateFormFilter(newFilter),\n }\n\n return {\n ...state,\n filter: pendingFilter,\n config,\n operatorOptions,\n valueInputConfig:\n operatorOptions.length > 0\n ? buildValueInputConfig(config, operatorOptions[0].value)\n : undefined,\n }\n }\n case 'setOperator': {\n if (!state.config) return state\n if (!action.payload) return state\n\n const pendingFilter = {\n ...state.filter,\n operator: action.payload,\n values: [],\n } as FormFilter\n\n return {\n ...state,\n filter: {\n ...pendingFilter,\n errors: validateFormFilter(pendingFilter),\n },\n valueInputConfig: buildValueInputConfig(state.config, action.payload),\n }\n }\n case 'setValues': {\n if (!state.filter) return state\n\n const values =\n state.filter.type === 'number'\n ? action.payload.map((value) => Number(value))\n : (action.payload.filter(\n (value) => value !== null && value !== undefined\n ) as string[])\n\n const pendingFilter = {\n ...state.filter,\n values: values,\n }\n\n pendingFilter.errors = validateFormFilter(pendingFilter)\n\n return {\n ...state,\n filter: pendingFilter,\n }\n }\n case 'initialize': {\n const field =\n state.filter?.field ||\n state.filterConfigs.find((config) => !config.disabled)?.field\n const config = state.filterConfigs.find(\n (config) => config.field === field\n )\n\n if (!config) return state\n\n const operatorOptions = config ? TypeToOperatorOptions[config.type] : []\n\n const operator = state.filter?.operator || operatorOptions[0].value\n\n const filter =\n state.filter ??\n ({\n field,\n type: config.type,\n operator,\n values: [],\n } as FormFilter)\n\n const errors = validateFormFilter(filter)\n filter.errors = errors\n\n return {\n ...state,\n config,\n filter,\n operatorOptions,\n valueInputConfig:\n operatorOptions.length > 0\n ? buildValueInputConfig(config, operator)\n : undefined,\n }\n }\n default:\n return state\n }\n}\n\nexport const useFilterField = ({\n filterConfigs,\n filter: initialFilter,\n}: UseFilterFieldInputs): UseFilterFieldOutputs => {\n const [{ filter, config, operatorOptions, valueInputConfig }, dispatch] =\n React.useReducer(\n filterFieldReducer,\n {\n filter: initialFilter,\n filterConfigs,\n config: undefined,\n operatorOptions: [],\n valueInputConfig: undefined,\n },\n (state) => {\n return filterFieldReducer(state, {\n type: 'initialize',\n payload: undefined,\n })\n }\n )\n\n const handleFieldChange = (value: string) => {\n dispatch({\n type: 'setField',\n payload: value,\n })\n }\n\n const handleOperatorChange = (value: string) => {\n dispatch({\n type: 'setOperator',\n payload: value,\n })\n }\n\n const handleValuesChange = (\n value: (string | number | undefined | null)[]\n ) => {\n dispatch({\n type: 'setValues',\n payload: value,\n })\n }\n\n return {\n filter,\n config,\n operatorOptions,\n valueInputConfig,\n handleFieldChange,\n handleOperatorChange,\n handleValuesChange,\n }\n}\n"],"names":["config","validateFormFilter","React"],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ import * as React from "react";
2
+ import { validateFormFilter } from "./filterHelpers.js";
3
+ const TypeToOperatorOptions = {
4
+ select: [
5
+ { label: "is any of", value: "equals" },
6
+ { label: "is not any of", value: "notEqual" },
7
+ { label: "has no value", value: "blank" },
8
+ { label: "has any value", value: "notBlank" }
9
+ ],
10
+ number: [
11
+ { label: "is", value: "equals" },
12
+ { label: "is not", value: "notEqual" },
13
+ { label: "is greater than", value: "greaterThan" },
14
+ { label: "is greater than or equal to", value: "greaterThanOrEqual" },
15
+ { label: "is less than", value: "lessThan" },
16
+ { label: "is less than or equal to", value: "lessThanOrEqual" },
17
+ { label: "has no value", value: "blank" },
18
+ { label: "has any value", value: "notBlank" },
19
+ { label: "is between", value: "inRange" }
20
+ ],
21
+ text: [
22
+ { label: "contains", value: "contains" },
23
+ { label: "does not contain", value: "notContains" },
24
+ { label: "starts with", value: "startsWith" },
25
+ { label: "ends with", value: "endsWith" },
26
+ { label: "has no value", value: "blank" },
27
+ { label: "has any value", value: "notBlank" }
28
+ ]
29
+ };
30
+ const buildValueInputConfig = (config, operator) => {
31
+ if (config.type === "select") {
32
+ if (operator === "blank" || operator === "notBlank") return;
33
+ return {
34
+ type: "select",
35
+ valueOptions: config.options || []
36
+ };
37
+ }
38
+ if (config.type === "number") {
39
+ if (operator === "blank" || operator === "notBlank") return;
40
+ return {
41
+ type: "number",
42
+ inputCount: operator === "inRange" ? 2 : 1,
43
+ numberOptions: config.options
44
+ };
45
+ }
46
+ if (config.type === "text") {
47
+ if (operator === "blank" || operator === "notBlank") return;
48
+ return {
49
+ type: "text"
50
+ };
51
+ }
52
+ };
53
+ const filterFieldReducer = (state, action) => {
54
+ var _a, _b, _c;
55
+ switch (action.type) {
56
+ case "setField": {
57
+ const config = state.filterConfigs.find(
58
+ (config2) => config2.field === action.payload
59
+ );
60
+ if (!config) return state;
61
+ const operatorOptions = config ? TypeToOperatorOptions[config.type] : [];
62
+ const newFilter = {
63
+ ...state.filter,
64
+ type: config.type,
65
+ field: action.payload,
66
+ operator: operatorOptions[0].value,
67
+ values: []
68
+ };
69
+ const pendingFilter = {
70
+ ...newFilter,
71
+ errors: validateFormFilter(newFilter)
72
+ };
73
+ return {
74
+ ...state,
75
+ filter: pendingFilter,
76
+ config,
77
+ operatorOptions,
78
+ valueInputConfig: operatorOptions.length > 0 ? buildValueInputConfig(config, operatorOptions[0].value) : void 0
79
+ };
80
+ }
81
+ case "setOperator": {
82
+ if (!state.config) return state;
83
+ if (!action.payload) return state;
84
+ const pendingFilter = {
85
+ ...state.filter,
86
+ operator: action.payload,
87
+ values: []
88
+ };
89
+ return {
90
+ ...state,
91
+ filter: {
92
+ ...pendingFilter,
93
+ errors: validateFormFilter(pendingFilter)
94
+ },
95
+ valueInputConfig: buildValueInputConfig(state.config, action.payload)
96
+ };
97
+ }
98
+ case "setValues": {
99
+ if (!state.filter) return state;
100
+ const values = state.filter.type === "number" ? action.payload.map((value) => Number(value)) : action.payload.filter(
101
+ (value) => value !== null && value !== void 0
102
+ );
103
+ const pendingFilter = {
104
+ ...state.filter,
105
+ values
106
+ };
107
+ pendingFilter.errors = validateFormFilter(pendingFilter);
108
+ return {
109
+ ...state,
110
+ filter: pendingFilter
111
+ };
112
+ }
113
+ case "initialize": {
114
+ const field = ((_a = state.filter) == null ? void 0 : _a.field) || ((_b = state.filterConfigs.find((config2) => !config2.disabled)) == null ? void 0 : _b.field);
115
+ const config = state.filterConfigs.find(
116
+ (config2) => config2.field === field
117
+ );
118
+ if (!config) return state;
119
+ const operatorOptions = config ? TypeToOperatorOptions[config.type] : [];
120
+ const operator = ((_c = state.filter) == null ? void 0 : _c.operator) || operatorOptions[0].value;
121
+ const filter = state.filter ?? {
122
+ field,
123
+ type: config.type,
124
+ operator,
125
+ values: []
126
+ };
127
+ const errors = validateFormFilter(filter);
128
+ filter.errors = errors;
129
+ return {
130
+ ...state,
131
+ config,
132
+ filter,
133
+ operatorOptions,
134
+ valueInputConfig: operatorOptions.length > 0 ? buildValueInputConfig(config, operator) : void 0
135
+ };
136
+ }
137
+ default:
138
+ return state;
139
+ }
140
+ };
141
+ const useFilterField = ({
142
+ filterConfigs,
143
+ filter: initialFilter
144
+ }) => {
145
+ const [{ filter, config, operatorOptions, valueInputConfig }, dispatch] = React.useReducer(
146
+ filterFieldReducer,
147
+ {
148
+ filter: initialFilter,
149
+ filterConfigs,
150
+ config: void 0,
151
+ operatorOptions: [],
152
+ valueInputConfig: void 0
153
+ },
154
+ (state) => {
155
+ return filterFieldReducer(state, {
156
+ type: "initialize",
157
+ payload: void 0
158
+ });
159
+ }
160
+ );
161
+ const handleFieldChange = (value) => {
162
+ dispatch({
163
+ type: "setField",
164
+ payload: value
165
+ });
166
+ };
167
+ const handleOperatorChange = (value) => {
168
+ dispatch({
169
+ type: "setOperator",
170
+ payload: value
171
+ });
172
+ };
173
+ const handleValuesChange = (value) => {
174
+ dispatch({
175
+ type: "setValues",
176
+ payload: value
177
+ });
178
+ };
179
+ return {
180
+ filter,
181
+ config,
182
+ operatorOptions,
183
+ valueInputConfig,
184
+ handleFieldChange,
185
+ handleOperatorChange,
186
+ handleValuesChange
187
+ };
188
+ };
189
+ export {
190
+ TypeToOperatorOptions,
191
+ useFilterField
192
+ };
193
+ //# sourceMappingURL=useFilterField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFilterField.js","sources":["../../../../src/components/filterform/useFilterField.tsx"],"sourcesContent":["import * as React from 'react'\nimport {\n FilterConfig,\n FilterType,\n FormFilter,\n NumberOptionsType,\n Operator,\n SelectOptionsType,\n} from './types'\nimport { validateFormFilter } from './filterHelpers'\nexport type UseFilterFieldInputs = {\n filterConfigs: FilterConfig[]\n filter?: FormFilter\n}\n\ntype UseFilterFieldOutputs = {\n filter: FormFilter | undefined\n config: FilterConfig | undefined\n operatorOptions: { label: string; value: string }[]\n valueInputConfig: ValueInputConfig | undefined\n handleFieldChange: (value: string) => void\n handleOperatorChange: (value: string) => void\n handleValuesChange: (value: (string | number | undefined | null)[]) => void\n}\n\nexport const TypeToOperatorOptions: Record<\n FilterType,\n { label: string; value: Operator }[]\n> = {\n select: [\n { label: 'is any of', value: 'equals' },\n { label: 'is not any of', value: 'notEqual' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n ],\n number: [\n { label: 'is', value: 'equals' },\n { label: 'is not', value: 'notEqual' },\n { label: 'is greater than', value: 'greaterThan' },\n { label: 'is greater than or equal to', value: 'greaterThanOrEqual' },\n { label: 'is less than', value: 'lessThan' },\n { label: 'is less than or equal to', value: 'lessThanOrEqual' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n { label: 'is between', value: 'inRange' },\n ],\n text: [\n { label: 'contains', value: 'contains' },\n { label: 'does not contain', value: 'notContains' },\n { label: 'starts with', value: 'startsWith' },\n { label: 'ends with', value: 'endsWith' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n ],\n}\n\ntype SelectValueInputConfig = {\n type: 'select'\n valueOptions: { label: string; value: string }[]\n}\n\ntype NumberValueInputConfig = {\n type: 'number'\n inputCount: number\n numberOptions?: { max: number; min: number; step: number }\n}\n\ntype TextValueInputConfig = {\n type: 'text'\n}\n\nexport type ValueInputConfig =\n SelectValueInputConfig | NumberValueInputConfig | TextValueInputConfig\n\ntype FilterFieldState = {\n filter: FormFilter | undefined\n filterConfigs: FilterConfig[]\n config: FilterConfig | undefined\n operatorOptions: { label: string; value: string }[]\n valueInputConfig: ValueInputConfig | undefined\n}\n\ntype Action = {\n type: 'setField' | 'setOperator' | 'initialize'\n payload: string | undefined\n}\ntype SetValuesAction = {\n type: 'setValues'\n payload: (string | number | undefined | null)[]\n}\n\nconst buildValueInputConfig = (\n config: FilterConfig,\n operator: string\n): ValueInputConfig | undefined => {\n if (config.type === 'select') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'select',\n valueOptions: (config.options as SelectOptionsType) || [],\n }\n }\n\n if (config.type === 'number') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'number',\n inputCount: operator === 'inRange' ? 2 : 1,\n numberOptions: config.options as NumberOptionsType,\n }\n }\n\n if (config.type === 'text') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'text',\n }\n }\n}\n\nconst filterFieldReducer = (\n state: FilterFieldState,\n action: Action | SetValuesAction\n) => {\n switch (action.type) {\n case 'setField': {\n const config = state.filterConfigs.find(\n (config) => config.field === action.payload\n )\n\n if (!config) return state\n\n const operatorOptions = config ? TypeToOperatorOptions[config.type] : []\n\n const newFilter = {\n ...state.filter,\n type: config.type,\n field: action.payload,\n operator: operatorOptions[0].value,\n values: [],\n } as FormFilter\n\n const pendingFilter = {\n ...newFilter,\n errors: validateFormFilter(newFilter),\n }\n\n return {\n ...state,\n filter: pendingFilter,\n config,\n operatorOptions,\n valueInputConfig:\n operatorOptions.length > 0\n ? buildValueInputConfig(config, operatorOptions[0].value)\n : undefined,\n }\n }\n case 'setOperator': {\n if (!state.config) return state\n if (!action.payload) return state\n\n const pendingFilter = {\n ...state.filter,\n operator: action.payload,\n values: [],\n } as FormFilter\n\n return {\n ...state,\n filter: {\n ...pendingFilter,\n errors: validateFormFilter(pendingFilter),\n },\n valueInputConfig: buildValueInputConfig(state.config, action.payload),\n }\n }\n case 'setValues': {\n if (!state.filter) return state\n\n const values =\n state.filter.type === 'number'\n ? action.payload.map((value) => Number(value))\n : (action.payload.filter(\n (value) => value !== null && value !== undefined\n ) as string[])\n\n const pendingFilter = {\n ...state.filter,\n values: values,\n }\n\n pendingFilter.errors = validateFormFilter(pendingFilter)\n\n return {\n ...state,\n filter: pendingFilter,\n }\n }\n case 'initialize': {\n const field =\n state.filter?.field ||\n state.filterConfigs.find((config) => !config.disabled)?.field\n const config = state.filterConfigs.find(\n (config) => config.field === field\n )\n\n if (!config) return state\n\n const operatorOptions = config ? TypeToOperatorOptions[config.type] : []\n\n const operator = state.filter?.operator || operatorOptions[0].value\n\n const filter =\n state.filter ??\n ({\n field,\n type: config.type,\n operator,\n values: [],\n } as FormFilter)\n\n const errors = validateFormFilter(filter)\n filter.errors = errors\n\n return {\n ...state,\n config,\n filter,\n operatorOptions,\n valueInputConfig:\n operatorOptions.length > 0\n ? buildValueInputConfig(config, operator)\n : undefined,\n }\n }\n default:\n return state\n }\n}\n\nexport const useFilterField = ({\n filterConfigs,\n filter: initialFilter,\n}: UseFilterFieldInputs): UseFilterFieldOutputs => {\n const [{ filter, config, operatorOptions, valueInputConfig }, dispatch] =\n React.useReducer(\n filterFieldReducer,\n {\n filter: initialFilter,\n filterConfigs,\n config: undefined,\n operatorOptions: [],\n valueInputConfig: undefined,\n },\n (state) => {\n return filterFieldReducer(state, {\n type: 'initialize',\n payload: undefined,\n })\n }\n )\n\n const handleFieldChange = (value: string) => {\n dispatch({\n type: 'setField',\n payload: value,\n })\n }\n\n const handleOperatorChange = (value: string) => {\n dispatch({\n type: 'setOperator',\n payload: value,\n })\n }\n\n const handleValuesChange = (\n value: (string | number | undefined | null)[]\n ) => {\n dispatch({\n type: 'setValues',\n payload: value,\n })\n }\n\n return {\n filter,\n config,\n operatorOptions,\n valueInputConfig,\n handleFieldChange,\n handleOperatorChange,\n handleValuesChange,\n }\n}\n"],"names":["config"],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const cloneDeep = require("lodash/cloneDeep.js");
5
+ const filterHelpers = require("./filterHelpers.cjs");
6
+ const copyFilterGroups = (filterGroups) => {
7
+ return cloneDeep(filterGroups);
8
+ };
9
+ const addFilter = (filter, filterGroups) => {
10
+ const copy = copyFilterGroups(filterGroups);
11
+ const filterGroupIndex = copy.findIndex(
12
+ (filterGroup) => filterGroup.field === filter.field
13
+ );
14
+ if (filterGroupIndex === -1) {
15
+ copy.push({ field: filter.field, filters: [filter] });
16
+ } else {
17
+ copy[filterGroupIndex].filters.push(filter);
18
+ }
19
+ return copy;
20
+ };
21
+ const removeFilter = (groupIndex, filterIndex, filterGroups) => {
22
+ const copy = copyFilterGroups(filterGroups);
23
+ copy[groupIndex].filters.splice(filterIndex, 1);
24
+ return copy.filter((group) => group.filters.length > 0);
25
+ };
26
+ const filterFormReducer = (state, action) => {
27
+ var _a;
28
+ switch (action.type) {
29
+ case "initialize": {
30
+ const filterGroups = (_a = action.payload) == null ? void 0 : _a.filters.reduce(
31
+ (acc, filter) => {
32
+ return addFilter(filter, acc);
33
+ },
34
+ [...state.filterGroups]
35
+ );
36
+ return {
37
+ ...state,
38
+ filterGroups: filterGroups ?? [],
39
+ isNewFilterInputOpen: !(filterGroups == null ? void 0 : filterGroups.length)
40
+ };
41
+ }
42
+ case "openNewFilterInput": {
43
+ return {
44
+ ...state,
45
+ isNewFilterInputOpen: true
46
+ };
47
+ }
48
+ case "addNewFilter": {
49
+ if (action.payload.errors && action.payload.errors.length > 0) {
50
+ return state;
51
+ }
52
+ const filterGroups = addFilter(action.payload, state.filterGroups);
53
+ return {
54
+ ...state,
55
+ filterGroups,
56
+ newFilter: void 0,
57
+ isNewFilterInputOpen: false
58
+ };
59
+ }
60
+ case "changeNewFilter": {
61
+ return {
62
+ ...state,
63
+ newFilter: action.payload
64
+ };
65
+ }
66
+ case "removeNewFilter": {
67
+ const allFiltersRemoved = state.filterGroups.every(
68
+ (group) => group.filters.length === 0
69
+ );
70
+ return {
71
+ ...state,
72
+ newFilter: void 0,
73
+ isNewFilterInputOpen: allFiltersRemoved
74
+ };
75
+ }
76
+ case "updateFilter": {
77
+ const { groupIndex, filterIndex, filter } = action.payload;
78
+ let filterGroups = copyFilterGroups(state.filterGroups);
79
+ const groupField = filterGroups[groupIndex].field;
80
+ if (groupField === filter.field) {
81
+ filterGroups[groupIndex].filters[filterIndex] = filter;
82
+ } else {
83
+ filterGroups = removeFilter(groupIndex, filterIndex, filterGroups);
84
+ filterGroups = addFilter(filter, filterGroups);
85
+ }
86
+ return {
87
+ ...state,
88
+ filterGroups
89
+ };
90
+ }
91
+ case "changeFilter": {
92
+ const { groupIndex, filterIndex, filter } = action.payload;
93
+ const filterGroups = copyFilterGroups(state.filterGroups);
94
+ const group = filterGroups[groupIndex];
95
+ if (group) {
96
+ group.filters[filterIndex] = filter;
97
+ }
98
+ return {
99
+ ...state,
100
+ filterGroups
101
+ };
102
+ }
103
+ case "removeFilter": {
104
+ const { groupIndex, filterIndex } = action.payload;
105
+ const filterGroups = removeFilter(
106
+ groupIndex,
107
+ filterIndex,
108
+ state.filterGroups
109
+ );
110
+ return {
111
+ ...state,
112
+ filterGroups,
113
+ isNewFilterInputOpen: state.isNewFilterInputOpen || filterGroups.length === 0
114
+ };
115
+ }
116
+ case "clearAllFilters": {
117
+ return {
118
+ ...state,
119
+ filterGroups: [],
120
+ isNewFilterInputOpen: true
121
+ };
122
+ }
123
+ default:
124
+ return state;
125
+ }
126
+ };
127
+ const useFiltersForm = ({
128
+ initialValues
129
+ }) => {
130
+ const [{ filterGroups, newFilter, isNewFilterInputOpen }, dispatch] = React.useReducer(
131
+ filterFormReducer,
132
+ {
133
+ filterGroups: [],
134
+ newFilter: void 0,
135
+ isNewFilterInputOpen: true
136
+ },
137
+ (state) => {
138
+ return filterFormReducer(state, {
139
+ type: "initialize",
140
+ payload: initialValues
141
+ });
142
+ }
143
+ );
144
+ const isValid = (filterGroups.length === 0 || filterGroups.every(
145
+ (group) => group.filters.every(
146
+ (filter) => filter.errors && filter.errors.length === 0
147
+ )
148
+ )) && ((newFilter == null ? void 0 : newFilter.errors) ? newFilter.errors.length === 0 : true);
149
+ const isEmpty = filterGroups.length === 0 && (newFilter ? filterHelpers.isEmptyFormFilter(newFilter) : true);
150
+ return {
151
+ dispatch,
152
+ filterGroups,
153
+ newFilter,
154
+ isNewFilterInputOpen,
155
+ isValid,
156
+ isEmpty
157
+ };
158
+ };
159
+ exports.useFiltersForm = useFiltersForm;
160
+ //# sourceMappingURL=useFiltersForm.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFiltersForm.cjs","sources":["../../../../src/components/filterform/useFiltersForm.ts"],"sourcesContent":["import { useReducer } from 'react'\nimport { FilterForm, FilterGroup, FormFilter } from './types'\n// Deep import, not `import { cloneDeep } from 'lodash'`: lodash is CommonJS\n// and Node cannot statically detect its named exports, so the bundled\n// package throws \"Named export 'cloneDeep' not found\" when a consumer\n// loads it through native Node ESM (SSR, or vitest without a bundler).\nimport cloneDeep from 'lodash/cloneDeep.js'\nimport { isEmptyFormFilter } from './filterHelpers'\n\ntype UseFiltersFormInput = {\n initialValues?: FilterForm\n}\n\ntype UseFiltersFormOutput = {\n dispatch: (action: Action) => void\n filterGroups: FilterGroup[]\n newFilter: FormFilter | undefined\n isNewFilterInputOpen: boolean\n isValid: boolean\n isEmpty: boolean\n}\n\ntype FilterFormState = {\n filterGroups: FilterGroup[]\n newFilter: FormFilter | undefined\n isNewFilterInputOpen: boolean\n}\n\ntype InitializeAction = {\n type: 'initialize'\n payload: FilterForm | undefined\n}\n\ntype OpenNewFilterInputAction = {\n type: 'openNewFilterInput'\n}\n\ntype AddNewFilterAction = {\n type: 'addNewFilter'\n payload: FormFilter\n}\n\ntype ChangeNewFilterAction = {\n type: 'changeNewFilter'\n payload: FormFilter\n}\n\ntype RemoveNewFilterAction = {\n type: 'removeNewFilter'\n}\n\ntype ClearAllFiltersAction = {\n type: 'clearAllFilters'\n}\n\ntype UpdateFilterAction = {\n type: 'updateFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n filter: FormFilter\n }\n}\n\ntype ChangeFilterAction = {\n type: 'changeFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n filter: FormFilter\n }\n}\n\ntype RemoveFilterAction = {\n type: 'removeFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n }\n}\n\ntype Action =\n | AddNewFilterAction\n | UpdateFilterAction\n | ClearAllFiltersAction\n | ChangeNewFilterAction\n | OpenNewFilterInputAction\n | ChangeFilterAction\n | RemoveFilterAction\n | InitializeAction\n | RemoveNewFilterAction\n\nconst copyFilterGroups = (filterGroups: FilterGroup[]): FilterGroup[] => {\n return cloneDeep(filterGroups)\n}\n\nconst addFilter = (\n filter: FormFilter,\n filterGroups: FilterGroup[]\n): FilterGroup[] => {\n const copy = copyFilterGroups(filterGroups)\n const filterGroupIndex = copy.findIndex(\n (filterGroup) => filterGroup.field === filter.field\n )\n\n if (filterGroupIndex === -1) {\n copy.push({ field: filter.field, filters: [filter] })\n } else {\n copy[filterGroupIndex].filters.push(filter)\n }\n\n return copy\n}\n\nconst removeFilter = (\n groupIndex: number,\n filterIndex: number,\n filterGroups: FilterGroup[]\n): FilterGroup[] => {\n const copy = copyFilterGroups(filterGroups)\n copy[groupIndex].filters.splice(filterIndex, 1)\n\n return copy.filter((group) => group.filters.length > 0)\n}\n\nconst filterFormReducer = (state: FilterFormState, action: Action) => {\n switch (action.type) {\n case 'initialize': {\n const filterGroups = action.payload?.filters.reduce(\n (acc, filter) => {\n return addFilter(filter, acc)\n },\n [...state.filterGroups]\n )\n\n return {\n ...state,\n filterGroups: filterGroups ?? [],\n isNewFilterInputOpen: !filterGroups?.length,\n }\n }\n case 'openNewFilterInput': {\n return {\n ...state,\n isNewFilterInputOpen: true,\n }\n }\n case 'addNewFilter': {\n if (action.payload.errors && action.payload.errors.length > 0) {\n return state\n }\n\n const filterGroups = addFilter(action.payload, state.filterGroups)\n\n return {\n ...state,\n filterGroups,\n newFilter: undefined,\n isNewFilterInputOpen: false,\n }\n }\n case 'changeNewFilter': {\n return {\n ...state,\n newFilter: action.payload,\n }\n }\n case 'removeNewFilter': {\n const allFiltersRemoved = state.filterGroups.every(\n (group) => group.filters.length === 0\n )\n return {\n ...state,\n newFilter: undefined,\n isNewFilterInputOpen: allFiltersRemoved,\n }\n }\n case 'updateFilter': {\n const { groupIndex, filterIndex, filter } = action.payload\n let filterGroups = copyFilterGroups(state.filterGroups)\n const groupField = filterGroups[groupIndex].field\n\n if (groupField === filter.field) {\n filterGroups[groupIndex].filters[filterIndex] = filter\n } else {\n filterGroups = removeFilter(groupIndex, filterIndex, filterGroups)\n filterGroups = addFilter(filter, filterGroups)\n }\n\n return {\n ...state,\n filterGroups,\n }\n }\n case 'changeFilter': {\n const { groupIndex, filterIndex, filter } = action.payload\n const filterGroups = copyFilterGroups(state.filterGroups)\n const group = filterGroups[groupIndex]\n if (group) {\n group.filters[filterIndex] = filter\n }\n\n return {\n ...state,\n filterGroups,\n }\n }\n case 'removeFilter': {\n const { groupIndex, filterIndex } = action.payload\n\n const filterGroups = removeFilter(\n groupIndex,\n filterIndex,\n state.filterGroups\n )\n\n return {\n ...state,\n filterGroups,\n isNewFilterInputOpen:\n state.isNewFilterInputOpen || filterGroups.length === 0,\n }\n }\n case 'clearAllFilters': {\n return {\n ...state,\n filterGroups: [],\n isNewFilterInputOpen: true,\n }\n }\n default:\n return state\n }\n}\n\nexport const useFiltersForm = ({\n initialValues,\n}: UseFiltersFormInput): UseFiltersFormOutput => {\n const [{ filterGroups, newFilter, isNewFilterInputOpen }, dispatch] =\n useReducer(\n filterFormReducer,\n {\n filterGroups: [],\n newFilter: undefined,\n isNewFilterInputOpen: true,\n },\n (state) => {\n return filterFormReducer(state, {\n type: 'initialize',\n payload: initialValues,\n })\n }\n )\n\n const isValid =\n (filterGroups.length === 0 ||\n filterGroups.every((group) =>\n group.filters.every(\n (filter) => filter.errors && filter.errors.length === 0\n )\n )) &&\n (newFilter?.errors ? newFilter.errors.length === 0 : true)\n\n const isEmpty =\n filterGroups.length === 0 &&\n (newFilter ? isEmptyFormFilter(newFilter) : true)\n\n return {\n dispatch,\n filterGroups,\n newFilter,\n isNewFilterInputOpen,\n isValid,\n isEmpty,\n }\n}\n"],"names":["useReducer","isEmptyFormFilter"],"mappings":"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"}