@erpsquad/common 1.8.27 → 1.8.29

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 (321) hide show
  1. package/dist/_virtual/ArrowBack/index.esm.js +5 -0
  2. package/dist/_virtual/ArrowBack/index.esm.js.map +1 -0
  3. package/dist/_virtual/ArrowBack/index.js +2 -0
  4. package/dist/_virtual/ArrowBack/index.js.map +1 -0
  5. package/dist/_virtual/ArrowForward/index.esm.js +5 -0
  6. package/dist/_virtual/ArrowForward/index.esm.js.map +1 -0
  7. package/dist/_virtual/ArrowForward/index.js +2 -0
  8. package/dist/_virtual/ArrowForward/index.js.map +1 -0
  9. package/dist/_virtual/IndeterminateCheckBox/index.esm.js +5 -0
  10. package/dist/_virtual/IndeterminateCheckBox/index.esm.js.map +1 -0
  11. package/dist/_virtual/IndeterminateCheckBox/index.js +2 -0
  12. package/dist/_virtual/IndeterminateCheckBox/index.js.map +1 -0
  13. package/dist/_virtual/NorthEast/index.esm.js +5 -0
  14. package/dist/_virtual/NorthEast/index.esm.js.map +1 -0
  15. package/dist/_virtual/NorthEast/index.js +2 -0
  16. package/dist/_virtual/NorthEast/index.js.map +1 -0
  17. package/dist/_virtual/Visibility/index.esm.js +5 -0
  18. package/dist/_virtual/Visibility/index.esm.js.map +1 -0
  19. package/dist/_virtual/Visibility/index.js +2 -0
  20. package/dist/_virtual/Visibility/index.js.map +1 -0
  21. package/dist/_virtual/index/index.esm.js +2 -4
  22. package/dist/_virtual/index/index.esm.js.map +1 -1
  23. package/dist/_virtual/index/index.esm2.js +4 -2
  24. package/dist/_virtual/index/index.esm2.js.map +1 -1
  25. package/dist/_virtual/index/index.js +1 -1
  26. package/dist/_virtual/index/index2.js +1 -1
  27. package/dist/components/accordion/accordion.d.ts +1 -1
  28. package/dist/components/action-bar/action-bar/index.esm.js +1 -1
  29. package/dist/components/action-bar/action-bar/index.esm.js.map +1 -1
  30. package/dist/components/action-bar/action-bar/index.js +1 -1
  31. package/dist/components/action-bar/action-bar/index.js.map +1 -1
  32. package/dist/components/action-bar/action-bar.d.ts +1 -1
  33. package/dist/components/charts/line-chart/area-line-chart/index.esm.js +40 -0
  34. package/dist/components/charts/line-chart/area-line-chart/index.esm.js.map +1 -0
  35. package/dist/components/charts/line-chart/area-line-chart/index.js +2 -0
  36. package/dist/components/charts/line-chart/area-line-chart/index.js.map +1 -0
  37. package/dist/components/checkbox/checkbox.d.ts +1 -1
  38. package/dist/components/date-picker/date-picker.d.ts +1 -1
  39. package/dist/components/editor/custom-editor/index.esm.js +1 -1
  40. package/dist/components/editor/custom-editor/index.esm.js.map +1 -1
  41. package/dist/components/editor/custom-editor/index.js +1 -1
  42. package/dist/components/editor/custom-editor/index.js.map +1 -1
  43. package/dist/components/filter/fields/index.esm.js +180 -0
  44. package/dist/components/filter/fields/index.esm.js.map +1 -0
  45. package/dist/components/filter/fields/index.js +2 -0
  46. package/dist/components/filter/fields/index.js.map +1 -0
  47. package/dist/components/filter/filter/index.esm.js +1 -1
  48. package/dist/components/filter/filter/index.esm.js.map +1 -1
  49. package/dist/components/filter/filter/index.js +1 -1
  50. package/dist/components/filter/filter/index.js.map +1 -1
  51. package/dist/components/footer/footer.d.ts +1 -1
  52. package/dist/components/form-control/form-builder/form-builder-element/media.d.ts +1 -1
  53. package/dist/components/form-control/form-builder/form-builder-element/phone.d.ts +1 -1
  54. package/dist/components/form-control/form-builder/form-builder-element/select.d.ts +1 -1
  55. package/dist/components/form-control/form-builder/form-builder-element/text.d.ts +1 -1
  56. package/dist/components/form-control/form-builder/form-builder-element/time.d.ts +1 -1
  57. package/dist/components/form-control/form-parser/form-switcher.d.ts +1 -1
  58. package/dist/components/header/header/index.esm.js +1 -1
  59. package/dist/components/header/header/index.esm.js.map +1 -1
  60. package/dist/components/header/header/index.js +1 -1
  61. package/dist/components/header/header/index.js.map +1 -1
  62. package/dist/components/header/redux/actionCreator/index.esm.js +1 -1
  63. package/dist/components/header/redux/actionCreator/index.esm.js.map +1 -1
  64. package/dist/components/header/redux/actionCreator/index.js +1 -1
  65. package/dist/components/header/redux/actionCreator/index.js.map +1 -1
  66. package/dist/components/icons/action-arrow.d.ts +3 -3
  67. package/dist/components/icons/add-circle.d.ts +3 -3
  68. package/dist/components/icons/arrow-bidirectional.d.ts +3 -3
  69. package/dist/components/icons/arrow-circle-down.d.ts +3 -3
  70. package/dist/components/icons/arrow-down-three.d.ts +3 -3
  71. package/dist/components/icons/arrow-down-two.d.ts +3 -3
  72. package/dist/components/icons/arrow-down.d.ts +3 -3
  73. package/dist/components/icons/arrow-up-down.d.ts +3 -3
  74. package/dist/components/icons/arrow-up-two.d.ts +3 -3
  75. package/dist/components/icons/assignments.d.ts +3 -3
  76. package/dist/components/icons/blank-circle.d.ts +3 -3
  77. package/dist/components/icons/block-filled.d.ts +3 -3
  78. package/dist/components/icons/calendar-add.d.ts +3 -3
  79. package/dist/components/icons/calendar.d.ts +3 -3
  80. package/dist/components/icons/checkbox-square.d.ts +3 -3
  81. package/dist/components/icons/circular-arrow-setting.d.ts +3 -3
  82. package/dist/components/icons/clock.d.ts +3 -3
  83. package/dist/components/icons/close.d.ts +3 -3
  84. package/dist/components/icons/coin-outline.d.ts +3 -3
  85. package/dist/components/icons/copy.d.ts +3 -3
  86. package/dist/components/icons/coupon.d.ts +3 -3
  87. package/dist/components/icons/cross-hire.d.ts +3 -3
  88. package/dist/components/icons/custom-styled-icon.d.ts +3 -3
  89. package/dist/components/icons/dashboard.d.ts +3 -3
  90. package/dist/components/icons/document-download.d.ts +3 -3
  91. package/dist/components/icons/document.d.ts +3 -3
  92. package/dist/components/icons/dollar-circle-filled.d.ts +3 -3
  93. package/dist/components/icons/dollar-circle.d.ts +3 -3
  94. package/dist/components/icons/edit.d.ts +3 -3
  95. package/dist/components/icons/email.d.ts +3 -3
  96. package/dist/components/icons/export.d.ts +3 -3
  97. package/dist/components/icons/eye-off.d.ts +3 -3
  98. package/dist/components/icons/eye-plus-circle.d.ts +3 -3
  99. package/dist/components/icons/eye.d.ts +3 -3
  100. package/dist/components/icons/filled-circle.d.ts +3 -3
  101. package/dist/components/icons/filter-remove.d.ts +3 -3
  102. package/dist/components/icons/filter.d.ts +3 -3
  103. package/dist/components/icons/folder-save.d.ts +3 -3
  104. package/dist/components/icons/grid.d.ts +3 -3
  105. package/dist/components/icons/hashtag.d.ts +3 -3
  106. package/dist/components/icons/image.d.ts +3 -3
  107. package/dist/components/icons/import.d.ts +3 -3
  108. package/dist/components/icons/info-circle.d.ts +3 -3
  109. package/dist/components/icons/info.d.ts +3 -3
  110. package/dist/components/icons/link-horizontal.d.ts +3 -3
  111. package/dist/components/icons/link.d.ts +3 -3
  112. package/dist/components/icons/location.d.ts +3 -3
  113. package/dist/components/icons/lowest-lead-time.d.ts +3 -3
  114. package/dist/components/icons/lowest-min-qty.d.ts +3 -3
  115. package/dist/components/icons/lowest-price.d.ts +3 -3
  116. package/dist/components/icons/more.d.ts +3 -3
  117. package/dist/components/icons/notification.d.ts +3 -3
  118. package/dist/components/icons/paper-clip.d.ts +3 -3
  119. package/dist/components/icons/paragraph.d.ts +3 -3
  120. package/dist/components/icons/payment-request.d.ts +3 -3
  121. package/dist/components/icons/phone.d.ts +3 -3
  122. package/dist/components/icons/printer.d.ts +3 -3
  123. package/dist/components/icons/process-calendar.d.ts +3 -3
  124. package/dist/components/icons/promotion.d.ts +3 -3
  125. package/dist/components/icons/radio-button.d.ts +3 -3
  126. package/dist/components/icons/receipt-filled.d.ts +3 -3
  127. package/dist/components/icons/receipt-outline.d.ts +3 -3
  128. package/dist/components/icons/receipt.d.ts +3 -3
  129. package/dist/components/icons/refresh-icon.d.ts +3 -3
  130. package/dist/components/icons/replace.d.ts +3 -3
  131. package/dist/components/icons/save.d.ts +3 -3
  132. package/dist/components/icons/search-status.d.ts +3 -3
  133. package/dist/components/icons/search.d.ts +3 -3
  134. package/dist/components/icons/settings-fallback.d.ts +3 -3
  135. package/dist/components/icons/sort-arrow-icon.d.ts +3 -3
  136. package/dist/components/icons/stacked-layer.d.ts +3 -3
  137. package/dist/components/icons/start-filled.d.ts +3 -3
  138. package/dist/components/icons/three-dot-icon.d.ts +3 -3
  139. package/dist/components/icons/tick-circle-filled.d.ts +3 -3
  140. package/dist/components/icons/tick-circle.d.ts +3 -3
  141. package/dist/components/icons/tick-octagon.d.ts +3 -3
  142. package/dist/components/icons/tick.d.ts +3 -3
  143. package/dist/components/icons/toggle-switch.d.ts +3 -3
  144. package/dist/components/icons/trash.d.ts +3 -3
  145. package/dist/components/icons/wave.d.ts +3 -3
  146. package/dist/components/icons/with-out-tick-octagon.d.ts +3 -3
  147. package/dist/components/icons/work-centre.d.ts +3 -3
  148. package/dist/components/index.d.ts +2 -1
  149. package/dist/components/index.esm.js +435 -429
  150. package/dist/components/index.esm.js.map +1 -1
  151. package/dist/components/index.js +1 -1
  152. package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.esm.js +1 -1
  153. package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.esm.js.map +1 -1
  154. package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.js +1 -1
  155. package/dist/components/inventory-reports-title-bar/redux/actionCreator/index.js.map +1 -1
  156. package/dist/components/location-select.d.ts +1 -1
  157. package/dist/components/material-editable-table/aggregation-fns/index.d.ts +13 -0
  158. package/dist/components/material-editable-table/components/default-aggregation.d.ts +9 -0
  159. package/dist/components/material-editable-table/components/header-cell.d.ts +5 -0
  160. package/dist/components/material-editable-table/components/inline-edit-fields/index.esm.js +312 -0
  161. package/dist/components/material-editable-table/components/inline-edit-fields/index.esm.js.map +1 -0
  162. package/dist/components/material-editable-table/components/inline-edit-fields/index.js +4 -0
  163. package/dist/components/material-editable-table/components/inline-edit-fields/index.js.map +1 -0
  164. package/dist/components/material-editable-table/components/inline-edit-fields.d.ts +17 -0
  165. package/dist/components/material-editable-table/components/number-aggregation.d.ts +9 -0
  166. package/dist/components/material-editable-table/material-editable-table/index.esm.js +1164 -0
  167. package/dist/components/material-editable-table/material-editable-table/index.esm.js.map +1 -0
  168. package/dist/components/material-editable-table/material-editable-table/index.js +28 -0
  169. package/dist/components/material-editable-table/material-editable-table/index.js.map +1 -0
  170. package/dist/components/material-editable-table/material-editable-table.d.ts +40 -0
  171. package/dist/components/material-table/aggregation-fns/index/index.esm.js +10 -0
  172. package/dist/components/material-table/aggregation-fns/index/index.esm.js.map +1 -1
  173. package/dist/components/material-table/aggregation-fns/index/index.js +1 -1
  174. package/dist/components/material-table/aggregation-fns/index/index.js.map +1 -1
  175. package/dist/components/material-table/components/number-aggregation/index.esm.js +133 -0
  176. package/dist/components/material-table/components/number-aggregation/index.esm.js.map +1 -0
  177. package/dist/components/material-table/components/number-aggregation/index.js +5 -0
  178. package/dist/components/material-table/components/number-aggregation/index.js.map +1 -0
  179. package/dist/components/material-table/material-table.d.ts +1 -1
  180. package/dist/components/phone-input/phone-input.d.ts +1 -1
  181. package/dist/components/radio/radio.d.ts +1 -1
  182. package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js +1 -1
  183. package/dist/components/reports-title-bar/redux/actionCreator/index.esm.js.map +1 -1
  184. package/dist/components/reports-title-bar/redux/actionCreator/index.js +1 -1
  185. package/dist/components/reports-title-bar/redux/actionCreator/index.js.map +1 -1
  186. package/dist/components/select/select.d.ts +1 -1
  187. package/dist/components/share-modal/redux/actionCreator/index.esm.js +1 -1
  188. package/dist/components/share-modal/redux/actionCreator/index.esm.js.map +1 -1
  189. package/dist/components/share-modal/redux/actionCreator/index.js +1 -1
  190. package/dist/components/share-modal/redux/actionCreator/index.js.map +1 -1
  191. package/dist/components/switches/android-12-switch.d.ts +1 -3
  192. package/dist/components/text-field/text-field.d.ts +1 -1
  193. package/dist/components/time-picker/time-picker.d.ts +1 -1
  194. package/dist/components/upload/upload/index.esm.js +2 -2
  195. package/dist/components/upload/upload/index.esm.js.map +1 -1
  196. package/dist/components/upload/upload/index.js +2 -2
  197. package/dist/components/upload/upload/index.js.map +1 -1
  198. package/dist/components/upload-media/upload-media.d.ts +1 -1
  199. package/dist/contexts/AuthContext/index.esm.js +2 -2
  200. package/dist/contexts/AuthContext/index.esm.js.map +1 -1
  201. package/dist/contexts/AuthContext/index.js +1 -1
  202. package/dist/contexts/AuthContext/index.js.map +1 -1
  203. package/dist/contexts/languageContext/index.esm.js +1 -1
  204. package/dist/contexts/languageContext/index.esm.js.map +1 -1
  205. package/dist/contexts/languageContext/index.js +1 -1
  206. package/dist/contexts/languageContext/index.js.map +1 -1
  207. package/dist/index.esm.js +533 -521
  208. package/dist/index.esm.js.map +1 -1
  209. package/dist/index.js +1 -1
  210. package/dist/node_modules/@glideapps/glide-data-grid/dist/js/index/index.esm.js +32 -0
  211. package/dist/node_modules/@glideapps/glide-data-grid/dist/js/index/index.esm.js.map +1 -1
  212. package/dist/node_modules/@glideapps/glide-data-grid/dist/js/index/index.js +36 -36
  213. package/dist/node_modules/@glideapps/glide-data-grid/dist/js/index/index.js.map +1 -1
  214. package/dist/node_modules/@mui/icons-material/ArrowBack/index.esm.js +18 -0
  215. package/dist/node_modules/@mui/icons-material/ArrowBack/index.esm.js.map +1 -0
  216. package/dist/node_modules/@mui/icons-material/ArrowBack/index.js +2 -0
  217. package/dist/node_modules/@mui/icons-material/ArrowBack/index.js.map +1 -0
  218. package/dist/node_modules/@mui/icons-material/ArrowForward/index.esm.js +18 -0
  219. package/dist/node_modules/@mui/icons-material/ArrowForward/index.esm.js.map +1 -0
  220. package/dist/node_modules/@mui/icons-material/ArrowForward/index.js +2 -0
  221. package/dist/node_modules/@mui/icons-material/ArrowForward/index.js.map +1 -0
  222. package/dist/node_modules/@mui/icons-material/IndeterminateCheckBox/index.esm.js +18 -0
  223. package/dist/node_modules/@mui/icons-material/IndeterminateCheckBox/index.esm.js.map +1 -0
  224. package/dist/node_modules/@mui/icons-material/IndeterminateCheckBox/index.js +2 -0
  225. package/dist/node_modules/@mui/icons-material/IndeterminateCheckBox/index.js.map +1 -0
  226. package/dist/node_modules/@mui/icons-material/NorthEast/index.esm.js +18 -0
  227. package/dist/node_modules/@mui/icons-material/NorthEast/index.esm.js.map +1 -0
  228. package/dist/node_modules/@mui/icons-material/NorthEast/index.js +2 -0
  229. package/dist/node_modules/@mui/icons-material/NorthEast/index.js.map +1 -0
  230. package/dist/node_modules/@mui/icons-material/Visibility/index.esm.js +18 -0
  231. package/dist/node_modules/@mui/icons-material/Visibility/index.esm.js.map +1 -0
  232. package/dist/node_modules/@mui/icons-material/Visibility/index.js +2 -0
  233. package/dist/node_modules/@mui/icons-material/Visibility/index.js.map +1 -0
  234. package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.esm.js +1 -1
  235. package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.js +1 -1
  236. package/dist/node_modules/@mui/icons-material/utils/createSvgIcon/index.js.map +1 -1
  237. package/dist/node_modules/prop-types/index/index.esm.js +1 -1
  238. package/dist/node_modules/prop-types/index/index.js +1 -1
  239. package/dist/node_modules/prop-types/index/index.js.map +1 -1
  240. package/dist/style.css +2 -0
  241. package/dist/utils/api/index.esm.js +4 -4
  242. package/dist/utils/api/index.esm.js.map +1 -1
  243. package/dist/utils/api/index.js +1 -1
  244. package/dist/utils/api/index.js.map +1 -1
  245. package/dist/utils/common/index.esm.js +8 -8
  246. package/dist/utils/common/index.esm.js.map +1 -1
  247. package/dist/utils/common/index.js +1 -1
  248. package/dist/utils/common/index.js.map +1 -1
  249. package/dist/utils/common-utility.d.ts +1 -1
  250. package/dist/utils/fileSize/index.esm.js +22 -0
  251. package/dist/utils/fileSize/index.esm.js.map +1 -0
  252. package/dist/utils/fileSize/index.js +2 -0
  253. package/dist/utils/fileSize/index.js.map +1 -0
  254. package/dist/utils/index.d.ts +2 -1
  255. package/dist/utils/index.esm.js +54 -50
  256. package/dist/utils/index.esm.js.map +1 -1
  257. package/dist/utils/index.js +1 -1
  258. package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.esm.js +48 -0
  259. package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.esm.js.map +1 -0
  260. package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.js +2 -0
  261. package/dist/views/beforeAuth/components/activity-tag-data/activity-tag-data/index.js.map +1 -0
  262. package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.esm.js +50 -0
  263. package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.esm.js.map +1 -0
  264. package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.js +2 -0
  265. package/dist/views/beforeAuth/components/calendar-data/calendar-data/index.js.map +1 -0
  266. package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.esm.js +57 -0
  267. package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.esm.js.map +1 -0
  268. package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.js +2 -0
  269. package/dist/views/beforeAuth/components/gantt-data/gantt-data/index.js.map +1 -0
  270. package/dist/views/beforeAuth/components/grid-data/grid-data/index.esm.js +41 -0
  271. package/dist/views/beforeAuth/components/grid-data/grid-data/index.esm.js.map +1 -0
  272. package/dist/views/beforeAuth/components/grid-data/grid-data/index.js +2 -0
  273. package/dist/views/beforeAuth/components/grid-data/grid-data/index.js.map +1 -0
  274. package/dist/views/beforeAuth/components/index/index.esm.js +1144 -0
  275. package/dist/views/beforeAuth/components/index/index.esm.js.map +1 -0
  276. package/dist/views/beforeAuth/components/index/index.js +206 -0
  277. package/dist/views/beforeAuth/components/index/index.js.map +1 -0
  278. package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.esm.js +72 -0
  279. package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.esm.js.map +1 -0
  280. package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.js +2 -0
  281. package/dist/views/beforeAuth/components/kanbann-content/kanbann-raw/index.js.map +1 -0
  282. package/dist/views/beforeAuth/components/list-content/column-raw/index.esm.js +54 -0
  283. package/dist/views/beforeAuth/components/list-content/column-raw/index.esm.js.map +1 -0
  284. package/dist/views/beforeAuth/components/list-content/column-raw/index.js +2 -0
  285. package/dist/views/beforeAuth/components/list-content/column-raw/index.js.map +1 -0
  286. package/dist/views/beforeAuth/components/list-content/list-data/index.esm.js +61 -0
  287. package/dist/views/beforeAuth/components/list-content/list-data/index.esm.js.map +1 -0
  288. package/dist/views/beforeAuth/components/list-content/list-data/index.js +2 -0
  289. package/dist/views/beforeAuth/components/list-content/list-data/index.js.map +1 -0
  290. package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.esm.js +21 -0
  291. package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.esm.js.map +1 -0
  292. package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.js +2 -0
  293. package/dist/views/beforeAuth/components/multiline-data/multiline-data/index.js.map +1 -0
  294. package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.esm.js +21 -0
  295. package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.esm.js.map +1 -0
  296. package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.js +2 -0
  297. package/dist/views/beforeAuth/components/tabs-data/tabs-data/index.js.map +1 -0
  298. package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.esm.js +306 -0
  299. package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.esm.js.map +1 -0
  300. package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.js +2 -0
  301. package/dist/views/beforeAuth/components/user-dropdown-data/user-dropdown-data/index.js.map +1 -0
  302. package/dist/views/form-builder/redux/actionCreator/index.esm.js +1 -1
  303. package/dist/views/form-builder/redux/actionCreator/index.esm.js.map +1 -1
  304. package/dist/views/form-builder/redux/actionCreator/index.js +1 -1
  305. package/dist/views/form-builder/redux/actionCreator/index.js.map +1 -1
  306. package/dist/views/form-builder/redux/reducer/index.esm.js +8 -0
  307. package/dist/views/form-builder/redux/reducer/index.esm.js.map +1 -1
  308. package/dist/views/form-builder/redux/reducer/index.js +1 -1
  309. package/dist/views/form-builder/redux/reducer/index.js.map +1 -1
  310. package/dist/views/index.esm.js +2 -0
  311. package/dist/views/index.esm.js.map +1 -1
  312. package/dist/views/index.js +1 -1
  313. package/dist/views/template-editor/components/EditorSidebar/index.esm.js +3 -3
  314. package/dist/views/template-editor/components/EditorSidebar/index.esm.js.map +1 -1
  315. package/dist/views/template-editor/components/EditorSidebar/index.js +14 -14
  316. package/dist/views/template-editor/components/EditorSidebar/index.js.map +1 -1
  317. package/dist/views/template-editor/templates/index.esm.js +1 -1
  318. package/dist/views/template-editor/templates/index.esm.js.map +1 -1
  319. package/dist/views/template-editor/templates/index.js +1 -1
  320. package/dist/views/template-editor/templates/index.js.map +1 -1
  321. package/package.json +2 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../../../src/components/filter/filter.tsx"],"sourcesContent":["/* eslint-disable */\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { RuleGroupType } from \"react-querybuilder\";\nimport \"react-querybuilder/dist/query-builder.scss\";\nimport { QueryBuilder /* , formatQuery */ } from \"react-querybuilder\";\nimport { QueryBuilderMaterial } from \"@react-querybuilder/material\";\nimport {\n Box,\n IconButton,\n MenuItem,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n OutlinedInput,\n InputAdornment,\n Alert,\n} from \"@mui/material\";\nimport \"./filter.scss\";\nimport Select from \"../select/select\";\nimport Typography from \"../typography/typography\";\nimport { Close } from \"@mui/icons-material\";\nimport CombinatorSelect from \"./components/combinator-select\";\nimport RemoveAction from \"./components/remove-action\";\nimport FieldSelect from \"./components/field-select\";\nimport AddFilterButton from \"./components/add-filter\";\nimport AddGroupButton from \"./components/add-group\";\nimport ValueEditor from \"./components/value-editor\";\nimport OperatorSelect from \"./components/operator-select\";\nimport Button from \"../button/button\";\nimport RemoveGroupAction from \"./components/delete-group\";\nimport SearchBar from \"../search-bar/search-bar\";\nimport SaveFilterModal from \"../save-filter-modal/save-filter-modal\";\n\nimport {\n setBaseUrl,\n putV1FilterId,\n deleteV1FilterId,\n} from \"../../api-client/api.system-feature/api\";\nimport type * as Types from \"../../api-client/api.system-feature/api-types\";\nimport { auth } from \"../../constants/auth\";\nimport { generateFields, generateQueryString, getErrorMessage } from \"../../utils/common\";\nimport { usePages } from \"../../hooks/use-pages\";\nimport _ from \"lodash\";\nimport { Edit, Trash } from \"../icons\";\nimport { enqueueSnackbar } from \"notistack\";\nimport { IResources, routeToResourceMap } from \"../../constants/route-page-map\";\nimport { useLocation } from \"react-router-dom\";\nimport { useLanguage } from \"../../hooks/useLangauge\";\n\nsetBaseUrl(`${import.meta.env.VITE_BACKEND_BASE_URL}/system-feature`);\n\ninterface IFilter {\n open: boolean;\n onClose: () => void;\n activeView?: string;\n savedFilters?: SavedFilter[];\n fetchSavedFilters?: () => Promise<void>;\n setFilterBar?: any;\n onSaveFilter?: (query: RuleGroupType) => void;\n onSelectedFilter?: (filterName: string) => void;\n fields: any;\n applyFilter: any\n}\n\ninterface SavedFilter {\n id: string;\n name: string;\n query: RuleGroupType;\n}\n\nconst initialQuery: RuleGroupType = { combinator: \"and\", rules: [] };\n\nconst Filter = ({\n open,\n onClose,\n // activeView,\n savedFilters,\n fetchSavedFilters,\n onSaveFilter,\n onSelectedFilter,\n applyFilter,\n fields = []\n}: IFilter) => {\n const location = useLocation();\n\n const token = localStorage.getItem(auth.storageTokenKeyName);\n const { updatePageInfo, activePage, schemaFields,setActivePage } = usePages()\n\n fields = schemaFields.length ? generateFields(schemaFields) : fields\n const [query, setQuery] = useState<RuleGroupType>(initialQuery);\n const [filteredSavedFilters, setFilteredSavedFilters] = useState<\n SavedFilter[]\n >(savedFilters ?? []);\n const [selectedFilter, setSelectedFilter] = useState<any>(null);\n const [openRenameFilter, setIsOpenRenameFilter] = useState<any>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const {isRtl}=useLanguage();\n const resources: IResources = useMemo(() => routeToResourceMap[location.pathname] || null, [location.pathname])\n\n useEffect(() => {\n savedFilters && setFilteredSavedFilters(savedFilters);\n }, [savedFilters]);\n\n\n const handleApplyFilter = useCallback((clear:boolean = false) => {\n let q = query\n const isInvalid = isDuplicatedFilters(q)\n if(isInvalid){\n setErrorMessage(\"Invalid filter\")\n return\n }\n if(clear) {\n q = initialQuery\n setQuery(q)\n } else {\n const generatedSQLQuery = q ? generateQueryString(q) : q;\n updatePageInfo({ filters: q, filterQueryString: generatedSQLQuery })\n // applyFilter(generatedSQLQuery);\n onClose();\n }\n }, [query, applyFilter, onClose]);\n\n const handleQueryChange = (q: RuleGroupType) => {\n const updatedRules = q.rules.map((rule, i) => ({\n ...rule,\n value: rule.field !== query.rules?.[i]?.field || ['null', 'notNull'].includes(rule.operator) ? \"\" : rule.value\n }));\n let isValid = true;\n let errorMessage = '';\n\n // // Helper function to check for invalid aggregate usage, considering parent combinators\n // const checkForInvalidAggregateUsage = (rules: any[], combinator: string, parentCombinator: string | null): boolean => {\n // let hasAggregateField = false;\n // let hasNonAggregateField = false;\n\n // rules.forEach(rule => {\n // // Check nested groups\n // if (rule.rules) {\n // // If the current group or any parent has an 'OR', pass it down\n // const currentCombinator = combinator === 'or' || parentCombinator === 'or' ? 'or' : combinator;\n // checkForInvalidAggregateUsage(rule.rules, rule.combinator, currentCombinator);\n // } else {\n // // Find the field in the fields array and check if it's an aggregate\n // const field = fields.find((f: any) => f.name === rule.field);\n\n // if (field?.is_aggregate) {\n // hasAggregateField = true;\n // } else {\n // hasNonAggregateField = true;\n // }\n // }\n // });\n\n // // If any parent or current rule uses 'OR' with a mix of aggregate and non-aggregate fields, it's invalid\n // if ((combinator === 'or' || parentCombinator === 'or') && hasAggregateField && hasNonAggregateField) {\n // isValid = false;\n // errorMessage = 'Mixing aggregate and non-aggregate fields in OR conditions may lead to unexpected results.';\n // }\n\n // return isValid;\n // };\n\n // Start checking from the root level (no parent combinator initially)\n \n\n // Always set the query, regardless of validity\n setQuery({...q, rules: updatedRules});\n\n // Set error message if invalid, otherwise clear it\n if (!isValid) {\n setErrorMessage(errorMessage);\n } else {\n setErrorMessage(null);\n }\n\n // Always call onSaveFilter, if it exists\n if (onSaveFilter) {\n onSaveFilter(q);\n }\n };\n\n const handleFilterSwitch = (sf?: any) => {\n if (sf) {\n setSelectedFilter(sf);\n setQuery(sf.query);\n if (onSelectedFilter) {\n onSelectedFilter(sf);\n }\n } else{\n setSelectedFilter(null);\n setQuery(initialQuery);\n if (onSelectedFilter) {\n onSelectedFilter(null);\n }\n }\n };\n\n const handleSearchEvent = (searchText: string) => {\n const filteredFilters = savedFilters?.filter((filter: any) =>\n filter.name.toLowerCase().includes(searchText.toLowerCase())\n );\n if (filteredFilters) {\n setFilteredSavedFilters(filteredFilters);\n }\n };\n\n const handleRenameFilter = async (filterId: string, newName: string) => {\n const putFilterRequest: Types.PutV1FilterIdRequest = {\n \"x-token\": token,\n id: filterId,\n name: newName,\n module: resources?.fieldResource || resources?.pageResource\n };\n\n try {\n await putV1FilterId(putFilterRequest)\n // setSelectedFilter(newName);\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n enqueueSnackbar('Filters renamed successfully.')\n } catch (error) {\n let m: string = 'Something went wrong on saving filters'\n\t\t\tif(error instanceof Error) {\n m = getErrorMessage(error.message)\n\t\t\t}\n\t\t\tenqueueSnackbar(m, {variant: 'error'})\n\t\t\treturn false\n }\n return true\n };\n const handleUpdateSelectedFilterQuery = async () => {\n if(selectedFilter) {\n\n const putFilterRequest: Types.PutV1FilterIdRequest = {\n \"x-token\": token,\n id: selectedFilter.id,\n data: query,\n };\n \n putV1FilterId(putFilterRequest)\n .then((response: any) => {\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n setActivePage((prev: any) => ({\n ...prev,\n filters:{\n ...prev.filters,\n rules: query.rules,\n combinator: query.combinator,\n name: selectedFilter.name\n \n }\n }));\n })\n .catch((err: any) => enqueueSnackbar(\"Error renaming saved filters:\", {variant:'error'}));\n }\n };\n\n const handleSubmitRename = (name: string) => {\n if (openRenameFilter) {\n return handleRenameFilter(openRenameFilter.id, name);\n }\n };\n\n const handleDeleteFilter = async (filterId: string) => {\n const deleteFilterRequest: Types.DeleteV1FilterIdRequest = {\n \"x-token\": token,\n id: filterId,\n };\n\n deleteV1FilterId(deleteFilterRequest)\n .then((response: any) => {\n setSelectedFilter(null);\n setQuery(initialQuery);\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n \n })\n .catch((err: any) => console.log(\"Error deleting saved filters:\", err));\n };\n\n useEffect(() => {\n let q = initialQuery\n if(!_.isEmpty(activePage.filters)) {\n q = activePage.filters\n }\n setQuery(q)\n const selectedFilter = savedFilters?.find((f: any) => f.name === activePage?.filters?.name);\n setSelectedFilter(selectedFilter || null);\n }, [activePage?.filters, savedFilters]);\n\n const isDuplicatedFilters = (rule) => {\n let uniques:string[]=[]\n rule?.rules?.forEach((r: any) => {\n if(uniques.includes(r.field)&& rule.combinator=='and'){\n return true\n }\n uniques.push(r.field)\n })\n return uniques.length !== rule?.rules?.length\n }\n\n\n const isRuleInvalid = (rule: any): boolean => {\n // If it's a group (has nested rules), recurse\n if (Array.isArray(rule.rules)) {\n return rule.rules.length ? rule.rules.some(isRuleInvalid) : !rule.rules.length;\n }\n \n // Otherwise, validate individual rule\n return (\n !rule.field ||\n (_.isEmpty(rule.value) && !['null', 'notNull'].includes(rule.operator))\n );\n };\n \n const disabled = useMemo(() => isRuleInvalid(query) || errorMessage, [query, errorMessage])\n // const disabled = isRuleInvalid(query) || errorMessage;\n\n return (\n <div>\n <Dialog \n open={open} \n onClose={onClose} \n maxWidth='md' \n fullWidth={true} \n PaperProps={{\n sx:{ borderRadius: 2 }\n }}\n >\n <DialogTitle className=\"filter-header\">\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n Filters\n </Typography>\n <Box gap={1} display={\"flex\"}>\n <Select\n fullWidth\n size=\"small\"\n className=\"filter-dropdown\"\n value={selectedFilter ? selectedFilter.name : \"Saved Filters\"}\n onChange={(event: any) =>{\n const sf = savedFilters?.find(f => f.name == event.target.value)\n handleFilterSwitch(sf)\n }}\n variant=\"outlined\"\n onClose={() => {\n setTimeout(() => {\n handleSearchEvent(\"\")\n }, 500);\n }}\n input={\n selectedFilter ? (\n <OutlinedInput\n label=''\n endAdornment={\n <InputAdornment position='end'>\n <IconButton\n aria-label='clear selection'\n onClick={() => {\n handleFilterSwitch()\n }}\n edge='end'\n sx={{ mr: 1.5 }}\n size='small'>\n <Close sx={{ fontSize: '1rem' }} />\n </IconButton>\n </InputAdornment>\n }\n />\n ) : undefined\n }\n >\n <div className=\"searchbar-box-list\">\n <SearchBar\n placeholder={\"Search Filters\"}\n handleSearch={(e) => handleSearchEvent(e)}\n />\n </div>\n {/* <Typography\n color=\"theme.secondary.1000\"\n type=\"s4\"\n className=\"filter-title\"\n >\n Saved Filters\n </Typography> */}\n {filteredSavedFilters?.map((savedFilter: SavedFilter) => (\n <MenuItem\n key={savedFilter.id}\n value={savedFilter?.name}\n className=\"menu-list\"\n selected={selectedFilter?.name == savedFilter?.name}\n >\n <Typography color=\"theme.secondary.1000\" type=\"s3\">\n {savedFilter?.name}\n </Typography>\n\n <div className=\"icon-list\">\n <IconButton size=\"small\" onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n setIsOpenRenameFilter(savedFilter)\n }}>\n <Edit fontSize=\"small\" color={selectedFilter?.name == savedFilter?.name ? \"theme.primary.800\" : 'inherit'}/>\n </IconButton>\n <IconButton size=\"small\" onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n handleDeleteFilter(savedFilter.id)\n }} color=\"error\">\n <Trash fontSize=\"small\" color=\"theme.error.600\"/>\n </IconButton>\n </div>\n </MenuItem>\n ))}\n </Select>\n <SaveFilterModal\n open={openRenameFilter !== null}\n onClose={() => setIsOpenRenameFilter(null)}\n handleSubmit={(name) => handleSubmitRename(name)}\n oldName={openRenameFilter?.name}\n />\n <Box>\n <IconButton size=\"small\" onClick={onClose}>\n <Close fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n </DialogTitle>\n <DialogContent className=\"content\">\n {/* Display error message */}\n {errorMessage && (\n <Alert severity=\"error\" sx={{ px:1, pt: 0.5, mb: 1 }}>\n <Typography\n color=\"error\"\n type=\"s4\"\n >\n {errorMessage}\n </Typography>\n </Alert>\n )}\n <QueryBuilderMaterial>\n <QueryBuilder\n fields={fields || []}\n query={query}\n onQueryChange={handleQueryChange}\n showCombinatorsBetweenRules={true}\n controlClassnames={{\n header: \"actions\",\n }}\n controlElements={{\n addRuleAction: AddFilterButton,\n addGroupAction: AddGroupButton,\n combinatorSelector: CombinatorSelect,\n fieldSelector: FieldSelect,\n operatorSelector: OperatorSelect,\n removeRuleAction: RemoveAction,\n valueEditor: ValueEditor,\n removeGroupAction: RemoveGroupAction,\n }}\n />\n <Button\n variant=\"text\"\n className={isRtl?'remove-filters_rtl':'remove-filters'}\n onClick={() => {\n handleApplyFilter(true)\n }}\n disabled={disabled}\n >\n Clear all filters\n </Button>\n </QueryBuilderMaterial>\n </DialogContent>\n <DialogActions className=\"filter-footer\">\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent:selectedFilter ? 'space-between' : 'flex-end', width:'100%' }}>\n {selectedFilter &&\n <Box>\n <Button onClick={handleUpdateSelectedFilterQuery}> \n Update Seleted filter\n </Button>\n </Box>\n }\n <Box sx={{display: 'flex', gap:1}}>\n <Button className=\"cancel-filter-btn\" onClick={onClose}>\n Cancel\n </Button>\n <Button\n disabled={disabled}\n onClick={() => handleApplyFilter()}\n >\n Apply\n </Button>\n </Box>\n </Box>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n\nexport default Filter;\n"],"names":["selectedFilter"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../src/components/filter/filter.tsx"],"sourcesContent":["/* eslint-disable */\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { RuleGroupType } from \"react-querybuilder\";\nimport \"react-querybuilder/dist/query-builder.scss\";\nimport { QueryBuilder /* , formatQuery */ } from \"react-querybuilder\";\nimport { QueryBuilderMaterial } from \"@react-querybuilder/material\";\nimport {\n Box,\n IconButton,\n MenuItem,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n OutlinedInput,\n InputAdornment,\n Alert,\n} from \"@mui/material\";\nimport \"./filter.scss\";\nimport Select from \"../select/select\";\nimport Typography from \"../typography/typography\";\nimport { Close } from \"@mui/icons-material\";\nimport CombinatorSelect from \"./components/combinator-select\";\nimport RemoveAction from \"./components/remove-action\";\nimport FieldSelect from \"./components/field-select\";\nimport AddFilterButton from \"./components/add-filter\";\nimport AddGroupButton from \"./components/add-group\";\nimport ValueEditor from \"./components/value-editor\";\nimport OperatorSelect from \"./components/operator-select\";\nimport Button from \"../button/button\";\nimport RemoveGroupAction from \"./components/delete-group\";\nimport SearchBar from \"../search-bar/search-bar\";\nimport SaveFilterModal from \"../save-filter-modal/save-filter-modal\";\n\nimport {\n setBaseUrl,\n putV1FilterId,\n deleteV1FilterId,\n} from \"../../api-client/api.system-feature/api\";\nimport type * as Types from \"../../api-client/api.system-feature/api-types\";\nimport { auth } from \"../../constants/auth\";\nimport { generateFields, generateQueryString, getErrorMessage } from \"../../utils/common\";\nimport { usePages } from \"../../hooks/use-pages\";\nimport _ from \"lodash\";\nimport { Edit, Trash } from \"../icons\";\nimport { enqueueSnackbar } from \"notistack\";\nimport { IResources, routeToResourceMap } from \"../../constants/route-page-map\";\nimport { useLocation } from \"react-router-dom\";\nimport { useLanguage } from \"../../hooks/useLangauge\";\n\nsetBaseUrl(`${import.meta.env.VITE_BACKEND_BASE_URL}/system-feature`);\n\ninterface IFilter {\n open: boolean;\n onClose: () => void;\n activeView?: string;\n savedFilters?: SavedFilter[];\n fetchSavedFilters?: () => Promise<void>;\n setFilterBar?: any;\n onSaveFilter?: (query: RuleGroupType) => void;\n onSelectedFilter?: (filterName: string) => void;\n fields: any;\n applyFilter: any\n}\n\ninterface SavedFilter {\n id: string;\n name: string;\n query: RuleGroupType;\n}\n\nconst initialQuery: RuleGroupType = { combinator: \"and\", rules: [] };\n\nconst Filter = ({\n open,\n onClose,\n // activeView,\n savedFilters,\n fetchSavedFilters,\n onSaveFilter,\n onSelectedFilter,\n applyFilter,\n fields = []\n}: IFilter) => {\n const location = useLocation();\n\n const token = localStorage.getItem(auth.storageTokenKeyName);\n const { updatePageInfo, activePage, schemaFields,setActivePage } = usePages()\n\n fields = schemaFields.length ? generateFields(schemaFields) : fields\n const [query, setQuery] = useState<RuleGroupType>(initialQuery);\n const [filteredSavedFilters, setFilteredSavedFilters] = useState<\n SavedFilter[]\n >(savedFilters ?? []);\n const [selectedFilter, setSelectedFilter] = useState<any>(null);\n const [openRenameFilter, setIsOpenRenameFilter] = useState<any>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const {isRtl}=useLanguage();\n const resources: IResources = useMemo(() => routeToResourceMap[location.pathname] || null, [location.pathname])\n\n useEffect(() => {\n savedFilters && setFilteredSavedFilters(savedFilters);\n }, [savedFilters]);\n\n\n const handleApplyFilter = useCallback((clear:boolean = false) => {\n let q = query\n const isInvalid = isDuplicatedFilters(q)\n if(isInvalid){\n setErrorMessage(\"Invalid filter\")\n return\n }\n if(clear) {\n q = initialQuery\n setQuery(q)\n } else {\n const generatedSQLQuery = q ? generateQueryString(q) : q;\n updatePageInfo({ filters: q, filterQueryString: generatedSQLQuery })\n // applyFilter(generatedSQLQuery);\n onClose();\n }\n }, [query, applyFilter, onClose]);\n\n const handleQueryChange = (q: RuleGroupType) => {\n const updatedRules = q.rules.map((rule, i) => ({\n ...rule,\n value: rule.field !== query.rules?.[i]?.field || ['null', 'notNull'].includes(rule.operator) ? \"\" : rule.value\n }));\n let isValid = true;\n let errorMessage = '';\n\n // // Helper function to check for invalid aggregate usage, considering parent combinators\n // const checkForInvalidAggregateUsage = (rules: any[], combinator: string, parentCombinator: string | null): boolean => {\n // let hasAggregateField = false;\n // let hasNonAggregateField = false;\n\n // rules.forEach(rule => {\n // // Check nested groups\n // if (rule.rules) {\n // // If the current group or any parent has an 'OR', pass it down\n // const currentCombinator = combinator === 'or' || parentCombinator === 'or' ? 'or' : combinator;\n // checkForInvalidAggregateUsage(rule.rules, rule.combinator, currentCombinator);\n // } else {\n // // Find the field in the fields array and check if it's an aggregate\n // const field = fields.find((f: any) => f.name === rule.field);\n\n // if (field?.is_aggregate) {\n // hasAggregateField = true;\n // } else {\n // hasNonAggregateField = true;\n // }\n // }\n // });\n\n // // If any parent or current rule uses 'OR' with a mix of aggregate and non-aggregate fields, it's invalid\n // if ((combinator === 'or' || parentCombinator === 'or') && hasAggregateField && hasNonAggregateField) {\n // isValid = false;\n // errorMessage = 'Mixing aggregate and non-aggregate fields in OR conditions may lead to unexpected results.';\n // }\n\n // return isValid;\n // };\n\n // Start checking from the root level (no parent combinator initially)\n \n\n // Always set the query, regardless of validity\n setQuery({...q, rules: updatedRules});\n\n // Set error message if invalid, otherwise clear it\n if (!isValid) {\n setErrorMessage(errorMessage);\n } else {\n setErrorMessage(null);\n }\n\n // Always call onSaveFilter, if it exists\n if (onSaveFilter) {\n onSaveFilter(q);\n }\n };\n\n const handleFilterSwitch = (sf?: any) => {\n if (sf) {\n setSelectedFilter(sf);\n setQuery(sf.query);\n if (onSelectedFilter) {\n onSelectedFilter(sf);\n }\n } else{\n setSelectedFilter(null);\n setQuery(initialQuery);\n if (onSelectedFilter) {\n onSelectedFilter(null);\n }\n }\n };\n\n const handleSearchEvent = (searchText: string) => {\n const filteredFilters = savedFilters?.filter((filter: any) =>\n filter.name.toLowerCase().includes(searchText.toLowerCase())\n );\n if (filteredFilters) {\n setFilteredSavedFilters(filteredFilters);\n }\n };\n\n const handleRenameFilter = async (filterId: string, newName: string) => {\n const putFilterRequest: Types.PutV1FilterIdRequest = {\n \"x-token\": token,\n id: filterId,\n name: newName,\n module: resources?.fieldResource || resources?.pageResource\n };\n\n try {\n await putV1FilterId(putFilterRequest)\n // setSelectedFilter(newName);\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n enqueueSnackbar('Filters renamed successfully.')\n } catch (error) {\n let m: string = 'Something went wrong on saving filters'\n\t\t\tif(error instanceof Error) {\n m = getErrorMessage(error.message)\n\t\t\t}\n\t\t\tenqueueSnackbar(m, {variant: 'error'})\n\t\t\treturn false\n }\n return true\n };\n const handleUpdateSelectedFilterQuery = async () => {\n if(selectedFilter) {\n\n const putFilterRequest: Types.PutV1FilterIdRequest = {\n \"x-token\": token,\n id: selectedFilter.id,\n data: query,\n };\n \n putV1FilterId(putFilterRequest)\n .then((response: any) => {\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n setActivePage((prev: any) => ({\n ...prev,\n filters:{\n ...prev.filters,\n rules: query.rules,\n combinator: query.combinator,\n name: selectedFilter.name\n \n }\n }));\n })\n .catch((err: any) => enqueueSnackbar(\"Error renaming saved filters:\", {variant:'error'}));\n }\n };\n\n const handleSubmitRename = (name: string) => {\n if (openRenameFilter) {\n return handleRenameFilter(openRenameFilter.id, name);\n }\n };\n\n const handleDeleteFilter = async (filterId: string) => {\n const deleteFilterRequest: Types.DeleteV1FilterIdRequest = {\n \"x-token\": token,\n id: filterId,\n };\n\n deleteV1FilterId(deleteFilterRequest)\n .then((response: any) => {\n setSelectedFilter(null);\n setQuery(initialQuery);\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n \n })\n .catch((err: any) => console.log(\"Error deleting saved filters:\", err));\n };\n\n useEffect(() => {\n let q = initialQuery\n if(!_.isEmpty(activePage.filters)) {\n q = activePage.filters\n }\n setQuery(q)\n const selectedFilter = savedFilters?.find((f: any) => f.name === activePage?.filters?.name);\n setSelectedFilter(selectedFilter || null);\n }, [activePage?.filters, savedFilters]);\n\n const isDuplicatedFilters = (rule) => {\n let uniques:string[]=[]\n rule?.rules?.forEach((r: any) => {\n if(uniques.includes(r.field)&& rule.combinator=='and'){\n return true\n }\n uniques.push(r.field)\n })\n return uniques.length !== rule?.rules?.length\n }\n\n\n const isRuleInvalid = (rule: any): boolean => {\n // If it's a group (has nested rules), recurse\n if (Array.isArray(rule.rules)) {\n return rule.rules.length ? rule.rules.some(isRuleInvalid) : !rule.rules.length;\n }\n \n // Otherwise, validate individual rule\n return (\n !rule.field ||\n (_.isEmpty(rule.value) && !['null', 'notNull'].includes(rule.operator))\n );\n };\n \n const disabled = useMemo(() => isRuleInvalid(query) || errorMessage, [query, errorMessage])\n // const disabled = isRuleInvalid(query) || errorMessage;\n\n return (\n <div>\n <Dialog \n open={open} \n onClose={onClose} \n maxWidth='md' \n fullWidth={true} \n PaperProps={{\n sx:{ borderRadius: 2 }\n }}\n >\n <DialogTitle className=\"filter-header\">\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n Filters\n </Typography>\n <Box gap={1} display={\"flex\"}>\n <Select\n fullWidth\n size=\"small\"\n className=\"filter-dropdown\"\n value={selectedFilter ? selectedFilter.name : \"Saved Filters\"}\n onChange={(event: any) =>{\n const sf = savedFilters?.find(f => f.name == event.target.value)\n handleFilterSwitch(sf)\n }}\n variant=\"outlined\"\n onClose={() => {\n setTimeout(() => {\n handleSearchEvent(\"\")\n }, 500);\n }}\n input={\n selectedFilter ? (\n <OutlinedInput\n label=''\n endAdornment={\n <InputAdornment position='end'>\n <IconButton\n aria-label='clear selection'\n onClick={() => {\n handleFilterSwitch()\n }}\n edge='end'\n sx={{ mr: 1.5 }}\n size='small'>\n <Close sx={{ fontSize: '1rem' }} />\n </IconButton>\n </InputAdornment>\n }\n />\n ) : undefined\n }\n >\n <div className=\"searchbar-box-list\">\n <SearchBar\n placeholder={\"Search Filters\"}\n handleSearch={(e) => handleSearchEvent(e)}\n />\n </div>\n {/* <Typography\n color=\"theme.secondary.1000\"\n type=\"s4\"\n className=\"filter-title\"\n >\n Saved Filters\n </Typography> */}\n {filteredSavedFilters?.map((savedFilter: SavedFilter) => (\n <MenuItem\n key={savedFilter.id}\n value={savedFilter?.name}\n className=\"menu-list\"\n selected={selectedFilter?.name == savedFilter?.name}\n >\n <Typography color=\"theme.secondary.1000\" type=\"s3\">\n {savedFilter?.name}\n </Typography>\n\n <div className=\"icon-list\">\n <IconButton size=\"small\" onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n setIsOpenRenameFilter(savedFilter)\n }}>\n <Edit fontSize=\"small\" color={selectedFilter?.name == savedFilter?.name ? \"theme.primary.800\" : 'inherit'}/>\n </IconButton>\n <IconButton size=\"small\" onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n handleDeleteFilter(savedFilter.id)\n }} color=\"error\">\n <Trash fontSize=\"small\" color=\"theme.error.600\"/>\n </IconButton>\n </div>\n </MenuItem>\n ))}\n </Select>\n <SaveFilterModal\n open={openRenameFilter !== null}\n onClose={() => setIsOpenRenameFilter(null)}\n handleSubmit={(name) => handleSubmitRename(name)}\n oldName={openRenameFilter?.name}\n />\n <Box>\n <IconButton size=\"small\" onClick={onClose}>\n <Close fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n </DialogTitle>\n <DialogContent className=\"content\">\n {/* Display error message */}\n {errorMessage && (\n <Alert severity=\"error\" sx={{ px:1, pt: 0.5, mb: 1 }}>\n <Typography\n color=\"error\"\n type=\"s4\"\n >\n {errorMessage}\n </Typography>\n </Alert>\n )}\n <QueryBuilderMaterial>\n <QueryBuilder\n fields={fields || []}\n query={query}\n onQueryChange={handleQueryChange}\n showCombinatorsBetweenRules={true}\n controlClassnames={{\n header: \"actions\",\n }}\n controlElements={{\n addRuleAction: AddFilterButton,\n addGroupAction: AddGroupButton,\n combinatorSelector: CombinatorSelect,\n fieldSelector: FieldSelect,\n operatorSelector: OperatorSelect,\n removeRuleAction: RemoveAction,\n valueEditor: ValueEditor,\n removeGroupAction: RemoveGroupAction,\n }}\n />\n <Button\n variant=\"text\"\n className={isRtl?'remove-filters_rtl':'remove-filters'}\n onClick={() => {\n handleApplyFilter(true)\n }}\n disabled={disabled}\n >\n Clear all filters\n </Button>\n </QueryBuilderMaterial>\n </DialogContent>\n <DialogActions className=\"filter-footer\">\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent:selectedFilter ? 'space-between' : 'flex-end', width:'100%' }}>\n {selectedFilter &&\n <Box>\n <Button onClick={handleUpdateSelectedFilterQuery}> \n Update Seleted filter\n </Button>\n </Box>\n }\n <Box sx={{display: 'flex', gap:1}}>\n <Button className=\"cancel-filter-btn\" onClick={onClose}>\n Cancel\n </Button>\n <Button\n disabled={disabled}\n onClick={() => handleApplyFilter()}\n >\n Apply\n </Button>\n </Box>\n </Box>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n\nexport default Filter;\n"],"names":["selectedFilter"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),l=require("react"),r=require("react-querybuilder"),t=;/* empty css */;/* empty css */var i=,/* empty css */n=,/* empty css */s=,/* empty css */a=,/* empty css */o=,/* empty css */u=,/* empty css */d=,/* empty css */c=,/* empty css */m=,/* empty css */f=,/* empty css */x=,/* empty css */p=,/* empty css */h=,/* empty css */j=,/* empty css */v=,/* empty css */g=,/* empty css */q=,/* empty css */y=require("lodash"),b=,/* empty css */S=,/* empty css */C=require("react-router-dom"),k=,/* empty css */_=,/* empty css */A=,/* empty css */I=,/* empty css */F=,/* empty css */N=,/* empty css */w=,/* empty css */E=,/* empty css */D=,/* empty css */z=,/* empty css */P=,/* empty css */T=,/* empty css */B=,/* empty css */M=;/* empty css */function R(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var L=/* @__PURE__ */R(y);j.setBaseUrl("undefined/system-feature");const Q={combinator:"and",rules:[]};exports.default=({open:y,onClose:R,savedFilters:O,fetchSavedFilters:V,onSaveFilter:W,onSelectedFilter:G,applyFilter:U,fields:K=[]})=>{const H=C.useLocation(),J=localStorage.getItem(v.auth.storageTokenKeyName),{updatePageInfo:X,activePage:Y,schemaFields:Z,setActivePage:$}=q.usePages();K=Z.length?g.generateFields(Z):K;const[ee,le]=l.useState(Q),[re,te]=l.useState(O??[]),[ie,ne]=l.useState(null),[se,ae]=l.useState(null),[oe,ue]=l.useState(null),{isRtl:de}=k.useLanguage(),ce=l.useMemo(()=>S.routeToResourceMap[H.pathname]||null,[H.pathname]);l.useEffect(()=>{O&&te(O)},[O]);const me=l.useCallback((e=!1)=>{let l=ee;if(pe(l))ue("Invalid filter");else if(e)l=Q,le(l);else{const e=l?g.generateQueryString(l):l;X({filters:l,filterQueryString:e}),R()}},[ee,U,R]),fe=e=>{e?(ne(e),le(e.query),G&&G(e)):(ne(null),le(Q),G&&G(null))},xe=e=>{const l=null==O?void 0:O.filter(l=>l.name.toLowerCase().includes(e.toLowerCase()));l&&te(l)};l.useEffect(()=>{let e=Q;L.default.isEmpty(Y.filters)||(e=Y.filters),le(e);const l=null==O?void 0:O.find(e=>{var l;return e.name===(null==(l=null==Y?void 0:Y.filters)?void 0:l.name)});ne(l||null)},[null==Y?void 0:Y.filters,O]);const pe=e=>{var l,r;let t=[];return null==(l=null==e?void 0:e.rules)||l.forEach(l=>{if(t.includes(l.field)&&"and"==e.combinator)return!0;t.push(l.field)}),t.length!==(null==(r=null==e?void 0:e.rules)?void 0:r.length)},he=e=>Array.isArray(e.rules)?e.rules.length?e.rules.some(he):!e.rules.length:!e.field||L.default.isEmpty(e.value)&&!["null","notNull"].includes(e.operator),je=l.useMemo(()=>he(ee)||oe,[ee,oe]);/* @__PURE__ */
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),l=require("react"),r=require("react-querybuilder"),t=;/* empty css */;/* empty css */var i=,/* empty css */n=,/* empty css */s=,/* empty css */a=,/* empty css */o=,/* empty css */u=,/* empty css */d=,/* empty css */c=,/* empty css */m=,/* empty css */f=,/* empty css */x=,/* empty css */p=,/* empty css */h=,/* empty css */j=,/* empty css */v=,/* empty css */g=,/* empty css */q=,/* empty css */y=require("lodash"),b=,/* empty css */S=,/* empty css */C=require("react-router-dom"),k=,/* empty css */_=,/* empty css */A=,/* empty css */I=,/* empty css */F=,/* empty css */N=,/* empty css */w=,/* empty css */E=,/* empty css */D=,/* empty css */z=,/* empty css */P=,/* empty css */T=,/* empty css */B=,/* empty css */M=;/* empty css */function R(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var L=/* @__PURE__ */R(y);j.setBaseUrl("https://apidev.erpforce.co/system-feature");const Q={combinator:"and",rules:[]};exports.default=({open:y,onClose:R,savedFilters:O,fetchSavedFilters:V,onSaveFilter:W,onSelectedFilter:G,applyFilter:U,fields:K=[]})=>{const H=C.useLocation(),J=localStorage.getItem(v.auth.storageTokenKeyName),{updatePageInfo:X,activePage:Y,schemaFields:Z,setActivePage:$}=q.usePages();K=Z.length?g.generateFields(Z):K;const[ee,le]=l.useState(Q),[re,te]=l.useState(O??[]),[ie,ne]=l.useState(null),[se,ae]=l.useState(null),[oe,ue]=l.useState(null),{isRtl:de}=k.useLanguage(),ce=l.useMemo(()=>S.routeToResourceMap[H.pathname]||null,[H.pathname]);l.useEffect(()=>{O&&te(O)},[O]);const me=l.useCallback((e=!1)=>{let l=ee;if(pe(l))ue("Invalid filter");else if(e)l=Q,le(l);else{const e=l?g.generateQueryString(l):l;X({filters:l,filterQueryString:e}),R()}},[ee,U,R]),fe=e=>{e?(ne(e),le(e.query),G&&G(e)):(ne(null),le(Q),G&&G(null))},xe=e=>{const l=null==O?void 0:O.filter(l=>l.name.toLowerCase().includes(e.toLowerCase()));l&&te(l)};l.useEffect(()=>{let e=Q;L.default.isEmpty(Y.filters)||(e=Y.filters),le(e);const l=null==O?void 0:O.find(e=>{var l;return e.name===(null==(l=null==Y?void 0:Y.filters)?void 0:l.name)});ne(l||null)},[null==Y?void 0:Y.filters,O]);const pe=e=>{var l,r;let t=[];return null==(l=null==e?void 0:e.rules)||l.forEach(l=>{if(t.includes(l.field)&&"and"==e.combinator)return!0;t.push(l.field)}),t.length!==(null==(r=null==e?void 0:e.rules)?void 0:r.length)},he=e=>Array.isArray(e.rules)?e.rules.length?e.rules.some(he):!e.rules.length:!e.field||L.default.isEmpty(e.value)&&!["null","notNull"].includes(e.operator),je=l.useMemo(()=>he(ee)||oe,[ee,oe]);/* @__PURE__ */
2
2
  return e.jsx("div",{children:/* @__PURE__ */e.jsxs(_.default,{open:y,onClose:R,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderRadius:2}},children:[
3
3
  /* @__PURE__ */e.jsxs(A.default,{className:"filter-header",children:[
4
4
  /* @__PURE__ */e.jsx(n.Typography,{type:"s3",weight:"medium",color:"theme.secondary.1000",children:"Filters"}),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/filter/filter.tsx"],"sourcesContent":["/* eslint-disable */\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { RuleGroupType } from \"react-querybuilder\";\nimport \"react-querybuilder/dist/query-builder.scss\";\nimport { QueryBuilder /* , formatQuery */ } from \"react-querybuilder\";\nimport { QueryBuilderMaterial } from \"@react-querybuilder/material\";\nimport {\n Box,\n IconButton,\n MenuItem,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n OutlinedInput,\n InputAdornment,\n Alert,\n} from \"@mui/material\";\nimport \"./filter.scss\";\nimport Select from \"../select/select\";\nimport Typography from \"../typography/typography\";\nimport { Close } from \"@mui/icons-material\";\nimport CombinatorSelect from \"./components/combinator-select\";\nimport RemoveAction from \"./components/remove-action\";\nimport FieldSelect from \"./components/field-select\";\nimport AddFilterButton from \"./components/add-filter\";\nimport AddGroupButton from \"./components/add-group\";\nimport ValueEditor from \"./components/value-editor\";\nimport OperatorSelect from \"./components/operator-select\";\nimport Button from \"../button/button\";\nimport RemoveGroupAction from \"./components/delete-group\";\nimport SearchBar from \"../search-bar/search-bar\";\nimport SaveFilterModal from \"../save-filter-modal/save-filter-modal\";\n\nimport {\n setBaseUrl,\n putV1FilterId,\n deleteV1FilterId,\n} from \"../../api-client/api.system-feature/api\";\nimport type * as Types from \"../../api-client/api.system-feature/api-types\";\nimport { auth } from \"../../constants/auth\";\nimport { generateFields, generateQueryString, getErrorMessage } from \"../../utils/common\";\nimport { usePages } from \"../../hooks/use-pages\";\nimport _ from \"lodash\";\nimport { Edit, Trash } from \"../icons\";\nimport { enqueueSnackbar } from \"notistack\";\nimport { IResources, routeToResourceMap } from \"../../constants/route-page-map\";\nimport { useLocation } from \"react-router-dom\";\nimport { useLanguage } from \"../../hooks/useLangauge\";\n\nsetBaseUrl(`${import.meta.env.VITE_BACKEND_BASE_URL}/system-feature`);\n\ninterface IFilter {\n open: boolean;\n onClose: () => void;\n activeView?: string;\n savedFilters?: SavedFilter[];\n fetchSavedFilters?: () => Promise<void>;\n setFilterBar?: any;\n onSaveFilter?: (query: RuleGroupType) => void;\n onSelectedFilter?: (filterName: string) => void;\n fields: any;\n applyFilter: any\n}\n\ninterface SavedFilter {\n id: string;\n name: string;\n query: RuleGroupType;\n}\n\nconst initialQuery: RuleGroupType = { combinator: \"and\", rules: [] };\n\nconst Filter = ({\n open,\n onClose,\n // activeView,\n savedFilters,\n fetchSavedFilters,\n onSaveFilter,\n onSelectedFilter,\n applyFilter,\n fields = []\n}: IFilter) => {\n const location = useLocation();\n\n const token = localStorage.getItem(auth.storageTokenKeyName);\n const { updatePageInfo, activePage, schemaFields,setActivePage } = usePages()\n\n fields = schemaFields.length ? generateFields(schemaFields) : fields\n const [query, setQuery] = useState<RuleGroupType>(initialQuery);\n const [filteredSavedFilters, setFilteredSavedFilters] = useState<\n SavedFilter[]\n >(savedFilters ?? []);\n const [selectedFilter, setSelectedFilter] = useState<any>(null);\n const [openRenameFilter, setIsOpenRenameFilter] = useState<any>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const {isRtl}=useLanguage();\n const resources: IResources = useMemo(() => routeToResourceMap[location.pathname] || null, [location.pathname])\n\n useEffect(() => {\n savedFilters && setFilteredSavedFilters(savedFilters);\n }, [savedFilters]);\n\n\n const handleApplyFilter = useCallback((clear:boolean = false) => {\n let q = query\n const isInvalid = isDuplicatedFilters(q)\n if(isInvalid){\n setErrorMessage(\"Invalid filter\")\n return\n }\n if(clear) {\n q = initialQuery\n setQuery(q)\n } else {\n const generatedSQLQuery = q ? generateQueryString(q) : q;\n updatePageInfo({ filters: q, filterQueryString: generatedSQLQuery })\n // applyFilter(generatedSQLQuery);\n onClose();\n }\n }, [query, applyFilter, onClose]);\n\n const handleQueryChange = (q: RuleGroupType) => {\n const updatedRules = q.rules.map((rule, i) => ({\n ...rule,\n value: rule.field !== query.rules?.[i]?.field || ['null', 'notNull'].includes(rule.operator) ? \"\" : rule.value\n }));\n let isValid = true;\n let errorMessage = '';\n\n // // Helper function to check for invalid aggregate usage, considering parent combinators\n // const checkForInvalidAggregateUsage = (rules: any[], combinator: string, parentCombinator: string | null): boolean => {\n // let hasAggregateField = false;\n // let hasNonAggregateField = false;\n\n // rules.forEach(rule => {\n // // Check nested groups\n // if (rule.rules) {\n // // If the current group or any parent has an 'OR', pass it down\n // const currentCombinator = combinator === 'or' || parentCombinator === 'or' ? 'or' : combinator;\n // checkForInvalidAggregateUsage(rule.rules, rule.combinator, currentCombinator);\n // } else {\n // // Find the field in the fields array and check if it's an aggregate\n // const field = fields.find((f: any) => f.name === rule.field);\n\n // if (field?.is_aggregate) {\n // hasAggregateField = true;\n // } else {\n // hasNonAggregateField = true;\n // }\n // }\n // });\n\n // // If any parent or current rule uses 'OR' with a mix of aggregate and non-aggregate fields, it's invalid\n // if ((combinator === 'or' || parentCombinator === 'or') && hasAggregateField && hasNonAggregateField) {\n // isValid = false;\n // errorMessage = 'Mixing aggregate and non-aggregate fields in OR conditions may lead to unexpected results.';\n // }\n\n // return isValid;\n // };\n\n // Start checking from the root level (no parent combinator initially)\n \n\n // Always set the query, regardless of validity\n setQuery({...q, rules: updatedRules});\n\n // Set error message if invalid, otherwise clear it\n if (!isValid) {\n setErrorMessage(errorMessage);\n } else {\n setErrorMessage(null);\n }\n\n // Always call onSaveFilter, if it exists\n if (onSaveFilter) {\n onSaveFilter(q);\n }\n };\n\n const handleFilterSwitch = (sf?: any) => {\n if (sf) {\n setSelectedFilter(sf);\n setQuery(sf.query);\n if (onSelectedFilter) {\n onSelectedFilter(sf);\n }\n } else{\n setSelectedFilter(null);\n setQuery(initialQuery);\n if (onSelectedFilter) {\n onSelectedFilter(null);\n }\n }\n };\n\n const handleSearchEvent = (searchText: string) => {\n const filteredFilters = savedFilters?.filter((filter: any) =>\n filter.name.toLowerCase().includes(searchText.toLowerCase())\n );\n if (filteredFilters) {\n setFilteredSavedFilters(filteredFilters);\n }\n };\n\n const handleRenameFilter = async (filterId: string, newName: string) => {\n const putFilterRequest: Types.PutV1FilterIdRequest = {\n \"x-token\": token,\n id: filterId,\n name: newName,\n module: resources?.fieldResource || resources?.pageResource\n };\n\n try {\n await putV1FilterId(putFilterRequest)\n // setSelectedFilter(newName);\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n enqueueSnackbar('Filters renamed successfully.')\n } catch (error) {\n let m: string = 'Something went wrong on saving filters'\n\t\t\tif(error instanceof Error) {\n m = getErrorMessage(error.message)\n\t\t\t}\n\t\t\tenqueueSnackbar(m, {variant: 'error'})\n\t\t\treturn false\n }\n return true\n };\n const handleUpdateSelectedFilterQuery = async () => {\n if(selectedFilter) {\n\n const putFilterRequest: Types.PutV1FilterIdRequest = {\n \"x-token\": token,\n id: selectedFilter.id,\n data: query,\n };\n \n putV1FilterId(putFilterRequest)\n .then((response: any) => {\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n setActivePage((prev: any) => ({\n ...prev,\n filters:{\n ...prev.filters,\n rules: query.rules,\n combinator: query.combinator,\n name: selectedFilter.name\n \n }\n }));\n })\n .catch((err: any) => enqueueSnackbar(\"Error renaming saved filters:\", {variant:'error'}));\n }\n };\n\n const handleSubmitRename = (name: string) => {\n if (openRenameFilter) {\n return handleRenameFilter(openRenameFilter.id, name);\n }\n };\n\n const handleDeleteFilter = async (filterId: string) => {\n const deleteFilterRequest: Types.DeleteV1FilterIdRequest = {\n \"x-token\": token,\n id: filterId,\n };\n\n deleteV1FilterId(deleteFilterRequest)\n .then((response: any) => {\n setSelectedFilter(null);\n setQuery(initialQuery);\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n \n })\n .catch((err: any) => console.log(\"Error deleting saved filters:\", err));\n };\n\n useEffect(() => {\n let q = initialQuery\n if(!_.isEmpty(activePage.filters)) {\n q = activePage.filters\n }\n setQuery(q)\n const selectedFilter = savedFilters?.find((f: any) => f.name === activePage?.filters?.name);\n setSelectedFilter(selectedFilter || null);\n }, [activePage?.filters, savedFilters]);\n\n const isDuplicatedFilters = (rule) => {\n let uniques:string[]=[]\n rule?.rules?.forEach((r: any) => {\n if(uniques.includes(r.field)&& rule.combinator=='and'){\n return true\n }\n uniques.push(r.field)\n })\n return uniques.length !== rule?.rules?.length\n }\n\n\n const isRuleInvalid = (rule: any): boolean => {\n // If it's a group (has nested rules), recurse\n if (Array.isArray(rule.rules)) {\n return rule.rules.length ? rule.rules.some(isRuleInvalid) : !rule.rules.length;\n }\n \n // Otherwise, validate individual rule\n return (\n !rule.field ||\n (_.isEmpty(rule.value) && !['null', 'notNull'].includes(rule.operator))\n );\n };\n \n const disabled = useMemo(() => isRuleInvalid(query) || errorMessage, [query, errorMessage])\n // const disabled = isRuleInvalid(query) || errorMessage;\n\n return (\n <div>\n <Dialog \n open={open} \n onClose={onClose} \n maxWidth='md' \n fullWidth={true} \n PaperProps={{\n sx:{ borderRadius: 2 }\n }}\n >\n <DialogTitle className=\"filter-header\">\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n Filters\n </Typography>\n <Box gap={1} display={\"flex\"}>\n <Select\n fullWidth\n size=\"small\"\n className=\"filter-dropdown\"\n value={selectedFilter ? selectedFilter.name : \"Saved Filters\"}\n onChange={(event: any) =>{\n const sf = savedFilters?.find(f => f.name == event.target.value)\n handleFilterSwitch(sf)\n }}\n variant=\"outlined\"\n onClose={() => {\n setTimeout(() => {\n handleSearchEvent(\"\")\n }, 500);\n }}\n input={\n selectedFilter ? (\n <OutlinedInput\n label=''\n endAdornment={\n <InputAdornment position='end'>\n <IconButton\n aria-label='clear selection'\n onClick={() => {\n handleFilterSwitch()\n }}\n edge='end'\n sx={{ mr: 1.5 }}\n size='small'>\n <Close sx={{ fontSize: '1rem' }} />\n </IconButton>\n </InputAdornment>\n }\n />\n ) : undefined\n }\n >\n <div className=\"searchbar-box-list\">\n <SearchBar\n placeholder={\"Search Filters\"}\n handleSearch={(e) => handleSearchEvent(e)}\n />\n </div>\n {/* <Typography\n color=\"theme.secondary.1000\"\n type=\"s4\"\n className=\"filter-title\"\n >\n Saved Filters\n </Typography> */}\n {filteredSavedFilters?.map((savedFilter: SavedFilter) => (\n <MenuItem\n key={savedFilter.id}\n value={savedFilter?.name}\n className=\"menu-list\"\n selected={selectedFilter?.name == savedFilter?.name}\n >\n <Typography color=\"theme.secondary.1000\" type=\"s3\">\n {savedFilter?.name}\n </Typography>\n\n <div className=\"icon-list\">\n <IconButton size=\"small\" onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n setIsOpenRenameFilter(savedFilter)\n }}>\n <Edit fontSize=\"small\" color={selectedFilter?.name == savedFilter?.name ? \"theme.primary.800\" : 'inherit'}/>\n </IconButton>\n <IconButton size=\"small\" onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n handleDeleteFilter(savedFilter.id)\n }} color=\"error\">\n <Trash fontSize=\"small\" color=\"theme.error.600\"/>\n </IconButton>\n </div>\n </MenuItem>\n ))}\n </Select>\n <SaveFilterModal\n open={openRenameFilter !== null}\n onClose={() => setIsOpenRenameFilter(null)}\n handleSubmit={(name) => handleSubmitRename(name)}\n oldName={openRenameFilter?.name}\n />\n <Box>\n <IconButton size=\"small\" onClick={onClose}>\n <Close fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n </DialogTitle>\n <DialogContent className=\"content\">\n {/* Display error message */}\n {errorMessage && (\n <Alert severity=\"error\" sx={{ px:1, pt: 0.5, mb: 1 }}>\n <Typography\n color=\"error\"\n type=\"s4\"\n >\n {errorMessage}\n </Typography>\n </Alert>\n )}\n <QueryBuilderMaterial>\n <QueryBuilder\n fields={fields || []}\n query={query}\n onQueryChange={handleQueryChange}\n showCombinatorsBetweenRules={true}\n controlClassnames={{\n header: \"actions\",\n }}\n controlElements={{\n addRuleAction: AddFilterButton,\n addGroupAction: AddGroupButton,\n combinatorSelector: CombinatorSelect,\n fieldSelector: FieldSelect,\n operatorSelector: OperatorSelect,\n removeRuleAction: RemoveAction,\n valueEditor: ValueEditor,\n removeGroupAction: RemoveGroupAction,\n }}\n />\n <Button\n variant=\"text\"\n className={isRtl?'remove-filters_rtl':'remove-filters'}\n onClick={() => {\n handleApplyFilter(true)\n }}\n disabled={disabled}\n >\n Clear all filters\n </Button>\n </QueryBuilderMaterial>\n </DialogContent>\n <DialogActions className=\"filter-footer\">\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent:selectedFilter ? 'space-between' : 'flex-end', width:'100%' }}>\n {selectedFilter &&\n <Box>\n <Button onClick={handleUpdateSelectedFilterQuery}> \n Update Seleted filter\n </Button>\n </Box>\n }\n <Box sx={{display: 'flex', gap:1}}>\n <Button className=\"cancel-filter-btn\" onClick={onClose}>\n Cancel\n </Button>\n <Button\n disabled={disabled}\n onClick={() => handleApplyFilter()}\n >\n Apply\n </Button>\n </Box>\n </Box>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n\nexport default Filter;\n"],"names":["setBaseUrl","initialQuery","combinator","rules","open","onClose","savedFilters","fetchSavedFilters","onSaveFilter","onSelectedFilter","applyFilter","fields","location","useLocation","token","localStorage","getItem","auth","storageTokenKeyName","updatePageInfo","activePage","schemaFields","setActivePage","usePages","length","generateFields","query","setQuery","useState","filteredSavedFilters","setFilteredSavedFilters","selectedFilter","setSelectedFilter","openRenameFilter","setIsOpenRenameFilter","errorMessage","setErrorMessage","isRtl","useLanguage","resources","useMemo","routeToResourceMap","pathname","useEffect","handleApplyFilter","useCallback","clear","q","isDuplicatedFilters","generatedSQLQuery","generateQueryString","filters","filterQueryString","handleFilterSwitch","sf","handleSearchEvent","searchText","filteredFilters","filter","name","toLowerCase","includes","_","isEmpty","find","f","_a","rule","uniques","forEach","r","field","push","_b","isRuleInvalid","Array","isArray","some","value","operator","disabled","children","jsxs","Dialog","maxWidth","fullWidth","PaperProps","sx","borderRadius","DialogTitle","className","jsx","Typography","type","weight","color","Box","gap","display","Select","size","onChange","event","target","variant","setTimeout","input","OutlinedInput","label","endAdornment","InputAdornment","position","IconButton","onClick","edge","mr","Close","fontSize","SearchBar","placeholder","handleSearch","e","map","savedFilter","MenuItem","selected","preventDefault","stopPropagation","Edit","async","filterId","deleteFilterRequest","id","deleteV1FilterId","then","response","catch","err","handleDeleteFilter","Trash","SaveFilterModal","handleSubmit","newName","putFilterRequest","module","fieldResource","pageResource","putV1FilterId","enqueueSnackbar","error","m","Error","getErrorMessage","message","handleRenameFilter","handleSubmitRename","oldName","DialogContent","Alert","severity","px","pt","mb","QueryBuilderMaterial","QueryBuilder","onQueryChange","updatedRules","i","showCombinatorsBetweenRules","controlClassnames","header","controlElements","addRuleAction","AddFilterButton","addGroupAction","AddGroupButton","combinatorSelector","CombinatorSelect","fieldSelector","FieldSelect","operatorSelector","OperatorSelect","removeRuleAction","RemoveAction","valueEditor","ValueEditor","removeGroupAction","RemoveGroupAction","Button","DialogActions","alignItems","justifyContent","width","data","prev"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/filter/filter.tsx"],"sourcesContent":["/* eslint-disable */\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { RuleGroupType } from \"react-querybuilder\";\nimport \"react-querybuilder/dist/query-builder.scss\";\nimport { QueryBuilder /* , formatQuery */ } from \"react-querybuilder\";\nimport { QueryBuilderMaterial } from \"@react-querybuilder/material\";\nimport {\n Box,\n IconButton,\n MenuItem,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n OutlinedInput,\n InputAdornment,\n Alert,\n} from \"@mui/material\";\nimport \"./filter.scss\";\nimport Select from \"../select/select\";\nimport Typography from \"../typography/typography\";\nimport { Close } from \"@mui/icons-material\";\nimport CombinatorSelect from \"./components/combinator-select\";\nimport RemoveAction from \"./components/remove-action\";\nimport FieldSelect from \"./components/field-select\";\nimport AddFilterButton from \"./components/add-filter\";\nimport AddGroupButton from \"./components/add-group\";\nimport ValueEditor from \"./components/value-editor\";\nimport OperatorSelect from \"./components/operator-select\";\nimport Button from \"../button/button\";\nimport RemoveGroupAction from \"./components/delete-group\";\nimport SearchBar from \"../search-bar/search-bar\";\nimport SaveFilterModal from \"../save-filter-modal/save-filter-modal\";\n\nimport {\n setBaseUrl,\n putV1FilterId,\n deleteV1FilterId,\n} from \"../../api-client/api.system-feature/api\";\nimport type * as Types from \"../../api-client/api.system-feature/api-types\";\nimport { auth } from \"../../constants/auth\";\nimport { generateFields, generateQueryString, getErrorMessage } from \"../../utils/common\";\nimport { usePages } from \"../../hooks/use-pages\";\nimport _ from \"lodash\";\nimport { Edit, Trash } from \"../icons\";\nimport { enqueueSnackbar } from \"notistack\";\nimport { IResources, routeToResourceMap } from \"../../constants/route-page-map\";\nimport { useLocation } from \"react-router-dom\";\nimport { useLanguage } from \"../../hooks/useLangauge\";\n\nsetBaseUrl(`${import.meta.env.VITE_BACKEND_BASE_URL}/system-feature`);\n\ninterface IFilter {\n open: boolean;\n onClose: () => void;\n activeView?: string;\n savedFilters?: SavedFilter[];\n fetchSavedFilters?: () => Promise<void>;\n setFilterBar?: any;\n onSaveFilter?: (query: RuleGroupType) => void;\n onSelectedFilter?: (filterName: string) => void;\n fields: any;\n applyFilter: any\n}\n\ninterface SavedFilter {\n id: string;\n name: string;\n query: RuleGroupType;\n}\n\nconst initialQuery: RuleGroupType = { combinator: \"and\", rules: [] };\n\nconst Filter = ({\n open,\n onClose,\n // activeView,\n savedFilters,\n fetchSavedFilters,\n onSaveFilter,\n onSelectedFilter,\n applyFilter,\n fields = []\n}: IFilter) => {\n const location = useLocation();\n\n const token = localStorage.getItem(auth.storageTokenKeyName);\n const { updatePageInfo, activePage, schemaFields,setActivePage } = usePages()\n\n fields = schemaFields.length ? generateFields(schemaFields) : fields\n const [query, setQuery] = useState<RuleGroupType>(initialQuery);\n const [filteredSavedFilters, setFilteredSavedFilters] = useState<\n SavedFilter[]\n >(savedFilters ?? []);\n const [selectedFilter, setSelectedFilter] = useState<any>(null);\n const [openRenameFilter, setIsOpenRenameFilter] = useState<any>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const {isRtl}=useLanguage();\n const resources: IResources = useMemo(() => routeToResourceMap[location.pathname] || null, [location.pathname])\n\n useEffect(() => {\n savedFilters && setFilteredSavedFilters(savedFilters);\n }, [savedFilters]);\n\n\n const handleApplyFilter = useCallback((clear:boolean = false) => {\n let q = query\n const isInvalid = isDuplicatedFilters(q)\n if(isInvalid){\n setErrorMessage(\"Invalid filter\")\n return\n }\n if(clear) {\n q = initialQuery\n setQuery(q)\n } else {\n const generatedSQLQuery = q ? generateQueryString(q) : q;\n updatePageInfo({ filters: q, filterQueryString: generatedSQLQuery })\n // applyFilter(generatedSQLQuery);\n onClose();\n }\n }, [query, applyFilter, onClose]);\n\n const handleQueryChange = (q: RuleGroupType) => {\n const updatedRules = q.rules.map((rule, i) => ({\n ...rule,\n value: rule.field !== query.rules?.[i]?.field || ['null', 'notNull'].includes(rule.operator) ? \"\" : rule.value\n }));\n let isValid = true;\n let errorMessage = '';\n\n // // Helper function to check for invalid aggregate usage, considering parent combinators\n // const checkForInvalidAggregateUsage = (rules: any[], combinator: string, parentCombinator: string | null): boolean => {\n // let hasAggregateField = false;\n // let hasNonAggregateField = false;\n\n // rules.forEach(rule => {\n // // Check nested groups\n // if (rule.rules) {\n // // If the current group or any parent has an 'OR', pass it down\n // const currentCombinator = combinator === 'or' || parentCombinator === 'or' ? 'or' : combinator;\n // checkForInvalidAggregateUsage(rule.rules, rule.combinator, currentCombinator);\n // } else {\n // // Find the field in the fields array and check if it's an aggregate\n // const field = fields.find((f: any) => f.name === rule.field);\n\n // if (field?.is_aggregate) {\n // hasAggregateField = true;\n // } else {\n // hasNonAggregateField = true;\n // }\n // }\n // });\n\n // // If any parent or current rule uses 'OR' with a mix of aggregate and non-aggregate fields, it's invalid\n // if ((combinator === 'or' || parentCombinator === 'or') && hasAggregateField && hasNonAggregateField) {\n // isValid = false;\n // errorMessage = 'Mixing aggregate and non-aggregate fields in OR conditions may lead to unexpected results.';\n // }\n\n // return isValid;\n // };\n\n // Start checking from the root level (no parent combinator initially)\n \n\n // Always set the query, regardless of validity\n setQuery({...q, rules: updatedRules});\n\n // Set error message if invalid, otherwise clear it\n if (!isValid) {\n setErrorMessage(errorMessage);\n } else {\n setErrorMessage(null);\n }\n\n // Always call onSaveFilter, if it exists\n if (onSaveFilter) {\n onSaveFilter(q);\n }\n };\n\n const handleFilterSwitch = (sf?: any) => {\n if (sf) {\n setSelectedFilter(sf);\n setQuery(sf.query);\n if (onSelectedFilter) {\n onSelectedFilter(sf);\n }\n } else{\n setSelectedFilter(null);\n setQuery(initialQuery);\n if (onSelectedFilter) {\n onSelectedFilter(null);\n }\n }\n };\n\n const handleSearchEvent = (searchText: string) => {\n const filteredFilters = savedFilters?.filter((filter: any) =>\n filter.name.toLowerCase().includes(searchText.toLowerCase())\n );\n if (filteredFilters) {\n setFilteredSavedFilters(filteredFilters);\n }\n };\n\n const handleRenameFilter = async (filterId: string, newName: string) => {\n const putFilterRequest: Types.PutV1FilterIdRequest = {\n \"x-token\": token,\n id: filterId,\n name: newName,\n module: resources?.fieldResource || resources?.pageResource\n };\n\n try {\n await putV1FilterId(putFilterRequest)\n // setSelectedFilter(newName);\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n enqueueSnackbar('Filters renamed successfully.')\n } catch (error) {\n let m: string = 'Something went wrong on saving filters'\n\t\t\tif(error instanceof Error) {\n m = getErrorMessage(error.message)\n\t\t\t}\n\t\t\tenqueueSnackbar(m, {variant: 'error'})\n\t\t\treturn false\n }\n return true\n };\n const handleUpdateSelectedFilterQuery = async () => {\n if(selectedFilter) {\n\n const putFilterRequest: Types.PutV1FilterIdRequest = {\n \"x-token\": token,\n id: selectedFilter.id,\n data: query,\n };\n \n putV1FilterId(putFilterRequest)\n .then((response: any) => {\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n setActivePage((prev: any) => ({\n ...prev,\n filters:{\n ...prev.filters,\n rules: query.rules,\n combinator: query.combinator,\n name: selectedFilter.name\n \n }\n }));\n })\n .catch((err: any) => enqueueSnackbar(\"Error renaming saved filters:\", {variant:'error'}));\n }\n };\n\n const handleSubmitRename = (name: string) => {\n if (openRenameFilter) {\n return handleRenameFilter(openRenameFilter.id, name);\n }\n };\n\n const handleDeleteFilter = async (filterId: string) => {\n const deleteFilterRequest: Types.DeleteV1FilterIdRequest = {\n \"x-token\": token,\n id: filterId,\n };\n\n deleteV1FilterId(deleteFilterRequest)\n .then((response: any) => {\n setSelectedFilter(null);\n setQuery(initialQuery);\n if (fetchSavedFilters) {\n fetchSavedFilters();\n }\n \n })\n .catch((err: any) => console.log(\"Error deleting saved filters:\", err));\n };\n\n useEffect(() => {\n let q = initialQuery\n if(!_.isEmpty(activePage.filters)) {\n q = activePage.filters\n }\n setQuery(q)\n const selectedFilter = savedFilters?.find((f: any) => f.name === activePage?.filters?.name);\n setSelectedFilter(selectedFilter || null);\n }, [activePage?.filters, savedFilters]);\n\n const isDuplicatedFilters = (rule) => {\n let uniques:string[]=[]\n rule?.rules?.forEach((r: any) => {\n if(uniques.includes(r.field)&& rule.combinator=='and'){\n return true\n }\n uniques.push(r.field)\n })\n return uniques.length !== rule?.rules?.length\n }\n\n\n const isRuleInvalid = (rule: any): boolean => {\n // If it's a group (has nested rules), recurse\n if (Array.isArray(rule.rules)) {\n return rule.rules.length ? rule.rules.some(isRuleInvalid) : !rule.rules.length;\n }\n \n // Otherwise, validate individual rule\n return (\n !rule.field ||\n (_.isEmpty(rule.value) && !['null', 'notNull'].includes(rule.operator))\n );\n };\n \n const disabled = useMemo(() => isRuleInvalid(query) || errorMessage, [query, errorMessage])\n // const disabled = isRuleInvalid(query) || errorMessage;\n\n return (\n <div>\n <Dialog \n open={open} \n onClose={onClose} \n maxWidth='md' \n fullWidth={true} \n PaperProps={{\n sx:{ borderRadius: 2 }\n }}\n >\n <DialogTitle className=\"filter-header\">\n <Typography type=\"s3\" weight=\"medium\" color=\"theme.secondary.1000\">\n Filters\n </Typography>\n <Box gap={1} display={\"flex\"}>\n <Select\n fullWidth\n size=\"small\"\n className=\"filter-dropdown\"\n value={selectedFilter ? selectedFilter.name : \"Saved Filters\"}\n onChange={(event: any) =>{\n const sf = savedFilters?.find(f => f.name == event.target.value)\n handleFilterSwitch(sf)\n }}\n variant=\"outlined\"\n onClose={() => {\n setTimeout(() => {\n handleSearchEvent(\"\")\n }, 500);\n }}\n input={\n selectedFilter ? (\n <OutlinedInput\n label=''\n endAdornment={\n <InputAdornment position='end'>\n <IconButton\n aria-label='clear selection'\n onClick={() => {\n handleFilterSwitch()\n }}\n edge='end'\n sx={{ mr: 1.5 }}\n size='small'>\n <Close sx={{ fontSize: '1rem' }} />\n </IconButton>\n </InputAdornment>\n }\n />\n ) : undefined\n }\n >\n <div className=\"searchbar-box-list\">\n <SearchBar\n placeholder={\"Search Filters\"}\n handleSearch={(e) => handleSearchEvent(e)}\n />\n </div>\n {/* <Typography\n color=\"theme.secondary.1000\"\n type=\"s4\"\n className=\"filter-title\"\n >\n Saved Filters\n </Typography> */}\n {filteredSavedFilters?.map((savedFilter: SavedFilter) => (\n <MenuItem\n key={savedFilter.id}\n value={savedFilter?.name}\n className=\"menu-list\"\n selected={selectedFilter?.name == savedFilter?.name}\n >\n <Typography color=\"theme.secondary.1000\" type=\"s3\">\n {savedFilter?.name}\n </Typography>\n\n <div className=\"icon-list\">\n <IconButton size=\"small\" onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n setIsOpenRenameFilter(savedFilter)\n }}>\n <Edit fontSize=\"small\" color={selectedFilter?.name == savedFilter?.name ? \"theme.primary.800\" : 'inherit'}/>\n </IconButton>\n <IconButton size=\"small\" onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n handleDeleteFilter(savedFilter.id)\n }} color=\"error\">\n <Trash fontSize=\"small\" color=\"theme.error.600\"/>\n </IconButton>\n </div>\n </MenuItem>\n ))}\n </Select>\n <SaveFilterModal\n open={openRenameFilter !== null}\n onClose={() => setIsOpenRenameFilter(null)}\n handleSubmit={(name) => handleSubmitRename(name)}\n oldName={openRenameFilter?.name}\n />\n <Box>\n <IconButton size=\"small\" onClick={onClose}>\n <Close fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n </DialogTitle>\n <DialogContent className=\"content\">\n {/* Display error message */}\n {errorMessage && (\n <Alert severity=\"error\" sx={{ px:1, pt: 0.5, mb: 1 }}>\n <Typography\n color=\"error\"\n type=\"s4\"\n >\n {errorMessage}\n </Typography>\n </Alert>\n )}\n <QueryBuilderMaterial>\n <QueryBuilder\n fields={fields || []}\n query={query}\n onQueryChange={handleQueryChange}\n showCombinatorsBetweenRules={true}\n controlClassnames={{\n header: \"actions\",\n }}\n controlElements={{\n addRuleAction: AddFilterButton,\n addGroupAction: AddGroupButton,\n combinatorSelector: CombinatorSelect,\n fieldSelector: FieldSelect,\n operatorSelector: OperatorSelect,\n removeRuleAction: RemoveAction,\n valueEditor: ValueEditor,\n removeGroupAction: RemoveGroupAction,\n }}\n />\n <Button\n variant=\"text\"\n className={isRtl?'remove-filters_rtl':'remove-filters'}\n onClick={() => {\n handleApplyFilter(true)\n }}\n disabled={disabled}\n >\n Clear all filters\n </Button>\n </QueryBuilderMaterial>\n </DialogContent>\n <DialogActions className=\"filter-footer\">\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent:selectedFilter ? 'space-between' : 'flex-end', width:'100%' }}>\n {selectedFilter &&\n <Box>\n <Button onClick={handleUpdateSelectedFilterQuery}> \n Update Seleted filter\n </Button>\n </Box>\n }\n <Box sx={{display: 'flex', gap:1}}>\n <Button className=\"cancel-filter-btn\" onClick={onClose}>\n Cancel\n </Button>\n <Button\n disabled={disabled}\n onClick={() => handleApplyFilter()}\n >\n Apply\n </Button>\n </Box>\n </Box>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n\nexport default Filter;\n"],"names":["setBaseUrl","initialQuery","combinator","rules","open","onClose","savedFilters","fetchSavedFilters","onSaveFilter","onSelectedFilter","applyFilter","fields","location","useLocation","token","localStorage","getItem","auth","storageTokenKeyName","updatePageInfo","activePage","schemaFields","setActivePage","usePages","length","generateFields","query","setQuery","useState","filteredSavedFilters","setFilteredSavedFilters","selectedFilter","setSelectedFilter","openRenameFilter","setIsOpenRenameFilter","errorMessage","setErrorMessage","isRtl","useLanguage","resources","useMemo","routeToResourceMap","pathname","useEffect","handleApplyFilter","useCallback","clear","q","isDuplicatedFilters","generatedSQLQuery","generateQueryString","filters","filterQueryString","handleFilterSwitch","sf","handleSearchEvent","searchText","filteredFilters","filter","name","toLowerCase","includes","_","isEmpty","find","f","_a","rule","uniques","forEach","r","field","push","_b","isRuleInvalid","Array","isArray","some","value","operator","disabled","children","jsxs","Dialog","maxWidth","fullWidth","PaperProps","sx","borderRadius","DialogTitle","className","jsx","Typography","type","weight","color","Box","gap","display","Select","size","onChange","event","target","variant","setTimeout","input","OutlinedInput","label","endAdornment","InputAdornment","position","IconButton","onClick","edge","mr","Close","fontSize","SearchBar","placeholder","handleSearch","e","map","savedFilter","MenuItem","selected","preventDefault","stopPropagation","Edit","async","filterId","deleteFilterRequest","id","deleteV1FilterId","then","response","catch","err","handleDeleteFilter","Trash","SaveFilterModal","handleSubmit","newName","putFilterRequest","module","fieldResource","pageResource","putV1FilterId","enqueueSnackbar","error","m","Error","getErrorMessage","message","handleRenameFilter","handleSubmitRename","oldName","DialogContent","Alert","severity","px","pt","mb","QueryBuilderMaterial","QueryBuilder","onQueryChange","updatedRules","i","showCombinatorsBetweenRules","controlClassnames","header","controlElements","addRuleAction","AddFilterButton","addGroupAction","AddGroupButton","combinatorSelector","CombinatorSelect","fieldSelector","FieldSelect","operatorSelector","OperatorSelect","removeRuleAction","RemoveAction","valueEditor","ValueEditor","removeGroupAction","RemoveGroupAction","Button","DialogActions","alignItems","justifyContent","width","data","prev"],"mappings":"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"}
@@ -17,5 +17,5 @@ interface IFooter {
17
17
  isPaginationDisplayed?: boolean;
18
18
  isPageSaving?: boolean;
19
19
  }
20
- declare const Footer: React.NamedExoticComponent<IFooter>;
20
+ declare const Footer: React.MemoExoticComponent<({ pages, setPages, currentPage, setCurrentPage, total, paginationModel, handlePaginationModel, sharedPages, resource, savePageConfiguration, handlePageDelete, enablePages, isPaginationDisplayed, isPageSaving }: IFooter) => import("react/jsx-runtime").JSX.Element>;
21
21
  export default Footer;
@@ -1,4 +1,4 @@
1
1
  import { default as React } from 'react';
2
2
 
3
- declare const DynamicMedia: React.NamedExoticComponent<any>;
3
+ declare const DynamicMedia: React.MemoExoticComponent<(props: any) => import("react/jsx-runtime").JSX.Element>;
4
4
  export default DynamicMedia;
@@ -1,3 +1,3 @@
1
1
 
2
- declare const DynamicPhone: import('react').NamedExoticComponent<any>;
2
+ declare const DynamicPhone: import('react').MemoExoticComponent<(props: any) => import("react/jsx-runtime").JSX.Element>;
3
3
  export default DynamicPhone;
@@ -1,4 +1,4 @@
1
1
  import { default as React } from 'react';
2
2
 
3
- declare const DynamicSelect: React.NamedExoticComponent<any>;
3
+ declare const DynamicSelect: React.MemoExoticComponent<(props: any) => import("react/jsx-runtime").JSX.Element>;
4
4
  export default DynamicSelect;
@@ -1,4 +1,4 @@
1
1
  import { default as React } from 'react';
2
2
 
3
- declare const DynamicInput: React.NamedExoticComponent<any>;
3
+ declare const DynamicInput: React.MemoExoticComponent<(props: any) => import("react/jsx-runtime").JSX.Element>;
4
4
  export default DynamicInput;
@@ -1,4 +1,4 @@
1
1
  import { default as React } from 'react';
2
2
 
3
- declare const DynamicTime: React.NamedExoticComponent<any>;
3
+ declare const DynamicTime: React.MemoExoticComponent<(props: any) => import("react/jsx-runtime").JSX.Element>;
4
4
  export default DynamicTime;
@@ -1,2 +1,2 @@
1
- declare const FormSwitcher: import('react').NamedExoticComponent<any>;
1
+ declare const FormSwitcher: import('react').MemoExoticComponent<({ children, isFormSwitcher, control, fieldArrayName, formSwitcherName, label, resetForm, }: any) => import("react/jsx-runtime").JSX.Element>;
2
2
  export default FormSwitcher;
@@ -287,7 +287,7 @@ function Header(props) {
287
287
  Avatar,
288
288
  {
289
289
  size: 32,
290
- src: (user == null ? void 0 : user.profile_image) ? `${void 0}${user == null ? void 0 : user.profile_image}` : void 0,
290
+ src: (user == null ? void 0 : user.profile_image) ? `${"https://erpforce-dev.s3.eu-west-1.amazonaws.com/"}${user == null ? void 0 : user.profile_image}` : void 0,
291
291
  alt: formatText(user == null ? void 0 : user.full_name),
292
292
  className: "avatar-class"
293
293
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../../../src/components/header/header.tsx"],"sourcesContent":["// components/header/Header.tsx - Complete updated version with English fallback\nimport React, { useState, useCallback, useMemo } from \"react\";\nimport { Link, matchRoutes, useLocation, useNavigate } from \"react-router-dom\";\nimport Box from \"@mui/material/Box\";\nimport { useTranslation } from \"react-i18next\";\nimport LockIcon from \"@mui/icons-material/Lock\";\nimport IconButton from \"@mui/material/IconButton\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport Menu from \"@mui/material/Menu\";\nimport KeyboardBackspaceIcon from \"@mui/icons-material/KeyboardBackspace\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport Divider from \"@mui/material/Divider\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\n\n\nimport { Pathname } from \"../../constants/pathnames/pathname\"; // Removed - should be passed as props\nimport Typography from \"../typography/typography\";\nimport logo, { images } from \"../../assets/images\";\nimport Select from \"../select/select\";\nimport modules from \"../../constants/modules\"; // Removed - should be passed as props\nimport Avatar from \"../avatar/avatar\";\nimport { useAuth } from \"../../hooks/useAuth\";\nimport ConfirmPopUp from \"../confirm-modal/confirm-modal\";\nimport formatText from \"../../utils/format-text\";\nimport \"./header.scss\";\nimport { useLanguage } from \"../../hooks/useLangauge\";\nimport { Eye } from \"../icons\";\nimport ResetPasswordModal from \"../reset-password-modal/reset-password-modal\";\nimport NotificationMenu from \"./components/notification-menu/notification-menu\";\n\ninterface ILanguage {\n label: string;\n code: string;\n direction: string;\n}\n\ninterface IModule {\n label: any;\n link: string;\n sidebar: string;\n icon: string;\n permission: string;\n bg: string;\n connectedRoutes: string[];\n translationModule: string;\n}\n\n\nexport function Header(props: any): React.ReactElement {\n const navigate = useNavigate();\n const { t } = useTranslation();\n const location = useLocation();\n const { logout, user } = useAuth();\n \n const { \n languages, \n currentLanguage, \n changeLanguage, \n isLoading: languagesLoading,\n error: languageContextError,\n isFallbackActive,\n fetchLanguages,\n isRtl\n } = useLanguage();\n \n const { pathname } = location;\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const [logoutConfirmation, setLogoutConfirmation] = useState<boolean>(false);\n const [localLanguageError, setLocalLanguageError] = useState<string | null>(null);\n const [showModal, setShowModal] = useState(false);\n\n const u_data = localStorage.getItem(\"_u_data\") || undefined;\n const userData = u_data ? JSON.parse(u_data) : \"\";\n const isMenuOpen = Boolean(anchorEl);\n\n const handleLogoutConfirmation = () =>\n setLogoutConfirmation(!logoutConfirmation);\n\n const checkMatchedRoutes = useCallback(\n (paths: string[] | string) => {\n const shouldMatch: { path: string }[] = Array.isArray(paths)\n ? paths.map((path: string) => ({ path }))\n : [{ path: paths }];\n\n return Boolean(matchRoutes(shouldMatch, location));\n },\n [location],\n );\n\n const erp_modules = useMemo<IModule[]>(() => modules(t), [t]);\n\n const selectedModule = useMemo<IModule | null>(() => {\n return (\n erp_modules.find(\n (module: IModule) =>\n module?.link?.toLowerCase() === pathname.toLowerCase() ||\n checkMatchedRoutes(module.connectedRoutes),\n ) || null\n );\n }, [erp_modules, pathname, checkMatchedRoutes]);\n\n const handleChangePasswordView = () => {\n setShowModal(true);\n }\n\n // Enhanced language change handler with validation and error handling\n const onChangeLang = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const lang_code = e.target.value;\n \n // Clear any previous errors\n setLocalLanguageError(null);\n \n // Validate the language exists before changing\n if (!languages || languages.length === 0) {\n const errorMsg = t('header.language_not_available') || 'Languages not available';\n setLocalLanguageError(errorMsg);\n return;\n }\n \n const languageExists = languages.some((lang: ILanguage) => lang.code === lang_code);\n \n if (languageExists) {\n try {\n changeLanguage(lang_code);\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'Failed to change language';\n setLocalLanguageError(errorMsg);\n }\n } else {\n const errorMsg = t('header.language_not_found', { language: lang_code }) || \n `Selected language \"${lang_code}\" is not available`;\n setLocalLanguageError(errorMsg);\n }\n };\n\n // Retry language loading\n const handleRetryLanguages = async () => {\n setLocalLanguageError(null);\n try {\n await fetchLanguages();\n } catch (error) {\n const errorMsg = 'Failed to reload languages';\n setLocalLanguageError(errorMsg);\n }\n };\n\n\n const handleProfileMenuOpen = (event: React.MouseEvent<HTMLElement>) =>\n setAnchorEl(event.currentTarget);\n\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n const handleChange = (event: any) => {\n const selectedLink = event.target.value;\n setTimeout(() => {\n navigate(selectedLink);\n }, 300);\n };\n\n const handleBackButton = () => {\n window.history.back();\n };\n\n // Get current language display value with fallback indication\n const getCurrentLanguageDisplay = (): string => {\n if (!currentLanguage) return t('header.select_language') || 'Select Language';\n \n // Show fallback indicator for better UX\n if (isFallbackActive || languageContextError) {\n return `${currentLanguage.label}`;\n }\n \n return currentLanguage.label;\n };\n\n // Create English fallback for consistent display\n const createEnglishFallback = (): ILanguage => ({\n code: 'en',\n label: 'English',\n direction: 'ltr'\n });\n\n // Get languages for dropdown - ensure English is always available\n const getLanguagesForDropdown = (): ILanguage[] => {\n if (!languages || languages.length === 0) {\n // If no languages available, show only English\n return [createEnglishFallback()];\n }\n \n // Ensure English is in the list\n const hasEnglish = languages.some(lang => lang.code === 'en');\n if (!hasEnglish) {\n return [createEnglishFallback(), ...languages];\n }\n \n return languages;\n };\n\n // Render language selector based on different states\n const renderLanguageSelector = () => {\n const availableLanguages = getLanguagesForDropdown();\n const displayValue = currentLanguage?.code || 'en'; // Default to English\n\n // Loading state\n if (languagesLoading) {\n return (\n <Box className=\"language-loading\">\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Loading...'}\n </Typography>\n </Box>\n );\n }\n\n // Always show dropdown with at least English available\n return (\n <Select\n onChange={onChangeLang}\n size=\"small\"\n value={displayValue}\n renderValue={() => getCurrentLanguageDisplay()}\n error={!!localLanguageError}\n className={isFallbackActive || languageContextError ? 'language-fallback-active' : ''}\n \n >\n {availableLanguages.map(({ code, label }: ILanguage) => (\n <MenuItem key={code} value={code}>\n <Typography\n type=\"s4\"\n weight=\"medium\"\n color=\"theme.secondary.1000\"\n \n >\n {label}\n {/* Show fallback indicator in dropdown */}\n {/* {(isFallbackActive || languageContextError) && code === 'en' && \n ` (${t('header.fallback') || 'Fallback'})`\n } */}\n </Typography>\n </MenuItem>\n ))}\n \n {/* Show retry option if there's an error */}\n {languageContextError && (\n <MenuItem onClick={handleRetryLanguages} style={{ fontStyle: 'italic' }}>\n <Typography\n type=\"s4\"\n weight=\"medium\"\n color=\"theme.secondary.500\"\n >\n 🔄 {t('header.retry_languages') || 'Retry loading languages'}\n </Typography>\n </MenuItem>\n )}\n </Select>\n );\n };\n\n const menuId = \"primary-search-account-menu\";\n const renderMenu = (\n <Menu\n className=\"main-profile-menu\"\n anchorEl={anchorEl}\n id={menuId}\n keepMounted\n open={isMenuOpen}\n onClose={handleMenuClose}\n >\n <MenuItem className=\"user-assigned\">\n <span>{t('common.assigned_roles') || 'Assigned roles'}</span>\n </MenuItem>\n <MenuItem className=\"user-data-wrap\" value={userData.role_id}>\n <ListItemIcon>\n <Avatar size={27} alt={userData.role_name} />\n </ListItemIcon>\n <ListItemText className=\"size15\">\n {userData.role_name}\n </ListItemText>\n <Typography variant=\"body2\" color=\"text.secondary\">\n <img src={images.tickicon} alt=\"Active\" />\n </Typography>\n </MenuItem>\n <Divider />\n <MenuItem\n className=\"user-assigned\"\n onClick={() => {\n handleChangePasswordView();\n setAnchorEl(null);\n }}\n >\n <ListItemIcon>\n <Eye fontSize=\"medium\" width={20} height={20} htmlColor=\"#292D32\" />\n </ListItemIcon>\n <ListItemText className=\"size15\">{t(\"common.change_password\")}</ListItemText>\n </MenuItem>\n <Divider />\n <MenuItem\n className=\"menu-item-color\"\n onClick={() => {\n handleLogoutConfirmation();\n setAnchorEl(null);\n }}\n >\n <ListItemIcon>\n <img src={images.logout} alt=\"logout\" />\n </ListItemIcon>\n <ListItemText className=\"size15\">{t(\"common.logout\")}</ListItemText>\n </MenuItem>\n </Menu>\n );\n\n return (\n <>\n <Box className=\"main-box\">\n {!props.isDropdownShow && (\n <Link to={user ? Pathname.DASHBOARD : Pathname.LOGIN}>\n <img src={images.logo} alt=\"logo\" />\n </Link>\n )}\n <Box className=\"second-box\">\n {props.isDropdownShow && (\n <>\n <IconButton onClick={handleBackButton}>\n <KeyboardBackspaceIcon\n className={isRtl?\"arrow-pointer_rtl\":\"arrow-pointer\"}\n />\n </IconButton>\n <Box width={250}>\n <Select\n fullWidth\n placeholder=\"Placeholder\"\n size={\"small\"}\n value={selectedModule?.link || \"\"}\n onChange={handleChange}\n className=\"select-box\"\n variant=\"outlined\"\n renderValue={(value: string) => (\n <>\n {selectedModule ? (\n <Box className=\"selected-menu-box\">\n <img\n src={selectedModule.icon}\n alt={selectedModule.label}\n />\n {selectedModule.label}\n </Box>\n ) : (\n value\n )}\n </>\n )}\n >\n {erp_modules.map((module: any, index: number) => (\n <MenuItem\n className=\"select-box-menu-item\"\n value={module.link}\n key={index}\n >\n <img src={module.icon} alt={module.label} />\n {module.label}\n </MenuItem>\n ))}\n </Select>\n </Box>\n </>\n )}\n </Box>\n <Box className=\"header-right-wrap\">\n {/* Language Selector with Enhanced Fallback Support */}\n <Box className=\"language-selector-wrapper\">\n {renderLanguageSelector()}\n </Box>\n\n {/* <IconButton\n size=\"small\"\n aria-label=\"notification bell\"\n className=\"p-0\"\n >\n <img src={logo.notification} alt=\"notification icon\" />\n </IconButton> */}\n <NotificationMenu/>\n <IconButton\n size=\"small\"\n aria-label=\"help\"\n className=\"p-0\"\n >\n <img src={logo.question} alt=\"question icon\" />\n </IconButton>\n <img src={logo.vdivider} alt=\"divider icon\" />\n {localStorage.getItem(\"_tid\") ? (\n <Box className=\"user-profile-box\" onClick={handleProfileMenuOpen}>\n <Avatar\n size={32}\n src={user?.profile_image ? `${import.meta.env.VITE_S3_BUCKET_URL}${user?.profile_image}` : undefined}\n alt={formatText(user?.full_name)}\n className=\"avatar-class\"\n />\n <div>\n <Typography className=\"profile-name\">\n {user?.full_name}\n </Typography>\n <Typography className=\"user-auth\">\n {user?.role_name}\n </Typography>\n </div>\n </Box>\n ) : (\n <IconButton\n size=\"large\"\n edge=\"end\"\n aria-label=\"account of current user\"\n aria-controls={menuId}\n aria-haspopup=\"true\"\n component={Link}\n to={Pathname.LOGIN}\n color=\"inherit\"\n >\n <LockIcon className=\"icon-btn\" />\n </IconButton>\n )}\n </Box>\n {renderMenu}\n </Box>\n\n {/* Logout Confirmation Dialog */}\n <ConfirmPopUp\n open={logoutConfirmation}\n title={t(\"common.logout\")}\n description={t('common.logout_confirmation') || \"Are you sure, you want to logout?\"}\n onConfirm={() => logout()}\n onClose={handleLogoutConfirmation}\n fullWidth\n maxWidth=\"xs\"\n buttonTexts={{\n confirm: t(\"common.logout\"),\n cancel: t(\"common.cancel\"),\n }}\n />\n\n <ResetPasswordModal showModal={showModal} setShowModal = {setShowModal} />\n \n </>\n );\n}\n\nexport default Header;"],"names":["React","KeyboardBackspaceIcon","logo","LockIcon"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../../../src/components/header/header.tsx"],"sourcesContent":["// components/header/Header.tsx - Complete updated version with English fallback\nimport React, { useState, useCallback, useMemo } from \"react\";\nimport { Link, matchRoutes, useLocation, useNavigate } from \"react-router-dom\";\nimport Box from \"@mui/material/Box\";\nimport { useTranslation } from \"react-i18next\";\nimport LockIcon from \"@mui/icons-material/Lock\";\nimport IconButton from \"@mui/material/IconButton\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport Menu from \"@mui/material/Menu\";\nimport KeyboardBackspaceIcon from \"@mui/icons-material/KeyboardBackspace\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport Divider from \"@mui/material/Divider\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\n\n\nimport { Pathname } from \"../../constants/pathnames/pathname\"; // Removed - should be passed as props\nimport Typography from \"../typography/typography\";\nimport logo, { images } from \"../../assets/images\";\nimport Select from \"../select/select\";\nimport modules from \"../../constants/modules\"; // Removed - should be passed as props\nimport Avatar from \"../avatar/avatar\";\nimport { useAuth } from \"../../hooks/useAuth\";\nimport ConfirmPopUp from \"../confirm-modal/confirm-modal\";\nimport formatText from \"../../utils/format-text\";\nimport \"./header.scss\";\nimport { useLanguage } from \"../../hooks/useLangauge\";\nimport { Eye } from \"../icons\";\nimport ResetPasswordModal from \"../reset-password-modal/reset-password-modal\";\nimport NotificationMenu from \"./components/notification-menu/notification-menu\";\n\ninterface ILanguage {\n label: string;\n code: string;\n direction: string;\n}\n\ninterface IModule {\n label: any;\n link: string;\n sidebar: string;\n icon: string;\n permission: string;\n bg: string;\n connectedRoutes: string[];\n translationModule: string;\n}\n\n\nexport function Header(props: any): React.ReactElement {\n const navigate = useNavigate();\n const { t } = useTranslation();\n const location = useLocation();\n const { logout, user } = useAuth();\n \n const { \n languages, \n currentLanguage, \n changeLanguage, \n isLoading: languagesLoading,\n error: languageContextError,\n isFallbackActive,\n fetchLanguages,\n isRtl\n } = useLanguage();\n \n const { pathname } = location;\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const [logoutConfirmation, setLogoutConfirmation] = useState<boolean>(false);\n const [localLanguageError, setLocalLanguageError] = useState<string | null>(null);\n const [showModal, setShowModal] = useState(false);\n\n const u_data = localStorage.getItem(\"_u_data\") || undefined;\n const userData = u_data ? JSON.parse(u_data) : \"\";\n const isMenuOpen = Boolean(anchorEl);\n\n const handleLogoutConfirmation = () =>\n setLogoutConfirmation(!logoutConfirmation);\n\n const checkMatchedRoutes = useCallback(\n (paths: string[] | string) => {\n const shouldMatch: { path: string }[] = Array.isArray(paths)\n ? paths.map((path: string) => ({ path }))\n : [{ path: paths }];\n\n return Boolean(matchRoutes(shouldMatch, location));\n },\n [location],\n );\n\n const erp_modules = useMemo<IModule[]>(() => modules(t), [t]);\n\n const selectedModule = useMemo<IModule | null>(() => {\n return (\n erp_modules.find(\n (module: IModule) =>\n module?.link?.toLowerCase() === pathname.toLowerCase() ||\n checkMatchedRoutes(module.connectedRoutes),\n ) || null\n );\n }, [erp_modules, pathname, checkMatchedRoutes]);\n\n const handleChangePasswordView = () => {\n setShowModal(true);\n }\n\n // Enhanced language change handler with validation and error handling\n const onChangeLang = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const lang_code = e.target.value;\n \n // Clear any previous errors\n setLocalLanguageError(null);\n \n // Validate the language exists before changing\n if (!languages || languages.length === 0) {\n const errorMsg = t('header.language_not_available') || 'Languages not available';\n setLocalLanguageError(errorMsg);\n return;\n }\n \n const languageExists = languages.some((lang: ILanguage) => lang.code === lang_code);\n \n if (languageExists) {\n try {\n changeLanguage(lang_code);\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'Failed to change language';\n setLocalLanguageError(errorMsg);\n }\n } else {\n const errorMsg = t('header.language_not_found', { language: lang_code }) || \n `Selected language \"${lang_code}\" is not available`;\n setLocalLanguageError(errorMsg);\n }\n };\n\n // Retry language loading\n const handleRetryLanguages = async () => {\n setLocalLanguageError(null);\n try {\n await fetchLanguages();\n } catch (error) {\n const errorMsg = 'Failed to reload languages';\n setLocalLanguageError(errorMsg);\n }\n };\n\n\n const handleProfileMenuOpen = (event: React.MouseEvent<HTMLElement>) =>\n setAnchorEl(event.currentTarget);\n\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n const handleChange = (event: any) => {\n const selectedLink = event.target.value;\n setTimeout(() => {\n navigate(selectedLink);\n }, 300);\n };\n\n const handleBackButton = () => {\n window.history.back();\n };\n\n // Get current language display value with fallback indication\n const getCurrentLanguageDisplay = (): string => {\n if (!currentLanguage) return t('header.select_language') || 'Select Language';\n \n // Show fallback indicator for better UX\n if (isFallbackActive || languageContextError) {\n return `${currentLanguage.label}`;\n }\n \n return currentLanguage.label;\n };\n\n // Create English fallback for consistent display\n const createEnglishFallback = (): ILanguage => ({\n code: 'en',\n label: 'English',\n direction: 'ltr'\n });\n\n // Get languages for dropdown - ensure English is always available\n const getLanguagesForDropdown = (): ILanguage[] => {\n if (!languages || languages.length === 0) {\n // If no languages available, show only English\n return [createEnglishFallback()];\n }\n \n // Ensure English is in the list\n const hasEnglish = languages.some(lang => lang.code === 'en');\n if (!hasEnglish) {\n return [createEnglishFallback(), ...languages];\n }\n \n return languages;\n };\n\n // Render language selector based on different states\n const renderLanguageSelector = () => {\n const availableLanguages = getLanguagesForDropdown();\n const displayValue = currentLanguage?.code || 'en'; // Default to English\n\n // Loading state\n if (languagesLoading) {\n return (\n <Box className=\"language-loading\">\n <Typography variant=\"body2\" color=\"text.secondary\">\n {'Loading...'}\n </Typography>\n </Box>\n );\n }\n\n // Always show dropdown with at least English available\n return (\n <Select\n onChange={onChangeLang}\n size=\"small\"\n value={displayValue}\n renderValue={() => getCurrentLanguageDisplay()}\n error={!!localLanguageError}\n className={isFallbackActive || languageContextError ? 'language-fallback-active' : ''}\n \n >\n {availableLanguages.map(({ code, label }: ILanguage) => (\n <MenuItem key={code} value={code}>\n <Typography\n type=\"s4\"\n weight=\"medium\"\n color=\"theme.secondary.1000\"\n \n >\n {label}\n {/* Show fallback indicator in dropdown */}\n {/* {(isFallbackActive || languageContextError) && code === 'en' && \n ` (${t('header.fallback') || 'Fallback'})`\n } */}\n </Typography>\n </MenuItem>\n ))}\n \n {/* Show retry option if there's an error */}\n {languageContextError && (\n <MenuItem onClick={handleRetryLanguages} style={{ fontStyle: 'italic' }}>\n <Typography\n type=\"s4\"\n weight=\"medium\"\n color=\"theme.secondary.500\"\n >\n 🔄 {t('header.retry_languages') || 'Retry loading languages'}\n </Typography>\n </MenuItem>\n )}\n </Select>\n );\n };\n\n const menuId = \"primary-search-account-menu\";\n const renderMenu = (\n <Menu\n className=\"main-profile-menu\"\n anchorEl={anchorEl}\n id={menuId}\n keepMounted\n open={isMenuOpen}\n onClose={handleMenuClose}\n >\n <MenuItem className=\"user-assigned\">\n <span>{t('common.assigned_roles') || 'Assigned roles'}</span>\n </MenuItem>\n <MenuItem className=\"user-data-wrap\" value={userData.role_id}>\n <ListItemIcon>\n <Avatar size={27} alt={userData.role_name} />\n </ListItemIcon>\n <ListItemText className=\"size15\">\n {userData.role_name}\n </ListItemText>\n <Typography variant=\"body2\" color=\"text.secondary\">\n <img src={images.tickicon} alt=\"Active\" />\n </Typography>\n </MenuItem>\n <Divider />\n <MenuItem\n className=\"user-assigned\"\n onClick={() => {\n handleChangePasswordView();\n setAnchorEl(null);\n }}\n >\n <ListItemIcon>\n <Eye fontSize=\"medium\" width={20} height={20} htmlColor=\"#292D32\" />\n </ListItemIcon>\n <ListItemText className=\"size15\">{t(\"common.change_password\")}</ListItemText>\n </MenuItem>\n <Divider />\n <MenuItem\n className=\"menu-item-color\"\n onClick={() => {\n handleLogoutConfirmation();\n setAnchorEl(null);\n }}\n >\n <ListItemIcon>\n <img src={images.logout} alt=\"logout\" />\n </ListItemIcon>\n <ListItemText className=\"size15\">{t(\"common.logout\")}</ListItemText>\n </MenuItem>\n </Menu>\n );\n\n return (\n <>\n <Box className=\"main-box\">\n {!props.isDropdownShow && (\n <Link to={user ? Pathname.DASHBOARD : Pathname.LOGIN}>\n <img src={images.logo} alt=\"logo\" />\n </Link>\n )}\n <Box className=\"second-box\">\n {props.isDropdownShow && (\n <>\n <IconButton onClick={handleBackButton}>\n <KeyboardBackspaceIcon\n className={isRtl?\"arrow-pointer_rtl\":\"arrow-pointer\"}\n />\n </IconButton>\n <Box width={250}>\n <Select\n fullWidth\n placeholder=\"Placeholder\"\n size={\"small\"}\n value={selectedModule?.link || \"\"}\n onChange={handleChange}\n className=\"select-box\"\n variant=\"outlined\"\n renderValue={(value: string) => (\n <>\n {selectedModule ? (\n <Box className=\"selected-menu-box\">\n <img\n src={selectedModule.icon}\n alt={selectedModule.label}\n />\n {selectedModule.label}\n </Box>\n ) : (\n value\n )}\n </>\n )}\n >\n {erp_modules.map((module: any, index: number) => (\n <MenuItem\n className=\"select-box-menu-item\"\n value={module.link}\n key={index}\n >\n <img src={module.icon} alt={module.label} />\n {module.label}\n </MenuItem>\n ))}\n </Select>\n </Box>\n </>\n )}\n </Box>\n <Box className=\"header-right-wrap\">\n {/* Language Selector with Enhanced Fallback Support */}\n <Box className=\"language-selector-wrapper\">\n {renderLanguageSelector()}\n </Box>\n\n {/* <IconButton\n size=\"small\"\n aria-label=\"notification bell\"\n className=\"p-0\"\n >\n <img src={logo.notification} alt=\"notification icon\" />\n </IconButton> */}\n <NotificationMenu/>\n <IconButton\n size=\"small\"\n aria-label=\"help\"\n className=\"p-0\"\n >\n <img src={logo.question} alt=\"question icon\" />\n </IconButton>\n <img src={logo.vdivider} alt=\"divider icon\" />\n {localStorage.getItem(\"_tid\") ? (\n <Box className=\"user-profile-box\" onClick={handleProfileMenuOpen}>\n <Avatar\n size={32}\n src={user?.profile_image ? `${import.meta.env.VITE_S3_BUCKET_URL}${user?.profile_image}` : undefined}\n alt={formatText(user?.full_name)}\n className=\"avatar-class\"\n />\n <div>\n <Typography className=\"profile-name\">\n {user?.full_name}\n </Typography>\n <Typography className=\"user-auth\">\n {user?.role_name}\n </Typography>\n </div>\n </Box>\n ) : (\n <IconButton\n size=\"large\"\n edge=\"end\"\n aria-label=\"account of current user\"\n aria-controls={menuId}\n aria-haspopup=\"true\"\n component={Link}\n to={Pathname.LOGIN}\n color=\"inherit\"\n >\n <LockIcon className=\"icon-btn\" />\n </IconButton>\n )}\n </Box>\n {renderMenu}\n </Box>\n\n {/* Logout Confirmation Dialog */}\n <ConfirmPopUp\n open={logoutConfirmation}\n title={t(\"common.logout\")}\n description={t('common.logout_confirmation') || \"Are you sure, you want to logout?\"}\n onConfirm={() => logout()}\n onClose={handleLogoutConfirmation}\n fullWidth\n maxWidth=\"xs\"\n buttonTexts={{\n confirm: t(\"common.logout\"),\n cancel: t(\"common.cancel\"),\n }}\n />\n\n <ResetPasswordModal showModal={showModal} setShowModal = {setShowModal} />\n \n </>\n );\n}\n\nexport default Header;"],"names":["React","KeyboardBackspaceIcon","logo","LockIcon"],"mappings":"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"}
@@ -24,7 +24,7 @@ return e.jsxs(e.Fragment,{children:[
24
24
  /* @__PURE__ */e.jsx(f.default,{}),
25
25
  /* @__PURE__ */e.jsx(N.default,{size:"small","aria-label":"help",className:"p-0",children:/* @__PURE__ */e.jsx("img",{src:t.images.question,alt:"question icon"})}),
26
26
  /* @__PURE__ */e.jsx("img",{src:t.images.vdivider,alt:"divider icon"}),localStorage.getItem("_tid")?/* @__PURE__ */e.jsxs(q.default,{className:"user-profile-box",onClick:e=>$(e.currentTarget),children:[
27
- /* @__PURE__ */e.jsx(c.Avatar,{size:32,src:(null==T?void 0:T.profile_image)?`undefined${null==T?void 0:T.profile_image}`:void 0,alt:h.default(null==T?void 0:T.full_name),className:"avatar-class"}),
27
+ /* @__PURE__ */e.jsx(c.Avatar,{size:32,src:(null==T?void 0:T.profile_image)?`https://erpforce-dev.s3.eu-west-1.amazonaws.com/${null==T?void 0:T.profile_image}`:void 0,alt:h.default(null==T?void 0:T.full_name),className:"avatar-class"}),
28
28
  /* @__PURE__ */e.jsxs("div",{children:[
29
29
  /* @__PURE__ */e.jsx(o.Typography,{className:"profile-name",children:null==T?void 0:T.full_name}),
30
30
  /* @__PURE__ */e.jsx(o.Typography,{className:"user-auth",children:null==T?void 0:T.role_name})]})]}):/* @__PURE__ */e.jsx(N.default,{size:"large",edge:"end","aria-label":"account of current user","aria-controls":re,"aria-haspopup":"true",component:l.Link,to:i.Pathname.LOGIN,color:"inherit",children:/* @__PURE__ */e.jsx(n.default,{className:"icon-btn"})})]}),ie]}),