@acuteinfo/common-base 1.0.0

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 (424) hide show
  1. package/.hintrc +14 -0
  2. package/README.md +1 -0
  3. package/dist/cache/cache.d.ts +2 -0
  4. package/dist/cache/cacheClearRegistry.d.ts +11 -0
  5. package/dist/cache/index.d.ts +3 -0
  6. package/dist/cache/utils.d.ts +1 -0
  7. package/dist/components/common/alert/alert.d.ts +8 -0
  8. package/dist/components/common/alert/index.d.ts +1 -0
  9. package/dist/components/common/amountIn/amountIn.d.ts +28 -0
  10. package/dist/components/common/amountIn/index.d.ts +2 -0
  11. package/dist/components/common/arrayField/arrayField.d.ts +13 -0
  12. package/dist/components/common/arrayField/arrayField2.d.ts +36 -0
  13. package/dist/components/common/arrayField/arrayFieldForDisplayValues.d.ts +17 -0
  14. package/dist/components/common/arrayField/index.d.ts +5 -0
  15. package/dist/components/common/arrayField/style.d.ts +1 -0
  16. package/dist/components/common/autocomplete/autocomplete.d.ts +31 -0
  17. package/dist/components/common/autocomplete/autocompleteGrid.d.ts +28 -0
  18. package/dist/components/common/autocomplete/index.d.ts +3 -0
  19. package/dist/components/common/autocomplete/render.d.ts +29 -0
  20. package/dist/components/common/autocomplete/virtualized.d.ts +6 -0
  21. package/dist/components/common/checkbox/checkbox.d.ts +22 -0
  22. package/dist/components/common/checkbox/checkboxGroup.d.ts +31 -0
  23. package/dist/components/common/checkbox/index.d.ts +4 -0
  24. package/dist/components/common/dataTable/components/NumberCell.d.ts +12 -0
  25. package/dist/components/common/dataTable/components/actionCell.d.ts +9 -0
  26. package/dist/components/common/dataTable/components/dateCell.d.ts +10 -0
  27. package/dist/components/common/dataTable/components/defaultCell.d.ts +3 -0
  28. package/dist/components/common/dataTable/components/footerCell.d.ts +7 -0
  29. package/dist/components/common/dataTable/components/headerCell2.d.ts +6 -0
  30. package/dist/components/common/dataTable/components/rowContext.d.ts +3 -0
  31. package/dist/components/common/dataTable/components/selectFieldCell.d.ts +9 -0
  32. package/dist/components/common/dataTable/components/textFieldCell.d.ts +7 -0
  33. package/dist/components/common/dataTable/components/useCheckbox.d.ts +1 -0
  34. package/dist/components/common/dataTable/components/visaversa.d.ts +12 -0
  35. package/dist/components/common/dataTable/gridParent.d.ts +19 -0
  36. package/dist/components/common/dataTable/gridTable.d.ts +21 -0
  37. package/dist/components/common/dataTable/index.d.ts +2 -0
  38. package/dist/components/common/dataTable/types.d.ts +24 -0
  39. package/dist/components/common/dataTable/utils/index.d.ts +1 -0
  40. package/dist/components/common/dataTable/utils/methods.d.ts +5 -0
  41. package/dist/components/common/datetime/datePicker.d.ts +15 -0
  42. package/dist/components/common/datetime/datetimePicker.d.ts +13 -0
  43. package/dist/components/common/datetime/index.d.ts +6 -0
  44. package/dist/components/common/datetime/timePicker.d.ts +14 -0
  45. package/dist/components/common/formbutton/formbutton.d.ts +28 -0
  46. package/dist/components/common/formbutton/index.d.ts +2 -0
  47. package/dist/components/common/hidden/hidden.d.ts +11 -0
  48. package/dist/components/common/hidden/index.d.ts +2 -0
  49. package/dist/components/common/index.d.ts +14 -0
  50. package/dist/components/common/loader/index.d.ts +1 -0
  51. package/dist/components/common/loader/textLoading/index.d.ts +1 -0
  52. package/dist/components/common/loader/textLoading/loadingText.d.ts +4 -0
  53. package/dist/components/common/loaderPaper/fullloader.d.ts +2 -0
  54. package/dist/components/common/loaderPaper/index.d.ts +2 -0
  55. package/dist/components/common/loaderPaper/loadinPaper.d.ts +2 -0
  56. package/dist/components/common/printButton/index.d.ts +1 -0
  57. package/dist/components/common/printButton/printButton.d.ts +12 -0
  58. package/dist/components/common/radio/index.d.ts +2 -0
  59. package/dist/components/common/radio/radio.d.ts +31 -0
  60. package/dist/components/common/rating/index.d.ts +2 -0
  61. package/dist/components/common/rating/rating.d.ts +15 -0
  62. package/dist/components/common/search/index.d.ts +2 -0
  63. package/dist/components/common/search/search.d.ts +16 -0
  64. package/dist/components/common/select/index.d.ts +3 -0
  65. package/dist/components/common/select/render.d.ts +32 -0
  66. package/dist/components/common/select/render2.d.ts +30 -0
  67. package/dist/components/common/select/renderForGrid.d.ts +30 -0
  68. package/dist/components/common/select/select.d.ts +30 -0
  69. package/dist/components/common/slider/index.d.ts +2 -0
  70. package/dist/components/common/slider/slider.d.ts +14 -0
  71. package/dist/components/common/spacer/index.d.ts +2 -0
  72. package/dist/components/common/spacer/spacer.d.ts +10 -0
  73. package/dist/components/common/switch/index.d.ts +4 -0
  74. package/dist/components/common/switch/switch.d.ts +22 -0
  75. package/dist/components/common/switch/switchGroup.d.ts +31 -0
  76. package/dist/components/common/textField/index.d.ts +2 -0
  77. package/dist/components/common/textField/textField.d.ts +23 -0
  78. package/dist/components/common/textarea/index.d.ts +2 -0
  79. package/dist/components/common/textarea/textarea.d.ts +19 -0
  80. package/dist/components/common/toggleButtonGroup/index.d.ts +2 -0
  81. package/dist/components/common/toggleButtonGroup/toggleButtonGroup.d.ts +28 -0
  82. package/dist/components/common/transferList/index.d.ts +2 -0
  83. package/dist/components/common/transferList/style.d.ts +1 -0
  84. package/dist/components/common/transferList/test.d.ts +2 -0
  85. package/dist/components/common/transferList/transferList.d.ts +18 -0
  86. package/dist/components/common/transferList/transferListWrapper.d.ts +17 -0
  87. package/dist/components/common/types.d.ts +21 -0
  88. package/dist/components/common/typograhpy/index.d.ts +2 -0
  89. package/dist/components/common/typograhpy/typography.d.ts +11 -0
  90. package/dist/components/common/utils/index.d.ts +3 -0
  91. package/dist/components/common/utils/numWords.d.ts +1 -0
  92. package/dist/components/common/utils/optionsFetcher.d.ts +11 -0
  93. package/dist/components/common/utils/utils.d.ts +3 -0
  94. package/dist/components/common/valueField/index.d.ts +1 -0
  95. package/dist/components/common/valueField/valueField.d.ts +11 -0
  96. package/dist/components/common/visaversa/index.d.ts +2 -0
  97. package/dist/components/common/visaversa/visaversa.d.ts +19 -0
  98. package/dist/components/custom/Remarks.d.ts +12 -0
  99. package/dist/components/custom/getCurrencySymbol.d.ts +1 -0
  100. package/dist/components/custom/messageBoxWrapper.d.ts +22 -0
  101. package/dist/components/custom/popupContext.d.ts +17 -0
  102. package/dist/components/custom/popupMessage.d.ts +9 -0
  103. package/dist/components/custom/popupReqest.d.ts +10 -0
  104. package/dist/components/custom/popupReqestOld.d.ts +9 -0
  105. package/dist/components/custom/style.d.ts +1 -0
  106. package/dist/components/customNotistack/index.d.ts +1 -0
  107. package/dist/components/customNotistack/snackbarConfig.d.ts +6 -0
  108. package/dist/components/customNotistack/snackbarContext.d.ts +13 -0
  109. package/dist/components/dataTable/atoms/index.d.ts +11 -0
  110. package/dist/components/dataTable/backdrop.d.ts +4 -0
  111. package/dist/components/dataTable/columnVisibility.d.ts +5 -0
  112. package/dist/components/dataTable/components/defaultHeaderColumnRenderer.d.ts +6 -0
  113. package/dist/components/dataTable/components/filters2/index.d.ts +4 -0
  114. package/dist/components/dataTable/components/filters2/multiValueTextField.d.ts +7 -0
  115. package/dist/components/dataTable/components/filters2/optionsFilter.d.ts +8 -0
  116. package/dist/components/dataTable/components/filters2/rangeFilter/dateRange.d.ts +7 -0
  117. package/dist/components/dataTable/components/filters2/rangeFilter/index.d.ts +1 -0
  118. package/dist/components/dataTable/components/filters2/rangeFilter/rangeSelector.d.ts +1 -0
  119. package/dist/components/dataTable/components/filters2/rangeFilter/valueRange.d.ts +7 -0
  120. package/dist/components/dataTable/components/filters2/style.d.ts +1 -0
  121. package/dist/components/dataTable/components/filters2/valueFilter.d.ts +9 -0
  122. package/dist/components/dataTable/components/index.d.ts +3 -0
  123. package/dist/components/dataTable/components/useCheckbox.d.ts +1 -0
  124. package/dist/components/dataTable/components/useSequence.d.ts +1 -0
  125. package/dist/components/dataTable/context.d.ts +4 -0
  126. package/dist/components/dataTable/focusableTableRow.d.ts +4 -0
  127. package/dist/components/dataTable/grid.d.ts +2 -0
  128. package/dist/components/dataTable/gridController.d.ts +7 -0
  129. package/dist/components/dataTable/gridWrapper.d.ts +18 -0
  130. package/dist/components/dataTable/headerCellWrapper.d.ts +4 -0
  131. package/dist/components/dataTable/index.d.ts +2 -0
  132. package/dist/components/dataTable/linerProgressBarSpacer.d.ts +1 -0
  133. package/dist/components/dataTable/stickyTableHead.d.ts +4 -0
  134. package/dist/components/dataTable/styledComponents/index.d.ts +3 -0
  135. package/dist/components/dataTable/styledComponents/menuItem.d.ts +4 -0
  136. package/dist/components/dataTable/styledComponents/slider.d.ts +4 -0
  137. package/dist/components/dataTable/styledComponents/textField.d.ts +4 -0
  138. package/dist/components/dataTable/tableActionToolbar.d.ts +5 -0
  139. package/dist/components/dataTable/tableFilterComponent.d.ts +14 -0
  140. package/dist/components/dataTable/tableFilterStatusBar.d.ts +7 -0
  141. package/dist/components/dataTable/tableHeaderToolbar.d.ts +2 -0
  142. package/dist/components/dataTable/tablePaginationToolbar.d.ts +2 -0
  143. package/dist/components/dataTable/types.d.ts +100 -0
  144. package/dist/components/dataTable/utils/attachAlignmentProps.d.ts +17 -0
  145. package/dist/components/dataTable/utils/attachCellComponentsToMetaData.d.ts +17 -0
  146. package/dist/components/dataTable/utils/attachFilterProps.d.ts +43 -0
  147. package/dist/components/dataTable/utils/dataFilterComponents.d.ts +1 -0
  148. package/dist/components/dataTable/utils/extractHiddenColumns.d.ts +2 -0
  149. package/dist/components/dataTable/utils/filterAction.d.ts +2 -0
  150. package/dist/components/dataTable/utils/index.d.ts +9 -0
  151. package/dist/components/dataTable/utils/sortColumnBySequence.d.ts +17 -0
  152. package/dist/components/dataTable/utils/splitActions.d.ts +12 -0
  153. package/dist/components/dataTable/utils/utils.d.ts +5 -0
  154. package/dist/components/dataTableStatic/components/defaultHeaderColumnRenderer.d.ts +6 -0
  155. package/dist/components/dataTableStatic/components/filters/globalFilter.d.ts +5 -0
  156. package/dist/components/dataTableStatic/components/filters/index.d.ts +1 -0
  157. package/dist/components/dataTableStatic/components/index.d.ts +3 -0
  158. package/dist/components/dataTableStatic/components/useCheckbox.d.ts +1 -0
  159. package/dist/components/dataTableStatic/grid.d.ts +42 -0
  160. package/dist/components/dataTableStatic/gridWrapper.d.ts +4 -0
  161. package/dist/components/dataTableStatic/index.d.ts +3 -0
  162. package/dist/components/dataTableStatic/tableHeaderToolbar.d.ts +2 -0
  163. package/dist/components/dataTableStatic/types.d.ts +124 -0
  164. package/dist/components/dataTableStatic/utils/attachCombineValidationFns.d.ts +57 -0
  165. package/dist/components/dataTableStatic/utils/attachMethodsToMetaData.d.ts +2 -0
  166. package/dist/components/dataTableStatic/utils/attachYupSchema.d.ts +57 -0
  167. package/dist/components/dataTableStatic/utils/index.d.ts +3 -0
  168. package/dist/components/derived/index.d.ts +4 -0
  169. package/dist/components/derived/inputMask/index.d.ts +2 -0
  170. package/dist/components/derived/inputMask/maskInputField.d.ts +12 -0
  171. package/dist/components/derived/inputMask/types.d.ts +10 -0
  172. package/dist/components/derived/numberFormat/index.d.ts +2 -0
  173. package/dist/components/derived/numberFormat/numberFormat.d.ts +13 -0
  174. package/dist/components/derived/passwordField/index.d.ts +2 -0
  175. package/dist/components/derived/passwordField/passwordField.d.ts +4 -0
  176. package/dist/components/derived/search/index.d.ts +1 -0
  177. package/dist/components/derived/search/search.d.ts +7 -0
  178. package/dist/components/derived/search/style.d.ts +1 -0
  179. package/dist/components/detailPopupGridData/GridDetailsWithHeader/detailsGridWithHeader.d.ts +3 -0
  180. package/dist/components/detailPopupGridData/GridDetailsWithHeader/index.d.ts +1 -0
  181. package/dist/components/detailPopupGridData/GridDetailsWithHeader/type.d.ts +26 -0
  182. package/dist/components/detailPopupGridData/index.d.ts +1 -0
  183. package/dist/components/dynamicForm/extendedTypes.d.ts +2 -0
  184. package/dist/components/dynamicForm/formWrapper.d.ts +3 -0
  185. package/dist/components/dynamicForm/groupUtils.d.ts +2 -0
  186. package/dist/components/dynamicForm/index.d.ts +5 -0
  187. package/dist/components/dynamicForm/simpleForm.d.ts +40 -0
  188. package/dist/components/dynamicForm/stepperForm/index.d.ts +1 -0
  189. package/dist/components/dynamicForm/stepperForm/stepperForm.d.ts +42 -0
  190. package/dist/components/dynamicForm/stepperForm/utils.d.ts +12 -0
  191. package/dist/components/dynamicForm/style.d.ts +1 -0
  192. package/dist/components/dynamicForm/tabsForm.d.ts +45 -0
  193. package/dist/components/dynamicForm/types.d.ts +132 -0
  194. package/dist/components/dynamicForm/typesFields.d.ts +92 -0
  195. package/dist/components/dynamicForm/utils/attachMethodsToMetaData.d.ts +4 -0
  196. package/dist/components/dynamicForm/utils/attachValuesToMetaData.d.ts +3 -0
  197. package/dist/components/dynamicForm/utils/constructINITValues.d.ts +4 -0
  198. package/dist/components/dynamicForm/utils/constructYupSchema.d.ts +3 -0
  199. package/dist/components/dynamicForm/utils/extendedFieldTypes.d.ts +2 -0
  200. package/dist/components/dynamicForm/utils/fieldRenderer.d.ts +2 -0
  201. package/dist/components/dynamicForm/utils/fixSequenceInMetaData.d.ts +2 -0
  202. package/dist/components/dynamicForm/utils/groupWiserenderer.d.ts +3 -0
  203. package/dist/components/dynamicForm/utils/validateMetaData.d.ts +3 -0
  204. package/dist/components/dynamicForm/utils/valueRenderer.d.ts +2 -0
  205. package/dist/components/dynamicForm/view/groupedView.d.ts +3 -0
  206. package/dist/components/dynamicForm/view/index.d.ts +1 -0
  207. package/dist/components/dynamicForm/view/simpleView.d.ts +3 -0
  208. package/dist/components/dynamicForm/view/types.d.ts +17 -0
  209. package/dist/components/dynamicForm/view/wrapper.d.ts +3 -0
  210. package/dist/components/fileUpload/failedFilesMetaData.d.ts +3 -0
  211. package/dist/components/fileUpload/fileUpload.d.ts +13 -0
  212. package/dist/components/fileUpload/fileViewerGrid.d.ts +8 -0
  213. package/dist/components/fileUpload/index.d.ts +3 -0
  214. package/dist/components/fileUpload/metaData.d.ts +5 -0
  215. package/dist/components/fileUpload/preView.d.ts +26 -0
  216. package/dist/components/fileUpload/style.d.ts +1 -0
  217. package/dist/components/fileUpload/type.d.ts +17 -0
  218. package/dist/components/fileUpload/uploadTarget.d.ts +3 -0
  219. package/dist/components/fileUpload/utils.d.ts +24 -0
  220. package/dist/components/formcomponent/filterform/filterForm.d.ts +20 -0
  221. package/dist/components/formcomponent/filterform/formMeta.d.ts +12 -0
  222. package/dist/components/formcomponent/filterform/index.d.ts +2 -0
  223. package/dist/components/formcomponent/filterform/type.d.ts +48 -0
  224. package/dist/components/formcomponent/index.d.ts +2 -0
  225. package/dist/components/formcomponent/masterDetails/index.d.ts +1 -0
  226. package/dist/components/formcomponent/masterDetails/masterDetailsForm.d.ts +27 -0
  227. package/dist/components/formcomponent/masterDetails/types.d.ts +9 -0
  228. package/dist/components/report/amountContext.d.ts +5 -0
  229. package/dist/components/report/components/cellWrapper.d.ts +4 -0
  230. package/dist/components/report/components/dateCell.d.ts +1 -0
  231. package/dist/components/report/components/dateTimeCell.d.ts +1 -0
  232. package/dist/components/report/components/defaultCell.d.ts +2 -0
  233. package/dist/components/report/components/footerCell.d.ts +20 -0
  234. package/dist/components/report/components/headerCell.d.ts +1 -0
  235. package/dist/components/report/components/index.d.ts +8 -0
  236. package/dist/components/report/components/numberCell.d.ts +2 -0
  237. package/dist/components/report/components/numberFooterCell.d.ts +1 -0
  238. package/dist/components/report/components/useSequence.d.ts +1 -0
  239. package/dist/components/report/export/excel.d.ts +4 -0
  240. package/dist/components/report/export/index.d.ts +1 -0
  241. package/dist/components/report/filter/defaultColumnFilter.d.ts +7 -0
  242. package/dist/components/report/filter/globalFilter.d.ts +5 -0
  243. package/dist/components/report/filter/index.d.ts +4 -0
  244. package/dist/components/report/filter/numberRangeColumnFilter.d.ts +8 -0
  245. package/dist/components/report/filter/selectColumnFilter.d.ts +9 -0
  246. package/dist/components/report/filter/sliderColumnFilter.d.ts +8 -0
  247. package/dist/components/report/filterComponent/drawerFilterComponent.d.ts +12 -0
  248. package/dist/components/report/filterComponent/filterComponent.d.ts +16 -0
  249. package/dist/components/report/filterComponent/index.d.ts +2 -0
  250. package/dist/components/report/filterComponent/tableFilterStatusBar.d.ts +5 -0
  251. package/dist/components/report/filters.d.ts +13 -0
  252. package/dist/components/report/filters2/index.d.ts +5 -0
  253. package/dist/components/report/filters2/multiValueTextField.d.ts +7 -0
  254. package/dist/components/report/filters2/optionsFilter.d.ts +8 -0
  255. package/dist/components/report/filters2/rangeFilter/amountRange.d.ts +7 -0
  256. package/dist/components/report/filters2/rangeFilter/dateRange.d.ts +7 -0
  257. package/dist/components/report/filters2/rangeFilter/index.d.ts +1 -0
  258. package/dist/components/report/filters2/rangeFilter/numberRange.d.ts +7 -0
  259. package/dist/components/report/filters2/rangeFilter/rangeSelector.d.ts +1 -0
  260. package/dist/components/report/filters2/rangeFilter/valueRange.d.ts +7 -0
  261. package/dist/components/report/filters2/style.d.ts +1 -0
  262. package/dist/components/report/filters2/valueDateFilter.d.ts +7 -0
  263. package/dist/components/report/filters2/valueFilter.d.ts +7 -0
  264. package/dist/components/report/gridParent.d.ts +2 -0
  265. package/dist/components/report/gridTable.d.ts +40 -0
  266. package/dist/components/report/index.d.ts +3 -0
  267. package/dist/components/report/serverReport/ReportWrapper.d.ts +14 -0
  268. package/dist/components/report/serverReport/serverGridParent.d.ts +2 -0
  269. package/dist/components/report/serverReport/serverGridTable.d.ts +37 -0
  270. package/dist/components/report/types.d.ts +17 -0
  271. package/dist/components/report/utils.d.ts +40 -0
  272. package/dist/components/styledComponent/button/button.d.ts +5 -0
  273. package/dist/components/styledComponent/button/index.d.ts +1 -0
  274. package/dist/components/styledComponent/checkbox/checkbox.d.ts +3 -0
  275. package/dist/components/styledComponent/checkbox/index.d.ts +1 -0
  276. package/dist/components/styledComponent/datetime/datePicker.d.ts +3 -0
  277. package/dist/components/styledComponent/datetime/dateTimePicker.d.ts +3 -0
  278. package/dist/components/styledComponent/datetime/index.d.ts +3 -0
  279. package/dist/components/styledComponent/datetime/styles.d.ts +71 -0
  280. package/dist/components/styledComponent/datetime/timePicker.d.ts +3 -0
  281. package/dist/components/styledComponent/index.d.ts +1 -0
  282. package/dist/components/styledComponent/input/index.d.ts +1 -0
  283. package/dist/components/styledComponent/input/input.d.ts +3 -0
  284. package/dist/components/styledComponent/inputLabel/index.d.ts +1 -0
  285. package/dist/components/styledComponent/inputLabel/inputLabel.d.ts +5 -0
  286. package/dist/components/styledComponent/tab/index.d.ts +1 -0
  287. package/dist/components/styledComponent/tab/tab.d.ts +5 -0
  288. package/dist/components/styledComponent/tabs/index.d.ts +1 -0
  289. package/dist/components/styledComponent/tabs/tabs.d.ts +5 -0
  290. package/dist/components/styledComponent/textfield/chipTextField.d.ts +5 -0
  291. package/dist/components/styledComponent/textfield/index.d.ts +4 -0
  292. package/dist/components/styledComponent/textfield/textField.d.ts +5 -0
  293. package/dist/components/styledComponent/textfield/textField2.d.ts +5 -0
  294. package/dist/components/styledComponent/textfield/textField3.d.ts +5 -0
  295. package/dist/components/styledComponent/toggleButtonGroup/index.d.ts +1 -0
  296. package/dist/components/styledComponent/toggleButtonGroup/toggleButtonGroup.d.ts +3 -0
  297. package/dist/components/styledComponent/toggleButtonGroup/toggleButtonGroup2.d.ts +2 -0
  298. package/dist/components/styledComponent/tooltip/index.d.ts +1 -0
  299. package/dist/components/styledComponent/tooltip/tooltip.d.ts +3 -0
  300. package/dist/components/tableCellComponents/ButtonRowCell.d.ts +1 -0
  301. package/dist/components/tableCellComponents/actionCellRenderer.d.ts +1 -0
  302. package/dist/components/tableCellComponents/cellWrapper.d.ts +6 -0
  303. package/dist/components/tableCellComponents/chipCellRenderer.d.ts +1 -0
  304. package/dist/components/tableCellComponents/currencyRowCellRenderer.d.ts +1 -0
  305. package/dist/components/tableCellComponents/dateDifferenceRowCellRender.d.ts +1 -0
  306. package/dist/components/tableCellComponents/dateRowCellRenderer.d.ts +1 -0
  307. package/dist/components/tableCellComponents/defaultRowCellRenderer.d.ts +1 -0
  308. package/dist/components/tableCellComponents/deleteRowCell.d.ts +1 -0
  309. package/dist/components/tableCellComponents/disableSelect.d.ts +1 -0
  310. package/dist/components/tableCellComponents/editableAutocomplete.d.ts +1 -0
  311. package/dist/components/tableCellComponents/editableCheckbox.d.ts +1 -0
  312. package/dist/components/tableCellComponents/editableDatePicker.d.ts +1 -0
  313. package/dist/components/tableCellComponents/editableDatetimePicker.d.ts +1 -0
  314. package/dist/components/tableCellComponents/editableMaskInputField.d.ts +1 -0
  315. package/dist/components/tableCellComponents/editableNumberFormat.d.ts +2 -0
  316. package/dist/components/tableCellComponents/editableSelect.d.ts +1 -0
  317. package/dist/components/tableCellComponents/editableTextField.d.ts +1 -0
  318. package/dist/components/tableCellComponents/iconRowCellRenderer.d.ts +1 -0
  319. package/dist/components/tableCellComponents/index.d.ts +1 -0
  320. package/dist/components/tableCellComponents/multipleValuesCellRenderer.d.ts +1 -0
  321. package/dist/components/tableCellComponents/percentageDifferenceCellRenderer.d.ts +1 -0
  322. package/dist/components/types.d.ts +28 -0
  323. package/dist/components/utils/attachMethodsToMetaData.d.ts +13 -0
  324. package/dist/components/utils/autoRefresh.d.ts +20 -0
  325. package/dist/components/utils/checkObjectAllKeyisEmpty.d.ts +17 -0
  326. package/dist/components/utils/circularProgressWithLabel.d.ts +7 -0
  327. package/dist/components/utils/export/exportExcelFile.d.ts +8 -0
  328. package/dist/components/utils/export/gridDataExport.d.ts +9 -0
  329. package/dist/components/utils/export/index.d.ts +2 -0
  330. package/dist/components/utils/functionRegistry.d.ts +17 -0
  331. package/dist/components/utils/import/gridDataImport.d.ts +8 -0
  332. package/dist/components/utils/import/importExcelFile.d.ts +4 -0
  333. package/dist/components/utils/import/index.d.ts +2 -0
  334. package/dist/components/utils/index.d.ts +7 -0
  335. package/dist/components/utils/jsonRuleEngine.d.ts +8 -0
  336. package/dist/components/utils/reportExport/ReportExportScreen.d.ts +15 -0
  337. package/dist/components/utils/reportExport/context/exportWorkerContext.d.ts +14 -0
  338. package/dist/components/utils/reportExport/exportFunctions/csvexport.d.ts +15 -0
  339. package/dist/components/utils/reportExport/exportFunctions/excelexport.d.ts +14 -0
  340. package/dist/components/utils/reportExport/exportFunctions/htmlexport.d.ts +15 -0
  341. package/dist/components/utils/reportExport/exportFunctions/metaData.d.ts +2 -0
  342. package/dist/components/utils/reportExport/exportFunctions/pdfexport.d.ts +18 -0
  343. package/dist/components/utils/reportExport/exportFunctions/textexport.d.ts +15 -0
  344. package/dist/components/utils/reportExport/exportFunctions/xmlexport.d.ts +15 -0
  345. package/dist/components/utils/reportExport/index.d.ts +2 -0
  346. package/dist/components/utils/utilFunctions/deriveData.d.ts +7 -0
  347. package/dist/components/utils/utilFunctions/function.d.ts +25 -0
  348. package/dist/components/utils/utilFunctions/index.d.ts +2 -0
  349. package/dist/index.d.ts +54 -0
  350. package/dist/index.js +2 -0
  351. package/dist/index.js.map +1 -0
  352. package/dist/packages/form/index.d.ts +8 -0
  353. package/dist/packages/form/src/atoms.d.ts +36 -0
  354. package/dist/packages/form/src/context.d.ts +3 -0
  355. package/dist/packages/form/src/field.d.ts +33 -0
  356. package/dist/packages/form/src/fieldArray.d.ts +20 -0
  357. package/dist/packages/form/src/form.d.ts +16 -0
  358. package/dist/packages/form/src/observer.d.ts +1 -0
  359. package/dist/packages/form/src/types.d.ts +120 -0
  360. package/dist/packages/form/src/util.d.ts +9 -0
  361. package/dist/pages_audit/auth/authContext.d.ts +6 -0
  362. package/dist/pages_audit/common/crud2/context.d.ts +20 -0
  363. package/dist/pages_audit/common/crud2/delete.d.ts +5 -0
  364. package/dist/pages_audit/common/crud2/formNew.d.ts +7 -0
  365. package/dist/pages_audit/common/crud2/formNewExistIfNotCreate.d.ts +14 -0
  366. package/dist/pages_audit/common/crud2/formViewEdit.d.ts +11 -0
  367. package/dist/pages_audit/common/crud2/gridCRUD.d.ts +16 -0
  368. package/dist/pages_audit/common/crud2/gridWrapper.d.ts +8 -0
  369. package/dist/pages_audit/common/crud2/index.d.ts +3 -0
  370. package/dist/pages_audit/common/crud2/simpleCRUD.d.ts +9 -0
  371. package/dist/pages_audit/common/dialogStyles.d.ts +1 -0
  372. package/dist/pages_audit/common/documents/api.d.ts +382 -0
  373. package/dist/pages_audit/common/documents/context.d.ts +1128 -0
  374. package/dist/pages_audit/common/documents/delete.d.ts +5 -0
  375. package/dist/pages_audit/common/documents/documentGridCRUD.d.ts +4 -0
  376. package/dist/pages_audit/common/documents/documentsTab.d.ts +10 -0
  377. package/dist/pages_audit/common/documents/download.d.ts +5 -0
  378. package/dist/pages_audit/common/documents/gridWrapper.d.ts +11 -0
  379. package/dist/pages_audit/common/documents/index.d.ts +1 -0
  380. package/dist/pages_audit/common/documents/metaData/bank/edit.d.ts +95 -0
  381. package/dist/pages_audit/common/documents/metaData/bank/grid.d.ts +58 -0
  382. package/dist/pages_audit/common/documents/metaData/bank/index.d.ts +3 -0
  383. package/dist/pages_audit/common/documents/metaData/bank/upload.d.ts +57 -0
  384. package/dist/pages_audit/common/documents/metaData/gst/analysis/edit.d.ts +73 -0
  385. package/dist/pages_audit/common/documents/metaData/gst/analysis/upload.d.ts +37 -0
  386. package/dist/pages_audit/common/documents/metaData/gst/grid.d.ts +48 -0
  387. package/dist/pages_audit/common/documents/metaData/gst/index.d.ts +5 -0
  388. package/dist/pages_audit/common/documents/metaData/gst/other/edit.d.ts +73 -0
  389. package/dist/pages_audit/common/documents/metaData/gst/other/upload.d.ts +37 -0
  390. package/dist/pages_audit/common/documents/metaData/itr/analysis/edit.d.ts +99 -0
  391. package/dist/pages_audit/common/documents/metaData/itr/analysis/upload.d.ts +61 -0
  392. package/dist/pages_audit/common/documents/metaData/itr/grid.d.ts +48 -0
  393. package/dist/pages_audit/common/documents/metaData/itr/index.d.ts +5 -0
  394. package/dist/pages_audit/common/documents/metaData/itr/others/edit.d.ts +73 -0
  395. package/dist/pages_audit/common/documents/metaData/itr/others/upload.d.ts +37 -0
  396. package/dist/pages_audit/common/documents/metaData/kyc/grid.d.ts +48 -0
  397. package/dist/pages_audit/common/documents/metaData/kyc/index.d.ts +5 -0
  398. package/dist/pages_audit/common/documents/metaData/kyc/legal/edit.d.ts +73 -0
  399. package/dist/pages_audit/common/documents/metaData/kyc/legal/upload.d.ts +37 -0
  400. package/dist/pages_audit/common/documents/metaData/kyc/management/edit.d.ts +73 -0
  401. package/dist/pages_audit/common/documents/metaData/kyc/management/upload.d.ts +37 -0
  402. package/dist/pages_audit/common/documents/metaData/others/edit.d.ts +73 -0
  403. package/dist/pages_audit/common/documents/metaData/others/grid.d.ts +48 -0
  404. package/dist/pages_audit/common/documents/metaData/others/index.d.ts +3 -0
  405. package/dist/pages_audit/common/documents/metaData/others/upload.d.ts +37 -0
  406. package/dist/pages_audit/common/documents/metaData/tabs/index.d.ts +20 -0
  407. package/dist/pages_audit/common/documents/style.d.ts +1 -0
  408. package/dist/pages_audit/common/documents/update.d.ts +8 -0
  409. package/dist/pages_audit/common/documents/upload.d.ts +6 -0
  410. package/dist/pages_audit/common/documents/verify.d.ts +5 -0
  411. package/dist/pages_audit/common/documents/view.d.ts +18 -0
  412. package/dist/pages_audit/common/download.d.ts +1 -0
  413. package/dist/pages_audit/common/index.d.ts +4 -0
  414. package/dist/pages_audit/common/invalidAction.d.ts +3 -0
  415. package/dist/pages_audit/common/serverGrid/context.d.ts +27 -0
  416. package/dist/pages_audit/common/serverGrid/index.d.ts +2 -0
  417. package/dist/pages_audit/common/serverGrid/serverGrid.d.ts +19 -0
  418. package/dist/pages_audit/common/tabStyles.d.ts +1 -0
  419. package/dist/pages_audit/common/transition.d.ts +2 -0
  420. package/dist/registry/rulesEngine/index.d.ts +8 -0
  421. package/package.json +130 -0
  422. package/resources.txt +52 -0
  423. package/rollup.config.mjs +71 -0
  424. package/tsconfig.json +25 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/components/utils/functionRegistry.ts","../src/registry/rulesEngine/index.ts","../src/components/utils/jsonRuleEngine.ts","../src/packages/form/src/atoms.ts","../src/packages/form/src/context.ts","../src/packages/form/src/util.ts","../src/packages/form/src/field.ts","../src/packages/form/src/form.ts","../src/packages/form/src/fieldArray.ts","../src/packages/form/src/observer.tsx","../src/components/utils/attachMethodsToMetaData.ts","../src/components/utils/checkObjectAllKeyisEmpty.ts","../src/components/utils/utilFunctions/function.ts","../src/components/utils/utilFunctions/deriveData.ts","../src/components/utils/export/exportExcelFile.ts","../src/components/styledComponent/button/button.tsx","../src/components/common/alert/alert.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/components/common/loader/textLoading/loadingText.tsx","../src/components/utils/export/gridDataExport.tsx","../src/components/utils/import/importExcelFile.ts","../src/components/dataTable/utils/attachAlignmentProps.ts","../src/components/tableCellComponents/cellWrapper.tsx","../src/components/tableCellComponents/defaultRowCellRenderer.tsx","../src/components/dataTable/utils/attachCellComponentsToMetaData.ts","../src/components/styledComponent/textfield/textField.tsx","../src/components/styledComponent/textfield/textField2.tsx","../src/components/styledComponent/textfield/textField3.tsx","../src/components/styledComponent/textfield/chipTextField.tsx","../src/components/styledComponent/checkbox/checkbox.ts","../src/cache/cache.ts","../src/cache/cacheClearRegistry.tsx","../src/cache/utils.tsx","../src/pages_audit/auth/authContext.tsx","../src/components/common/utils/optionsFetcher.ts","../src/components/common/utils/utils.ts","../src/components/common/utils/numWords.ts","../src/components/common/select/render.tsx","../src/components/dataTable/components/filters2/valueFilter.tsx","../src/components/common/select/render2.tsx","../src/components/dataTable/components/filters2/optionsFilter.tsx","../src/components/styledComponent/datetime/styles.ts","../src/components/styledComponent/datetime/datePicker.ts","../src/components/styledComponent/datetime/timePicker.ts","../src/components/styledComponent/datetime/dateTimePicker.ts","../src/components/dataTable/components/filters2/rangeFilter/dateRange.tsx","../src/components/styledComponent/inputLabel/inputLabel.tsx","../src/components/styledComponent/input/input.tsx","../src/components/dataTable/components/filters2/rangeFilter/valueRange.tsx","../src/components/dataTable/components/filters2/rangeFilter/rangeSelector.tsx","../src/components/dataTable/components/filters2/multiValueTextField.tsx","../src/components/dataTable/utils/attachFilterProps.ts","../src/components/dataTable/utils/extractHiddenColumns.ts","../src/components/dataTable/utils/sortColumnBySequence.ts","../src/components/dataTable/utils/splitActions.ts","../src/components/dataTable/utils/filterAction.ts","../src/components/dataTable/utils/dataFilterComponents.ts","../src/components/dataTableStatic/utils/attachMethodsToMetaData.ts","../src/components/dataTableStatic/utils/attachYupSchema.ts","../src/components/dataTableStatic/utils/attachCombineValidationFns.ts","../src/components/dataTableStatic/components/defaultHeaderColumnRenderer.tsx","../src/components/common/textField/textField.tsx","../src/components/derived/passwordField/passwordField.tsx","../src/components/derived/numberFormat/numberFormat.tsx","../src/components/derived/inputMask/maskInputField.tsx","../src/components/derived/search/style.ts","../src/components/derived/search/search.tsx","../src/components/dataTableStatic/components/filters/globalFilter.tsx","../src/components/dataTableStatic/components/useCheckbox.tsx","../src/components/dataTable/tableActionToolbar.tsx","../src/components/utils/autoRefresh.tsx","../src/components/utils/circularProgressWithLabel.tsx","../src/components/dataTable/tableFilterComponent.tsx","../src/components/dataTable/styledComponents/menuItem.tsx","../src/components/dataTable/styledComponents/textField.tsx","../src/components/dataTable/styledComponents/slider.tsx","../src/components/dataTable/columnVisibility.tsx","../src/components/dataTableStatic/tableHeaderToolbar.tsx","../src/components/dataTable/stickyTableHead.tsx","../src/components/dataTable/focusableTableRow.tsx","../src/components/dataTable/headerCellWrapper.tsx","../src/components/dataTable/tablePaginationToolbar.tsx","../src/components/dataTable/linerProgressBarSpacer.tsx","../src/components/dataTable/backdrop.tsx","../src/components/dataTable/tableFilterStatusBar.tsx","../src/components/dataTableStatic/grid.tsx","../src/components/dataTableStatic/gridWrapper.tsx","../src/components/fileUpload/metaData.ts","../src/components/fileUpload/failedFilesMetaData.ts","../src/components/fileUpload/style.ts","../src/components/fileUpload/uploadTarget.tsx","../src/components/fileUpload/utils.ts","../src/components/fileUpload/preView.tsx","../src/components/fileUpload/fileUpload.tsx","../src/components/fileUpload/fileViewerGrid.tsx","../src/components/utils/import/gridDataImport.tsx","../src/components/tableCellComponents/currencyRowCellRenderer.tsx","../src/components/common/autocomplete/autocomplete.tsx","../src/components/common/autocomplete/autocompleteGrid.tsx","../src/components/common/select/renderForGrid.tsx","../src/components/tableCellComponents/editableMaskInputField.tsx","../src/components/tableCellComponents/editableNumberFormat.tsx","../src/components/tableCellComponents/multipleValuesCellRenderer.tsx","../src/components/common/checkbox/checkbox.tsx","../src/components/common/checkbox/checkboxGroup.tsx","../src/components/tableCellComponents/editableCheckbox.tsx","../src/components/tableCellComponents/ButtonRowCell.tsx","../src/components/tableCellComponents/index.ts","../src/components/tableCellComponents/dateRowCellRenderer.tsx","../src/components/tableCellComponents/iconRowCellRenderer.tsx","../src/components/tableCellComponents/editableAutocomplete.tsx","../src/components/tableCellComponents/editableSelect.tsx","../src/components/tableCellComponents/editableTextField.tsx","../src/components/tableCellComponents/actionCellRenderer.tsx","../src/components/tableCellComponents/dateDifferenceRowCellRender.tsx","../src/components/tableCellComponents/chipCellRenderer.tsx","../src/components/tableCellComponents/deleteRowCell.tsx","../src/components/tableCellComponents/percentageDifferenceCellRenderer.tsx","../src/components/tableCellComponents/editableDatetimePicker.tsx","../src/components/tableCellComponents/editableDatePicker.tsx","../src/components/tableCellComponents/disableSelect.tsx","../src/components/dynamicForm/utils/fieldRenderer.tsx","../src/components/dynamicForm/utils/valueRenderer.tsx","../src/components/dynamicForm/utils/groupWiserenderer.tsx","../src/components/dynamicForm/utils/constructINITValues.ts","../src/components/dynamicForm/utils/constructYupSchema.ts","../src/components/dynamicForm/utils/attachMethodsToMetaData.ts","../src/components/dynamicForm/utils/extendedFieldTypes.ts","../src/components/dynamicForm/utils/fixSequenceInMetaData.ts","../src/components/dynamicForm/style.ts","../src/components/dynamicForm/groupUtils.tsx","../src/components/dynamicForm/stepperForm/utils.ts","../src/components/dynamicForm/stepperForm/stepperForm.tsx","../src/components/dynamicForm/simpleForm.tsx","../src/components/dynamicForm/tabsForm.tsx","../src/components/dynamicForm/extendedTypes.ts","../src/components/dynamicForm/formWrapper.tsx","../src/components/dataTable/context.tsx","../src/components/dataTable/components/defaultHeaderColumnRenderer.tsx","../src/components/dataTable/components/useCheckbox.tsx","../src/components/dataTable/tableHeaderToolbar.tsx","../src/components/dataTable/grid.tsx","../src/components/dataTable/gridController.tsx","../src/components/dataTable/utils/utils.ts","../src/components/dataTable/gridWrapper.tsx","../src/components/common/loaderPaper/loadinPaper.tsx","../src/components/common/loaderPaper/fullloader.tsx","../src/components/styledComponent/tooltip/tooltip.tsx","../src/components/common/printButton/printButton.tsx","../src/components/custom/style.ts","../src/components/custom/Remarks.tsx","../src/components/custom/messageBoxWrapper.tsx","../src/components/custom/popupReqest.tsx","../src/components/custom/popupContext.tsx","../src/components/custom/popupMessage.tsx","../src/components/common/select/select.tsx","../src/components/common/arrayField/arrayField.tsx","../src/components/common/arrayField/style.ts","../src/components/common/arrayField/arrayField2.tsx","../src/components/common/arrayField/arrayFieldForDisplayValues.tsx","../src/components/dynamicForm/utils/attachValuesToMetaData.ts","../src/components/common/radio/radio.tsx","../src/components/common/switch/switch.tsx","../src/components/common/switch/switchGroup.tsx","../src/components/common/slider/slider.tsx","../src/components/common/datetime/datePicker.tsx","../src/components/common/datetime/timePicker.tsx","../src/components/common/datetime/datetimePicker.tsx","../src/components/common/rating/rating.tsx","../src/components/styledComponent/toggleButtonGroup/toggleButtonGroup.ts","../src/components/common/toggleButtonGroup/toggleButtonGroup.tsx","../src/components/common/spacer/spacer.tsx","../src/components/common/autocomplete/render.tsx","../src/components/common/visaversa/visaversa.tsx","../src/components/common/dataTable/components/actionCell.tsx","../src/components/common/dataTable/components/footerCell.tsx","../src/components/common/dataTable/components/defaultCell.tsx","../src/components/common/dataTable/components/rowContext.tsx","../src/components/common/dataTable/components/textFieldCell.tsx","../src/components/common/dataTable/components/NumberCell.tsx","../src/components/common/dataTable/components/selectFieldCell.tsx","../src/components/common/dataTable/components/visaversa.tsx","../src/components/common/dataTable/components/dateCell.tsx","../src/components/common/dataTable/utils/methods.tsx","../src/components/common/dataTable/utils/index.tsx","../src/components/common/dataTable/components/headerCell2.tsx","../src/components/common/dataTable/components/useCheckbox.tsx","../src/components/common/dataTable/gridTable.tsx","../src/components/common/dataTable/gridParent.tsx","../src/components/common/typograhpy/typography.tsx","../src/components/formcomponent/filterform/filterForm.tsx","../src/components/formcomponent/filterform/formMeta.tsx","../src/components/dynamicForm/utils/validateMetaData.ts","../src/components/formcomponent/masterDetails/masterDetailsForm.tsx","../src/pages_audit/common/crud2/context.tsx","../src/pages_audit/common/crud2/formNew.tsx","../src/pages_audit/common/crud2/formViewEdit.tsx","../src/pages_audit/common/crud2/delete.tsx","../src/pages_audit/common/crud2/gridWrapper.tsx","../src/pages_audit/common/documents/metaData/tabs/index.ts","../src/pages_audit/common/documents/metaData/bank/edit.ts","../src/pages_audit/common/documents/metaData/bank/grid.ts","../src/pages_audit/common/documents/metaData/bank/upload.ts","../src/pages_audit/common/documents/metaData/gst/analysis/edit.ts","../src/pages_audit/common/documents/metaData/gst/grid.ts","../src/pages_audit/common/documents/metaData/gst/analysis/upload.ts","../src/pages_audit/common/documents/metaData/gst/other/upload.ts","../src/pages_audit/common/documents/metaData/gst/other/edit.ts","../src/pages_audit/common/documents/metaData/itr/analysis/edit.ts","../src/pages_audit/common/documents/metaData/itr/grid.ts","../src/pages_audit/common/documents/metaData/itr/analysis/upload.ts","../src/pages_audit/common/documents/metaData/itr/others/edit.ts","../src/pages_audit/common/documents/metaData/itr/others/upload.ts","../src/pages_audit/common/documents/metaData/kyc/management/edit.ts","../src/pages_audit/common/documents/metaData/kyc/grid.ts","../src/pages_audit/common/documents/metaData/kyc/management/upload.ts","../src/pages_audit/common/documents/metaData/kyc/legal/edit.ts","../src/pages_audit/common/documents/metaData/kyc/legal/upload.ts","../src/pages_audit/common/documents/metaData/others/edit.ts","../src/pages_audit/common/documents/metaData/others/grid.ts","../src/pages_audit/common/documents/metaData/others/upload.ts","../src/pages_audit/common/documents/api.ts","../src/pages_audit/common/documents/context.tsx","../src/pages_audit/common/documents/gridWrapper.tsx","../src/pages_audit/common/documents/delete.tsx","../src/pages_audit/common/documents/verify.tsx","../src/pages_audit/common/documents/update.tsx","../src/pages_audit/common/documents/upload.tsx","../src/pages_audit/common/download.ts","../src/pages_audit/common/documents/download.tsx","../src/pages_audit/common/documents/view.tsx","../src/pages_audit/common/invalidAction.tsx","../src/pages_audit/common/documents/documentGridCRUD.tsx","../src/pages_audit/common/documents/style.ts","../src/pages_audit/common/documents/documentsTab.tsx","../src/pages_audit/common/crud2/formNewExistIfNotCreate.tsx","../src/pages_audit/common/crud2/simpleCRUD.tsx","../src/pages_audit/common/dialogStyles.tsx","../src/pages_audit/common/crud2/gridCRUD.tsx","../src/pages_audit/common/serverGrid/context.tsx","../src/pages_audit/common/serverGrid/serverGrid.tsx","../src/pages_audit/common/transition.tsx","../src/pages_audit/common/tabStyles.ts","../src/components/styledComponent/tab/tab.tsx","../src/components/styledComponent/tabs/tabs.tsx","../src/components/customNotistack/snackbarContext.tsx","../src/components/detailPopupGridData/GridDetailsWithHeader/detailsGridWithHeader.tsx","../src/components/report/components/headerCell.tsx","../src/components/report/components/cellWrapper.tsx","../src/components/report/components/defaultCell.tsx","../src/components/custom/getCurrencySymbol.tsx","../src/components/report/amountContext.tsx","../src/components/report/components/footerCell.tsx","../src/components/report/filter/defaultColumnFilter.tsx","../src/components/report/components/useSequence.tsx","../src/components/report/filter/globalFilter.tsx","../src/components/report/filterComponent/tableFilterStatusBar.tsx","../src/components/report/filterComponent/filterComponent.tsx","../src/components/utils/reportExport/exportFunctions/pdfexport.ts","../src/components/utils/reportExport/exportFunctions/excelexport.ts","../src/components/utils/reportExport/exportFunctions/csvexport.ts","../src/components/utils/reportExport/exportFunctions/textexport.ts","../src/components/utils/reportExport/exportFunctions/htmlexport.ts","../src/components/utils/reportExport/exportFunctions/xmlexport.ts","../src/components/utils/reportExport/context/exportWorkerContext.tsx","../src/components/report/components/dateTimeCell.tsx","../src/components/report/components/dateCell.tsx","../src/components/utils/reportExport/exportFunctions/metaData.tsx","../src/components/utils/reportExport/ReportExportScreen.tsx","../src/components/report/filterComponent/drawerFilterComponent.tsx","../src/components/report/gridTable.tsx","../src/components/report/filters.tsx","../src/components/report/filters2/valueFilter.tsx","../src/components/report/filters2/optionsFilter.tsx","../src/components/report/filters2/rangeFilter/amountRange.tsx","../src/components/report/filters2/rangeFilter/dateRange.tsx","../src/components/report/filters2/rangeFilter/numberRange.tsx","../src/components/report/filters2/rangeFilter/valueRange.tsx","../src/components/report/filters2/rangeFilter/rangeSelector.tsx","../src/components/report/filters2/multiValueTextField.tsx","../src/components/report/filters2/valueDateFilter.tsx","../src/components/report/utils.ts","../src/components/report/gridParent.tsx","../src/components/report/filter/numberRangeColumnFilter.tsx","../src/components/report/filter/selectColumnFilter.tsx","../src/components/report/filter/sliderColumnFilter.tsx","../src/components/report/components/numberCell.tsx","../src/components/report/components/numberFooterCell.tsx","../src/components/report/serverReport/serverGridTable.tsx","../src/components/report/serverReport/serverGridParent.tsx","../src/components/report/serverReport/ReportWrapper.tsx","../src/components/common/autocomplete/virtualized.tsx","../src/components/common/textarea/textarea.tsx","../src/components/common/hidden/hidden.tsx","../src/components/common/transferList/style.ts","../src/components/common/transferList/transferList.tsx","../src/components/common/transferList/transferListWrapper.tsx","../src/components/common/search/search.tsx","../src/components/common/formbutton/formbutton.tsx","../src/components/common/valueField/valueField.tsx"],"sourcesContent":["const initializeFunctionRegistry = () => {\r\n const fns = new Map<string, Function>();\r\n const registerFn = (fnName: string, fn: Function) => {\r\n if (typeof fn === \"function\") {\r\n //commented this code so we can replace function\r\n // if (fns.has(fnName)) {\r\n // return false;\r\n // }\r\n fns.set(fnName, fn);\r\n return true;\r\n }\r\n return false;\r\n };\r\n const unregisterFn = (fnName: string) => {\r\n if (fns.has(fnName)) {\r\n fns.delete(fnName);\r\n }\r\n };\r\n const getFn = (fnName: string, defaultValue: Function | undefined) => {\r\n if (fns.has(fnName)) {\r\n return fns.get(fnName);\r\n }\r\n return defaultValue;\r\n };\r\n return { registerFn, unregisterFn, getFn };\r\n};\r\n\r\nexport const singletonFunctionRegisrationFactory = initializeFunctionRegistry();\r\nexport type singletonFunctionRegisrationFactoryType = ReturnType<\r\n typeof initializeFunctionRegistry\r\n>;\r\n\r\nexport const singletonFunctionRegisrationFactoryForTableCells =\r\n initializeFunctionRegistry();\r\n","import { isEqual, isBefore, isAfter } from \"date-fns\";\r\n\r\nexport const greaterThanString = (factValue, jsonValue) => {\r\n return Number.parseFloat(factValue) > Number.parseFloat(jsonValue);\r\n};\r\n\r\nexport const greaterThanInclusiveString = (factValue, jsonValue) => {\r\n return Number.parseFloat(factValue) >= Number.parseFloat(jsonValue);\r\n};\r\n\r\nexport const lessThanString = (factValue, jsonValue) => {\r\n return Number.parseFloat(factValue) < Number.parseFloat(jsonValue);\r\n};\r\n\r\nexport const lessThanInclusiveString = (factValue, jsonValue) => {\r\n return Number.parseFloat(factValue) <= Number.parseFloat(jsonValue);\r\n};\r\n\r\nexport const geaterThanDate = (factValue, jsonValue) => {\r\n return isAfter(factValue, jsonValue);\r\n};\r\nexport const greaterThanInclusiveDate = (factValue, jsonValue) => {\r\n return isEqual(factValue, jsonValue) ? true : isAfter(factValue, jsonValue);\r\n};\r\nexport const lessThanDate = (factValue, jsonValue) => {\r\n return isBefore(factValue, jsonValue);\r\n};\r\nexport const lessThanInclusiveDate = (factValue, jsonValue) => {\r\n return isEqual(factValue, jsonValue) ? true : isBefore(factValue, jsonValue);\r\n};\r\n","import { Engine } from \"json-rules-engine\";\r\nimport { TopLevelCondition } from \"json-rules-engine\";\r\nimport { FormFieldAtomType, DependentValuesType } from \"packages/form\";\r\nimport {\r\n greaterThanString,\r\n greaterThanInclusiveString,\r\n lessThanInclusiveString,\r\n lessThanString,\r\n greaterThanInclusiveDate,\r\n geaterThanDate,\r\n lessThanDate,\r\n lessThanInclusiveDate,\r\n} from \"registry/rulesEngine\";\r\n\r\nexport interface CustomRuleType {\r\n conditions: TopLevelCondition;\r\n success: any;\r\n failure: any;\r\n}\r\n\r\nexport const ruleEngine =\r\n (rule: CustomRuleType) =>\r\n async (\r\n fieldData: FormFieldAtomType,\r\n dependentFields: DependentValuesType\r\n ) => {\r\n const { success, failure, conditions } = rule;\r\n let engine = new Engine();\r\n engine.addOperator(\"greaterThanInclusiveDate\", greaterThanInclusiveDate);\r\n engine.addOperator(\"geaterThanDate\", geaterThanDate);\r\n engine.addOperator(\"lessThanDate\", lessThanDate);\r\n engine.addOperator(\"lessThanInclusiveDate\", lessThanInclusiveDate);\r\n engine.addOperator(\"greaterThanString\", greaterThanString);\r\n engine.addOperator(\r\n \"greaterThanInclusiveString\",\r\n greaterThanInclusiveString\r\n );\r\n engine.addOperator(\"lessThanInclusiveString\", lessThanInclusiveString);\r\n engine.addOperator(\"lessThanString\", lessThanString);\r\n const extendRule = {\r\n conditions: conditions,\r\n event: {\r\n type: \"success\",\r\n },\r\n };\r\n engine.addRule(extendRule);\r\n const result = await engine.run({\r\n currentField: fieldData,\r\n dependentFields,\r\n });\r\n\r\n engine.stop();\r\n\r\n if (result.events.length > 0) {\r\n return success;\r\n } else {\r\n return failure;\r\n }\r\n };\r\n","import { atomFamily, selectorFamily, DefaultValue } from \"recoil\";\r\n\r\nimport {\r\n FormAtomType,\r\n FormFieldAtomType,\r\n FormArrayFieldRowsAtomType,\r\n FormFieldRegisterSelectorAttributes,\r\n FormFieldRegistryAtomType,\r\n DependentValuesType,\r\n SubscritionFieldsType,\r\n} from \"./types\";\r\n\r\nexport const atomKeys = {\r\n formAtom: \"formAtom\",\r\n formFieldAtom: \"formFieldAtom\",\r\n formArrayFieldRowsAtom: \"formArrayFieldRowsAtom\",\r\n formArrayFieldRegistryAtom: \"formArrayFieldRegistryAtom\",\r\n formFieldRegistryAtom: \"formFieldRegistryAtom\",\r\n formFieldRegisterSelector: \"formFieldRegisterSelector\",\r\n formFieldUnregisterSelector: \"formFieldUnregisterSelector\",\r\n formArrayFieldRegisterSelector: \"formArrayFieldRegisterSelector\",\r\n formArrayFieldUnregisterSelector: \"formArrayFieldUnregisterSelector\",\r\n subscribeToFormFieldsSelector: \"subscribeToFormFieldsSelector\",\r\n isFormArrayFieldRegistered: \"isFormArrayFieldRegistered\",\r\n formFieldsExcludedAtom: \"formFieldsExcludedAtom\",\r\n formFieldExcludeAddSelector: \"formFieldExcludeAddSelector\",\r\n formFieldExcludeRemoveSelector: \"formFieldExcludeRemoveSelector\",\r\n formFieldsErrorWatcherAtom: \"formFieldsErrorWatcherAtom\",\r\n formFieldsErrorWatcherAddSelector: \"formFieldsErrorWatcherAddSelector\",\r\n formFieldsErrorWatcherRemoveSelector: \"formFieldsErrorWatcherAddSelector\",\r\n};\r\n\r\nexport const formAtom = atomFamily<FormAtomType, string>({\r\n key: atomKeys.formAtom,\r\n default: {\r\n submitAttempt: 0,\r\n isSubmitting: false,\r\n submitSuccessful: false,\r\n serverSentError: \"\",\r\n serverSentErrorDetail: \"\",\r\n },\r\n});\r\n\r\nexport const formFieldAtom = atomFamily<FormFieldAtomType, string>({\r\n key: atomKeys.formFieldAtom,\r\n default: (fieldKey) => ({\r\n fieldKey: fieldKey ?? \"\",\r\n name: fieldKey ?? \"\",\r\n value: \"\",\r\n displayValue: \"\",\r\n touched: false,\r\n error: null,\r\n validationRunning: false,\r\n validate: null,\r\n excluded: false,\r\n readOnly: false,\r\n incomingMessage: null,\r\n skipValueUpdateFromCrossFieldWhenReadOnly: false,\r\n optionData: {},\r\n }),\r\n});\r\n\r\nexport const formFieldsErrorWatcherAtom = atomFamily<string[], string>({\r\n key: atomKeys.formFieldsErrorWatcherAtom,\r\n default: [],\r\n});\r\n\r\nexport const formFieldsErrorWatcherAddSelector = selectorFamily<string, string>(\r\n {\r\n key: atomKeys.formFieldsErrorWatcherAddSelector,\r\n set:\r\n (formName) =>\r\n ({ set, get }, fieldName) => {\r\n if (!(fieldName instanceof DefaultValue)) {\r\n const fields = get(formFieldsErrorWatcherAtom(formName));\r\n const valueExists = fields.indexOf(fieldName) > -1;\r\n if (!valueExists) {\r\n const newFields = [...fields, fieldName];\r\n set(formFieldsErrorWatcherAtom(formName), newFields);\r\n }\r\n }\r\n },\r\n get: (_) => () => {\r\n return \"\";\r\n },\r\n }\r\n);\r\n\r\nexport const formFieldsErrorWatcherRemoveSelector = selectorFamily<\r\n string,\r\n string\r\n>({\r\n key: atomKeys.formFieldsErrorWatcherRemoveSelector,\r\n set:\r\n (formName) =>\r\n ({ set, get }, fieldName) => {\r\n if (!(fieldName instanceof DefaultValue)) {\r\n const fields = get(formFieldsErrorWatcherAtom(formName));\r\n const index = fields.indexOf(fieldName);\r\n if (index > -1) {\r\n const newFields = [\r\n ...fields.slice(0, index),\r\n ...fields.slice(index + 1),\r\n ];\r\n set(formFieldsErrorWatcherAtom(formName), newFields);\r\n }\r\n }\r\n },\r\n get: (_) => () => {\r\n return \"\";\r\n },\r\n});\r\n\r\nexport const formFieldsExcludedAtom = atomFamily<string[], string>({\r\n key: atomKeys.formFieldsExcludedAtom,\r\n default: [],\r\n});\r\n\r\nexport const formFieldExcludeAddSelector = selectorFamily<string, string>({\r\n key: atomKeys.formFieldExcludeAddSelector,\r\n set:\r\n (formName) =>\r\n ({ set, get }, fieldName) => {\r\n if (!(fieldName instanceof DefaultValue)) {\r\n const fields = get(formFieldsExcludedAtom(formName));\r\n const valueExists = fields.indexOf(fieldName) > -1;\r\n if (!valueExists) {\r\n const newFields = [...fields, fieldName];\r\n set(formFieldsExcludedAtom(formName), newFields);\r\n }\r\n }\r\n },\r\n get: (_) => () => {\r\n return \"\";\r\n },\r\n});\r\nexport const formFieldExcludeRemoveSelector = selectorFamily<string, string>({\r\n key: atomKeys.formFieldExcludeAddSelector,\r\n set:\r\n (formName) =>\r\n ({ set, get }, fieldName) => {\r\n if (!(fieldName instanceof DefaultValue)) {\r\n const fields = get(formFieldsExcludedAtom(formName));\r\n const index = fields.indexOf(fieldName);\r\n if (index > -1) {\r\n const newFields = [\r\n ...fields.slice(0, index),\r\n ...fields.slice(index + 1),\r\n ];\r\n set(formFieldsExcludedAtom(formName), newFields);\r\n }\r\n }\r\n },\r\n get: (_) => () => {\r\n return \"\";\r\n },\r\n});\r\n\r\nexport const formFieldRegistryAtom = atomFamily<\r\n FormFieldRegistryAtomType,\r\n string\r\n>({\r\n key: atomKeys.formFieldRegistryAtom,\r\n default: [],\r\n});\r\n\r\nexport const formFieldRegisterSelector = selectorFamily<\r\n FormFieldRegisterSelectorAttributes,\r\n string\r\n>({\r\n key: atomKeys.formFieldRegisterSelector,\r\n set:\r\n (formName) =>\r\n ({ set, get }, newValue) => {\r\n if (!(newValue instanceof DefaultValue)) {\r\n const fields = get(formFieldRegistryAtom(formName));\r\n const valueExists = fields.indexOf(newValue.fieldName) > -1;\r\n if (!valueExists) {\r\n const newFields = [...fields, newValue.fieldName];\r\n set(formFieldRegistryAtom(formName), newFields);\r\n if (newValue.defaultValue !== null) {\r\n set(formFieldAtom(newValue.fieldName), (prev) => ({\r\n ...prev,\r\n ...newValue.defaultValue,\r\n }));\r\n }\r\n }\r\n }\r\n },\r\n get: (_) => () => {\r\n return { defaultValue: \"\", fieldName: \"\" };\r\n },\r\n});\r\n\r\nexport const formFieldUnregisterSelector = selectorFamily<string, string>({\r\n key: atomKeys.formFieldUnregisterSelector,\r\n set:\r\n (formName) =>\r\n ({ set, get, reset }, newValue) => {\r\n if (!(newValue instanceof DefaultValue)) {\r\n const fields = get(formFieldRegistryAtom(formName));\r\n const index = fields.indexOf(newValue);\r\n if (index > -1) {\r\n reset(formFieldAtom(newValue));\r\n const newFields = [\r\n ...fields.slice(0, index),\r\n ...fields.slice(index + 1),\r\n ];\r\n set(formFieldRegistryAtom(formName), newFields);\r\n }\r\n }\r\n },\r\n get: (_) => () => {\r\n return \"\";\r\n },\r\n});\r\n\r\nexport const formArrayFieldRowsAtom = atomFamily<\r\n FormArrayFieldRowsAtomType,\r\n string\r\n>({\r\n key: atomKeys.formArrayFieldRowsAtom,\r\n default: (fieldName) => ({\r\n fieldName: fieldName,\r\n templateFieldRows: [],\r\n lastInsertIndex: -1,\r\n resetFlag: false,\r\n excluded: false,\r\n }),\r\n dangerouslyAllowMutability: true,\r\n});\r\n\r\nexport const formArrayFieldRegistryAtom = atomFamily<string[], string>({\r\n key: atomKeys.formArrayFieldRegistryAtom,\r\n default: [],\r\n});\r\n\r\nexport const formArrayFieldRegisterSelector = selectorFamily<string, string>({\r\n key: atomKeys.formArrayFieldRegisterSelector,\r\n set:\r\n (formName) =>\r\n ({ set, get }, newValue) => {\r\n if (!(newValue instanceof DefaultValue)) {\r\n const fields = get(formArrayFieldRegistryAtom(formName));\r\n const valueExists = fields.indexOf(newValue) > -1;\r\n if (!valueExists) {\r\n const newFields = [...fields, newValue];\r\n set(formArrayFieldRegistryAtom(formName), newFields);\r\n }\r\n }\r\n },\r\n get: (_) => () => {\r\n return \"\";\r\n },\r\n});\r\n\r\nexport const formArrayFieldUnregisterSelector = selectorFamily<string, string>({\r\n key: atomKeys.formArrayFieldUnregisterSelector,\r\n set:\r\n (formName) =>\r\n ({ set, get, reset }, newValue) => {\r\n if (!(newValue instanceof DefaultValue)) {\r\n const fields = get(formArrayFieldRegistryAtom(formName));\r\n const index = fields.indexOf(newValue);\r\n if (index > -1) {\r\n reset(formArrayFieldRegistryAtom(newValue));\r\n const newFields = [\r\n ...fields.slice(0, index),\r\n ...fields.slice(index + 1),\r\n ];\r\n set(formArrayFieldRegistryAtom(formName), newFields);\r\n }\r\n }\r\n },\r\n get: (_) => () => {\r\n return \"\";\r\n },\r\n});\r\n\r\nexport const subscribeToFormFieldsSelector = selectorFamily<\r\n DependentValuesType,\r\n SubscritionFieldsType\r\n>({\r\n key: atomKeys.subscribeToFormFieldsSelector,\r\n get:\r\n (subscriptionFields) =>\r\n ({ get }) => {\r\n if (typeof subscriptionFields !== \"object\") {\r\n return {};\r\n }\r\n let fields = subscriptionFields.fields;\r\n if (fields === undefined) {\r\n fields = [];\r\n }\r\n if (typeof fields === \"string\") {\r\n fields = [fields];\r\n }\r\n let fieldValues: DependentValuesType = {};\r\n for (let field of fields) {\r\n if (typeof field === \"string\" && Boolean(field)) {\r\n let fieldState = get(\r\n formFieldAtom(`${subscriptionFields.formName}/${field}`)\r\n );\r\n fieldValues[field] = fieldState;\r\n }\r\n }\r\n return fieldValues;\r\n },\r\n});\r\n","import { createContext } from \"react\";\r\nimport { FormContextType } from \"./types\";\r\n\r\nexport const FormContext = createContext<FormContextType>({\r\n formName: \"FORM_NAME\",\r\n validationRun: \"onBlur\",\r\n resetFieldOnUnmount: true,\r\n initialValues: {},\r\n formState: {},\r\n defaultArrayFieldValues: {},\r\n});\r\nFormContext.displayName = \"FormContext\";\r\n","import { clone, toPath } from \"lodash-es\";\r\n\r\nimport * as yup from \"yup\";\r\nimport { FormFieldAtomType } from \"./types\";\r\n\r\n//Copied the following from Formik library\r\n\r\nexport const isString = (obj: any): obj is string =>\r\n Object.prototype.toString.call(obj) === \"[object String]\";\r\n\r\nexport const isObject = (obj: any): obj is Object =>\r\n obj !== null && typeof obj === \"object\";\r\n\r\nexport const isInteger = (obj: any): boolean =>\r\n String(Math.floor(Number(obj))) === obj;\r\n\r\nexport function getIn(\r\n obj: any,\r\n key: string | string[],\r\n def?: any,\r\n p: number = 0\r\n) {\r\n const path = toPath(key);\r\n while (obj && p < path.length) {\r\n obj = obj[path[p++]];\r\n }\r\n return obj === undefined ? def : obj;\r\n}\r\n\r\nexport function setIn(obj: any, path: string, value: any): any {\r\n let res: any = clone(obj); // this keeps inheritance when obj is a class\r\n let resVal: any = res;\r\n let i = 0;\r\n let pathArray = toPath(path);\r\n\r\n for (; i < pathArray.length - 1; i++) {\r\n const currentPath: string = pathArray[i];\r\n let currentObj: any = getIn(obj, pathArray.slice(0, i + 1));\r\n\r\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\r\n resVal = resVal[currentPath] = clone(currentObj);\r\n } else {\r\n const nextPath: string = pathArray[i + 1];\r\n resVal = resVal[currentPath] =\r\n isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\r\n }\r\n }\r\n\r\n // Return original object if new value is the same as current\r\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\r\n return obj;\r\n }\r\n\r\n if (value === undefined) {\r\n delete resVal[pathArray[i]];\r\n } else {\r\n resVal[pathArray[i]] = value;\r\n }\r\n\r\n // If the path array has a single element, the loop did not run.\r\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\r\n if (i === 0 && value === undefined) {\r\n delete res[pathArray[i]];\r\n }\r\n\r\n return res;\r\n}\r\n\r\nconst validationConfig = {\r\n abortEarly: false,\r\n strict: false,\r\n};\r\n\r\nexport const yupValidationHelper =\r\n (\r\n schema: yup.AnyObjectSchema | yup.StringSchema<any> | yup.NumberSchema<any>\r\n ) =>\r\n async (field: FormFieldAtomType) => {\r\n const { value } = field;\r\n try {\r\n await schema.validate(\r\n typeof value === \"string\" ? (value || \"\").trim() : value,\r\n validationConfig\r\n );\r\n return null;\r\n } catch (e: any) {\r\n if (e instanceof yup.ValidationError) {\r\n return e.errors[0];\r\n }\r\n return e.message;\r\n }\r\n };\r\n\r\nexport const yupReachAndValidate = (\r\n schema: yup.AnyObjectSchema | undefined,\r\n path: string\r\n) => {\r\n if (typeof schema === \"object\") {\r\n try {\r\n let fieldSchema = yup.reach(schema, path);\r\n return async (field: FormFieldAtomType) => {\r\n return await yupValidationHelper(fieldSchema)(field);\r\n };\r\n } catch (e) {\r\n return undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n};\r\n","import { useContext, useRef, useEffect, useCallback } from \"react\";\r\nimport {\r\n useRecoilState,\r\n useSetRecoilState,\r\n useRecoilValue,\r\n useRecoilCallback,\r\n} from \"recoil\";\r\nimport {\r\n formAtom,\r\n formFieldAtom,\r\n formFieldRegistryAtom,\r\n formFieldRegisterSelector,\r\n formFieldUnregisterSelector,\r\n subscribeToFormFieldsSelector,\r\n formFieldExcludeAddSelector,\r\n formFieldExcludeRemoveSelector,\r\n formFieldsErrorWatcherAddSelector,\r\n formFieldsErrorWatcherRemoveSelector,\r\n} from \"./atoms\";\r\nimport {\r\n FormFieldAtomType,\r\n FormFieldRegistryAtomType,\r\n UseFieldHookProps,\r\n FormFieldRegisterSelectorAttributes,\r\n InitialValuesType,\r\n PostValidationSetCrossFieldValuesFnType,\r\n ValidateFnType,\r\n SchemaValidateFnType,\r\n DependentValuesType,\r\n} from \"./types\";\r\nimport { FormContext } from \"./context\";\r\nimport { getIn, yupReachAndValidate } from \"./util\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const useField = ({\r\n fieldKey,\r\n name,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n shouldExclude,\r\n isReadOnly,\r\n postValidationSetCrossFieldValues,\r\n runPostValidationHookAlways,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n runExternalFunction,\r\n onFormDataChange,\r\n}: UseFieldHookProps) => {\r\n //formContext provides formName for scoping of fields, and initialValue for the field\r\n const formContext = useContext(FormContext);\r\n //formState provides will be used to determine if form is submitting\r\n const formState = useRecoilValue(formAtom(formContext.formName));\r\n //fieldKeyRef used to inititalize fieldKey, if fieldKey is not passed\r\n //fieldName will be used to determine fieldKey, fieldKey will be used to\r\n //access atom from recoil storing field state\r\n const fieldKeyRef = useRef(\r\n Boolean(fieldKey)\r\n ? `${formContext.formName}/${fieldKey}`\r\n : `${formContext.formName}/${name}`\r\n );\r\n //dependent fields change transform for array values\r\n\r\n const dependentFieldsRef = useRef<string | string[] | undefined>(\r\n \"DO_NOT_CHANGE_THIS_VALUE_I_WILL_FIRE_YOU\"\r\n );\r\n if (\r\n dependentFieldsRef.current === \"DO_NOT_CHANGE_THIS_VALUE_I_WILL_FIRE_YOU\"\r\n ) {\r\n //@ts-ignore\r\n dependentFieldsRef.current = transformDependentFields(\r\n fieldKey,\r\n dependentFields\r\n );\r\n }\r\n //fieldData atom stores current field state\r\n const [fieldData, setFieldData] = useRecoilState<FormFieldAtomType>(\r\n formFieldAtom(fieldKeyRef.current)\r\n );\r\n const { t } = useTranslation();\r\n //This effect will update fieldName, in case of arrayField, when fields array index postion\r\n //updates. ie. arrayFieldName[current-index].fieldName - here currentIndex represents\r\n //fields current postion in the arrayField\r\n useEffect(() => {\r\n if (name.indexOf(`${formContext.formName}/`) === 0) {\r\n setFieldData((currVal) => ({\r\n ...currVal,\r\n name: name,\r\n }));\r\n } else {\r\n //remove else if any issue comes up in form - we are putting it here to fix array field issue\r\n setFieldData((currVal) => ({\r\n ...currVal,\r\n name: `${formContext.formName}/${name}`,\r\n }));\r\n }\r\n }, [name, setFieldData, formContext.formName]);\r\n\r\n //fieldDataRef will store current reference of fieldState and will provide latest value to\r\n //onChange and onBlur handlers when the memozied version of handlers are passed as props\r\n //shaving off rerenders.\r\n const fieldDataRef = useRef<FormFieldAtomType>(fieldData);\r\n fieldDataRef.current = fieldData;\r\n //registerField function registers the currentField to the fields registry if not registered,\r\n //and keeping track of all the active fields in the form\r\n const registerField = useSetRecoilState(\r\n formFieldRegisterSelector(formContext.formName)\r\n );\r\n //unregisterField function unregistered the currentField from the fields registry\r\n const unregisterField = useSetRecoilState(\r\n formFieldUnregisterSelector(formContext.formName)\r\n );\r\n\r\n //This effect will register and unregister fields when they mount and unmount\r\n //set initial value of the field, if initial value is provided.\r\n //If an option is set not resetField on unmount unregister will not be called.\r\n\r\n //Cannot add postValidationSetCrossFieldValues and handleBlur so have to disable esliting*/\r\n /* eslint-disable react-hooks/exhaustive-deps */\r\n useEffect(() => {\r\n const currentfield = fieldKeyRef.current;\r\n //Since our keys are prepended with formName, remove the formName and get the filedValue from\r\n //initialValues object\r\n\r\n //here we are getting default Value for arrayFields since they will be in object and applicalbe for each new added fielc\r\n //cannot be satisfied with initial values so defaultArrayFieldValue is used and it will be only set if there is no\r\n //initialValue avaible for this field\r\n const defaultValueForArrayField =\r\n typeof formContext.defaultArrayFieldValues === \"object\"\r\n ? getIn(\r\n formContext.defaultArrayFieldValues,\r\n currentfield\r\n .replace(`${formContext.formName}/`, \"\")\r\n .replace(/\\[\\d\\]/g, \"\"),\r\n null\r\n )\r\n : null;\r\n\r\n let defaultValue: any = null;\r\n const value =\r\n typeof formContext.initialValues === \"object\"\r\n ? getIn(\r\n formContext.initialValues,\r\n currentfield.replace(`${formContext.formName}/`, \"\"),\r\n null\r\n )\r\n : null;\r\n if (typeof value === \"boolean\" || Boolean(value)) {\r\n defaultValue = { value: value };\r\n } else if (Boolean(defaultValueForArrayField)) {\r\n defaultValue = { value: defaultValueForArrayField };\r\n }\r\n\r\n const registrationValue: FormFieldRegisterSelectorAttributes = {\r\n defaultValue: defaultValue,\r\n fieldName: currentfield,\r\n };\r\n registerField(registrationValue);\r\n\r\n if (Boolean(formContext.resetFieldOnUnmount) === true) {\r\n return () => {\r\n unregisterField(currentfield);\r\n };\r\n }\r\n }, [setFieldData, registerField, unregisterField, formContext]);\r\n\r\n //This hook with register validation method on field instance\r\n\r\n const isValidationFnRef = useRef(\r\n typeof validate === \"function\" ? true : false\r\n );\r\n\r\n //eslint is disabled since validate frequently changes and is not in our control\r\n //always enable and check if we are not excluding any other field\r\n /* eslint-disable react-hooks/exhaustive-deps */\r\n useEffect(() => {\r\n const extractedFieldName = fieldData.name.replace(\r\n `${formContext.formName}/`,\r\n \"\"\r\n );\r\n const wrappedValidation = wrapValidationMethod(\r\n yupReachAndValidate(formContext.validationSchema, extractedFieldName),\r\n validate,\r\n postValidationSetCrossFieldValues,\r\n runPostValidationHookAlways,\r\n runExternalFunction,\r\n onFormDataChange,\r\n fieldKey\r\n );\r\n if (typeof wrappedValidation === \"function\") {\r\n isValidationFnRef.current = true;\r\n setFieldData((currVal) => ({\r\n ...currVal,\r\n validate: wrappedValidation,\r\n dependentFields: dependentFieldsRef.current,\r\n skipValueUpdateFromCrossFieldWhenReadOnly: Boolean(\r\n skipValueUpdateFromCrossFieldWhenReadOnly\r\n ),\r\n }));\r\n } else {\r\n setFieldData((currVal) => ({\r\n ...currVal,\r\n dependentFields: dependentFieldsRef.current,\r\n skipValueUpdateFromCrossFieldWhenReadOnly: Boolean(\r\n skipValueUpdateFromCrossFieldWhenReadOnly\r\n ),\r\n }));\r\n }\r\n }, [\r\n setFieldData,\r\n formContext.formName,\r\n formContext.validationSchema,\r\n fieldData.name,\r\n ]);\r\n\r\n //Subscribe to cross fields values, provide an array of dependent field names,\r\n //this field will be rerendered when any of the provided dependent field's value updates.\r\n\r\n const addRemoveExcludedFields = useRecoilCallback(\r\n ({ set }) =>\r\n ({ fieldName, flag }) => {\r\n if (flag === \"add\") {\r\n set(formFieldExcludeAddSelector(formContext.formName), fieldName);\r\n } else if (flag === \"remove\") {\r\n set(formFieldExcludeRemoveSelector(formContext.formName), fieldName);\r\n }\r\n },\r\n [formContext.formName]\r\n );\r\n const addRemoveFieldsFromErrorWatcher = useRecoilCallback(\r\n ({ set }) =>\r\n ({ fieldName, flag }) => {\r\n if (flag === \"add\") {\r\n set(\r\n formFieldsErrorWatcherAddSelector(formContext.formName),\r\n fieldName\r\n );\r\n } else if (flag === \"remove\") {\r\n set(\r\n formFieldsErrorWatcherRemoveSelector(formContext.formName),\r\n fieldName\r\n );\r\n }\r\n }\r\n );\r\n\r\n const dependentFieldsState = useRecoilValue(\r\n subscribeToFormFieldsSelector({\r\n formName: formContext.formName,\r\n fields: dependentFieldsRef.current,\r\n })\r\n );\r\n const dependentFieldsStateRef = useRef(dependentFieldsState);\r\n dependentFieldsStateRef.current = dependentFieldsState;\r\n useEffect(() => {\r\n if (runValidationOnDependentFieldsChange === true) {\r\n handleValidation(fieldData, dependentFieldsState, true);\r\n }\r\n }, [dependentFieldsState]);\r\n\r\n // this determine if the field should be excluded\r\n const lastShouldExcludePromise = useRef<Promise<any> | null>(null);\r\n const lastIsReadOnlyPromise = useRef<Promise<any> | null>(null);\r\n useEffect(() => {\r\n if (typeof shouldExclude === \"function\") {\r\n const currentShouldExcludePromise = Promise.resolve(\r\n shouldExclude(\r\n fieldData,\r\n transformDependentFieldsState(dependentFieldsState),\r\n formContext.formState\r\n )\r\n );\r\n lastShouldExcludePromise.current = currentShouldExcludePromise;\r\n currentShouldExcludePromise.then((result) => {\r\n if (currentShouldExcludePromise === lastShouldExcludePromise.current) {\r\n if (result === true && fieldData.excluded === false) {\r\n setFieldData((old) => ({\r\n ...old,\r\n excluded: true,\r\n }));\r\n addRemoveExcludedFields({ fieldName: fieldData.name, flag: \"add\" });\r\n } else if (result === false && fieldData.excluded === true) {\r\n setFieldData((old) => ({\r\n ...old,\r\n excluded: false,\r\n }));\r\n addRemoveExcludedFields({\r\n fieldName: fieldData.name,\r\n flag: \"remove\",\r\n });\r\n }\r\n }\r\n });\r\n }\r\n if (typeof isReadOnly === \"function\") {\r\n const currentIsReadOnlyPromise = Promise.resolve(\r\n isReadOnly(\r\n fieldData,\r\n transformDependentFieldsState(dependentFieldsState),\r\n formContext.formState\r\n )\r\n );\r\n lastIsReadOnlyPromise.current = currentIsReadOnlyPromise;\r\n currentIsReadOnlyPromise.then((result) => {\r\n if (currentIsReadOnlyPromise === lastIsReadOnlyPromise.current) {\r\n if (result === true && fieldData.readOnly === false) {\r\n setFieldData((old) => ({\r\n ...old,\r\n readOnly: true,\r\n }));\r\n } else if (result === false && fieldData.readOnly === true) {\r\n setFieldData((old) => ({\r\n ...old,\r\n readOnly: false,\r\n }));\r\n }\r\n }\r\n });\r\n }\r\n if (Boolean(fieldData.error)) {\r\n addRemoveFieldsFromErrorWatcher({\r\n fieldName: fieldData.name,\r\n flag: \"add\",\r\n });\r\n } else {\r\n addRemoveFieldsFromErrorWatcher({\r\n fieldName: fieldData.name,\r\n flag: \"remove\",\r\n });\r\n }\r\n });\r\n const passCrossFieldMessage = useRecoilCallback(\r\n ({ snapshot, set }) =>\r\n (fieldsObj: InitialValuesType) => {\r\n const key = getFieldKeyForArray(fieldKey);\r\n const fieldsLoadable = snapshot.getLoadable(\r\n formFieldRegistryAtom(formContext.formName)\r\n );\r\n let fields: FormFieldRegistryAtomType = [];\r\n if (fieldsLoadable.state === \"hasValue\") {\r\n fields = fieldsLoadable.contents;\r\n }\r\n for (const field of Object.entries(fieldsObj)) {\r\n if (\r\n fields.indexOf(`${formContext.formName}/${key}${field[0]}`) >= 0\r\n ) {\r\n let result = snapshot.getLoadable(\r\n formFieldAtom(`${formContext.formName}/${key}${field[0]}`)\r\n );\r\n //we can skip update from cross field if the field is readOnly to prevent value overridden\r\n if (result.state === \"hasValue\") {\r\n let field = result.contents;\r\n if (\r\n field.readOnly &&\r\n field.skipValueUpdateFromCrossFieldWhenReadOnly\r\n ) {\r\n continue;\r\n }\r\n }\r\n set(\r\n formFieldAtom(`${formContext.formName}/${key}${field[0]}`),\r\n (old) => ({\r\n ...old,\r\n incomingMessage: { ...old.incomingMessage, ...field[1] },\r\n })\r\n );\r\n }\r\n }\r\n },\r\n [formContext.formName]\r\n );\r\n\r\n /**\r\n * Start of field Validation Logic\r\n * It will always run the validation against the latest value and if promise provides cancelFn\r\n * it will call cancel function and cancel the query\r\n */\r\n const whenToRunValidation = useRef(\r\n Boolean(validationRun)\r\n ? validationRun\r\n : Boolean(formContext.validationRun)\r\n ? formContext.validationRun\r\n : \"all\"\r\n );\r\n\r\n const lastValidationPromise = useRef<Promise<any> | null>(null);\r\n const lastValidationValue = useRef<any | null>(null);\r\n\r\n const handleValidation = useCallback(\r\n (\r\n data: FormFieldAtomType,\r\n dependentFieldsState: DependentValuesType,\r\n alwaysRun?: boolean,\r\n touchAndValidate?: boolean\r\n ) => {\r\n if (typeof fieldDataRef.current.validate !== \"function\") {\r\n return;\r\n }\r\n if (lastValidationValue.current === data.value && !!alwaysRun === false) {\r\n return;\r\n }\r\n setFieldData((old) => ({\r\n ...old,\r\n validationRunning: true,\r\n }));\r\n const currentPromise = Promise.resolve(\r\n fieldDataRef.current.validate(\r\n data,\r\n transformDependentFieldsState(dependentFieldsState),\r\n formContext.formState\r\n )\r\n );\r\n //@ts-ignore\r\n lastValidationValue.current = data.value;\r\n lastValidationPromise.current = currentPromise;\r\n currentPromise\r\n .then((result) => {\r\n if (lastValidationPromise.current === currentPromise) {\r\n const { error, crossFieldMessages, apiResult } = result;\r\n let finalResult;\r\n if (\r\n typeof error === \"string\" ||\r\n error === undefined ||\r\n error === null\r\n ) {\r\n finalResult = error;\r\n } else {\r\n finalResult = \"unkown error check console\";\r\n }\r\n if (!Boolean(touchAndValidate)) {\r\n setFieldData((old) => {\r\n return {\r\n ...old,\r\n validationRunning: false,\r\n error: finalResult,\r\n validationAPIResult: apiResult,\r\n };\r\n });\r\n } else {\r\n setFieldData((old) => {\r\n return {\r\n ...old,\r\n validationRunning: false,\r\n touched: true,\r\n error: finalResult,\r\n validationAPIResult: apiResult,\r\n };\r\n });\r\n }\r\n if (typeof crossFieldMessages === \"object\") {\r\n passCrossFieldMessage(crossFieldMessages);\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n if (lastValidationPromise.current === currentPromise) {\r\n let finalResult;\r\n if (err instanceof Error) {\r\n finalResult = err.message;\r\n } else {\r\n finalResult = err?.error_msg ?? \"unkown error type check console\";\r\n // finalResult = \"unkown error type check console\";\r\n }\r\n if (!Boolean(touchAndValidate)) {\r\n setFieldData((old) => {\r\n return {\r\n ...old,\r\n validationRunning: false,\r\n error: finalResult,\r\n validationAPIResult: err,\r\n };\r\n });\r\n } else {\r\n setFieldData((old) => {\r\n return {\r\n ...old,\r\n validationRunning: false,\r\n touched: true,\r\n error: finalResult,\r\n validationAPIResult: err,\r\n };\r\n });\r\n }\r\n }\r\n });\r\n },\r\n [setFieldData, passCrossFieldMessage]\r\n );\r\n /**\r\n * End of validation Logic\r\n */\r\n // //Run validation when dependent field changes\r\n // useEffect(()=> {\r\n\r\n // },[dependentFieldsState])\r\n\r\n const setTouched = useCallback(() => {\r\n setFieldData((currVal) => {\r\n if (currVal.touched) {\r\n return currVal;\r\n } else {\r\n return {\r\n ...currVal,\r\n touched: true,\r\n };\r\n }\r\n });\r\n }, [setFieldData]);\r\n\r\n const setIncomingMessage = useCallback(\r\n (value) => {\r\n setFieldData((currVal) => {\r\n return {\r\n ...currVal,\r\n incomingMessage: { ...currVal.incomingMessage, ...value },\r\n };\r\n });\r\n },\r\n [setFieldData]\r\n );\r\n const setDisplayValue = useCallback(\r\n (displayValue: any) => {\r\n setFieldData((currVal) => {\r\n return {\r\n ...currVal,\r\n displayValue: displayValue ?? currVal?.value,\r\n };\r\n });\r\n },\r\n [setFieldData]\r\n );\r\n const setValue = useCallback(\r\n (val: any, displayValue: any, alwaysRun?: boolean) => {\r\n if (!!alwaysRun === false) {\r\n setFieldData((currVal) => {\r\n if (currVal.value === val) {\r\n return currVal;\r\n } else {\r\n return {\r\n ...currVal,\r\n value: val,\r\n displayValue: displayValue ?? val,\r\n };\r\n }\r\n });\r\n } else {\r\n setFieldData((currVal) => {\r\n return {\r\n ...currVal,\r\n value: val,\r\n displayValue: displayValue ?? val,\r\n };\r\n });\r\n }\r\n },\r\n [setFieldData]\r\n );\r\n const setValueAsCB = useCallback(\r\n (val: any) => {\r\n setFieldData((currVal) => {\r\n let result;\r\n if (typeof val === \"function\") {\r\n result = val(currVal.value);\r\n } else {\r\n result = val;\r\n }\r\n const finalResult = {\r\n ...currVal,\r\n value: result,\r\n displayValue: result,\r\n touched: true,\r\n };\r\n return finalResult;\r\n });\r\n },\r\n [setFieldData]\r\n );\r\n const setErrorAsCB = useCallback(\r\n (val: any) => {\r\n setFieldData((currVal) => {\r\n let result;\r\n if (typeof val === \"function\") {\r\n result = val(currVal.error);\r\n } else {\r\n result = val;\r\n }\r\n const finalResult = {\r\n ...currVal,\r\n error: result,\r\n };\r\n return finalResult;\r\n });\r\n },\r\n [setFieldData]\r\n );\r\n const runValidation = useCallback(\r\n (mergeObj: any, alwaysRun?: boolean, touchAndValidate?: boolean) => {\r\n if (mergeObj) {\r\n handleValidation(\r\n { ...fieldDataRef.current, ...mergeObj },\r\n dependentFieldsStateRef.current,\r\n alwaysRun,\r\n touchAndValidate\r\n );\r\n } else {\r\n handleValidation(\r\n fieldDataRef.current,\r\n dependentFieldsStateRef.current,\r\n alwaysRun,\r\n touchAndValidate\r\n );\r\n }\r\n },\r\n []\r\n );\r\n\r\n //handleChange will be responsible for setting fieldValue when will be passed as a props to the\r\n //inputs, it can take event, date, number, string, boolean,\r\n //It will run validation if validationRun == 'onChange'\r\n const handleChange = useCallback(\r\n (\r\n eventOrTextValue:\r\n | React.ChangeEvent<any>\r\n | Date\r\n | string\r\n | number\r\n | boolean\r\n | any[],\r\n displayValue?: Date | string | number | boolean | any[]\r\n ) => {\r\n if (fieldDataRef.current !== null) {\r\n eventOrTextValue = eventOrTextValue ?? \"\";\r\n let val = eventOrTextValue;\r\n let displayVal = displayValue;\r\n if (\r\n !(\r\n eventOrTextValue instanceof Date ||\r\n typeof eventOrTextValue === \"string\" ||\r\n typeof eventOrTextValue === \"number\" ||\r\n typeof eventOrTextValue === \"boolean\" ||\r\n Array.isArray(eventOrTextValue)\r\n )\r\n ) {\r\n //Since React 17 we dont need this but commeting it incase any issues are faced\r\n // if (\r\n // (eventOrTextValue as React.ChangeEvent<any>) &&\r\n // (eventOrTextValue as React.ChangeEvent<any>).persist\r\n // ) {\r\n // (eventOrTextValue as React.ChangeEvent<any>).persist();\r\n // }\r\n const { type, value, checked, options, multiple } =\r\n eventOrTextValue.target;\r\n let parsed;\r\n val = /number|range/.test(type)\r\n ? ((parsed = parseFloat(value)), isNaN(parsed) ? \"\" : parsed)\r\n : /checkbox/.test(type)\r\n ? getValueForCheckbox(fieldDataRef.current.value, checked, value)\r\n : !!multiple\r\n ? getSelectedValues(options)\r\n : value;\r\n displayVal = /checkbox/.test(type)\r\n ? getValueForCheckbox(\r\n fieldDataRef.current.displayValue ?? \"00\",\r\n checked,\r\n displayValue\r\n )\r\n : displayValue;\r\n }\r\n setValue(val, displayVal);\r\n if (\r\n isValidationFnRef.current &&\r\n (whenToRunValidation.current === \"onChange\" ||\r\n whenToRunValidation.current === \"all\")\r\n ) {\r\n runValidation({ value: val });\r\n }\r\n }\r\n },\r\n [setValue, runValidation, formContext.validationRun]\r\n );\r\n\r\n //handleBlur will set touch property in field state to true for every field touched by user\r\n //It will run validation if validationRun == 'onBlur'\r\n const handleBlur = useCallback(async () => {\r\n if (fieldDataRef.current !== null) {\r\n setTouched();\r\n if (\r\n isValidationFnRef.current &&\r\n (whenToRunValidation.current === \"onBlur\" ||\r\n whenToRunValidation.current === \"all\")\r\n ) {\r\n runValidation({ touched: true });\r\n }\r\n }\r\n }, [setTouched, runValidation, formContext.validationRun]);\r\n\r\n const handleOptionValueExtraData = useCallback((data) => {\r\n setFieldData((currVal) => {\r\n return { ...currVal, optionData: data };\r\n });\r\n }, []);\r\n\r\n return {\r\n ...fieldData,\r\n formState: formContext.formState,\r\n whenToRunValidation: whenToRunValidation.current,\r\n isSubmitting: formState.isSubmitting,\r\n handleChange,\r\n handleBlur,\r\n setTouched,\r\n setValue,\r\n setValueAsCB,\r\n setErrorAsCB,\r\n setIncomingMessage,\r\n runValidation,\r\n dependentValues: dependentFieldsState,\r\n handleOptionValueExtraData,\r\n setDisplayValue, //for set only display value\r\n error: t(fieldData?.error ?? \"\"),\r\n };\r\n};\r\n\r\n//copied from formik\r\n\r\n// Checkbox helper that will provide an array if multiple checkboxes are present under same name\r\nfunction getValueForCheckbox(\r\n currentValue: string | any[],\r\n checked: boolean,\r\n valueProp: any\r\n) {\r\n // If the current value was a boolean, return a boolean\r\n if (typeof currentValue === \"boolean\") {\r\n return Boolean(checked);\r\n }\r\n\r\n // If the currentValue was not a boolean we want to return an array\r\n let currentArrayOfValues: any[] = [];\r\n let isValueInArray = false;\r\n let index = -1;\r\n\r\n if (!Array.isArray(currentValue)) {\r\n // eslint-disable-next-line eqeqeq\r\n if (!valueProp || valueProp == \"true\" || valueProp == \"false\") {\r\n return Boolean(checked);\r\n }\r\n } else {\r\n // If the current value is already an array, use it\r\n currentArrayOfValues = currentValue;\r\n index = currentValue.indexOf(valueProp);\r\n isValueInArray = index >= 0;\r\n }\r\n\r\n // If the checkbox was checked and the value is not already present in the aray we want to add the new value to the array of values\r\n if (checked && valueProp && !isValueInArray) {\r\n return currentArrayOfValues.concat(valueProp);\r\n }\r\n\r\n // If the checkbox was unchecked and the value is not in the array, simply return the already existing array of values\r\n if (!isValueInArray) {\r\n return currentArrayOfValues;\r\n }\r\n\r\n // If the checkbox was unchecked and the value is in the array, remove the value and return the array\r\n return currentArrayOfValues\r\n .slice(0, index)\r\n .concat(currentArrayOfValues.slice(index + 1));\r\n}\r\n\r\nfunction getSelectedValues(options: any[]) {\r\n return Array.from(options)\r\n .filter((el) => el.selected)\r\n .map((el) => el.value);\r\n}\r\n\r\n//Need to rethink this API - its too messy\r\nfunction wrapValidationMethod(\r\n schemaValidation?: typeof SchemaValidateFnType,\r\n validationFn?: typeof ValidateFnType,\r\n postValidationSetCrossFieldValuesFn?: typeof PostValidationSetCrossFieldValuesFnType,\r\n runPostValidationHookAlways?: boolean,\r\n runExternalFunction?: boolean,\r\n onFormDataChange?: any,\r\n fieldKey?: any\r\n) {\r\n if (\r\n typeof schemaValidation !== \"function\" &&\r\n typeof validationFn !== \"function\" &&\r\n typeof postValidationSetCrossFieldValuesFn !== \"function\" &&\r\n typeof onFormDataChange !== \"function\"\r\n ) {\r\n return undefined;\r\n }\r\n const shouldRunAlways = Boolean(runPostValidationHookAlways);\r\n if (!shouldRunAlways) {\r\n const wrapperFunction = async (\r\n field: any,\r\n dependentFieldsState: DependentValuesType,\r\n formState: any\r\n ) => {\r\n let errorMsg: any = null;\r\n let apiResult: any = null;\r\n let errorMsgObj: any = null;\r\n let crossFieldMessages: InitialValuesType | null | undefined;\r\n\r\n if (typeof schemaValidation === \"function\") {\r\n errorMsg = await schemaValidation(field, formState);\r\n }\r\n if (Boolean(errorMsg)) {\r\n return { error: errorMsg, crossFieldMessages: {}, apiResult };\r\n }\r\n if (typeof validationFn === \"function\") {\r\n errorMsgObj = await validationFn(\r\n field,\r\n dependentFieldsState,\r\n formState\r\n );\r\n if (typeof errorMsgObj === \"object\") {\r\n errorMsg = errorMsgObj.error;\r\n apiResult = errorMsgObj.apiResult;\r\n } else {\r\n errorMsg = errorMsgObj;\r\n }\r\n }\r\n if (Boolean(errorMsg)) {\r\n return { error: errorMsg, crossFieldMessages: {}, apiResult };\r\n }\r\n\r\n if (\r\n typeof onFormDataChange === \"function\" &&\r\n Boolean(runExternalFunction)\r\n ) {\r\n errorMsgObj = await onFormDataChange(\r\n fieldKey,\r\n field,\r\n dependentFieldsState,\r\n formState\r\n );\r\n if (typeof errorMsgObj === \"object\") {\r\n errorMsg = errorMsgObj.error;\r\n apiResult = errorMsgObj.apiResult;\r\n } else {\r\n errorMsg = errorMsgObj;\r\n }\r\n if (Boolean(errorMsg)) {\r\n return { error: errorMsg, crossFieldMessages: {}, apiResult };\r\n }\r\n }\r\n\r\n if (typeof postValidationSetCrossFieldValuesFn === \"function\") {\r\n crossFieldMessages = await postValidationSetCrossFieldValuesFn(\r\n field,\r\n formState,\r\n dependentFieldsState\r\n );\r\n if (\r\n crossFieldMessages === null ||\r\n crossFieldMessages === undefined ||\r\n typeof crossFieldMessages !== \"object\"\r\n ) {\r\n crossFieldMessages = {};\r\n }\r\n }\r\n return { error: errorMsg, crossFieldMessages, apiResult };\r\n };\r\n return wrapperFunction;\r\n } else {\r\n const wrapperFunctionAlways = async (\r\n field: any,\r\n dependentFieldsState: DependentValuesType,\r\n formState: any\r\n ) => {\r\n let errorMsg: any = null;\r\n let apiResult: any = null;\r\n let errorMsgObj: any = null;\r\n let crossFieldMessages: InitialValuesType | null | undefined;\r\n if (typeof postValidationSetCrossFieldValuesFn === \"function\") {\r\n crossFieldMessages = await postValidationSetCrossFieldValuesFn(\r\n field,\r\n formState,\r\n dependentFieldsState\r\n );\r\n if (\r\n crossFieldMessages === null ||\r\n crossFieldMessages === undefined ||\r\n typeof crossFieldMessages !== \"object\"\r\n ) {\r\n crossFieldMessages = {};\r\n }\r\n }\r\n if (typeof schemaValidation === \"function\") {\r\n errorMsg = await schemaValidation(field, formState);\r\n }\r\n if (Boolean(errorMsg)) {\r\n return { error: errorMsg, crossFieldMessages, apiResult };\r\n }\r\n if (typeof validationFn === \"function\") {\r\n errorMsgObj = await validationFn(\r\n field,\r\n dependentFieldsState,\r\n formState\r\n );\r\n //to handle error type as object or string\r\n if (typeof errorMsgObj === \"object\") {\r\n errorMsg = errorMsgObj.error;\r\n apiResult = errorMsgObj.apiResult;\r\n } else {\r\n errorMsg = errorMsgObj;\r\n }\r\n if (Boolean(errorMsg)) {\r\n return { error: errorMsg, crossFieldMessages, apiResult };\r\n }\r\n }\r\n if (\r\n typeof onFormDataChange === \"function\" &&\r\n Boolean(runExternalFunction)\r\n ) {\r\n errorMsgObj = await onFormDataChange(\r\n fieldKey,\r\n field,\r\n dependentFieldsState,\r\n formState\r\n );\r\n if (typeof errorMsgObj === \"object\") {\r\n errorMsg = errorMsgObj.error;\r\n apiResult = errorMsgObj.apiResult;\r\n } else {\r\n errorMsg = errorMsgObj;\r\n }\r\n }\r\n return { error: errorMsg, crossFieldMessages: {}, apiResult };\r\n };\r\n return wrapperFunctionAlways;\r\n }\r\n}\r\n\r\nconst transformDependentFields = (\r\n fieldKey: string,\r\n dependentFields: string[] | string | undefined\r\n) => {\r\n if (dependentFields === undefined) {\r\n return dependentFields;\r\n }\r\n if (typeof dependentFields === \"string\") {\r\n dependentFields = [dependentFields];\r\n }\r\n if (Array.isArray(dependentFields)) {\r\n if (fieldKey.split(\".\").length > 1) {\r\n const fieldKeys = fieldKey.split(\".\");\r\n const prevKey = fieldKeys.slice(0, fieldKeys.length - 1).join(\".\");\r\n dependentFields = dependentFields.map((one) => {\r\n return `${prevKey}.${one}`;\r\n });\r\n }\r\n }\r\n return dependentFields;\r\n};\r\n\r\nconst getFieldKeyForArray = (fieldKey: string) => {\r\n if (fieldKey.split(\".\").length > 1) {\r\n const fieldKeys = fieldKey.split(\".\");\r\n const prevKey = fieldKeys.slice(0, fieldKeys.length - 1).join(\".\");\r\n return `${prevKey}.`;\r\n }\r\n return \"\";\r\n};\r\n\r\nexport const transformDependentFieldsState = (\r\n dependentValues: DependentValuesType\r\n) => {\r\n const values = Object.keys(dependentValues);\r\n let newDependentValues = values.reduce((accum, fieldKey) => {\r\n let currentValue = dependentValues[fieldKey];\r\n const newFieldKeyFlattend = fieldKey.replace(/(\\[\\d+\\])/g, \"\");\r\n accum[newFieldKeyFlattend] = currentValue;\r\n return accum;\r\n }, {});\r\n return newDependentValues;\r\n};\r\n","import { useContext, useCallback, useEffect } from \"react\";\nimport {\n Snapshot,\n useRecoilCallback,\n useRecoilValue,\n RecoilState,\n} from \"recoil\";\nimport {\n formAtom,\n formFieldAtom,\n formFieldRegistryAtom,\n formArrayFieldRowsAtom,\n formArrayFieldRegistryAtom,\n formFieldsExcludedAtom,\n formFieldsErrorWatcherAtom,\n subscribeToFormFieldsSelector,\n} from \"./atoms\";\nimport { setIn, getIn } from \"./util\";\nimport {\n FieldsErrorObjType,\n FormFieldAtomType,\n InitialValuesType,\n UseFormHookProps,\n} from \"./types\";\nimport { FormContext } from \"./context\";\nimport formatDate from \"date-fns/format\";\n\nexport const useForm = ({ onSubmit, readOnly = false }: UseFormHookProps) => {\n const formContext = useContext(FormContext);\n\n const formState = useRecoilValue(formAtom(formContext.formName));\n\n const removeFormInstance = useRecoilCallback(\n ({ reset, snapshot }) =>\n () => {\n const loadableFields = snapshot.getLoadable(\n formFieldRegistryAtom(formContext.formName),\n );\n const loadableArrayFields = snapshot.getLoadable(\n formArrayFieldRegistryAtom(formContext.formName),\n );\n if (loadableFields.state === \"hasValue\") {\n const fields = loadableFields.contents;\n for (const field of fields) {\n reset(formFieldAtom(field));\n }\n }\n if (loadableArrayFields.state === \"hasValue\") {\n const arrayFields = loadableArrayFields.contents;\n for (const arrayField of arrayFields) {\n reset(formArrayFieldRowsAtom(arrayField));\n }\n }\n reset(formArrayFieldRegistryAtom(formContext.formName));\n reset(formFieldRegistryAtom(formContext.formName));\n reset(formFieldsExcludedAtom(formContext.formName));\n reset(formFieldsErrorWatcherAtom(formContext.formName));\n reset(formAtom(formContext.formName));\n },\n [formContext.formName],\n );\n\n //clear form Atoms on unmount\n useEffect(() => {\n return () => removeFormInstance();\n }, [removeFormInstance]);\n\n const setInitValues = useRecoilCallback(\n ({ set, snapshot }) =>\n (initValues: InitialValuesType) => {\n const loadableFields = snapshot.getLoadable(\n formFieldRegistryAtom(formContext.formName),\n );\n if (loadableFields.state === \"hasValue\") {\n const fields = loadableFields.contents;\n\n for (const field of fields) {\n const trimFormNameFromFieldName = field.replace(\n `${formContext.formName}/`,\n \"\",\n );\n let defaultValue =\n typeof initValues === \"object\"\n ? getIn(initValues, trimFormNameFromFieldName, \"\")\n : \"\";\n set(formFieldAtom(field), (currVal) => ({\n ...currVal,\n touched: false,\n value: defaultValue,\n error: \"\",\n validationRunning: false,\n }));\n }\n //Inititalize ArrayField\n const loadableArrayFields = snapshot.getLoadable(\n formArrayFieldRegistryAtom(formContext.formName),\n );\n if (loadableArrayFields.state === \"hasValue\") {\n const arrayFields = loadableArrayFields.contents;\n for (const arrayField of arrayFields) {\n set(formArrayFieldRowsAtom(arrayField), (old) => ({\n ...old,\n resetFlag: true,\n }));\n }\n }\n }\n },\n [],\n );\n\n const startSubmit = useRecoilCallback(\n ({ set }) =>\n () => {\n set(formAtom(formContext.formName), (currVal) => ({\n ...currVal,\n isSubmitting: true,\n submitAttempt: currVal.submitAttempt + 1,\n }));\n },\n [],\n );\n\n //initialize form readOnly\n useEffect(() => {\n if (Boolean(readOnly)) {\n startSubmit();\n }\n }, [startSubmit, readOnly]);\n\n const endSubmit = useRecoilCallback(\n ({ set }) =>\n (\n submitSuccessful: boolean = false,\n message: string = \"\",\n messageDetail: string = \"\",\n ) => {\n if (typeof message !== \"string\") {\n message = \"\";\n }\n set(formAtom(formContext.formName), (currVal) => ({\n ...currVal,\n isSubmitting: false,\n submitSuccessful,\n serverSentError: message,\n serverSentErrorDetail: messageDetail,\n }));\n },\n [],\n );\n //need to change this to pass arrayField errors to respective arrayField\n //Todo: loop to registered field and grab errors from the object and set the same.\n const setFieldErrors = useRecoilCallback(\n ({ set }) =>\n (fieldsErrorObj: FieldsErrorObjType = {}) => {\n for (const field of Object.entries(fieldsErrorObj)) {\n const [fieldName, error] = field;\n set(\n formFieldAtom(`${formContext.formName}/${fieldName}`),\n (currVal) => ({\n ...currVal,\n error: error,\n }),\n );\n }\n },\n [],\n );\n\n const handleClear = useRecoilCallback(\n ({ snapshot, set }) =>\n (e: React.FormEvent<any> | any) => {\n e?.preventDefault?.();\n const loadableFields = snapshot.getLoadable(\n formFieldRegistryAtom(formContext.formName),\n );\n if (loadableFields.state === \"hasValue\") {\n const fields = loadableFields.contents;\n for (const field of fields) {\n set(formFieldAtom(field), (currVal) => ({\n ...currVal,\n touched: false,\n value: \"\",\n error: \"\",\n validationRunning: false,\n }));\n }\n }\n const loadableArrayFields = snapshot.getLoadable(\n formArrayFieldRegistryAtom(formContext.formName),\n );\n if (loadableArrayFields.state === \"hasValue\") {\n const arrayFields = loadableArrayFields.contents;\n for (const arrayField of arrayFields) {\n set(formArrayFieldRowsAtom(arrayField), (old) => ({\n ...old,\n resetFlag: false,\n templateFieldRows: [],\n lastInsertIndex: -1,\n }));\n }\n }\n },\n [],\n );\n\n const handleReset = useCallback(\n (e: React.FormEvent<any>) => {\n e.preventDefault();\n if (\n typeof formContext.initialValues === \"object\" &&\n Object.keys(formContext.initialValues).length > 0\n ) {\n setInitValues(formContext.initialValues);\n } else {\n handleClear(null);\n }\n },\n [setInitValues, handleClear, formContext.initialValues],\n );\n\n const handleClearPartial = useRecoilCallback(\n ({ snapshot, set }) =>\n (fields: string[]) => {\n for (const field of fields) {\n set(formFieldAtom(`${formContext.formName}/${field}`), (currVal) => ({\n ...currVal,\n touched: false,\n value: \"\",\n error: \"\",\n validationRunning: false,\n }));\n }\n const loadableArrayFields = snapshot.getLoadable(\n formArrayFieldRegistryAtom(formContext.formName),\n );\n if (loadableArrayFields.state === \"hasValue\") {\n const arrayFields = loadableArrayFields.contents;\n for (const arrayField of arrayFields) {\n set(formArrayFieldRowsAtom(arrayField), (old) => ({\n ...old,\n resetFlag: false,\n templateFieldRows: [],\n lastInsertIndex: -1,\n }));\n }\n }\n },\n [formContext.formName],\n );\n\n const getDependentValues = useRecoilCallback(\n ({ snapshot }) =>\n (fields?: string[] | string) => {\n const loadable = snapshot.getLoadable(\n subscribeToFormFieldsSelector({\n formName: formContext.formName,\n fields: fields,\n }),\n );\n switch (loadable.state) {\n case \"hasValue\": {\n return loadable.contents;\n }\n }\n return {};\n },\n );\n\n const handleResetPartial = useCallback(\n (fields: string[]) => {\n if (\n typeof formContext.initialValues === \"object\" &&\n Object.keys(formContext.initialValues).length > 0\n ) {\n let newInitialValues = {};\n for (const field of fields) {\n const result = getIn(formContext.initialValues, field, null);\n if (Boolean(result)) {\n newInitialValues = setIn(newInitialValues, field, result);\n }\n }\n if (Object.keys(newInitialValues).length > 0) {\n setInitValues(newInitialValues);\n } else {\n handleClearPartial(fields);\n }\n }\n },\n [formContext.initialValues, handleClearPartial, setInitValues],\n );\n\n const runValidation = async (\n field: string,\n snapshot: Snapshot,\n set: <T>(\n recoilVal: RecoilState<T>,\n valOrUpdater: T | ((currVal: T) => T),\n ) => void,\n ): Promise<FormFieldAtomType | null> => {\n const loadableFieldState = snapshot.getLoadable(formFieldAtom(field));\n if (loadableFieldState.state === \"hasValue\") {\n const readOnlyFieldState = loadableFieldState.contents;\n //dont validate if file is excluded\n if (readOnlyFieldState.excluded === true) {\n return null;\n }\n const fieldState = { ...readOnlyFieldState };\n let result: any = null;\n if (!fieldState.touched || fieldState.validationRunning) {\n const customValidator =\n typeof fieldState.validate === \"function\"\n ? fieldState.validate\n : (data: FormFieldAtomType) => ({\n error: data.error,\n });\n try {\n const dependentFieldsState = getDependentValues(\n fieldState.dependentFields,\n );\n result = await Promise.resolve(\n customValidator(\n fieldState,\n dependentFieldsState,\n formContext.formState,\n ),\n );\n } catch (e: any) {\n result = { error: e.message, apiResult: null };\n }\n const newFieldState = {\n ...fieldState,\n validationRunning: false,\n touched: true,\n error: result.error,\n validationAPIResult: result.apiResult,\n };\n set(formFieldAtom(field), newFieldState);\n return newFieldState;\n }\n return fieldState;\n }\n return null;\n };\n\n const handleSubmitPartial = useRecoilCallback(\n ({ snapshot, set }) =>\n (fields: string[]) => {\n const _handleSubmit = async (fields: string[]) => {\n let hasError = false;\n for (const field of fields) {\n let result = await runValidation(\n `${formContext.formName}/${field}`,\n snapshot,\n set,\n );\n if (result === null) {\n continue;\n }\n if (hasError === false) {\n hasError = Boolean(result.error);\n }\n }\n return hasError;\n };\n return _handleSubmit(fields);\n },\n [formContext.formName],\n );\n\n const handleSubmit = useRecoilCallback(\n ({ snapshot, set }) =>\n (\n e: React.FormEvent<any>,\n actionFlag: String = \"action\",\n isValidate: boolean = true,\n ) => {\n const _handleSubmit = async (e: React.FormEvent<any>) => {\n const loadableFields = snapshot.getLoadable(\n formFieldRegistryAtom(formContext.formName),\n );\n if (loadableFields.state === \"hasValue\") {\n const fields = loadableFields.contents;\n const fieldsAggrigator: FormFieldAtomType[] = [];\n let hasError = false;\n for (const field of fields) {\n let result = await runValidation(field, snapshot, set);\n if (result === null) {\n continue;\n }\n if (hasError === false) {\n hasError = Boolean(result.error);\n }\n fieldsAggrigator.push(result);\n }\n //In debug mode allow to move to next step without validating\n // if (process.env.REACT_APP_DEBUG_MODE === \"true\") {\n // hasError = false;\n // }\n if (!hasError || !isValidate) {\n if (typeof onSubmit === \"function\") {\n let resultValueObj = {};\n let resultDisplayValueObj = {};\n for (const field of fieldsAggrigator) {\n let fieldValue = field.value;\n if (fieldValue instanceof Date) {\n fieldValue = formatDate(\n fieldValue,\n \"iii LLL dd yyyy HH:mm:ss xxxx\",\n );\n }\n resultValueObj = setIn(\n resultValueObj,\n field.name.replace(`${formContext.formName}/`, \"\"),\n fieldValue,\n );\n resultDisplayValueObj = setIn(\n resultDisplayValueObj,\n field.name.replace(`${formContext.formName}/`, \"\"),\n field.displayValue,\n );\n }\n onSubmit(\n resultValueObj,\n resultDisplayValueObj,\n endSubmit,\n setFieldErrors,\n actionFlag,\n );\n }\n } else {\n endSubmit(false);\n }\n }\n };\n e.preventDefault();\n startSubmit();\n _handleSubmit(e);\n },\n [],\n );\n const getFieldData = useRecoilCallback(\n ({ snapshot, set }) =>\n async () => {\n const loadableFields = snapshot.getLoadable(\n formFieldRegistryAtom(formContext.formName),\n );\n let resultValueObj = {};\n const fields: any = loadableFields.contents;\n if (loadableFields.state === \"hasValue\") {\n const fieldsAggrigator: FormFieldAtomType[] = [];\n for (const field of fields) {\n let result = await runValidation(field, snapshot, set);\n if (result === null) {\n continue;\n }\n fieldsAggrigator.push(result);\n }\n for (const field of fieldsAggrigator) {\n let fieldValue = field.value;\n if (fieldValue instanceof Date) {\n fieldValue = formatDate(\n fieldValue,\n \"iii LLL dd yyyy HH:mm:ss xxxx\",\n );\n }\n resultValueObj = setIn(\n resultValueObj,\n field.name.replace(`${formContext.formName}/`, \"\"),\n fieldValue,\n );\n }\n }\n return resultValueObj;\n },\n [],\n );\n return {\n handleSubmit,\n handleSubmitPartial,\n handleReset,\n handleResetPartial,\n handleClear,\n handleClearPartial,\n getFieldData,\n ...formState,\n };\n};\n","import { useContext, useRef, useCallback, useEffect } from \"react\";\r\nimport {\r\n UseFieldArrayHookProps,\r\n TemplateFieldRowType,\r\n RenderFn,\r\n InitialValuesType,\r\n} from \"./types\";\r\nimport {\r\n formArrayFieldRowsAtom,\r\n formArrayFieldRegisterSelector,\r\n formArrayFieldUnregisterSelector,\r\n formFieldUnregisterSelector,\r\n formArrayFieldRegistryAtom,\r\n formFieldsErrorWatcherRemoveSelector,\r\n formAtom,\r\n formFieldAtom,\r\n subscribeToFormFieldsSelector,\r\n formFieldRegistryAtom,\r\n} from \"./atoms\";\r\nimport {\r\n useRecoilState,\r\n useSetRecoilState,\r\n useRecoilCallback,\r\n useRecoilValue,\r\n} from \"recoil\";\r\nimport { getIn, setIn } from \"./util\";\r\nimport { FormContext } from \"./context\";\r\n\r\nexport const useFieldArray = ({\r\n arrayFieldName,\r\n template,\r\n shouldExclude,\r\n dependentFields,\r\n getFixedRowsCount,\r\n}: UseFieldArrayHookProps) => {\r\n //fromContext provides formName for scoping\r\n const formContext = useContext(FormContext);\r\n //caching template keys passed as object which are fields per row in the fieldArray\r\n let templateFieldNamesRef = useRef<string[]>(Object.keys(template));\r\n const formState = useRecoilValue(formAtom(formContext.formName));\r\n //fieldRows keeps track of fields in the field array,\r\n //also will keep track of last inserted field index which forms the\r\n //basis of fieldKey to uniquely identify field in the formFieldAtom\r\n //eg - arrayFieldName[index].templateFieldName\r\n const [fieldRows, setFieldRows] = useRecoilState(\r\n formArrayFieldRowsAtom(`${formContext.formName}/${arrayFieldName}`)\r\n );\r\n //fieldRowsRef for memoization purpose\r\n const fieldRowsRef = useRef(fieldRows);\r\n fieldRowsRef.current = fieldRows;\r\n\r\n //registerField function registers the currentField to the fields registry if not registered,\r\n //and keeping track of all the active array fields in the form\r\n const registerArrayField = useSetRecoilState(\r\n formArrayFieldRegisterSelector(formContext.formName)\r\n );\r\n //unregisterField function unregistered the current arrayField from the fields registry\r\n const unregisterArrayField = useSetRecoilState(\r\n formArrayFieldUnregisterSelector(formContext.formName)\r\n );\r\n\r\n const unregisterField = useSetRecoilState(\r\n formFieldUnregisterSelector(formContext.formName)\r\n );\r\n\r\n const RemoveFieldsFromErrorWatcher = useRecoilCallback(\r\n ({ set }) =>\r\n ({ fieldName }) => {\r\n set(\r\n formFieldsErrorWatcherRemoveSelector(formContext.formName),\r\n fieldName\r\n );\r\n },\r\n []\r\n );\r\n\r\n const isFieldRegistered = useRecoilCallback(\r\n ({ snapshot }) =>\r\n (fieldName: string) => {\r\n const loader = snapshot.getLoadable(\r\n formArrayFieldRegistryAtom(formContext.formName)\r\n );\r\n if (loader.state === \"hasValue\") {\r\n const fields = loader.contents;\r\n if (fields.indexOf(fieldName) > -1) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n },\r\n [formContext.formName, formArrayFieldRegisterSelector]\r\n );\r\n\r\n //New logic for should exclude and fixed Row Count set\r\n const dependentFieldsState = useRecoilValue(\r\n subscribeToFormFieldsSelector({\r\n formName:\r\n typeof shouldExclude === \"function\"\r\n ? formContext.formName\r\n : typeof getFixedRowsCount === \"function\"\r\n ? formContext.formName\r\n : `${formContext.formName}-NOTEXIST`,\r\n fields: dependentFields,\r\n })\r\n );\r\n\r\n const clearArrayFieldRows = useRecoilCallback(\r\n ({ reset, snapshot, set }) =>\r\n (templateFieldRows: TemplateFieldRowType[]) => {\r\n const allKeysToRemove: string[] = [];\r\n for (let i = 0; i < templateFieldRows.length; i++) {\r\n let keys = Object.keys(templateFieldRows[i]?.cells);\r\n for (let j = 0; j < keys.length; j++) {\r\n const currentFieldKey = templateFieldRows[i].cells[keys[j]].key;\r\n reset(formFieldAtom(`${formContext.formName}/${currentFieldKey}`));\r\n allKeysToRemove.push(`${formContext.formName}/${currentFieldKey}`);\r\n }\r\n }\r\n const fields = snapshot.getLoadable(\r\n formFieldRegistryAtom(formContext.formName)\r\n );\r\n if (fields.state === \"hasValue\") {\r\n let allFields = fields.getValue();\r\n let newAllFields = allFields.filter((one) =>\r\n allKeysToRemove.indexOf(one) >= 0 ? false : true\r\n );\r\n set(formFieldRegistryAtom(formContext.formName), newAllFields);\r\n }\r\n },\r\n []\r\n );\r\n\r\n const lastShouldExcludePromise = useRef<Promise<any> | null>(null);\r\n useEffect(() => {\r\n if (typeof shouldExclude === \"function\") {\r\n const currentShouldExcludePromise = Promise.resolve(\r\n shouldExclude({} as any, dependentFieldsState, formContext.formState)\r\n );\r\n lastShouldExcludePromise.current = currentShouldExcludePromise;\r\n currentShouldExcludePromise.then((result) => {\r\n if (currentShouldExcludePromise === lastShouldExcludePromise.current) {\r\n if (result === true && fieldRows.excluded === false) {\r\n setFieldRows((old) => ({ ...old, excluded: true }));\r\n clearArrayFieldRows(fieldRows.templateFieldRows);\r\n clearFieldArray();\r\n } else if (result === false && fieldRows.excluded === true) {\r\n setFieldRows((old) => ({ ...old, excluded: false }));\r\n }\r\n }\r\n });\r\n }\r\n });\r\n useEffect(() => {\r\n if (\r\n typeof getFixedRowsCount === \"function\" &&\r\n fieldRows.excluded === false\r\n ) {\r\n let currentRowCount = getFixedRowsCount(\r\n fieldRows,\r\n dependentFieldsState,\r\n formContext.formState\r\n );\r\n if (currentRowCount < 0) {\r\n currentRowCount = 0;\r\n }\r\n if (fieldRows.templateFieldRows.length !== currentRowCount) {\r\n let diff = currentRowCount - fieldRows.templateFieldRows.length;\r\n if (diff > 0) {\r\n //add new rows\r\n let index: number = fieldRows.templateFieldRows.length;\r\n let rowBuf: any = fieldRows.templateFieldRows;\r\n let lastInsertIndex = fieldRows.lastInsertIndex;\r\n while (diff > 0) {\r\n let result = _insert(\r\n index,\r\n rowBuf,\r\n lastInsertIndex,\r\n templateFieldNamesRef.current\r\n );\r\n rowBuf = result?.newRows;\r\n lastInsertIndex = result?.lastIndex ?? -1;\r\n index++;\r\n diff--;\r\n }\r\n if (Array.isArray(rowBuf)) {\r\n setFieldRows((old) => ({\r\n ...old,\r\n lastInsertIndex: lastInsertIndex,\r\n templateFieldRows: rowBuf,\r\n }));\r\n }\r\n } else {\r\n let indexToRemoveFrom = fieldRows.templateFieldRows.length + diff;\r\n let currentTemplateRows = fieldRows.templateFieldRows.slice(\r\n 0,\r\n indexToRemoveFrom\r\n );\r\n let removeRows = fieldRows.templateFieldRows.slice(indexToRemoveFrom);\r\n clearArrayFieldRows(removeRows);\r\n setFieldRows((oldValues) => ({\r\n ...oldValues,\r\n templateFieldRows: currentTemplateRows,\r\n lastInsertIndex: oldValues.lastInsertIndex,\r\n }));\r\n }\r\n }\r\n }\r\n });\r\n\r\n //end of new should exclude logic\r\n\r\n const getAllRowsValues = useRecoilCallback(\r\n ({ snapshot }) =>\r\n (templateFieldRows: TemplateFieldRowType[]) => {\r\n const allKeysToGetValuesFrom: string[] = [];\r\n for (let i = 0; i < templateFieldRows.length; i++) {\r\n let keys = Object.keys(templateFieldRows[i]?.cells);\r\n for (let j = 0; j < keys.length; j++) {\r\n const currentFieldKey = templateFieldRows[i].cells[keys[j]].key;\r\n allKeysToGetValuesFrom.push(\r\n `${formContext.formName}/${currentFieldKey}`\r\n );\r\n }\r\n }\r\n let resultValues: any = {};\r\n for (let itr = 0; itr < allKeysToGetValuesFrom.length; itr++) {\r\n const fieldLoadable = snapshot.getLoadable(\r\n formFieldAtom(allKeysToGetValuesFrom[itr])\r\n );\r\n if (fieldLoadable.state === \"hasValue\") {\r\n const readOnlyFieldState = fieldLoadable.contents;\r\n if (readOnlyFieldState.excluded === true) {\r\n continue;\r\n } else {\r\n resultValues = setIn(\r\n resultValues,\r\n readOnlyFieldState.name.replace(`${formContext.formName}/`, \"\"),\r\n readOnlyFieldState.value\r\n );\r\n }\r\n }\r\n }\r\n return resultValues;\r\n },\r\n [formContext.formName]\r\n );\r\n\r\n //_insert adds a new field to the fieldArray with a new key\r\n const _insert = useCallback(\r\n (\r\n index: number,\r\n rowBuffer: TemplateFieldRowType[],\r\n lastInsertId: number,\r\n template: string[]\r\n ) => {\r\n if (index >= 0 && index <= rowBuffer.length) {\r\n const insertIndex = ++lastInsertId;\r\n let newRow: TemplateFieldRowType = {\r\n cells: {},\r\n fieldIndexKey: `${formContext.formName}/${arrayFieldName}/${insertIndex}`,\r\n };\r\n for (const fieldName of template) {\r\n const key = `${arrayFieldName}[${insertIndex}].${fieldName}`;\r\n const name = `${arrayFieldName}[${index}].${fieldName}`;\r\n newRow.cells[fieldName] = { key, name };\r\n }\r\n const beginningRows = rowBuffer.slice(0, index);\r\n const endingRows = rowBuffer.slice(index);\r\n let currentIndex = index + 1;\r\n for (let oneRow of endingRows) {\r\n for (const fieldName of template) {\r\n oneRow.cells[\r\n fieldName\r\n ].name = `${arrayFieldName}[${currentIndex}].${fieldName}`;\r\n }\r\n currentIndex++;\r\n }\r\n return {\r\n newRows: [...beginningRows, newRow, ...endingRows],\r\n lastIndex: insertIndex,\r\n };\r\n }\r\n return;\r\n },\r\n [arrayFieldName, formContext.formName]\r\n );\r\n //remove field from the fieldArray\r\n const remove = useCallback(\r\n (index: number) => {\r\n if (index >= 0 && index < fieldRowsRef.current.templateFieldRows.length) {\r\n let currentIndex = index;\r\n const deleteRow = fieldRowsRef.current.templateFieldRows[index];\r\n const beginningRows = fieldRowsRef.current.templateFieldRows.slice(\r\n 0,\r\n currentIndex\r\n );\r\n const endingRows = fieldRowsRef.current.templateFieldRows.slice(\r\n currentIndex + 1\r\n );\r\n for (let oneRow of endingRows) {\r\n for (const fieldName of templateFieldNamesRef.current ?? []) {\r\n oneRow.cells[\r\n fieldName\r\n ].name = `${arrayFieldName}[${currentIndex}].${fieldName}`;\r\n }\r\n currentIndex++;\r\n }\r\n setFieldRows((oldValues) => ({\r\n ...oldValues,\r\n templateFieldRows: [...beginningRows, ...endingRows],\r\n lastInsertIndex: oldValues.lastInsertIndex,\r\n }));\r\n for (const oneField of Object.values(deleteRow.cells)) {\r\n if (oneField.key.indexOf(`${formContext.formName}/`) > -1) {\r\n unregisterField(oneField.key);\r\n RemoveFieldsFromErrorWatcher({ fieldName: oneField.key });\r\n } else {\r\n unregisterField(`${formContext.formName}/${oneField.key}`);\r\n RemoveFieldsFromErrorWatcher({\r\n fieldName: `${formContext.formName}/${oneField.key}`,\r\n });\r\n }\r\n }\r\n }\r\n },\r\n [\r\n setFieldRows,\r\n unregisterField,\r\n arrayFieldName,\r\n formContext.formName,\r\n RemoveFieldsFromErrorWatcher,\r\n ]\r\n );\r\n //Initialize the form array with default rows\r\n const setDefaultValue = useCallback(\r\n (initValues: InitialValuesType) => {\r\n const defaultArrayValue: string | undefined = getIn(\r\n initValues,\r\n arrayFieldName\r\n );\r\n if (defaultArrayValue !== undefined && Array.isArray(defaultArrayValue)) {\r\n let insertIndex = -1;\r\n let buffer: TemplateFieldRowType[] = [];\r\n for (let i = 0; i < defaultArrayValue.length; i++) {\r\n const result = _insert(\r\n buffer.length,\r\n buffer,\r\n insertIndex,\r\n templateFieldNamesRef.current\r\n );\r\n if (result !== undefined) {\r\n insertIndex = result.lastIndex;\r\n if (Array.isArray(result.newRows)) {\r\n buffer = result.newRows;\r\n }\r\n }\r\n }\r\n setFieldRows((old) => ({\r\n ...old,\r\n resetFlag: false,\r\n templateFieldRows: buffer,\r\n lastInsertIndex: insertIndex,\r\n }));\r\n } else {\r\n setFieldRows((old) => ({\r\n ...old,\r\n resetFlag: false,\r\n templateFieldRows: [],\r\n lastInsertIndex: -1,\r\n }));\r\n }\r\n },\r\n [arrayFieldName, setFieldRows, _insert]\r\n );\r\n //This effect will register and unregister fields when they mount and unmount\r\n //If an option is set not resetField on unmount unregister will not be called.\r\n\r\n useEffect(() => {\r\n if (!isFieldRegistered(`${formContext.formName}/${arrayFieldName}`)) {\r\n registerArrayField(`${formContext.formName}/${arrayFieldName}`);\r\n if (typeof formContext.initialValues === \"object\") {\r\n setDefaultValue(formContext.initialValues);\r\n }\r\n }\r\n if (Boolean(formContext.resetFieldOnUnmount) === true) {\r\n return () => {\r\n unregisterArrayField(`${formContext.formName}/${arrayFieldName}`);\r\n };\r\n }\r\n }, [\r\n registerArrayField,\r\n unregisterArrayField,\r\n formContext.formName,\r\n arrayFieldName,\r\n formContext.resetFieldOnUnmount,\r\n formContext.initialValues,\r\n setDefaultValue,\r\n isFieldRegistered,\r\n ]);\r\n //triggers fieldArray reset\r\n useEffect(() => {\r\n if (\r\n fieldRows.resetFlag === true &&\r\n typeof formContext.initialValues === \"object\" &&\r\n Object.keys(formContext.initialValues).length > 0\r\n ) {\r\n setDefaultValue(formContext.initialValues);\r\n }\r\n }, [fieldRows.resetFlag, setDefaultValue, formContext.initialValues]);\r\n\r\n //utility function to renderRows\r\n const renderRows = useCallback(\r\n (renderFn: RenderFn) => {\r\n return fieldRowsRef.current.templateFieldRows.map((row, idx) => {\r\n return renderFn({\r\n row,\r\n fields: templateFieldNamesRef.current?.slice?.() ?? [],\r\n rowIndex: idx,\r\n removeFn: remove,\r\n totalRows: fieldRowsRef.current.templateFieldRows.length,\r\n });\r\n });\r\n },\r\n [remove]\r\n );\r\n //clearFieldArray when clearFn is called\r\n const clearFieldArray = useCallback(() => {\r\n setFieldRows((old) => ({\r\n ...old,\r\n resetFlag: false,\r\n templateFieldRows: [],\r\n lastInsertIndex: -1,\r\n }));\r\n }, [setFieldRows]);\r\n\r\n const insert = useCallback(\r\n (index: number) => {\r\n const result = _insert(\r\n index,\r\n fieldRowsRef.current.templateFieldRows,\r\n fieldRowsRef.current.lastInsertIndex,\r\n templateFieldNamesRef.current\r\n );\r\n if (result !== undefined) {\r\n if (Array.isArray(result.newRows)) {\r\n setFieldRows((old) => ({\r\n ...old,\r\n lastInsertIndex: result.lastIndex,\r\n templateFieldRows: result.newRows,\r\n }));\r\n }\r\n }\r\n },\r\n [setFieldRows, _insert]\r\n );\r\n\r\n const push = useCallback(() => {\r\n const result = _insert(\r\n fieldRowsRef.current.templateFieldRows.length,\r\n fieldRowsRef.current.templateFieldRows,\r\n fieldRowsRef.current.lastInsertIndex,\r\n templateFieldNamesRef.current\r\n );\r\n if (result !== undefined) {\r\n setFieldRows((old) => ({\r\n ...old,\r\n lastInsertIndex: result.lastIndex,\r\n templateFieldRows: result.newRows,\r\n }));\r\n }\r\n }, [setFieldRows, _insert]);\r\n\r\n const unshift = useCallback(() => {\r\n const result = _insert(\r\n 0,\r\n fieldRowsRef.current.templateFieldRows,\r\n fieldRowsRef.current.lastInsertIndex,\r\n templateFieldNamesRef.current\r\n );\r\n if (result !== undefined) {\r\n if (Array.isArray(result.newRows)) {\r\n setFieldRows((old) => ({\r\n ...old,\r\n lastInsertIndex: result.lastIndex,\r\n templateFieldRows: result.newRows,\r\n }));\r\n }\r\n }\r\n }, [setFieldRows, _insert]);\r\n\r\n const pop = useCallback(() => {\r\n remove(fieldRowsRef.current.templateFieldRows.length - 1);\r\n }, [remove]);\r\n\r\n const swap = useCallback(\r\n (indexA: number, indexB: number) => {\r\n if (\r\n indexA >= 0 &&\r\n indexA < fieldRowsRef.current.templateFieldRows.length &&\r\n indexB >= 0 &&\r\n indexB < fieldRowsRef.current.templateFieldRows.length &&\r\n indexA !== indexB\r\n ) {\r\n const fieldRowsCopy = fieldRowsRef.current.templateFieldRows.slice(0);\r\n const rowA = fieldRowsCopy[indexA];\r\n const rowB = fieldRowsCopy[indexB];\r\n for (const fieldName of templateFieldNamesRef.current ?? []) {\r\n const tempName = rowA.cells[fieldName].name;\r\n rowA.cells[fieldName].name = rowB.cells[fieldName].name;\r\n rowB.cells[fieldName].name = tempName;\r\n }\r\n const rowBCopy = fieldRowsCopy[indexB];\r\n fieldRowsCopy[indexB] = fieldRowsCopy[indexA];\r\n fieldRowsCopy[indexA] = rowBCopy;\r\n setFieldRows((oldValues) => ({\r\n ...oldValues,\r\n templateFieldRows: fieldRowsCopy,\r\n lastInsertIndex: oldValues.lastInsertIndex,\r\n }));\r\n }\r\n },\r\n [setFieldRows]\r\n );\r\n const move = useCallback(\r\n (from: number, to: number) => {\r\n if (\r\n from >= 0 &&\r\n from < fieldRowsRef.current.templateFieldRows.length &&\r\n to >= 0 &&\r\n to < fieldRowsRef.current.templateFieldRows.length &&\r\n from !== to\r\n ) {\r\n const [small, big] = from < to ? [from, to] : [to, from];\r\n const beginningRows = fieldRowsRef.current.templateFieldRows.slice(\r\n 0,\r\n small\r\n );\r\n const endingRows = fieldRowsRef.current.templateFieldRows.slice(\r\n big + 1\r\n );\r\n const middleRows = fieldRowsRef.current.templateFieldRows.slice(\r\n small,\r\n big + 1\r\n );\r\n if (from < to) {\r\n let movingRow = middleRows.slice(0, 1)[0];\r\n let shiftingRows = middleRows.slice(1);\r\n let currentIndex = from;\r\n for (let fieldRow of shiftingRows) {\r\n for (const fieldName of templateFieldNamesRef.current ?? []) {\r\n fieldRow.cells[\r\n fieldName\r\n ].name = `${arrayFieldName}[${currentIndex}].${fieldName}`;\r\n }\r\n currentIndex++;\r\n }\r\n for (const fieldName of templateFieldNamesRef.current ?? []) {\r\n movingRow.cells[\r\n fieldName\r\n ].name = `${arrayFieldName}[${to}].${fieldName}`;\r\n }\r\n setFieldRows((oldValues) => ({\r\n ...oldValues,\r\n templateFieldRows: [\r\n ...beginningRows,\r\n ...shiftingRows,\r\n movingRow,\r\n ...endingRows,\r\n ],\r\n lastInsertIndex: oldValues.lastInsertIndex,\r\n }));\r\n } else {\r\n let shiftingRows = middleRows.slice(0, middleRows.length - 1);\r\n let movingRow = middleRows.slice(middleRows.length - 1)[0];\r\n let currentIndex = to + 1;\r\n for (let fieldRow of shiftingRows) {\r\n for (const fieldName of templateFieldNamesRef.current ?? []) {\r\n fieldRow.cells[\r\n fieldName\r\n ].name = `${arrayFieldName}[${currentIndex}].${fieldName}`;\r\n }\r\n currentIndex++;\r\n }\r\n for (const fieldName of templateFieldNamesRef.current ?? []) {\r\n movingRow.cells[\r\n fieldName\r\n ].name = `${arrayFieldName}[${to}].${fieldName}`;\r\n }\r\n setFieldRows((oldValues) => ({\r\n ...oldValues,\r\n templateFieldRows: [\r\n ...beginningRows,\r\n movingRow,\r\n ...shiftingRows,\r\n ...endingRows,\r\n ],\r\n lastInsertIndex: oldValues.lastInsertIndex,\r\n }));\r\n }\r\n }\r\n },\r\n [setFieldRows, arrayFieldName]\r\n );\r\n\r\n const getAllRowsValuesFn = useCallback(\r\n () => getAllRowsValues(fieldRowsRef.current.templateFieldRows),\r\n [getAllRowsValues]\r\n );\r\n\r\n return {\r\n fieldRows,\r\n templateFieldNames: templateFieldNamesRef.current,\r\n clearFieldArray,\r\n getAllRowsValues: getAllRowsValuesFn,\r\n unshift,\r\n push,\r\n insert,\r\n pop,\r\n remove,\r\n swap,\r\n move,\r\n renderRows,\r\n excluded: fieldRows.excluded,\r\n isSubmitting: formState.isSubmitting,\r\n formState: formContext.formState,\r\n formName: formContext.formName,\r\n };\r\n};\r\n","import {\r\n useRecoilTransactionObserver_UNSTABLE,\r\n useGotoRecoilSnapshot,\r\n Snapshot,\r\n SnapshotID,\r\n} from \"recoil\";\r\n\r\nimport { useRef, useState } from \"react\";\r\n\r\nexport const TimeTravelObserver = () => {\r\n const snapshots = useRef(new Map<SnapshotID, Snapshot>());\r\n const [, render] = useState(0);\r\n useRecoilTransactionObserver_UNSTABLE(({ snapshot }) => {\r\n if (!snapshots.current.has(snapshot.getID())) {\r\n snapshots.current.set(snapshot.getID(), snapshot);\r\n render((old) => old + 1);\r\n }\r\n });\r\n\r\n const gotoSnapshot = useGotoRecoilSnapshot();\r\n\r\n const result: JSX.Element[] = [];\r\n let index = 0;\r\n let keys: number[] = [];\r\n for (let [key, value] of snapshots.current) {\r\n keys[index] = Number(key);\r\n result.push(\r\n <li key={index} style={{ display: \"inline-block\" }}>\r\n <button onClick={() => gotoSnapshot(value)}>{`Restore ${key}`}</button>\r\n </li>\r\n );\r\n index++;\r\n }\r\n\r\n return (\r\n <>\r\n <div style={{ overflow: \"scroll\" }}>\r\n <ul style={{ width: \"7000px\" }}>{result}</ul>\r\n </div>\r\n </>\r\n );\r\n};\r\n","import { ruleEngine } from \"components/utils/jsonRuleEngine\";\r\nimport { setIn } from \"packages/form\";\r\nimport { singletonFunctionRegisrationFactoryType } from \"components/utils/functionRegistry\";\r\n\r\nexport type AttachMethodArrayType = [RegExp, Function?];\r\n\r\ntype path = string;\r\ntype registeredFnName = string;\r\ntype defaultFn = Function;\r\n\r\nexport type AccumulatorType = [\r\n path,\r\n registeredFnName,\r\n string | number,\r\n defaultFn?,\r\n];\r\n\r\nconst defaultBooleanFunction = (value) => () => value;\r\n\r\nconst defaultNumberFunction = (value) => () => Number(value);\r\n\r\nconst patternMatch = (patters: AttachMethodArrayType[], value: string) => {\r\n for (const currentPattern of patters) {\r\n if (currentPattern[0] instanceof RegExp) {\r\n if (currentPattern[0].test(value)) {\r\n return { found: true, defaultFn: currentPattern[1] };\r\n }\r\n }\r\n }\r\n return { found: false, defaultFn: undefined };\r\n};\r\n\r\nconst JSONWalkerFinalPath = (\r\n currentObj: any,\r\n interestedValues: AttachMethodArrayType[],\r\n accumulator: AccumulatorType[],\r\n currentPath: string = \"\",\r\n lastKey: string | number = \"\",\r\n) => {\r\n let result = patternMatch(interestedValues, currentPath);\r\n if (result.found) {\r\n if (lastKey === \"getFixedRowsCount\" && !isNaN(Number(currentObj))) {\r\n accumulator.push([\r\n currentPath,\r\n \"NUMBERIC_FUNCTION_TO_ATTACH_FOR_FIXED_ROW_COUNT\",\r\n lastKey,\r\n defaultNumberFunction(currentObj),\r\n ]);\r\n } //attach a function that returns boolean\r\n else if (currentObj === \"true\")\r\n accumulator.push([\r\n currentPath,\r\n \"BOOLEAN_FUNCTION_TO_ATTACH_FOR_BOOLEAN_VALUES\",\r\n lastKey,\r\n defaultBooleanFunction(true),\r\n ]);\r\n else if (currentObj === \"false\") {\r\n accumulator.push([\r\n currentPath,\r\n \"BOOLEAN_FUNCTION_TO_ATTACH_FOR_BOOLEAN_VALUES\",\r\n lastKey,\r\n defaultBooleanFunction(false),\r\n ]);\r\n } else if (typeof currentObj === \"boolean\") {\r\n accumulator.push([\r\n currentPath,\r\n \"BOOLEAN_FUNCTION_TO_ATTACH_FOR_BOOLEAN_VALUES\",\r\n lastKey,\r\n defaultBooleanFunction(currentObj),\r\n ]);\r\n } else if (typeof currentObj === \"object\") {\r\n accumulator.push([\r\n currentPath,\r\n \"RULES_ENGINE_FUNCTION_TO_ATTACH_AS_DEFAULT_FN\",\r\n lastKey,\r\n ruleEngine(currentObj),\r\n ]);\r\n } else if (typeof currentObj === \"string\") {\r\n if (typeof result.defaultFn === \"function\") {\r\n let retVal = result.defaultFn(currentPath);\r\n if (typeof retVal === \"function\") {\r\n accumulator.push([currentPath, currentObj, lastKey, retVal]);\r\n } else {\r\n accumulator.push([currentPath, currentObj, lastKey, undefined]);\r\n }\r\n } else {\r\n accumulator.push([currentPath, currentObj, lastKey, undefined]);\r\n }\r\n }\r\n }\r\n};\r\n\r\nconst JSONWalker = (\r\n currentObj: any,\r\n interestedValues: AttachMethodArrayType[],\r\n accumulator: AccumulatorType[],\r\n skipWalkingForKeys: string[],\r\n currentPath: string = \"\",\r\n lastKey: string | number = \"\",\r\n) => {\r\n if (typeof currentObj === \"object\" && currentObj !== null) {\r\n if (skipWalkingForKeys.indexOf(lastKey as string) > -1) {\r\n JSONWalkerFinalPath(\r\n currentObj,\r\n interestedValues,\r\n accumulator,\r\n currentPath,\r\n lastKey,\r\n );\r\n } else {\r\n for (const [key, val] of Object.entries(currentObj)) {\r\n const path = Boolean(currentPath) ? `${currentPath}.${key}` : `${key}`;\r\n JSONWalker(\r\n val,\r\n interestedValues,\r\n accumulator,\r\n skipWalkingForKeys,\r\n path,\r\n key,\r\n );\r\n }\r\n }\r\n } else if (Array.isArray(currentObj)) {\r\n currentObj.forEach((value, index) => {\r\n const path = Boolean(currentPath)\r\n ? `${currentPath}.${index}`\r\n : `${index}`;\r\n JSONWalker(\r\n value,\r\n interestedValues,\r\n accumulator,\r\n skipWalkingForKeys,\r\n path,\r\n index,\r\n );\r\n });\r\n } else {\r\n JSONWalkerFinalPath(\r\n currentObj,\r\n interestedValues,\r\n accumulator,\r\n currentPath,\r\n lastKey,\r\n );\r\n }\r\n};\r\n\r\n//we will attach default function for each field Key type if we cannot the required function\r\n//array index\r\n//0-the path to set function at\r\n//1-the strign value that will be used as key to find mapped function from functions registry\r\n//2-is the key name\r\n//3-default function for that key - it can be undefined it its not declared\r\nexport const attachMethodsToMetaData = (\r\n metaData: any,\r\n registrationFnInstance: singletonFunctionRegisrationFactoryType,\r\n interestedFields: AttachMethodArrayType[],\r\n skipWalkingForKeys: string[] = [],\r\n) => {\r\n const accumKeys: AccumulatorType[] = [];\r\n JSONWalker(metaData, interestedFields, accumKeys, skipWalkingForKeys);\r\n let newMetaData = { ...metaData };\r\n for (const one of accumKeys) {\r\n if (one[2] === \"setColor\") {\r\n const retVal = registrationFnInstance.getFn(one[1], one[3]);\r\n if (retVal === one[3]) {\r\n if (one[1].indexOf(\"FUNCTION_TO_ATTACH\") >= 0) {\r\n newMetaData = setIn(newMetaData, one[0], \"\");\r\n } else {\r\n newMetaData = setIn(newMetaData, one[0], one[1]);\r\n }\r\n } else {\r\n newMetaData = setIn(newMetaData, one[0], retVal);\r\n }\r\n } else {\r\n const retVal = registrationFnInstance.getFn(one[1], one[3]);\r\n newMetaData = setIn(newMetaData, one[0], retVal);\r\n }\r\n //to get options registered function name to be used in react-query for caching options\r\n if ([\"options\", \"leftOptions\", \"rightOptions\"].indexOf(`${one[2]}`) >= 0) {\r\n const pathSplit = one[0].split(\".\");\r\n const prev = pathSplit.slice(0, pathSplit.length - 1);\r\n const newPath = [...prev, `_${one[2]}Key`].join(\".\");\r\n newMetaData = setIn(newMetaData, newPath, one[1]);\r\n } else {\r\n const retVal = registrationFnInstance.getFn(one[1], one[3]);\r\n newMetaData = setIn(newMetaData, one[0], retVal);\r\n }\r\n }\r\n return newMetaData;\r\n};\r\n","import { cloneDeep } from \"lodash-es\";\r\nexport const CheckObjectAllKeyisEmpty = (data) => {\r\n if (typeof data === \"object\") {\r\n const allKeys = Object.keys(data);\r\n let returnvalue = true;\r\n if (allKeys.length === 0) {\r\n return false;\r\n }\r\n allKeys.forEach((item) => {\r\n if (Boolean(data[item])) {\r\n returnvalue = false;\r\n return false;\r\n }\r\n });\r\n return returnvalue;\r\n } else {\r\n return false;\r\n }\r\n};\r\n\r\nexport const UpdateRequestDataVisibleColumn = (data, visiblecolumn) => {\r\n if (typeof data === \"object\" && typeof visiblecolumn === \"object\") {\r\n let returnData = cloneDeep(data);\r\n const allKeys = Object.keys(visiblecolumn);\r\n allKeys.forEach((item) => {\r\n if (!visiblecolumn[item]) {\r\n returnData[item] = \"\";\r\n }\r\n });\r\n return returnData;\r\n }\r\n\r\n return data;\r\n};\r\nexport const AddIDinResponseData = (responsedata) => {\r\n if (Array.isArray(responsedata)) {\r\n return responsedata.map((item, index) => {\r\n return { id: index + 1, ...item };\r\n });\r\n } else {\r\n return responsedata;\r\n }\r\n};\r\nexport const groupBy = (xs, key) => {\r\n return xs.reduce((rv, x) => {\r\n (rv[x[key]] = rv[x[key]] || []).push(x);\r\n return rv;\r\n }, {});\r\n};\r\n\r\nexport const DefaultErrorObject = (\r\n error_msg,\r\n error_details = \"\",\r\n severity = \"error\"\r\n) => {\r\n return {\r\n error_msg: error_msg,\r\n severity: severity,\r\n error_detail: error_details,\r\n };\r\n};\r\nexport const CreateLanguageRequestData = (reqData, languageData) => {\r\n if (Array.isArray(reqData)) {\r\n return reqData.map((item) => {\r\n if (Boolean(item?._hidden)) {\r\n return item;\r\n } else {\r\n if (Boolean(languageData[item?.TRN_TYPE])) {\r\n if (item?.DISPLAY_MSG !== languageData[item?.TRN_TYPE]?.DISPLAY_MSG) {\r\n item[\"_isTouchedCol\"] = {\r\n ...item._isTouchedCol,\r\n DISPLAY_MSG: true,\r\n };\r\n item[\"_oldData\"] = {\r\n ...item?._oldData,\r\n DISPLAY_MSG: StringtoUnicode(item?.DISPLAY_MSG),\r\n };\r\n item[\"DISPLAY_MSG\"] = StringtoUnicode(\r\n languageData[item?.TRN_TYPE]?.DISPLAY_MSG\r\n );\r\n }\r\n if (\r\n item?.DISPLAY_MSG_BN !==\r\n languageData[item?.TRN_TYPE]?.DISPLAY_MSG_BN\r\n ) {\r\n item[\"_isTouchedCol\"] = {\r\n ...item._isTouchedCol,\r\n DISPLAY_MSG_BN: true,\r\n };\r\n item[\"_oldData\"] = {\r\n ...item?._oldData,\r\n DISPLAY_MSG_BN: StringtoUnicode(item?.DISPLAY_MSG_BN),\r\n };\r\n item[\"DISPLAY_MSG_BN\"] = StringtoUnicode(\r\n languageData[item?.TRN_TYPE]?.DISPLAY_MSG_BN\r\n );\r\n }\r\n return item;\r\n } else {\r\n return item;\r\n }\r\n }\r\n });\r\n } else {\r\n return reqData;\r\n }\r\n};\r\nexport const CreateDetailsRequestData = (reqData) => {\r\n let _isNewRowdata: any[] = [];\r\n let _isDeleteRowdata: any[] = [];\r\n let _isUpdatedRowdata: any[] = [];\r\n if (Array.isArray(reqData)) {\r\n reqData.forEach((item) => {\r\n let { _isNewRow, _hidden, _isTouchedCol, _oldData, ...other } = item;\r\n if (Boolean(_isNewRow)) {\r\n if (!Boolean(_hidden)) {\r\n _isNewRowdata.push(other);\r\n }\r\n } else if (Boolean(_hidden)) {\r\n _isDeleteRowdata.push(other);\r\n } else if (Boolean(_isTouchedCol)) {\r\n let isUpdated = false;\r\n let updatedItem = cloneDeep(other);\r\n let _OldValueData = {};\r\n let allKeys = Object.keys(_isTouchedCol);\r\n let updatedKeysArr: any[] = [];\r\n allKeys.forEach((keyitem) => {\r\n if (item?._isTouchedCol?.[keyitem] ?? false) {\r\n isUpdated = true;\r\n _OldValueData[keyitem] = _oldData?.[keyitem] ?? \"\";\r\n updatedKeysArr.push(keyitem);\r\n }\r\n });\r\n if (isUpdated) {\r\n _isUpdatedRowdata.push({\r\n ...updatedItem,\r\n _UPDATEDCOLUMNS: updatedKeysArr,\r\n _OLDROWVALUE: _OldValueData,\r\n });\r\n }\r\n }\r\n });\r\n }\r\n return {\r\n isNewRow: _isNewRowdata,\r\n isDeleteRow: _isDeleteRowdata,\r\n isUpdatedRow: _isUpdatedRowdata,\r\n };\r\n};\r\n\r\nexport const ObjectMappingKeys = (data, ...keys) => {\r\n if (typeof data === \"object\") {\r\n let returnObj = {};\r\n keys.forEach((item) => {\r\n returnObj[item] = data[item];\r\n });\r\n return returnObj;\r\n } else {\r\n return data;\r\n }\r\n};\r\n\r\nexport const StringtoUnicode = (str) => {\r\n return str\r\n .split(\"\")\r\n .map(function (value, index, array) {\r\n var temp = value.charCodeAt(0).toString(16).toUpperCase();\r\n if (temp.length > 2) {\r\n return \"\\\\u\" + (temp.length === 3 ? \"0\" + temp : temp);\r\n }\r\n return value;\r\n })\r\n .join(\"\");\r\n};\r\n","import { format, parse } from \"date-fns\";\nimport { t } from \"i18next\";\nimport { toNumber } from \"lodash\";\nimport pako from \"pako\";\n\nexport const GetMaxCdForDetails = (data, keys) => {\n if (Array.isArray(data)) {\n if (!Boolean(keys)) {\n return data.length + 1;\n }\n let maxCd = 0;\n data.forEach((item, index) => {\n if (Boolean(item[keys])) {\n if (parseFloat(item[keys]) > maxCd) {\n maxCd = parseFloat(item[keys]);\n }\n } else if (maxCd < index + 1) {\n maxCd = index + 1;\n }\n });\n return maxCd + 1;\n } else {\n return 1;\n }\n};\nexport const GetMaxDisplaySequenceCd = (data, keys) => {\n if (Array.isArray(data)) {\n if (!Boolean(keys)) {\n return data.length + 1;\n }\n let maxCd = 0;\n data.forEach((item, index) => {\n if (typeof item[keys] !== \"undefined\") {\n let { _hidden } = item;\n if (\n typeof _hidden === \"undefined\" ||\n (typeof _hidden === \"boolean\" && !Boolean(_hidden))\n ) {\n if (parseFloat(item[keys]) > maxCd) {\n maxCd = parseFloat(item[keys]);\n }\n }\n } else if (maxCd < index + 1) {\n maxCd = index + 1;\n }\n });\n return maxCd + 1;\n } else {\n return 1;\n }\n};\nexport const base64toBlob = (b64Data, contentType = \"\", sliceSize = 512) => {\n const byteCharacters =\n !(b64Data == null) && !(b64Data == \"\") ? atob(b64Data) : \"\";\n const byteArrays: any = [];\n\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n const slice = byteCharacters.slice(offset, offset + sliceSize);\n\n const byteNumbers = new Array(slice.length);\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n\n const byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n\n const blob = new Blob(byteArrays, { type: contentType });\n return blob;\n};\nexport const blobToFile = (theBlob: Blob, fileName: string): File => {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return <File>theBlob;\n};\nexport const ChangeJsonValue = (data, obj) => {\n if (Array.isArray(data)) {\n return data.map((item) => {\n let newitem = item;\n let allKeys = Object.keys(item);\n allKeys.forEach((itemdata) => {\n if (Boolean(obj[itemdata])) {\n let keyValue = item[itemdata];\n if (typeof obj[itemdata] === \"object\") {\n newitem[\"_NEW_\" + itemdata] = Boolean(obj[itemdata][keyValue])\n ? obj[itemdata][keyValue]\n : keyValue;\n } else if (typeof obj[itemdata] === \"function\") {\n let funcRet = obj[itemdata](keyValue, itemdata);\n newitem[\"_NEW_\" + itemdata] = Boolean(funcRet) ? funcRet : keyValue;\n } else {\n newitem[\"_NEW_\" + itemdata] = keyValue;\n }\n }\n });\n return newitem;\n });\n } else {\n return data;\n }\n};\n\nexport const convertBlobToBase64 = async (blob) => {\n // blob data\n return await blobToBase64(blob).then((result: any) =>\n result.toString().split(\",\"),\n );\n};\n\nconst blobToBase64 = (blob) =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n\nexport const getAuthorizeTokenText = (token, token_type) => {\n if (token_type === \"bearer\") {\n return \"Bearer \" + token;\n } else if (token_type === \"basic\") {\n return \"Basic \" + token;\n } else {\n return \"Bearer \" + token;\n }\n};\n\nexport const getCurrentDateinLong = () => {\n return new Date().getTime();\n};\n\nexport const ValidatePassword = (pwd) => {\n if (!Boolean(pwd)) {\n // return t(\"PasswordisRequired\");\n return t(\"PasswordisRequired\");\n } else if (!/(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\\W)(?!.*\\s)/.test(pwd)) {\n return t(\"EnterPasswordPolicy\");\n } else if (pwd.length < 8 || pwd.length > 16) {\n // return t(\"EnterPasswordValid\");\n return t(\"EnterPasswordValid\");\n // return \"Password must be between 8 and 16 characters long.\";\n }\n return \"\";\n};\n\nexport const GetAllChieldMenuData = (\n data: any,\n isCheckUserCode: boolean = true,\n) => {\n let newNavItems: any = [];\n if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n let { children, ...newItem } = data[i];\n if (Array.isArray(children) && children.length > 0) {\n let newChildren = GetAllChieldMenuData(children);\n newNavItems.push(...newChildren);\n } else {\n if (\n (!isCheckUserCode || Boolean(newItem.system_code)) &&\n Boolean(newItem.href)\n ) {\n newNavItems.push({ ...newItem });\n }\n // else if (Boolean(newItem.href)) {\n // newNavItems.push({ ...newItem });\n // }\n }\n }\n }\n return newNavItems;\n};\nexport const transformBlobData = (data) => {\n if (!Array.isArray(data)) {\n return data;\n }\n return data.map((item) => {\n let newItem = {};\n newItem[\"id\"] = toNumber(item[\"ID\"]);\n newItem[\"blob\"] = base64toBlob(\n item[\"BLOB\"],\n item[\"FILEEXT\"] === \"pdf\" ? \"application/pdf\" : \"\",\n );\n newItem[\"fileExt\"] = item[\"FILEEXT\"];\n newItem[\"name\"] =\n item[\"NAME\"]?.includes(\".\") ?? true\n ? item[\"NAME\"]\n : item[\"NAME\"] + \".\" + newItem[\"fileExt\"];\n newItem[\"_mimeType\"] =\n newItem[\"fileExt\"] === \"pdf\"\n ? \"pdf\"\n : newItem[\"fileExt\"] === \"jpg\"\n ? \"image\"\n : newItem[\"fileExt\"] === \"png\"\n ? \"image\"\n : newItem[\"fileExt\"] === \"jpeg\"\n ? \"image\"\n : \"other\";\n newItem[\"sizeStr\"] = newItem[\"blob\"]?.size ?? 1000;\n return newItem;\n });\n};\n\nexport const transformDetailsData = (newData, oldData) => {\n let allKey = Object.keys(newData);\n let _UPDATEDCOLUMNS: any = [];\n let _OLDROWVALUE = {};\n allKey.forEach((item) => {\n if (newData[item] === oldData[item]) {\n } else if (\n (typeof newData[item] === \"object\" ||\n typeof oldData[item] === \"object\" ||\n typeof newData[item] === \"string\") &&\n isValidDate(newData[item]) &&\n isValidDate(oldData[item]) &&\n format(new Date(newData[item]), \"dd/MM/yyyy HH:mm:ss\") ===\n format(new Date(oldData[item]), \"dd/MM/yyyy HH:mm:ss\")\n ) {\n } else {\n _UPDATEDCOLUMNS.push(item);\n _OLDROWVALUE[item] = oldData[item];\n }\n });\n return { _UPDATEDCOLUMNS: _UPDATEDCOLUMNS, _OLDROWVALUE: _OLDROWVALUE };\n};\n\nexport const isValidDate = (dat) => {\n try {\n if (!dat) {\n return false;\n } else {\n let dt: any = new Date(dat);\n\n if (!isNaN(dt) && dt < new Date(\"1900/01/01\")) {\n return false;\n } else if (!isNaN(dt)) {\n return true;\n }\n return false;\n }\n } catch (error) {\n return false;\n }\n};\n\nexport const generateUUID = () => {\n // Public Domain/MIT\n var d = new Date().getTime(); //Timestamp\n var d2 =\n (typeof performance !== \"undefined\" &&\n performance.now &&\n performance.now() * 1000) ||\n 0; //Time in microseconds since page-load or 0 if unsupported\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n var r = Math.random() * 16; //random number between 0 and 16\n if (d > 0) {\n //Use timestamp until depleted\n r = (d + r) % 16 | 0;\n d = Math.floor(d / 16);\n } else {\n //Use microseconds since page-load if supported\n r = (d2 + r) % 16 | 0;\n d2 = Math.floor(d2 / 16);\n }\n return (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n\nexport const getMetadataLabelFromColumnName = (metadata, colomnList) => {\n if (\n !Boolean(metadata) ||\n !Boolean(colomnList) ||\n !Array.isArray(colomnList)\n ) {\n return {};\n }\n let outData = {};\n for (const item of metadata?.fields ?? []) {\n if (colomnList.includes(item.name)) {\n outData[item.name] = item.label;\n }\n }\n return outData;\n};\n\nconst getKey = (item, keys) => {\n return keys.map((key) => item[key]).join(\"_\");\n};\n\nconst areObjectsEqual = (obj1, obj2, keys) => {\n return keys.every((key) => obj1[key] === obj2[key]);\n};\n\nconst getChangedColumns = (obj1, obj2, keys) => {\n return keys.filter((key) => obj1[key] !== obj2[key]);\n};\n\nexport const transformDetailDataForDML = (input1, input2, keysToCompare) => {\n const output: {\n isNewRow: any[];\n isUpdatedRow: any[];\n isDeleteRow: any[];\n } = {\n isNewRow: [],\n isUpdatedRow: [],\n isDeleteRow: [],\n };\n\n const idMapInput1: any = new Map(\n input1.map((item) => [getKey(item, keysToCompare), item]),\n );\n const idMapInput2: any = new Map(\n input2.map((item) => [getKey(item, keysToCompare), item]),\n );\n\n // Process INSERT and UPDATE operations\n for (const [id, item2] of idMapInput2) {\n const item1 = idMapInput1.get(id);\n if (!item1) {\n output.isNewRow.push(item2);\n } else if (areObjectsEqual(item1, item2, keysToCompare)) {\n const changedColumns = getChangedColumns(\n item1,\n item2,\n Object.keys(item2),\n );\n if (changedColumns.length > 0) {\n const oldValues = {};\n for (const key of changedColumns) {\n if (key in item1) {\n oldValues[key] = item1[key];\n }\n }\n const updateObj = {\n ...item2,\n _OLDROWVALUE: oldValues,\n _UPDATEDCOLUMNS: changedColumns,\n };\n output.isUpdatedRow.push(updateObj);\n }\n }\n }\n\n // Process DELETE operation\n for (const [id, item1] of idMapInput1) {\n if (!idMapInput2.has(id)) {\n output.isDeleteRow.push(item1);\n }\n }\n return output;\n};\n\nexport const getParsedDate = (\n dateString: string | Date,\n isStringRequired = false,\n requiredFormat: string[] = [],\n): string | Date | any => {\n if (typeof dateString === \"object\") return dateString;\n const formats = requiredFormat.length\n ? requiredFormat\n : [\n \"MM-dd-yy\",\n \"dd-MM-yy\",\n \"dd/MM/yy\",\n \"MM/dd/yy\",\n \"yyyy-MM-dd HH:mm:ss\",\n \"yyyy-MM-dd HH:mm:ss.S\",\n \"yyyy-MM-dd\",\n \"dd/MM/yyyy\",\n \"dd/MM/yyyy HH:mm:ss\",\n \"MM/dd/yyyy\",\n \"MM/dd/yyyy HH:mm:ss\",\n \"dd/MMM/yyyy\",\n \"dd-MM-yyyy\",\n ];\n\n for (const format of formats) {\n const parsedDate = parse(dateString, format, new Date());\n if (!isNaN(parsedDate.getTime())) {\n return parsedDate;\n }\n }\n return isStringRequired ? dateString : new Date(dateString);\n};\n\nexport const uncompressApiResponse = (base64Data) => {\n // console.time(\"compressedStr\");\n const compressedStr = atob(base64Data);\n\n const uint8array1 = new Uint8Array(\n compressedStr.split(\"\").map((c) => c.charCodeAt(0)),\n );\n\n const restored = pako.inflate(uint8array1, { to: \"string\" });\n\n const parseData = JSON.parse(restored);\n // console.timeEnd(\"compressedStr\");\n return parseData;\n};\n","import { merge } from \"lodash-es\";\r\n\r\nexport const extractMetaData = (metaData, mode) => {\r\n let newFields = deriveData(metaData.fields, mode);\r\n let newForm = deriveFormData(metaData.form, mode);\r\n return { form: newForm, fields: newFields };\r\n};\r\nexport const extractGridMetaData = (metaData, mode) => {\r\n let newFields = metaData.columns.map((item) => {\r\n return deriveFormData(item, mode);\r\n });\r\n return { ...metaData, columns: newFields };\r\n};\r\nexport const deriveFormData = (form, mode) => {\r\n const { __VIEW__, __EDIT__, __NEW__, ...others } = form;\r\n let newFormObj = others;\r\n if (mode === \"new\") {\r\n newFormObj = merge({}, others, __NEW__);\r\n } else if (mode === \"edit\") {\r\n newFormObj = merge({}, others, __EDIT__);\r\n } else if (mode === \"view\") {\r\n newFormObj = merge({}, others, __VIEW__);\r\n }\r\n return newFormObj;\r\n};\r\n\r\nexport const deriveData = (fields, mode) => {\r\n if (!Array.isArray(fields)) {\r\n return fields;\r\n }\r\n return fields.map((one) => {\r\n const { __VIEW__, __EDIT__, __NEW__, ...fieldObj } = one;\r\n try {\r\n if (fieldObj.render.componentType === \"arrayField\") {\r\n let newField = deriveData(fieldObj._fields, mode);\r\n fieldObj._fields = newField;\r\n } else if (fieldObj.render.componentType === \"dataTable\") {\r\n let newField = deriveData(fieldObj._column, mode);\r\n fieldObj._column = newField;\r\n }\r\n } catch (e) {\r\n console.log(one);\r\n }\r\n let newFieldObj = fieldObj;\r\n if (mode === \"new\") {\r\n newFieldObj = merge({}, fieldObj, __NEW__);\r\n } else if (mode === \"edit\") {\r\n newFieldObj = merge({}, fieldObj, __EDIT__);\r\n } else if (mode === \"view\") {\r\n newFieldObj = merge({}, fieldObj, __VIEW__);\r\n }\r\n return newFieldObj;\r\n });\r\n};\r\n","import { utils, writeFile } from \"xlsx\";\r\n\r\nexport const ExportExcelFileFromData = ({ title = \"sheet1\", data }) => {\r\n const excelData = utils.json_to_sheet(data);\r\n const wb = utils.book_new();\r\n wb.Props = {\r\n Title: title,\r\n Author: \"Netbanking Admin\",\r\n CreatedDate: new Date(),\r\n };\r\n wb.SheetNames.push(title);\r\n wb.Sheets[title] = excelData;\r\n writeFile(wb, `${title}.xlsx`);\r\n};\r\nexport const ExportCSVFileFromData = ({ title = \"sheet1\", data }) => {\r\n const excelData = utils.json_to_sheet(data);\r\n const wb = utils.book_new();\r\n wb.Props = {\r\n Title: title,\r\n Author: \"Netbanking Admin\",\r\n CreatedDate: new Date(),\r\n };\r\n wb.SheetNames.push(title);\r\n wb.Sheets[title] = excelData;\r\n writeFile(wb, `${title}.csv`, { bookType: \"csv\" });\r\n};\r\n","import Button from \"@mui/material/Button\";\r\n\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst GradientButton = withStyles({\r\n root: {\r\n background: \"var(--theme-color1)\",\r\n border: 0,\r\n color: \"#fff !important\",\r\n fontWeight: 700,\r\n minWidth: \"80px\",\r\n letterSpacing: \"0.02857em\",\r\n boxShadow: \"none\",\r\n textTransform: \"capitalize\",\r\n \"&:hover\": {\r\n // background: \"rgb(200,0,0)\",\r\n background: \"var(--theme-color4)\",\r\n boxShadow: \"none\",\r\n },\r\n \"&:active\": {\r\n background: \"var(--theme-color4)\",\r\n boxShadow: \"none\",\r\n },\r\n //Commented By digal on 20/07/2023 for form button color disable after click\r\n // \"&:focus\": {\r\n // background: \"var(--theme-color4)\",\r\n // boxShadow: \"none\",\r\n // },\r\n },\r\n})(Button);\r\n\r\nexport default GradientButton;\r\n","import { FC, useState } from \"react\";\nimport Alert, { AlertProps } from \"@mui/lab/Alert\";\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Button,\n} from \"@mui/material\";\nimport { GradientButton } from \"components/styledComponent/button\";\nimport { useTranslation } from \"react-i18next\";\ninterface MyAlertProps {\n errorMsg: string;\n errorDetail?: string;\n}\n\nexport const MyAlert: FC<MyAlertProps & AlertProps> = ({\n errorMsg,\n errorDetail,\n ...others\n}) => {\n const [showMore, setShowMore] = useState(false);\n const { t } = useTranslation();\n return (\n <>\n <Alert\n {...others}\n action={\n Boolean(errorDetail) ? (\n <Button\n color=\"secondary\"\n onClick={() => setShowMore((more) => !more)}\n >\n {showMore ? t(\"ShowLess\") : t(\"ShowMore\")}\n </Button>\n ) : null\n }\n style={{ background: \"white\" }}\n >\n <span style={{ fontWeight: \"bold\", color: \"red\" }}>{errorMsg}</span>\n {/* {showMore ? (\n <Fragment>\n <br />\n <hr />\n <span>{errorDetail}</span>\n </Fragment>\n ) : null} */}\n </Alert>\n <Dialog\n open={showMore}\n fullWidth={false}\n onKeyUp={(event) => {\n if (event.key === \"Escape\") {\n setShowMore(false);\n }\n }}\n >\n <DialogTitle>{t(\"ErrorDetails\")}</DialogTitle>\n <DialogContent>\n <DialogContentText>{errorDetail}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <GradientButton onClick={() => setShowMore(false)}>\n {t(\"Ok\")}\n </GradientButton>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","// import { CSSProperties } from \"@material-ui/core/styles/withStyles\";\r\nimport { CSSProperties } from \"@mui/styles/withStyles\";\r\nimport \"./style.css\";\r\nconst style = ({ i }): CSSProperties => ({\r\n \"--i\": i,\r\n});\r\nexport const LoadingTextAnimation = ({ text = \"Loading\" }) => {\r\n const LoadingText = Boolean(text) ? text : \"Loading\";\r\n return (\r\n <div className=\"waviy-loading-text\">\r\n {[...LoadingText].map((item, index) => {\r\n return (\r\n <span style={style({ i: index + 1 })} key={\"span\" + index}>\r\n {item}\r\n </span>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n","import {\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n} from \"@mui/material\";\r\nimport { Alert } from \"components/common/alert\";\r\nimport { LoadingTextAnimation } from \"components/common/loader\";\r\nimport {\r\n ExportCSVFileFromData,\r\n ExportExcelFileFromData,\r\n} from \"components/utils/export/exportExcelFile\";\r\nimport React, { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface IProps {\r\n open: boolean;\r\n closeDialog: Function;\r\n gridData: any;\r\n fileName: string;\r\n}\r\n\r\nexport const GridDataExport: React.FC<IProps> = ({\r\n open,\r\n closeDialog,\r\n gridData,\r\n fileName,\r\n}) => {\r\n const [isLoading, setLoading] = useState(false);\r\n const [error, setError] = useState(\"\");\r\n const { t } = useTranslation();\r\n\r\n const handleDialogClose = () => {\r\n closeDialog();\r\n };\r\n\r\n const FileDownload = (format: string) => {\r\n setLoading(true);\r\n setError(\"\");\r\n\r\n try {\r\n if (format.toLowerCase() === \"excel\") {\r\n ExportExcelFileFromData({ data: gridData, title: fileName });\r\n } else if (format.toLowerCase() === \"csv\") {\r\n ExportCSVFileFromData({ data: gridData, title: fileName });\r\n }\r\n } catch (error) {\r\n setError(String(error));\r\n }\r\n\r\n setTimeout(() => {\r\n setLoading(false);\r\n handleDialogClose();\r\n }, 1000);\r\n };\r\n\r\n return (\r\n <Dialog open={open} maxWidth=\"sm\">\r\n <DialogTitle>{t(\"Whichformatdoyouwanttodownload\")}</DialogTitle>\r\n <DialogContent>\r\n {isLoading ? (\r\n <LoadingTextAnimation\r\n key={\"loaderforExporting\"}\r\n text=\"Exporting...\"\r\n />\r\n ) : Boolean(error) ? (\r\n <Alert severity=\"error\" errorMsg={error} />\r\n ) : null}\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n onClick={() => {\r\n FileDownload(\"Excel\");\r\n }}\r\n color=\"secondary\"\r\n disabled={isLoading}\r\n >\r\n {t(\"Excel\")}\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n FileDownload(\"CSV\");\r\n }}\r\n color=\"secondary\"\r\n disabled={isLoading}\r\n >\r\n {t(\"CSV\")}\r\n </Button>\r\n <Button\r\n onClick={handleDialogClose}\r\n color=\"secondary\"\r\n disabled={isLoading}\r\n >\r\n {t(\"Cancel\")}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n","import * as XLSX from \"xlsx\";\r\nimport { getParsedDate } from \"../utilFunctions/function\";\r\nimport { isValid } from \"date-fns\";\r\n\r\nexport const ConvertExcelToJSONData = ({ title = \"sheet1\", data }) => {\r\n //let base64Data = await utilFunction.convertBlobToBase64(blob);\r\n let wb = XLSX.read(data.blob, { type: \"base64\", raw: true });\r\n let fileJsonData: any = [];\r\n if (wb?.SheetNames?.length > 0) {\r\n wb?.SheetNames.forEach((item) => {\r\n let JSONData: any = XLSX.utils.sheet_to_json(wb.Sheets[item], {\r\n defval: \"\",\r\n raw: false,\r\n });\r\n JSONData.forEach((json) => {\r\n for (let key in json) {\r\n const cellValue = getParsedDate(json[key], true);\r\n json[key] =\r\n cellValue instanceof Date && isValid(cellValue)\r\n ? cellValue.toLocaleDateString(\"en-UK\")\r\n : cellValue;\r\n }\r\n });\r\n fileJsonData = [...fileJsonData, ...JSONData];\r\n });\r\n return fileJsonData;\r\n } else {\r\n return [];\r\n }\r\n //const excelData = utils.json_to_sheet(data);\r\n};\r\n","import { GridColumnType } from \"../types\";\r\n\r\nexport const attachAlignmentProps = (columns: GridColumnType[]) => {\r\n if (Array.isArray(columns)) {\r\n return columns.map((column) => {\r\n const { alignment, ...others } = column;\r\n switch (alignment) {\r\n case \"right\":\r\n return { ...others, TableCellProps: { align: \"right\" } };\r\n default:\r\n return others;\r\n }\r\n });\r\n }\r\n return [];\r\n};\r\n","import React from \"react\";\nimport TableCell from \"@mui/material/TableCell\";\nimport IconButton from \"@mui/material/IconButton\";\nimport ArrowRightSharpIcon from \"@mui/icons-material/ArrowRightSharp\";\nimport ArrowDropDownSharpIcon from \"@mui/icons-material/ArrowDropDownSharp\";\nimport { makeStyles } from \"@mui/styles\";\n\nconst useStyles = makeStyles({\n root: {\n \"&:focus-within\": {\n border: \"1px solid rgba(25, 118, 210, 0.5)\",\n },\n borderLeft: \"0.5px solid #BABABA\",\n borderRight: \"0.5px solid #BABABA\",\n },\n});\n\nexport const CellWrapper = ({\n children,\n showBorder,\n positionRelative,\n ...others\n}) => {\n const {\n value,\n cell,\n column: {\n color = \"initial\",\n TableCellProps,\n isVisibleField = (data) => {\n return true;\n },\n },\n row,\n } = others;\n\n const classes = useStyles();\n let myColor = typeof color === \"function\" ? color(value, row) : color;\n let result = children;\n let isVisibleData = isVisibleField(row?.original);\n if (cell?.isGrouped) {\n result = (\n <>\n <IconButton\n {...row.getToggleRowExpandedProps([{ style: { padding: 0 } }])}\n >\n {row.isExpanded ? (\n <ArrowDropDownSharpIcon />\n ) : (\n <ArrowRightSharpIcon />\n )}\n </IconButton>\n {children}\n <i>({row.subRows.length})</i>\n </>\n );\n } else if (cell?.isPlaceholder) {\n result = null;\n }\n\n return (\n <TableCell\n component=\"div\"\n variant=\"head\"\n className={showBorder ? classes.root : \"\"}\n {...cell.getCellProps([\n { ...(TableCellProps ?? {}) },\n {\n style: {\n display: \"block\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n padding: \"0px 10px\",\n lineHeight: \"34px\",\n color: myColor,\n position: positionRelative ? \"relative\" : \"static\",\n },\n },\n ])}\n >\n {isVisibleData ? result : null}\n </TableCell>\n );\n};\n","import React from \"react\";\r\nimport Tooltip from \"@mui/material/Tooltip\";\r\n//import { boolean } from \"yup\";\r\nimport { CellWrapper } from \"./cellWrapper\";\r\n\r\nexport const DefaultRowCellRenderer = (props) => {\r\n const {\r\n value,\r\n column: {\r\n showTooltip = false,\r\n transform = (value) => value,\r\n isAutoSequence = false,\r\n },\r\n row,\r\n data,\r\n } = props;\r\n //console.log(props);\r\n let newValue;\r\n let {\r\n original: { _isNewRow },\r\n } = row;\r\n if (isAutoSequence) {\r\n if (Boolean(row?.original?._displaySequence)) {\r\n newValue = row?.original?._displaySequence;\r\n } else if (Boolean(_isNewRow)) {\r\n newValue = data.reduce((acuu, { _hidden }) => {\r\n if (!Boolean(_hidden)) {\r\n return acuu + 1;\r\n }\r\n return acuu;\r\n }, 0);\r\n } else {\r\n newValue = Number(row?.index ?? 0) + 1;\r\n }\r\n } else {\r\n newValue = transform(value);\r\n }\r\n\r\n let result = showTooltip ? (\r\n <Tooltip title={newValue}>\r\n <span>{newValue}</span>\r\n </Tooltip>\r\n ) : (\r\n newValue\r\n );\r\n return <CellWrapper {...props}>{result}</CellWrapper>;\r\n};\r\n","import { GridColumnType } from \"../types\";\r\nimport { singletonFunctionRegisrationFactoryForTableCells } from \"components/utils/functionRegistry\";\r\nimport { DefaultRowCellRenderer } from \"components/tableCellComponents/defaultRowCellRenderer\";\r\n\r\nexport const attachCellComponentsToMetaData = (columns: GridColumnType[]) => {\r\n if (Array.isArray(columns)) {\r\n return columns.map((column) => {\r\n const { componentType, ...others } = column;\r\n //console.log(others);\r\n let Component = singletonFunctionRegisrationFactoryForTableCells.getFn(\r\n componentType,\r\n DefaultRowCellRenderer,\r\n );\r\n return {\r\n ...others,\r\n Cell: Component,\r\n };\r\n });\r\n }\r\n return [];\r\n};\r\n","import TextField from \"@mui/material/TextField\";\n\nimport { withStyles } from \"@mui/styles\";\n\nconst StyledTextField = withStyles({\n root: {\n \"& .MuiInputLabel-formControl\": {\n //color: \"#736f6f\",\n padding: \"2px 0px 7px 0px\",\n fontWeight: 600,\n textTransform: \"capitalize\",\n fontSize: \"0.875rem\",\n whiteSpace: \"normal\",\n lineHeight: \"0.875\",\n \"@media (max-width: 1200px)\": {\n fontSize: \"0.75rem\",\n },\n \"@media (max-width: 1440px)\": {\n fontSize: \"0.875rem\",\n },\n },\n \"& .MuiInputLabel-shrink\": {\n transform: \"translate(0, 1.5px) scale(1)\",\n },\n \"& label.Mui-focused\": {\n //color: \"#26A456\",\n color: \"var(--theme-color1)\",\n },\n\n \"& .MuiInputBase-root\": {\n border: \"1px solid #BABABA\",\n marginTop: \"26px\",\n borderRadius: 5,\n backgroundColor: \"#fff\",\n // \"@media (max-width: 1200px)\": {\n // fontSize: \"0.875rem\",\n // },\n\n // for date field calendar icon\n \"& .MuiInputAdornment-root .MuiButtonBase-root\": {\n marginRight: 0,\n },\n\n \"& input\": {\n padding: \"6px 7px\",\n height: \"22px\",\n //color: \"#000\",\n \"&::placeholder\": {\n //color: \"#000\",\n //fontSize: \"0.875rem\",\n },\n \"@media (max-width: 1200px)\": {\n height: \"18px\",\n },\n },\n\n \"& .MuiInputBase-inputMultiline\": {\n padding: \"6px 7px\",\n },\n\n \"& .MuiInputBase-input\": {\n padding: \"6px 7px\",\n },\n },\n\n \"& .MuiInputBase-root.Mui-disabled\": {\n \"& input[type='password'] + .MuiInputAdornment-root\": {\n display: \"none\",\n },\n },\n // updated by altaf\n \"& .Mui-error:after\": {\n transform: \"scaleX(1) !important\",\n borderBottom: \"3px solid var(--theme-color1)\",\n },\n //\n \"& .MuiInput-underline:before\": {\n borderBottom: \"0\",\n },\n \"& .MuiInput-underline:after\": {\n borderBottom: \"3px solid var(--theme-color1)\",\n transition: \"transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms\",\n },\n\n \"&:hover .MuiInput-underline:before\": {\n //borderBottom: \"0 !important\",\n borderBottom: \"0\",\n },\n\n \"& .MuiInputAdornment-positionStart\": {\n //borderRight: \"1px solid #BABABA !important\",\n borderRight: \"1px solid #BABABA\",\n height: \"30px\",\n maxHeight: \"36px\",\n padding: \"0 1rem\",\n },\n\n \"& .withBorder.MuiInputAdornment-positionEnd\": {\n //borderRight: \"1px solid #BABABA !important\",\n borderLeft: \"1px solid #BABABA\",\n height: \"30px\",\n maxHeight: \"36px\",\n padding: \"0 1rem\",\n },\n\n \"& .MuiSelect-selectMenu\": {\n minHeight: \"22px\",\n lineHeight: \"22px\",\n \"@media (max-width: 1200px)\": {\n minHeight: \"18px\",\n lineHeight: \"18px\",\n },\n },\n },\n})(TextField);\n\nexport default StyledTextField;\n","import TextField from \"@mui/material/TextField\";\r\n\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst StyledTextField2 = withStyles({\r\n root: {\r\n \"& .MuiInputLabel-formControl\": {\r\n //color: \"#736f6f\",\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n fontSize: \"1rem\",\r\n \"@media (max-width: 1200px)\": {\r\n fontSize: \"0.75rem\",\r\n },\r\n \"@media (max-width: 1440px)\": {\r\n fontSize: \"0.875rem\",\r\n },\r\n },\r\n \"& .MuiInputLabel-shrink\": {\r\n transform: \"translate(0, 1.5px) scale(1)\",\r\n },\r\n \"& label.Mui-focused\": {\r\n //color: \"#26A456\",\r\n },\r\n\r\n \"& .MuiInputBase-root\": {\r\n border: \"1px solid #BABABA\",\r\n borderRadius: 5,\r\n backgroundColor: \"#fff\",\r\n // \"@media (max-width: 1200px)\": {\r\n // fontSize: \"0.875rem\",\r\n // },\r\n\r\n \"& input\": {\r\n padding: \"6px 7px\",\r\n height: \"22px\",\r\n \"&::placeholder\": {\r\n //color: \"#000\",\r\n fontSize: \"0.875rem\",\r\n },\r\n \"@media (max-width: 1200px)\": {\r\n height: \"18px\",\r\n },\r\n },\r\n\r\n \"& inputMultiline\": {\r\n padding: \"6px 7px\",\r\n },\r\n\r\n \"& .MuiInputBase-input\": {\r\n padding: \"6px 7px\",\r\n },\r\n },\r\n\r\n \"& .MuiInput-underline:before\": {\r\n borderBottom: \"0\",\r\n },\r\n \"& .MuiInput-underline:after\": {\r\n borderBottom: \"3px solid #3f51b5\",\r\n transition: \"transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms\",\r\n },\r\n \"&:hover .MuiInput-underline:before\": {\r\n //borderBottom: \"0 !important\",\r\n borderBottom: \"0\",\r\n },\r\n\r\n \"& .MuiInputAdornment-positionStart\": {\r\n //borderRight: \"1px solid #BABABA !important\",\r\n borderRight: \"1px solid #BABABA\",\r\n height: \"36px\",\r\n maxHeight: \"36px\",\r\n padding: \"0 1rem\",\r\n },\r\n\r\n \"& .MuiSelect-selectMenu\": {\r\n minHeight: \"22px\",\r\n lineHeight: \"22px\",\r\n \"@media (max-width: 1200px)\": {\r\n minHeight: \"18px\",\r\n lineHeight: \"18px\",\r\n },\r\n },\r\n },\r\n})(TextField);\r\n\r\nexport default StyledTextField2;\r\n","import TextField from \"@mui/material/TextField\";\r\n\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst StyledTextField3 = withStyles({\r\n root: {\r\n \"& .MuiInputLabel-formControl\": {\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n fontSize: \"1rem\",\r\n \"@media (max-width: 1200px)\": {\r\n fontSize: \"0.75rem\",\r\n },\r\n \"@media (max-width: 1440px)\": {\r\n fontSize: \"0.875rem\",\r\n },\r\n },\r\n \"& .MuiInputLabel-shrink\": {\r\n transform: \"translate(0, 1.5px) scale(1)\",\r\n },\r\n\r\n \"& .MuiInputBase-root\": {\r\n marginTop: 0,\r\n border: \"0px\",\r\n borderLeft: \"1px solid #BABABA\",\r\n borderRadius: 5,\r\n borderBottomLeftRadius: 0,\r\n borderTopLeftRadius: 0,\r\n backgroundColor: \"#fff\",\r\n // \"@media (max-width: 1200px)\": {\r\n // fontSize: \"0.875rem\",\r\n // },\r\n\r\n \"& input\": {\r\n padding: \"6px 7px\",\r\n height: \"22px\",\r\n \"&::placeholder\": {\r\n fontSize: \"0.875rem\",\r\n },\r\n \"@media (max-width: 1200px)\": {\r\n height: \"18px\",\r\n },\r\n },\r\n\r\n \"& inputMultiline\": {\r\n padding: \"6px 7px\",\r\n },\r\n\r\n \"& .MuiInputBase-input\": {\r\n padding: \"6px 7px\",\r\n },\r\n },\r\n\r\n \"& .MuiInput-underline:before\": {\r\n borderBottom: \"0\",\r\n },\r\n \"& .MuiInput-underline:after\": {\r\n borderBottom: \"3px solid var(--theme-color1)\",\r\n transition: \"transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms\",\r\n },\r\n \"&:hover .MuiInput-underline:before\": {\r\n borderBottom: \"0\",\r\n },\r\n\r\n \"& .MuiInputAdornment-positionStart\": {\r\n borderRight: \"1px solid #BABABA\",\r\n height: \"36px\",\r\n maxHeight: \"36px\",\r\n padding: \"0 1rem\",\r\n },\r\n\r\n \"& .MuiSelect-selectMenu\": {\r\n minHeight: \"22px\",\r\n lineHeight: \"22px\",\r\n \"@media (max-width: 1200px)\": {\r\n minHeight: \"18px\",\r\n lineHeight: \"18px\",\r\n },\r\n },\r\n },\r\n})(TextField);\r\n\r\nexport default StyledTextField3;\r\n","import TextField from \"@mui/material/TextField\";\r\n\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst ChipTextField = withStyles({\r\n root: {\r\n \"& .MuiInputLabel-formControl\": {\r\n //color: \"#736f6f\",\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n fontSize: \"1rem\",\r\n \"@media (max-width: 1200px)\": {\r\n fontSize: \"0.75rem\",\r\n },\r\n \"@media (max-width: 1440px)\": {\r\n fontSize: \"0.875rem\",\r\n },\r\n },\r\n \"& .MuiInputLabel-shrink\": {\r\n transform: \"translate(0, 1.5px) scale(1)\",\r\n },\r\n \"& label.Mui-focused\": {\r\n //color: \"#26A456\",\r\n },\r\n\r\n \"& .MuiInputBase-root\": {\r\n border: \"1px solid #BABABA\",\r\n marginTop: \"26px\",\r\n borderRadius: 5,\r\n backgroundColor: \"#fff\",\r\n \"@media (max-width: 1200px)\": {\r\n fontSize: \"0.875rem\",\r\n },\r\n flexWrap: \"wrap\",\r\n\r\n \"& input\": {\r\n padding: \"6px 7px \",\r\n width: 0,\r\n minWidth: 30,\r\n flexGrow: 1,\r\n height: \"22px\",\r\n //color: \"#000\",\r\n \"&::placeholder\": {\r\n //color: \"#000\",\r\n //fontSize: \"0.875rem\",\r\n },\r\n \"@media (max-width: 1200px)\": {\r\n height: \"18px\",\r\n },\r\n },\r\n\r\n \"& inputMultiline\": {\r\n padding: \"6px 7px\",\r\n },\r\n\r\n \"& .MuiInputBase-input\": {\r\n padding: \"6px 7px\",\r\n },\r\n },\r\n\r\n \"& .MuiInput-underline:before\": {\r\n borderBottom: \"0\",\r\n },\r\n \"& .MuiInput-underline:after\": {\r\n borderBottom: \"3px solid #3f51b5\",\r\n transition: \"transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms\",\r\n },\r\n \"&:hover .MuiInput-underline:before\": {\r\n //borderBottom: \"0 !important\",\r\n borderBottom: \"0\",\r\n },\r\n\r\n \"& .MuiInputAdornment-positionStart\": {\r\n //borderRight: \"1px solid #BABABA !important\",\r\n borderRight: \"1px solid #BABABA\",\r\n height: \"36px\",\r\n maxHeight: \"36px\",\r\n padding: \"0 1rem\",\r\n },\r\n\r\n \"& .MuiSelect-selectMenu\": {\r\n minHeight: \"22px\",\r\n lineHeight: \"22px\",\r\n \"@media (max-width: 1200px)\": {\r\n minHeight: \"18px\",\r\n lineHeight: \"18px\",\r\n },\r\n },\r\n },\r\n})(TextField);\r\n\r\nexport default ChipTextField;\r\n","import Checkbox from \"@mui/material/Checkbox\";\nimport { withStyles } from \"@mui/styles\";\n\nconst StyledCheckbox = withStyles({\n root: {\n color: \"#0063A3\",\n alignSelf: \"center\",\n padding: \"0 9px\",\n \"&$checked\": {\n color: \"var(--theme-color1)\", // \"#26A456\",\n },\n },\n checked: {},\n})(Checkbox);\n\nexport default StyledCheckbox;\n","import { QueryClient } from \"react-query\";\r\nexport const queryClient = new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n cacheTime: 100000000,\r\n refetchOnWindowFocus: false,\r\n refetchOnMount: false,\r\n refetchOnReconnect: false,\r\n },\r\n },\r\n});\r\n","import { useRef, createContext, useCallback } from \"react\";\r\n\r\ninterface RemoveCacheRegisterType {\r\n addEntry: any;\r\n removeEntry: any;\r\n getEntries: any;\r\n}\r\n\r\nexport const ClearCacheContext = createContext<RemoveCacheRegisterType>({\r\n addEntry: () => {},\r\n removeEntry: (value: any[]) => {},\r\n getEntries: () => {},\r\n});\r\n\r\nexport const ClearCacheProvider = ({ children }) => {\r\n const entiresCache = useRef<any[]>([]);\r\n\r\n const addEntry = useCallback((value: any[]) => {\r\n let foundIndex = entiresCache.current.findIndex(\r\n (one) => one === JSON.stringify(value)\r\n );\r\n if (foundIndex < 0) {\r\n entiresCache.current.push(JSON.stringify(value));\r\n }\r\n }, []);\r\n const removeEntry = useCallback((value: any[]) => {\r\n let foundIndex = entiresCache.current.findIndex(\r\n (one) => one === JSON.stringify(value)\r\n );\r\n if (foundIndex >= 0) {\r\n const prev = entiresCache.current.slice(0, foundIndex);\r\n const next = entiresCache.current.slice(foundIndex + 1);\r\n entiresCache.current = [...prev, ...next];\r\n }\r\n }, []);\r\n const getEntries = useCallback(() => {\r\n return entiresCache.current.map((one) => JSON.parse(one));\r\n }, []);\r\n return (\r\n <ClearCacheContext.Provider\r\n value={\r\n {\r\n addEntry,\r\n removeEntry,\r\n getEntries,\r\n } as RemoveCacheRegisterType\r\n }\r\n >\r\n {children}\r\n </ClearCacheContext.Provider>\r\n );\r\n};\r\n","export const cacheWrapperKeyGen = (values) => {\r\n if (Array.isArray(values) && values.length > 0) {\r\n return values.sort().join(\"-\");\r\n }\r\n return `NO_CACHING_KEY_AVAILABLE`;\r\n};\r\n","import { LinearProgress } from \"@mui/material\";\nimport { ActionType, AuthContextType, AuthStateType } from \"components/types\";\nimport { createContext, useReducer, useState } from \"react\";\n\nconst inititalState: AuthStateType = {\n access_token: {},\n isLoggedIn: false,\n role: \"\",\n roleName: \"\",\n userSubType: \"\",\n companyID: \"\",\n companyName: \"\",\n groupName: \"\",\n access: {},\n menulistdata: [],\n user: {\n branch: \"\",\n branchCode: \"\",\n name: \"\",\n lastLogin: \"\",\n id: \"\",\n session_id: \"\",\n },\n uniqueID: \"\",\n};\n\nconst authReducer = (\n state: AuthStateType,\n action: ActionType,\n): AuthStateType => {\n switch (action.type) {\n case \"login\": {\n return action.payload;\n }\n case \"logout\": {\n return inititalState;\n }\n default: {\n return state;\n }\n }\n};\nexport const AuthContext = createContext<AuthContextType>({\n authState: inititalState,\n});\n\nexport const AuthProvider = ({ children }) => {\n const [state, dispatch] = useReducer(authReducer, inititalState);\n const [authenticating, setAuthenticating] = useState(true);\n\n return (\n <AuthContext.Provider\n value={{\n authState: state,\n }}\n >\n {authenticating ? <LinearProgress color=\"secondary\" /> : children}\n </AuthContext.Provider>\n );\n};\n","import { useEffect, useContext } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { cacheWrapperKeyGen, ClearCacheContext } from \"cache\";\nimport { transformDependentFieldsState } from \"packages/form\";\nimport _ from \"lodash\";\nimport { useTranslation } from \"react-i18next\";\nimport { AuthContext } from \"pages_audit/auth/authContext\";\nconst computeDependentKey = (dependentValues = {}) => {\n let keys = Object.keys(dependentValues).sort();\n return keys.reduce((accum, one) => {\n accum[one] = dependentValues[one].value;\n return accum;\n }, {});\n};\n\nexport const useOptionsFetcher = (\n formState,\n options,\n setOptions,\n handleChangeInterceptor,\n dependentValues,\n incomingMessage,\n runValidation,\n whenToRunValidation,\n _optionsKey,\n disableCaching,\n setIncomingMessage,\n skipDefaultOption,\n defaultOptionLabel,\n enableDefaultOption,\n): { loadingOptions: boolean } => {\n let loadingOptions = false;\n let queryKey: any[] = [];\n const { authState, ...otherFormState } = formState;\n const { addEntry } = useContext(ClearCacheContext);\n const { t } = useTranslation();\n const formStateKeys = cacheWrapperKeyGen(\n Object.values(\n typeof otherFormState === \"object\" && otherFormState !== null\n ? formState\n : { none: true },\n ),\n );\n if (Boolean(disableCaching)) {\n const dependentKeys = computeDependentKey(dependentValues);\n queryKey = [_optionsKey, formStateKeys, dependentKeys];\n } else {\n queryKey = [_optionsKey, formStateKeys];\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n useEffect(() => {\n if (!disableCaching) {\n addEntry([_optionsKey, formStateKeys]);\n }\n }, [addEntry, _optionsKey, formStateKeys]);\n\n const queryOptions = useQuery(\n queryKey,\n () =>\n options(\n dependentValues,\n otherFormState,\n transformDependentFieldsState(dependentValues),\n authState,\n ),\n {\n retry: false,\n enabled: typeof options === \"function\",\n cacheTime: disableCaching ? 0 : 100000000,\n },\n );\n loadingOptions = queryOptions.isLoading;\n /*eslint-disable */\n useEffect(() => {\n if (options === undefined) {\n setOptions([\n {\n label: \"No Data\",\n value: null,\n disabled: true,\n isDefaultOption: true,\n },\n ]);\n loadingOptions = false;\n } else if (Array.isArray(options)) {\n if (!Boolean(skipDefaultOption)) {\n options = [\n {\n label: Boolean(defaultOptionLabel)\n ? t(defaultOptionLabel)\n : t(\"SelectOption\"),\n value: \" \",\n disabled: Boolean(enableDefaultOption) ? false : true,\n isDefaultOption: true,\n },\n ...options,\n ];\n }\n options = _.uniqBy(options, \"value\");\n setOptions(options);\n loadingOptions = false;\n } else if (typeof options === \"object\") {\n const { options: _options, ...others } = options;\n if (Array.isArray(_options)) {\n setOptions(options);\n if (Object.keys(others).length > 0) {\n setIncomingMessage(others);\n }\n } else {\n setOptions([\n {\n label: \"Invalid Data\",\n value: null,\n disabled: true,\n isDefaultOption: true,\n },\n ]);\n }\n loadingOptions = false;\n } else if (queryOptions.isLoading) {\n setOptions([\n {\n label: \"loading...\",\n value: null,\n disabled: true,\n isDefaultOption: true,\n },\n ]);\n loadingOptions = true;\n } else if (queryOptions.isError) {\n setOptions([\n {\n label: \"Couldn't fetch\",\n value: null,\n disabled: true,\n isDefaultOption: true,\n },\n ]);\n console.log(\n `error occured while fetching data for ${_optionsKey}`,\n queryOptions.error,\n );\n loadingOptions = false;\n } else if (Array.isArray(queryOptions.data)) {\n let newOptions = queryOptions.data;\n if (!Boolean(skipDefaultOption)) {\n newOptions = [\n {\n label: Boolean(defaultOptionLabel)\n ? t(defaultOptionLabel)\n : t(\"SelectOption\"),\n value: \" \",\n disabled: Boolean(enableDefaultOption) ? false : true,\n isDefaultOption: true,\n },\n ...newOptions,\n ];\n }\n setOptions(newOptions);\n loadingOptions = false;\n } else if (typeof queryOptions.data === \"object\") {\n const { options: _options, ...others } = queryOptions.data;\n if (Array.isArray(_options)) {\n setOptions(_options);\n if (Object.keys(others).length > 0) {\n setIncomingMessage(others);\n }\n } else {\n setOptions([\n {\n label: \"Invalid Data\",\n value: null,\n disabled: true,\n isDefaultOption: true,\n },\n ]);\n }\n loadingOptions = false;\n } else {\n setOptions([\n {\n label: \"Couldn't fetch\",\n value: null,\n disabled: true,\n isDefaultOption: true,\n },\n ]);\n console.log(\n `expected optionsFunction:${_optionsKey} in select component to return array of OptionsType but got: ${queryOptions.data}`,\n );\n loadingOptions = false;\n }\n }, [loadingOptions, queryOptions.dataUpdatedAt]);\n\n useEffect(() => {\n if (incomingMessage !== null && typeof incomingMessage === \"object\") {\n const { value } = incomingMessage;\n if (Boolean(value) || value === \"\") {\n handleChangeInterceptor(value);\n if (whenToRunValidation === \"onBlur\") {\n runValidation({ value: value }, true);\n }\n }\n }\n }, [\n incomingMessage,\n setOptions,\n handleChangeInterceptor,\n runValidation,\n whenToRunValidation,\n ]);\n\n return { loadingOptions };\n};\n\n/****** ---- */\n\nexport const useOptionsFetcherSimple = (\n options,\n setOptions,\n _optionsKey,\n disableCaching,\n optionsProps,\n skipDefaultOption,\n defaultOptionLabel,\n enableDefaultOption,\n) => {\n let loadingOptions = false;\n const { authState } = useContext(AuthContext);\n const { t } = useTranslation();\n let queryKey: any[] = [];\n if (Boolean(disableCaching)) {\n queryKey = [_optionsKey, optionsProps];\n } else {\n queryKey = [_optionsKey];\n }\n const queryOptions = useQuery(\n queryKey,\n () => options(optionsProps, authState),\n {\n retry: false,\n enabled: typeof options === \"function\",\n cacheTime: disableCaching ? 0 : 100000000,\n },\n );\n loadingOptions = queryOptions.isLoading;\n useEffect(() => {\n if (options === undefined) {\n setOptions([{ label: \"No Data\", value: null, disabled: true }]);\n loadingOptions = false;\n } else if (Array.isArray(options)) {\n if (!Boolean(skipDefaultOption)) {\n options = [\n {\n label: Boolean(defaultOptionLabel)\n ? t(defaultOptionLabel)\n : t(\"SelectOption\"),\n value: \"00\",\n disabled: Boolean(enableDefaultOption) ? false : true,\n isDefaultOption: true,\n },\n ...options,\n ];\n }\n options = _.uniqBy(options, \"value\");\n setOptions(options);\n loadingOptions = false;\n } else if (queryOptions.isLoading) {\n setOptions([{ label: \"loading...\", value: null, disabled: true }]);\n loadingOptions = true;\n } else if (queryOptions.isError) {\n setOptions([{ label: \"Couldn't fetch\", value: null, disabled: true }]);\n console.log(\n `error occured while fetching data for ${_optionsKey}`,\n queryOptions.error,\n );\n loadingOptions = false;\n } else {\n if (Array.isArray(queryOptions.data)) {\n let newOptions = queryOptions.data;\n if (!Boolean(skipDefaultOption)) {\n newOptions = [\n {\n label: Boolean(defaultOptionLabel)\n ? t(defaultOptionLabel)\n : t(\"SelectOption\"),\n value: \"00\",\n disabled: Boolean(enableDefaultOption) ? false : true,\n isDefaultOption: true,\n },\n ...newOptions,\n ];\n }\n setOptions(newOptions);\n } else {\n setOptions([{ label: \"Couldn't fetch\", value: null, disabled: true }]);\n console.log(\n `expected optionsFunction:${_optionsKey} in select component to return array of OptionsType but got: ${queryOptions.data}`,\n );\n }\n loadingOptions = false;\n }\n }, [loadingOptions]);\n\n return { loadingOptions };\n};\n\n/**** */\n\nexport const useOptionsFetcherSimpleWithRemoveCache = (\n options,\n setOptions,\n _optionsKey,\n disableCaching,\n optionsProps,\n skipDefaultOption,\n defaultOptionLabel,\n) => {\n let loadingOptions = false;\n const { addEntry } = useContext(ClearCacheContext);\n let queryKey: any[] = [];\n const { t } = useTranslation();\n if (Boolean(disableCaching)) {\n queryKey = [_optionsKey, optionsProps];\n } else {\n queryKey = [_optionsKey];\n }\n\n useEffect(() => {\n if (!disableCaching) {\n addEntry(_optionsKey);\n }\n }, [addEntry]);\n\n const queryOptions = useQuery(queryKey, () => options(optionsProps), {\n retry: false,\n enabled: typeof options === \"function\",\n cacheTime: disableCaching ? 0 : 100000000,\n });\n loadingOptions = queryOptions.isLoading;\n useEffect(() => {\n if (options === undefined) {\n setOptions([{ label: \"No Data\", value: null, disabled: true }]);\n loadingOptions = false;\n } else if (Array.isArray(options)) {\n if (!Boolean(skipDefaultOption)) {\n options = [\n {\n label: Boolean(defaultOptionLabel)\n ? t(defaultOptionLabel)\n : t(\"SelectOption\"),\n value: \"00\",\n disabled: true,\n },\n ...options,\n ];\n }\n options = _.uniqBy(options, \"value\");\n setOptions(options);\n loadingOptions = false;\n } else if (queryOptions.isLoading) {\n setOptions([{ label: \"loading...\", value: null, disabled: true }]);\n loadingOptions = true;\n } else if (queryOptions.isError) {\n setOptions([{ label: \"Couldn't fetch\", value: null, disabled: true }]);\n console.log(\n `error occured while fetching data for ${_optionsKey}`,\n queryOptions.error,\n );\n loadingOptions = false;\n } else {\n if (Array.isArray(queryOptions.data)) {\n let newOptions = queryOptions.data;\n if (!Boolean(skipDefaultOption)) {\n newOptions = [\n {\n label: Boolean(defaultOptionLabel)\n ? t(defaultOptionLabel)\n : t(\"SelectOption\"),\n value: \"00\",\n disabled: true,\n },\n ...newOptions,\n ];\n }\n setOptions(newOptions);\n } else {\n setOptions([{ label: \"Couldn't fetch\", value: null, disabled: true }]);\n console.log(\n `expected optionsFunction:${_optionsKey} in select component to return array of OptionsType but got: ${queryOptions.data}`,\n );\n }\n loadingOptions = false;\n }\n }, [loadingOptions]);\n\n return { loadingOptions };\n};\n","//import { AnyKindOfDictionary } from \"lodash\";\r\nimport { OptionsProps } from \"../types\";\r\n\r\nexport const getLabelFromValues =\r\n (options: OptionsProps[], getString: boolean = false) =>\r\n (values: any[] | any) => {\r\n let result: any[] = [];\r\n if (!Array.isArray(values)) {\r\n values = [values];\r\n }\r\n if (Array.isArray(options)) {\r\n result = options.reduce<string[]>((acc, current) => {\r\n if (values.indexOf(current.value) >= 0) {\r\n acc.push(current.label);\r\n }\r\n return acc;\r\n }, []);\r\n }\r\n if (getString) {\r\n return result.join(\",\");\r\n }\r\n return result;\r\n };\r\nexport const getSelectedOptionData =\r\n (options: any[]) => (values: any[] | any) => {\r\n let result: any[] = [];\r\n if (!Array.isArray(values)) {\r\n values = [values];\r\n }\r\n if (Array.isArray(options)) {\r\n result = options.reduce<OptionsProps[]>((acc, current) => {\r\n if (values.indexOf(current.value) >= 0) {\r\n acc.push(current);\r\n }\r\n return acc;\r\n }, []);\r\n }\r\n\r\n return result;\r\n };\r\n","//Copied from num-words library and modified to support 10 digits\r\n\r\nconst a = [\r\n \"\",\r\n \"one \",\r\n \"two \",\r\n \"three \",\r\n \"four \",\r\n \"five \",\r\n \"six \",\r\n \"seven \",\r\n \"eight \",\r\n \"nine \",\r\n \"ten \",\r\n \"eleven \",\r\n \"twelve \",\r\n \"thirteen \",\r\n \"fourteen \",\r\n \"fifteen \",\r\n \"sixteen \",\r\n \"seventeen \",\r\n \"eighteen \",\r\n \"nineteen \",\r\n];\r\nconst b = [\r\n \"\",\r\n \"\",\r\n \"twenty\",\r\n \"thirty\",\r\n \"forty\",\r\n \"fifty\",\r\n \"sixty\",\r\n \"seventy\",\r\n \"eighty\",\r\n \"ninety\",\r\n];\r\n\r\nconst regex = /^(\\d{1})(\\d{2})(\\d{2})(\\d{2})(\\d{1})(\\d{2})$/;\r\n\r\nconst getLT20 = (n) => a[Number(n)];\r\nconst getGT20 = (n) => b[n[0]] + \" \" + a[n[1]];\r\n\r\nexport function numWords(input) {\r\n const num = Number(input);\r\n if (isNaN(num)) return \"\";\r\n if (num === 0) return \"zero\";\r\n\r\n const numStr = num.toString();\r\n if (numStr.length > 10) {\r\n throw new Error(\"overflow\"); // Does not support converting more than 9 digits yet\r\n }\r\n\r\n const [, n0, n1, n2, n3, n4, n5]: any = (\"0000000000\" + numStr)\r\n .substr(-10)\r\n .match(regex); // left pad zeros\r\n\r\n let str = \"\";\r\n /* eslint-disable eqeqeq */\r\n str += n0 != 0 ? getLT20(n0) + \"hundred \" : \"\";\r\n str += n1 != 0 && str != \"\" ? \"and \" : \"\";\r\n str +=\r\n n1 != 0 ? (getLT20(n1) || getGT20(n1)) + \"crore \" : n0 != 0 ? \"crore \" : \"\";\r\n str += n2 != 0 ? (getLT20(n2) || getGT20(n2)) + \"lakh \" : \"\";\r\n str += n3 != 0 ? (getLT20(n3) || getGT20(n3)) + \"thousand \" : \"\";\r\n str += n4 != 0 ? getLT20(n4) + \"hundred \" : \"\";\r\n str += n5 != 0 && str != \"\" ? \"and \" : \"\";\r\n str += n5 != 0 ? getLT20(n5) || getGT20(n5) : \"\";\r\n\r\n return str.trim();\r\n}\r\n","import { FC, useState, useCallback } from \"react\";\r\nimport { SelectProps } from \"@mui/material/Select\";\r\nimport { TextFieldProps } from \"@mui/material/TextField\";\r\nimport {\r\n TextFieldForSelect,\r\n TextField3,\r\n TextField,\r\n} from \"components/styledComponent\";\r\nimport MenuItem, { MenuItemProps } from \"@mui/material/MenuItem\";\r\nimport CircularProgress, {\r\n CircularProgressProps,\r\n} from \"@mui/material/CircularProgress\";\r\nimport InputAdornment from \"@mui/material/InputAdornment\";\r\nimport { Checkbox } from \"components/styledComponent/checkbox\";\r\nimport { OptionsProps, Merge, OptionsFn } from \"../types\";\r\nimport { getLabelFromValues, useOptionsFetcherSimple } from \"../utils\";\r\n\r\ninterface MySelectExtendedProps {\r\n MenuItemProps?: MenuItemProps;\r\n SelectProps?: SelectProps;\r\n CircularProgressProps?: CircularProgressProps;\r\n options?: OptionsProps[] | OptionsFn;\r\n _optionsKey?: string;\r\n multiple?: boolean;\r\n showCheckbox?: boolean;\r\n handleChange?: any;\r\n handleBlur?: any;\r\n error?: any;\r\n touched?: any;\r\n loading?: boolean;\r\n readOnly?: boolean;\r\n value?: any;\r\n disableCaching?: boolean;\r\n optionsProps?: any;\r\n selectVariant?: \"default\" | \"andornment\" | \"regular\";\r\n skipDefaultOption?: boolean;\r\n defaultOptionLabel?: string;\r\n defaultSpaceAdd?: boolean;\r\n enableDefaultOption?: boolean;\r\n}\r\ntype MySelectProps = Merge<TextFieldProps, MySelectExtendedProps>;\r\n\r\nexport const SelectRenderOnly: FC<MySelectProps> = ({\r\n options,\r\n MenuItemProps,\r\n SelectProps,\r\n multiple,\r\n showCheckbox,\r\n InputProps,\r\n inputProps,\r\n CircularProgressProps,\r\n handleBlur,\r\n handleChange,\r\n error,\r\n touched,\r\n value,\r\n loading,\r\n readOnly,\r\n _optionsKey,\r\n disableCaching,\r\n optionsProps,\r\n selectVariant = \"default\",\r\n skipDefaultOption,\r\n defaultOptionLabel,\r\n defaultSpaceAdd = false,\r\n InputLabelProps = {},\r\n enableDefaultOption = false,\r\n ...others\r\n}) => {\r\n let TextFieldToRender: any;\r\n if (selectVariant === \"andornment\") {\r\n TextFieldToRender = TextField3;\r\n } else if (selectVariant === \"regular\") {\r\n TextFieldToRender = TextField;\r\n } else {\r\n TextFieldToRender = TextFieldForSelect;\r\n }\r\n\r\n const [_options, setOptions] = useState<OptionsProps[]>([]);\r\n const isTouched = Boolean(touched);\r\n const isError = isTouched && Boolean(error);\r\n const { loadingOptions } = useOptionsFetcherSimple(\r\n options,\r\n setOptions,\r\n _optionsKey,\r\n disableCaching,\r\n optionsProps,\r\n skipDefaultOption,\r\n defaultOptionLabel,\r\n enableDefaultOption\r\n );\r\n const getLabelFromValuesForOptions = useCallback(\r\n (values) => getLabelFromValues(_options)(values),\r\n [_options]\r\n );\r\n const handleChangeInterceptor = useCallback(\r\n (e) => {\r\n const value = typeof e === \"object\" ? e?.target?.value ?? \"\" : e;\r\n let result = getLabelFromValuesForOptions(value);\r\n result = multiple ? result : result[0];\r\n handleChange(e, result as any);\r\n },\r\n [handleChange, getLabelFromValuesForOptions, multiple]\r\n );\r\n const menuItems = _options.map((menuItem, index) => {\r\n return (\r\n <MenuItem\r\n {...MenuItemProps}\r\n //keep button value to true else keyboard navigation for select will stop working\r\n // button={true}\r\n key={menuItem.value ?? index}\r\n value={menuItem.value}\r\n disabled={menuItem.disabled}\r\n >\r\n {showCheckbox ? (\r\n <Checkbox\r\n checked={\r\n Boolean(multiple)\r\n ? Array.isArray(value) && value.indexOf(menuItem.value) >= 0\r\n : value === menuItem.value\r\n }\r\n />\r\n ) : null}\r\n {menuItem.label}\r\n </MenuItem>\r\n );\r\n });\r\n return (\r\n <TextFieldToRender\r\n {...others}\r\n select={true}\r\n value={multiple && !Array.isArray(value) ? [value] : value}\r\n error={isError}\r\n helperText={isError ? error : defaultSpaceAdd ? \" \" : null}\r\n onChange={handleChangeInterceptor}\r\n onBlur={handleBlur}\r\n SelectProps={{\r\n ...SelectProps,\r\n native: false,\r\n multiple: multiple,\r\n renderValue: multiple ? getLabelFromValues(_options, true) : undefined,\r\n //@ts-ignore\r\n }}\r\n InputLabelProps={{\r\n shrink: true,\r\n ...InputLabelProps,\r\n }}\r\n InputProps={{\r\n endAdornment:\r\n loading || loadingOptions ? (\r\n <InputAdornment position=\"end\">\r\n <CircularProgress\r\n color=\"secondary\"\r\n size={22}\r\n sx={{ marginRight: \"1px\" }}\r\n variant=\"indeterminate\"\r\n {...CircularProgressProps}\r\n />\r\n </InputAdornment>\r\n ) : null,\r\n ...InputProps,\r\n }}\r\n inputProps={{\r\n readOnly: readOnly,\r\n tabIndex: readOnly ? -1 : undefined,\r\n ...inputProps,\r\n }}\r\n >\r\n {menuItems}\r\n </TextFieldToRender>\r\n );\r\n};\r\n","import React, { useState } from \"react\";\nimport { TextField } from \"components/styledComponent/textfield\";\nimport { SelectRenderOnly } from \"components/common/select/render\";\nimport Grid from \"@mui/material/Grid\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport { useTranslation } from \"react-i18next\";\n\nconst options = [\n { label: \"startswith\", value: \"startsWith\" },\n { label: \"endswith\", value: \"endsWith\" },\n { label: \"equal\", value: \"equal\" },\n { label: \"contains\", value: \"contains\" },\n];\n\nexport const ValueFilter = ({\n filterValue,\n id,\n columnName,\n gridProps,\n dispatch,\n maxLength,\n showMaxLength,\n}) => {\n const [text, setText] = useState(filterValue?.value ?? \"\");\n const [condition, setCondition] = useState(filterValue?.condition ?? \"equal\");\n const { t } = useTranslation();\n const handleBlur = () => {\n if (Boolean(text)) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: condition,\n value: text,\n id,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n // console.log(\">>others\", others)\n return (\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\n <TextField\n label={columnName}\n InputLabelProps={{ shrink: true }}\n onChange={(e) => {\n if (\n maxLength !== maxLength ||\n e.target.value.length <= (maxLength ?? 20)\n ) {\n setText(e.target.value);\n }\n }}\n helperText={\n <div style={{ display: \"flex\" }}>\n {maxLength > 0 && Boolean(showMaxLength) ? (\n <FormHelperText\n error={false}\n // disabled={isSubmitting}\n style={{\n flex: 1,\n textAlign: \"right\",\n margin: \"5px 15px 0 0\",\n }}\n >\n {text.length}/{maxLength}\n </FormHelperText>\n ) : null}\n </div>\n }\n onBlur={handleBlur}\n fullWidth\n value={text}\n InputProps={{\n endAdornment: (\n <SelectRenderOnly\n size=\"small\"\n style={{ width: \"50%\" }}\n touched={true}\n error={\"\"}\n multiple={false}\n handleChange={(e) => {\n setCondition(e.target.value);\n }}\n handleBlur={handleBlur}\n // options={options}\n options={options.map((e) => ({\n label: t(e.label),\n value: e.value,\n }))}\n disableCaching={false}\n value={condition}\n selectVariant=\"andornment\"\n />\n ),\n }}\n />\n </Grid>\n );\n};\n","import { FC, useCallback } from \"react\";\nimport { SelectProps } from \"@mui/material/Select\";\nimport { TextFieldProps } from \"@mui/material/TextField\";\nimport {\n TextFieldForSelect,\n TextField3,\n TextField,\n} from \"components/styledComponent\";\nimport MenuItem, { MenuItemProps } from \"@mui/material/MenuItem\";\nimport CircularProgress, {\n CircularProgressProps,\n} from \"@mui/material/CircularProgress\";\nimport InputAdornment from \"@mui/material/InputAdornment\";\nimport { Checkbox } from \"components/styledComponent/checkbox\";\nimport { OptionsProps, Merge } from \"../types\";\nimport { getLabelFromValues } from \"../utils\";\nimport { t } from \"i18next\";\n\ninterface MySelectExtendedProps {\n MenuItemProps?: MenuItemProps;\n SelectProps?: SelectProps;\n CircularProgressProps?: CircularProgressProps;\n options: OptionsProps[];\n multiple?: boolean;\n showCheckbox?: boolean;\n handleChange?: any;\n handleBlur?: any;\n error?: any;\n touched?: any;\n loading?: boolean;\n readOnly?: boolean;\n value?: any;\n disableCaching?: boolean;\n optionsProps?: any;\n selectVariant?: \"default\" | \"andornment\" | \"regular\";\n skipDefaultOption?: boolean;\n defaultOptionLabel?: string;\n loadingOptions: boolean;\n}\ntype MySelectProps = Merge<TextFieldProps, MySelectExtendedProps>;\n\nexport const SelectWithoutOptions: FC<MySelectProps> = ({\n options,\n MenuItemProps,\n SelectProps,\n multiple,\n showCheckbox,\n InputProps,\n inputProps,\n CircularProgressProps,\n handleBlur,\n handleChange,\n error,\n touched,\n value,\n loading,\n readOnly,\n optionsProps,\n selectVariant = \"default\",\n loadingOptions,\n ...others\n}) => {\n let TextFieldToRender: any;\n if (selectVariant === \"andornment\") {\n TextFieldToRender = TextField3;\n } else if (selectVariant === \"regular\") {\n TextFieldToRender = TextField;\n } else {\n TextFieldToRender = TextFieldForSelect;\n }\n\n const isTouched = Boolean(touched);\n const isError = isTouched && Boolean(error);\n\n const getLabelFromValuesForOptions = useCallback(\n (values) => getLabelFromValues(options)(values),\n [options]\n );\n const handleChangeInterceptor = useCallback(\n (e) => {\n const value = typeof e === \"object\" ? e?.target?.value ?? \"\" : e;\n let result = getLabelFromValuesForOptions(value);\n result = multiple ? result : result[0];\n handleChange(e, result as any);\n },\n [handleChange, getLabelFromValuesForOptions, multiple]\n );\n const menuItems = options.map((menuItem, index) => {\n return (\n <MenuItem\n {...MenuItemProps}\n //keep button value to true else keyboard navigation for select will stop working\n // button={true}\n key={menuItem.value ?? index}\n value={menuItem.value}\n disabled={menuItem.disabled}\n >\n {showCheckbox ? (\n <Checkbox\n checked={\n Boolean(multiple)\n ? Array.isArray(value) && value.indexOf(menuItem.value) >= 0\n : value === menuItem.value\n }\n />\n ) : null}\n {t(menuItem.label)}\n </MenuItem>\n );\n });\n return (\n <TextFieldToRender\n {...others}\n select={true}\n value={multiple && !Array.isArray(value) ? [value] : value}\n error={isError}\n helperText={isError ? error : null}\n onChange={handleChangeInterceptor}\n onBlur={handleBlur}\n SelectProps={{\n ...SelectProps,\n native: false,\n multiple: multiple,\n renderValue: multiple ? getLabelFromValues(options, true) : undefined,\n //@ts-ignore\n }}\n InputLabelProps={{\n shrink: true,\n }}\n InputProps={{\n endAdornment:\n loading || loadingOptions ? (\n <InputAdornment position=\"end\">\n <CircularProgress\n color=\"secondary\"\n size={22}\n variant=\"indeterminate\"\n {...CircularProgressProps}\n />\n </InputAdornment>\n ) : null,\n ...InputProps,\n }}\n inputProps={{\n readOnly: readOnly,\n tabIndex: readOnly ? -1 : undefined,\n ...inputProps,\n }}\n >\n {menuItems}\n </TextFieldToRender>\n );\n};\n","import React, { useState, useRef } from \"react\";\nimport { SelectWithoutOptions } from \"components/common/select/render2\";\nimport Grid from \"@mui/material/Grid\";\nimport { useOptionsFetcherSimpleWithRemoveCache } from \"components/common/utils\";\n\nexport const OptionsFilter = ({\n filterValue,\n id,\n columnName,\n filterProps,\n gridProps,\n dispatch,\n}) => {\n const [value, setValue] = useState(filterValue?.value ?? []);\n const optionLabels = useRef<any>(null);\n\n const [myOptions, setMyOptions] = useState([]);\n\n const { loadingOptions } = useOptionsFetcherSimpleWithRemoveCache(\n filterProps?.options ?? [],\n setMyOptions,\n filterProps?._optionsKey ?? \"\",\n false,\n {},\n false,\n undefined,\n );\n const handleChange = (e, labels) => {\n setValue(e.target.value);\n optionLabels.current = labels;\n };\n const handleBlur = (e) => {\n if (Array.isArray(value) && value.length > 0) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"in\",\n value: value,\n label: optionLabels.current,\n id,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n\n return (\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\n <SelectWithoutOptions\n label={columnName}\n showCheckbox={true}\n value={value}\n size=\"small\"\n fullWidth\n touched={true}\n error={\"\"}\n multiple={true}\n handleChange={handleChange}\n handleBlur={handleBlur}\n options={myOptions}\n loadingOptions={loadingOptions}\n selectVariant=\"regular\"\n />\n </Grid>\n );\n};\n","const styles = {\r\n root: {\r\n \"& label.Mui-focused\": {\r\n //color: \"#26A456\",\r\n color: \"var(--theme-color1)\",\r\n },\r\n \"& .MuiInputLabel-formControl\": {\r\n //color: \"#736f6f\",\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n fontSize: \"1rem\",\r\n \"@media (max-width: 1200px)\": {\r\n fontSize: \"0.75rem\",\r\n },\r\n \"@media (max-width: 1440px)\": {\r\n fontSize: \"0.875rem\",\r\n },\r\n },\r\n \"& .MuiInputLabel-shrink\": {\r\n transform: \"translate(0, 1.5px) scale(1)\",\r\n },\r\n \"& .MuiInputBase-root\": {\r\n border: \"1px solid #BABABA\",\r\n marginTop: \"26px\",\r\n borderRadius: 5,\r\n backgroundColor: \"#fff\",\r\n \"@media (max-width: 1200px)\": {\r\n fontSize: \"0.875rem\",\r\n },\r\n\r\n \"& input\": {\r\n padding: \"6px 7px \",\r\n height: \"22px\",\r\n \"&::placeholder\": {\r\n //color: \"#000\",\r\n //fontSize: \"0.875rem\",\r\n },\r\n \"@media (max-width: 1200px)\": {\r\n height: \"18px\",\r\n },\r\n },\r\n\r\n \"& inputMultiline\": {\r\n padding: \"6px 7px\",\r\n },\r\n\r\n \"& .MuiInputBase-input\": {\r\n padding: \"6px 7px\",\r\n },\r\n },\r\n\r\n \"& .MuiInput-underline:before\": {\r\n borderBottom: \"0\",\r\n },\r\n \"& .MuiInput-underline:after\": {\r\n borderBottom: \"3px solid var(--theme-color1)\",\r\n transition: \"transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms\",\r\n },\r\n \"&:hover .MuiInput-underline:before\": {\r\n //borderBottom: \"0 !important\",\r\n borderBottom: \"0\",\r\n },\r\n\r\n \"& .MuiInputAdornment-positionStart\": {\r\n //borderRight: \"1px solid #BABABA !important\",\r\n borderRight: \"1px solid #BABABA\",\r\n height: \"36px\",\r\n maxHeight: \"36px\",\r\n padding: \"0 1rem\",\r\n },\r\n\r\n \"& .MuiSelect\": {\r\n \"& selectMenu\": {\r\n minHeight: \"22px\",\r\n lineHeight: \"22px\",\r\n \"@media (max-width: 1200px)\": {\r\n minHeight: \"18px\",\r\n lineHeight: \"18px\",\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport default styles;\r\n","import styles from \"./styles\";\r\n\r\n// import { KeyboardDatePicker } from \"@material-ui/pickers\";\r\nimport { DatePicker } from \"@mui/x-date-pickers/DatePicker\";\r\n\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst StyledKeyboardDatePicker = withStyles(styles)(DatePicker);\r\n\r\nexport default StyledKeyboardDatePicker;\r\n","import { TimePicker } from \"@mui/x-date-pickers/TimePicker\";\r\nimport styles from \"./styles\";\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst StyledKeyboardTimePicker = withStyles(styles)(TimePicker);\r\n\r\nexport default StyledKeyboardTimePicker;\r\n","import styles from \"./styles\";\r\n\r\nimport { DateTimePicker } from \"@mui/x-date-pickers/DateTimePicker\";\r\n\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst StyledKeyboardDateTimePicker = withStyles(styles)(DateTimePicker);\r\n\r\nexport default StyledKeyboardDateTimePicker;\r\n","import React, { useState } from \"react\";\nimport { SelectRenderOnly } from \"components/common/select/render\";\nimport { KeyboardDatePicker } from \"components/styledComponent/datetime\";\nimport Grid from \"@mui/material/Grid\";\nimport dateFormat from \"date-fns/format\";\nimport subDays from \"date-fns/subDays\";\nimport { TextField } from \"components/styledComponent\";\n\nconst options = [\n { label: \"All\", value: \"all\" },\n { label: \"Today\", value: \"today\" },\n { label: \"Last Week\", value: \"lastWeek\" },\n { label: \"Last Month\", value: \"lastMonth\" },\n { label: \"Custom\", value: \"custom\" },\n];\n\nexport const DateRange = ({\n filterValue,\n id,\n columnName,\n gridProps,\n dispatch,\n}) => {\n const [minValue, setMinValue] = useState<any>(\n Array.isArray(filterValue?.value)\n ? new Date(filterValue?.value[0]) ?? null\n : new Date(filterValue?.value) ?? null,\n );\n const [maxValue, setMaxValue] = useState<any>(\n Array.isArray(filterValue?.value)\n ? new Date(filterValue?.value[1]) ?? null\n : null,\n );\n\n const [option, setOption] = useState(filterValue?.option ?? \"all\");\n const handleOptionChange = (e, values) => {\n let today = new Date();\n if (e.target.value === \"today\") {\n setMinValue(today);\n } else if (e.target.value === \"lastWeek\") {\n setMaxValue(today);\n setMinValue(subDays(today, 7));\n } else if (e.target.value === \"lastMonth\") {\n setMaxValue(today);\n setMinValue(subDays(today, 30));\n } else if (e.target.value === \"all\" || e.target.value === \"custom\") {\n setMinValue(null);\n setMaxValue(null);\n }\n setOption(e.target.value);\n };\n\n const handleBlur = (e) => {\n let myMinValue = dateFormat(new Date(), \"iii LLL dd yyyy HH:mm:ss xxxx\");\n let myMaxValue = dateFormat(new Date(), \"iii LLL dd yyyy HH:mm:ss xxxx\");\n //@ts-ignore\n if (minValue instanceof Date && !isNaN(minValue)) {\n myMinValue = dateFormat(minValue, \"iii LLL dd yyyy HH:mm:ss xxxx\");\n }\n //@ts-ignore\n if (maxValue instanceof Date && !isNaN(maxValue)) {\n myMaxValue = dateFormat(maxValue, \"iii LLL dd yyyy HH:mm:ss xxxx\");\n }\n\n if (option === \"today\") {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"equal\",\n value: myMinValue,\n id,\n option,\n columnName,\n },\n });\n } else if (\n (option === \"lastWeek\" ||\n option === \"lastMonth\" ||\n option === \"custom\") &&\n minValue instanceof Date &&\n maxValue instanceof Date &&\n //@ts-ignore\n !isNaN(minValue) &&\n //@ts-ignore\n !isNaN(maxValue) &&\n minValue <= maxValue\n ) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"between\",\n value: [myMinValue, myMaxValue],\n id,\n option,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n const propsToPassForSelect =\n option === \"custom\" ? { style: { width: \"40%\" } } : { fullWidth: true };\n\n return (\n <Grid\n item\n xs={12}\n {...gridProps}\n sm={option === \"custom\" ? 12 : 6}\n md={option === \"custom\" ? 12 : 6}\n >\n <div\n style={{ width: \"100%\", display: \"flex\" }}\n tabIndex={1}\n onBlur={handleBlur}\n >\n <SelectRenderOnly\n label={columnName}\n value={option}\n size=\"small\"\n touched={true}\n error={\"\"}\n handleChange={handleOptionChange}\n handleBlur={() => true}\n options={options}\n _optionsKey={\"dateRangePicker\"}\n optionsProps={{}}\n disableCaching={false}\n selectVariant=\"regular\"\n {...propsToPassForSelect}\n />\n {option === \"custom\" ? (\n <>\n <span\n style={{ width: \"1%\", textAlign: \"center\", marginTop: \"32px\" }}\n ></span>\n <KeyboardDatePicker\n format=\"dd/MM/yyyy\"\n label=\"From Date\"\n onChange={setMinValue}\n value={minValue}\n sx={{ width: \"30%\" }}\n slots={{\n textField: TextField,\n }}\n slotProps={{\n textField: {\n InputLabelProps: { shrink: true },\n \"aria-label\": \"Select Date\",\n placeholder: \"Start Date\",\n },\n actionBar: {\n actions: [\"today\", \"cancel\"],\n },\n }}\n />\n <span\n style={{ width: \"1%\", textAlign: \"center\", marginTop: \"32px\" }}\n ></span>\n <KeyboardDatePicker\n format=\"dd/MM/yyyy\"\n label=\"To Date\"\n minDate={minValue}\n onChange={setMaxValue}\n value={maxValue}\n sx={{ width: \"30%\" }}\n slots={{\n textField: TextField,\n }}\n slotProps={{\n textField: {\n InputLabelProps: { shrink: true },\n \"aria-label\": \"Select Date\",\n placeholder: \"End Date\",\n },\n actionBar: {\n actions: [\"today\", \"cancel\"],\n },\n }}\n />\n </>\n ) : null}\n </div>\n </Grid>\n );\n};\n","import InputLabel from \"@mui/material/InputLabel\";\r\n\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst MyInputLabel = withStyles({\r\n root: {\r\n //color: \"#736f6f\",\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n fontSize: \"1rem\",\r\n \"@media (max-width: 1200px)\": {\r\n fontSize: \"0.75rem\",\r\n },\r\n \"@media (max-width: 1440px)\": {\r\n fontSize: \"0.875rem\",\r\n },\r\n },\r\n shrink: {\r\n transform: \"translate(0, 1.5px) scale(1)\",\r\n },\r\n})(InputLabel);\r\n\r\nexport default MyInputLabel;\r\n","import Input from \"@mui/material/Input\";\n\nimport { withStyles } from \"@mui/styles\";\n\nconst MyInput = withStyles({\n root: {\n border: \"1px solid #BABABA\",\n marginTop: \"26px\",\n borderRadius: 5,\n backgroundColor: \"#fff\",\n \"@media (max-width: 1200px)\": {\n fontSize: \"0.875rem\",\n },\n },\n multiline: {\n padding: \"6px 7px\",\n },\n input: {\n padding: \"6px 7px \",\n height: \"22px\",\n //color: \"#000\",\n \"&::placeholder\": {\n //color: \"#000\",\n //fontSize: \"0.875rem\",\n },\n \"@media (max-width: 1200px)\": {\n height: \"18px\",\n },\n },\n underline: {\n \"&:before\": {\n borderBottom: \"0 !important\",\n },\n \"&:after\": {\n borderBottom: \"3px solid var(--theme-color1)\",\n transition: \"transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms\",\n },\n // \"&:hover\": {\n // borderBottom: \"0\",\n // },\n },\n adornedStart: {\n borderRight: \"1px solid #BABABA\",\n height: \"36px\",\n maxHeight: \"36px\",\n padding: \"0 1rem\",\n },\n})(Input);\n\nexport default MyInput;\n","import React, { useState, useEffect } from \"react\";\nimport FormControl from \"@mui/material/FormControl\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport Grid from \"@mui/material/Grid\";\nimport { InputLabel } from \"components/styledComponent/inputLabel\";\nimport { Input } from \"components/styledComponent/input\";\n\nexport const ValueRange = ({\n filterValue,\n id,\n columnName,\n gridProps,\n dispatch,\n}) => {\n const [minValue, setMinValue] = useState(\n Array.isArray(filterValue?.value) ? filterValue?.value[0] ?? 0 : 0,\n );\n const [maxValue, setMaxValue] = useState(\n Array.isArray(filterValue?.value) ? filterValue?.value[1] ?? 0 : 0,\n );\n const [error, setError] = useState(\"\");\n useEffect(() => {\n if (Number(minValue) > Number(maxValue)) {\n setError(\"Min value is greater than max\");\n } else {\n setError(\"\");\n }\n }, [minValue, maxValue]);\n\n const handleBlur = (e) => {\n if (e.currentTarget.contains(e.relatedTarget)) {\n return;\n }\n if (\n !isNaN(Number(minValue)) &&\n !isNaN(Number(maxValue)) &&\n minValue <= maxValue\n ) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"between\",\n value: [minValue, maxValue],\n id,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n return (\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\n <FormControl\n fullWidth={true}\n error={Boolean(error)}\n tabIndex={1}\n onBlur={handleBlur}\n sx={{\n \"& label.Mui-focused\": {\n color: \"var(--theme-color1)\",\n },\n }}\n >\n <InputLabel shrink={true}>{columnName}</InputLabel>\n <div\n style={{\n display: \"flex\",\n width: \"100%\",\n justifyContent: \"space-between\",\n }}\n >\n <Input\n style={{ width: \"45%\" }}\n placeholder=\"min\"\n value={minValue}\n onChange={(e) => {\n if (!isNaN(Number(e.target.value))) {\n setMinValue(e.target.value);\n }\n }}\n />\n <Input\n style={{ width: \"45%\" }}\n placeholder=\"max\"\n value={maxValue}\n onChange={(e) => {\n if (!isNaN(Number(e.target.value))) {\n setMaxValue(e.target.value);\n }\n }}\n />\n </div>\n {Boolean(error) ? <FormHelperText>{error}</FormHelperText> : null}\n </FormControl>\n </Grid>\n );\n};\n","import React from \"react\";\nimport { DateRange } from \"./dateRange\";\nimport { ValueRange } from \"./valueRange\";\nimport Grid from \"@mui/material/Grid\";\n\nexport const RangeFilter = (props) => {\n const { filterProps } = props;\n if (filterProps?.type === \"date\") {\n return <DateRange {...props} />;\n } else if (filterProps?.type === \"value\") {\n return <ValueRange {...props} />;\n } else {\n return (\n <Grid item md={6} sm={6} xs={12}>\n Range Component Type not set\n </Grid>\n );\n }\n};\n","import React, { useState, useRef, useCallback } from \"react\";\nimport { ChipTextField } from \"components/styledComponent/textfield\";\nimport Chip from \"@mui/material/Chip\";\nimport Grid from \"@mui/material/Grid\";\n\nconst getChipProps = (index) => ({\n \"data-tag-index\": index,\n tabIndex: -1,\n key: index,\n});\n\nexport const MultiValueFilter = ({\n filterValue,\n id,\n columnName,\n gridProps,\n dispatch,\n}) => {\n const [text, setText] = useState(\"\");\n const [chips, setChips] = useState<any>(filterValue?.value ?? []);\n const [focusedTag, setFocusedTag] = useState(-1);\n const anchorElRef = useRef<any>(null);\n const inputRef = useRef<any>(null);\n\n const handleFocusTag = (event, direction) => {\n let nextTag = focusedTag;\n if (focusedTag === -1) {\n if (text === \"\" && direction === \"previous\") {\n nextTag = chips.length - 1;\n }\n } else {\n nextTag += direction === \"next\" ? 1 : -1;\n if (nextTag < 0) {\n nextTag = 0;\n }\n if (nextTag === chips.length) {\n nextTag = -1;\n }\n }\n setFocusedTag(nextTag);\n focusTag(nextTag);\n };\n\n const focusTag = useCallback((tagToFocus) => {\n if (tagToFocus === -1) {\n inputRef.current.focus();\n } else {\n anchorElRef.current\n .querySelector(`[data-tag-index=\"${tagToFocus}\"]`)\n .focus();\n }\n }, []);\n\n let startAdornment: any = null;\n if (Array.isArray(chips) && chips.length > 0) {\n startAdornment = chips.map((one, index) => {\n return (\n <Chip\n label={one}\n size=\"small\"\n onDelete={() =>\n setChips([\n ...chips.slice(index, index + 1),\n ...chips.slice(index + 1),\n ])\n }\n style={{ margin: \"4px 2px\" }}\n {...getChipProps(index)}\n />\n );\n });\n }\n const handleBlur = () => {\n if (Array.isArray(chips) && chips.length > 0) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"in\",\n value: chips,\n id,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n\n return (\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\n <ChipTextField\n inputRef={inputRef}\n label={columnName}\n InputLabelProps={{ shrink: true }}\n onChange={(e) => setText(e.target.value)}\n onBlur={handleBlur}\n fullWidth\n value={text}\n InputProps={{\n startAdornment: startAdornment,\n ref: anchorElRef,\n }}\n onKeyDown={(event) => {\n if (\n focusedTag !== -1 &&\n [\"ArrowLeft\", \"ArrowRight\"].indexOf(event.key) === -1\n ) {\n setFocusedTag(-1);\n focusTag(-1);\n }\n if (event.which !== 299) {\n switch (event.key) {\n case \"Enter\": {\n if (Boolean(text)) {\n setChips((all) => [...all, text]);\n setText(\"\");\n }\n break;\n }\n case \"Backspace\": {\n if (text === \"\" && chips.length > 0) {\n const indexToRemove =\n focusedTag === -1 ? chips.length - 1 : focusedTag;\n const newChips = chips.slice();\n newChips.splice(indexToRemove, 1);\n setChips(newChips);\n }\n break;\n }\n case \"ArrowLeft\": {\n handleFocusTag(event, \"previous\");\n break;\n }\n case \"ArrowRight\": {\n handleFocusTag(event, \"next\");\n break;\n }\n }\n }\n }}\n />\n </Grid>\n );\n};\n\n/*\n\n*/\n","import { FilterColumnType } from \"../types\";\r\nimport {\r\n ValueFilter,\r\n OptionsFilter,\r\n RangeFilter,\r\n MultiValueFilter,\r\n} from \"../components/filters2\";\r\nimport { singletonFunctionRegisrationFactory } from \"components/utils/functionRegistry\";\r\n\r\nconst optionsMethodNotFound = (fieldKey) => () => {\r\n console.log(`no method found for options at ${fieldKey}`);\r\n return [{ label: \"Oops error occured\", value: \"\" }];\r\n};\r\n\r\nexport const attachFilterComponentToMetaData = (\r\n filters: FilterColumnType[],\r\n) => {\r\n if (Array.isArray(filters)) {\r\n return filters.map((filter) => {\r\n const { filterComponentType, filterProps, ...others } = filter;\r\n switch (filterComponentType) {\r\n case \"valueFilter\": {\r\n return {\r\n ...others,\r\n Filter: ValueFilter,\r\n filterProps,\r\n };\r\n }\r\n case \"multiValueFilter\": {\r\n return {\r\n ...others,\r\n Filter: MultiValueFilter,\r\n filterProps,\r\n };\r\n }\r\n case \"optionsFilter\": {\r\n //@ts-ignore\r\n const { options, ...filterOthers } = filterProps;\r\n if (typeof options === \"string\") {\r\n const myOptions = singletonFunctionRegisrationFactory.getFn(\r\n options ?? \"NOT_EXIST_OPTIONS_FN\",\r\n optionsMethodNotFound,\r\n );\r\n return {\r\n ...others,\r\n Filter: OptionsFilter,\r\n filterProps: {\r\n options: myOptions,\r\n _optionsKey: options,\r\n ...filterOthers,\r\n },\r\n };\r\n } else {\r\n return {\r\n ...others,\r\n Filter: OptionsFilter,\r\n filterProps,\r\n };\r\n }\r\n }\r\n case \"rangeFilter\":\r\n return {\r\n ...others,\r\n Filter: RangeFilter,\r\n filterProps,\r\n };\r\n default:\r\n return {\r\n ...others,\r\n };\r\n }\r\n });\r\n }\r\n return [];\r\n};\r\n","import { GridColumnType } from \"../types\";\r\n\r\nexport const extractHiddenColumns = (columns: GridColumnType[]) => {\r\n if (Array.isArray(columns)) {\r\n return columns.reduce<string[]>((accumulator, column) => {\r\n if (column.isVisible === false) {\r\n accumulator.push(column.accessor);\r\n }\r\n return accumulator;\r\n }, []);\r\n }\r\n return [];\r\n};\r\n","import { GridColumnType } from \"../types\";\r\n\r\nexport const sortColumnsBySequence = (columns: GridColumnType[]) => {\r\n if (Array.isArray(columns)) {\r\n let result = columns.sort((column1, column2) => {\r\n if (Number(column1.sequence) < Number(column2.sequence)) return -1;\r\n if (Number(column2.sequence) > Number(column1.sequence)) return 1;\r\n return 0;\r\n });\r\n return result.map(({ sequence, ...others }) => others);\r\n }\r\n return [];\r\n};\r\n","import { ActionTypes } from \"../types\";\r\n\r\nexport const SplitActions = (actions: ActionTypes[] | null) => {\r\n if (Array.isArray(actions) && actions.length > 0) {\r\n const multipleActions = actions.filter((one) => one.multiple === true);\r\n const singleActions = actions.filter((one) => one.multiple === false);\r\n const doubleClickAction = actions.filter(\r\n (one) => one.rowDoubleClick === true\r\n );\r\n const alwaysAvailableAction = actions.filter(\r\n (one) => one.alwaysAvailable === true\r\n );\r\n return {\r\n multipleActions: multipleActions,\r\n singleActions: singleActions,\r\n doubleClickAction: doubleClickAction[0] ?? false,\r\n alwaysAvailableAction: alwaysAvailableAction,\r\n };\r\n } else {\r\n return {\r\n multipleActions: [] as ActionTypes[],\r\n singleActions: [] as ActionTypes[],\r\n alwaysAvailableAction: [] as ActionTypes[],\r\n doubleClickAction: false as boolean,\r\n };\r\n }\r\n};\r\n","export const filterAction = (\r\n actions: any,\r\n selectedFlatRows: any,\r\n authDetails?: any,\r\n singleAction?: boolean\r\n) => {\r\n if (!Array.isArray(actions) && Boolean(actions)) {\r\n actions = [actions];\r\n }\r\n\r\n if (actions.length <= 0 || selectedFlatRows.length <= 0) {\r\n if (singleAction === true) {\r\n return actions[0];\r\n }\r\n //console.log(\"selectedFlatRows.length\", selectedFlatRows.length);\r\n return actions;\r\n }\r\n let result = actions.filter((one) => {\r\n if (typeof one?.shouldExclude === \"function\") {\r\n if (\r\n one.shouldExclude(\r\n selectedFlatRows.map((one) => ({ id: one.id, data: one.original })),\r\n authDetails\r\n ) === true\r\n ) {\r\n return false;\r\n }\r\n //return true;\r\n }\r\n\r\n return true;\r\n });\r\n if (singleAction === true) {\r\n return result[0];\r\n }\r\n return result;\r\n};\r\n\r\nexport const filterActionWhenNoDataFound = (actions: any, count: any) => {\r\n let result = actions.filter((one) => {\r\n if ((one?.isNodataThenShow ?? false) && count === 0) {\r\n return true;\r\n } else if (!(one?.isNodataThenShow ?? false) && count > 0) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n return result;\r\n};\r\n","export const DataFilterComponents = (filter: any[], data: any[]) => {\r\n let retData: any[];\r\n //console.log(filter, data);\r\n //return data;\r\n if (filter.length > 0)\r\n retData = data.filter((item) => CheckDataWithFilter(item, filter));\r\n else retData = data;\r\n //console.log(retData);\r\n return retData;\r\n};\r\nconst CheckFilterValue = (value, filter) => {\r\n let retvalue: boolean = true;\r\n if (value !== undefined) {\r\n switch (filter.condition) {\r\n case \"equal\":\r\n retvalue =\r\n (value ?? \"\").toLowerCase() === (filter.value ?? \"\").toLowerCase();\r\n break;\r\n case \"startsWith\":\r\n retvalue = (value ?? \"\")\r\n .toLowerCase()\r\n .startsWith((filter.value ?? \"\").toLowerCase());\r\n break;\r\n case \"endsWith\":\r\n retvalue = (value ?? \"\")\r\n .toLowerCase()\r\n .endsWith((filter.value ?? \"\").toLowerCase());\r\n break;\r\n case \"contains\":\r\n retvalue =\r\n (value ?? \"\")\r\n .toLowerCase()\r\n .indexOf((filter.value ?? \"\").toLowerCase()) >= 0;\r\n break;\r\n case \"in\":\r\n retvalue =\r\n filter.value?.filter((item) => item === (value ?? \"\"))?.length > 0 ??\r\n false;\r\n break;\r\n default:\r\n retvalue = true;\r\n }\r\n }\r\n return retvalue;\r\n};\r\nconst CheckDataWithFilter = (itemdata, filter) => {\r\n let retvalue: boolean = true;\r\n filter.forEach((item) => {\r\n if (itemdata[item.id] !== undefined) {\r\n if (!CheckFilterValue(itemdata[item.id], item.value)) {\r\n retvalue = false;\r\n return;\r\n }\r\n }\r\n });\r\n //console.log(filter, itemdata, retvalue);\r\n return retvalue;\r\n};\r\n","import {\r\n AttachMethodArrayType,\r\n attachMethodsToMetaData as _attachMethodsToMetaData,\r\n} from \"components/utils/attachMethodsToMetaData\";\r\nimport { singletonFunctionRegisrationFactory } from \"components/utils/functionRegistry\";\r\nimport { GridMetaDataType } from \"../types\";\r\n\r\nconst optionsMethodNotFound = (fieldKey) => () => {\r\n console.log(`no method found for options at ${fieldKey}`);\r\n return [{ label: \"Oops error occured\", value: \"\" }];\r\n};\r\nconst validateMethodNotFound = (fieldKey) => () => {\r\n console.log(`no method found for validation at ${fieldKey}`);\r\n return \"\";\r\n};\r\n\r\nconst defaultFieldsToAttachMethods: AttachMethodArrayType[] = [\r\n [/^columns.*.options$/, optionsMethodNotFound],\r\n [/^columns.*.validate$/, validateMethodNotFound],\r\n];\r\n\r\n//do not walk for arrayFields _fields as well we will run it seperately\r\nconst skipWalkingForKeys = [\"validate\"];\r\n\r\nexport const attachMethodsToMetaData = (metaData: GridMetaDataType) => {\r\n return _attachMethodsToMetaData(\r\n metaData,\r\n singletonFunctionRegisrationFactory,\r\n defaultFieldsToAttachMethods,\r\n skipWalkingForKeys,\r\n );\r\n};\r\n","import * as yup from \"yup\";\r\nimport { GridColumnType, GridYupSchemaMetaDataType } from \"../types\";\r\nimport { t } from \"i18next\";\r\nconst validationConfig = {\r\n abortEarly: false,\r\n strict: false,\r\n};\r\n\r\nexport const attachYupSchemaValidator = (columns: GridColumnType[]) => {\r\n if (Array.isArray(columns)) {\r\n return columns.map((column) => {\r\n const { schemaValidation, ...others } = column;\r\n return {\r\n ...others,\r\n schemaValidation: parseYupSchemaAndAttachMethod(schemaValidation),\r\n };\r\n });\r\n }\r\n return [];\r\n};\r\n\r\nconst parseYupSchemaAndAttachMethod = (\r\n schemaValidation?: GridYupSchemaMetaDataType,\r\n) => {\r\n if (schemaValidation === undefined) {\r\n return undefined;\r\n }\r\n const { type, rules } = schemaValidation;\r\n //check if type exist in yup\r\n if (!yup[type]) {\r\n return undefined;\r\n }\r\n\r\n if (!Array.isArray(rules)) {\r\n return undefined;\r\n }\r\n //@ts-ignore\r\n let validator = yup[type]();\r\n rules.forEach((rule) => {\r\n const { params, name } = rule;\r\n if (!validator[name]) {\r\n return;\r\n }\r\n validator = validator[name](...params);\r\n });\r\n\r\n return attachYupValidator(validator);\r\n};\r\n\r\nconst attachYupValidator =\r\n (\r\n validator:\r\n | yup.DateSchema\r\n | yup.NumberSchema\r\n | yup.StringSchema\r\n | yup.BooleanSchema,\r\n ) =>\r\n async (value: number | string | boolean | Date) => {\r\n try {\r\n await validator.validate(value, validationConfig);\r\n return null;\r\n } catch (e: any) {\r\n if (e instanceof yup.ValidationError) {\r\n return t(e.errors[0]);\r\n }\r\n return e.message;\r\n }\r\n };\r\n","import { GridColumnType } from \"../types\";\r\n\r\nexport const combineAndRunValidation =\r\n (schemaValidation, validation) => async (value, row, prev, next) => {\r\n let result;\r\n if (typeof schemaValidation === \"function\") {\r\n result = await schemaValidation(value);\r\n if (Boolean(result)) {\r\n return result;\r\n }\r\n }\r\n if (typeof validation === \"function\") {\r\n result = await validation(value, row, prev, next);\r\n if (Boolean(result)) {\r\n return result;\r\n }\r\n }\r\n return \"\";\r\n };\r\n\r\nexport const attachcombinedValidationFns = (columns: GridColumnType[]) => {\r\n if (Array.isArray(columns)) {\r\n return columns.map((column) => {\r\n const { schemaValidation, validation, ...others } = column;\r\n return {\r\n ...others,\r\n validation: combineAndRunValidation(schemaValidation, validation),\r\n };\r\n });\r\n }\r\n return [];\r\n};\r\n","import React, { useRef } from \"react\";\nimport TableSortLabel from \"@mui/material/TableSortLabel\";\nimport { useDrag, useDrop } from \"react-dnd\";\n\nexport const DefaultHeaderColumnRenderer = ({\n column,\n visibleColumns,\n setColumnOrder,\n allowColumnReordering,\n}) => {\n //Column change order using drag and drop\n const [{ isDragging }, drag] = useDrag({\n // item: { type: \"Column\" },\n type: \"Column\",\n collect: (monitor) => ({ isDragging: !!monitor.isDragging() }),\n end: (_, monitor: any) => {\n if (monitor.didDrop()) {\n const { id } = monitor.getDropResult();\n const columns = visibleColumns.map((one) => one.id);\n const toIndex = columns.indexOf(id);\n const fromIndex = columns.indexOf(column.id);\n var b = columns[toIndex];\n columns[toIndex] = columns[fromIndex];\n columns[fromIndex] = b;\n setColumnOrder(columns);\n }\n },\n canDrag: () => {\n return allowColumnReordering;\n },\n });\n const [{ isOver }, drop] = useDrop({\n accept: \"Column\",\n drop: () => ({ id: column.id }),\n collect: (monitor) => ({\n isOver: allowColumnReordering && !!monitor.isOver(),\n }),\n canDrop: () => {\n return allowColumnReordering;\n },\n });\n const dragDropRef = useRef(null);\n drag(drop(dragDropRef));\n return (\n <>\n <TableSortLabel\n active={column.isSorted}\n direction={column.isSortedDesc ? \"desc\" : \"asc\"}\n hideSortIcon={true}\n ref={dragDropRef}\n {...column.getSortByToggleProps([\n {\n style: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n display: \"flex\",\n color: \"#0063a3\",\n fontSize: \"1 rem\",\n fontWeight: \"600\",\n opacity: isDragging || isOver ? 0.5 : 1,\n cursor: isDragging ? \"move\" : \"default\",\n },\n },\n ])}\n >\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n paddingRight: \"10px\",\n }}\n >\n {column.columnName}\n </span>\n </TableSortLabel>\n {column.canGroupBy ? (\n <span {...column.getGroupByToggleProps()}>\n {column.isGrouped ? \"🔴\" : \"➕\"}\n </span>\n ) : null}\n <div\n {...column.getResizerProps([\n {\n style: {\n minHeight: \"34px\",\n opacity: 1,\n color: \"rgba(224, 224, 224, 1)\",\n right: \"-10px\",\n display: \"flex\",\n zIndex: 100,\n position: \"absolute\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n },\n },\n ])}\n >\n <svg\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n data-testid=\"SeparatorIcon\"\n style={{\n color: \"inherit\",\n userSelect: \"none\",\n width: \"1em\",\n height: \"1em\",\n display: \"inline-block\",\n fill: \"currentColor\",\n flexShrink: 0,\n transition: \"fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\n fontSize: \"20px\",\n }}\n >\n <path d=\"M11 19V5h2v14z\"></path>\n </svg>\n </div>\n </>\n );\n};\n","import { FC, useEffect, useRef, useCallback, useState } from \"react\";\r\nimport {\r\n useField,\r\n UseFieldHookProps,\r\n transformDependentFieldsState,\r\n} from \"packages/form\";\r\nimport { TextFieldProps } from \"@mui/material/TextField\";\r\nimport { TextField } from \"components/styledComponent\";\r\nimport InputAdornment from \"@mui/material/InputAdornment\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport CircularProgress, {\r\n CircularProgressProps,\r\n} from \"@mui/material/CircularProgress\";\r\nimport { Merge } from \"../types\";\r\nimport { numWords } from \"components/common/utils\";\r\nimport FormHelperText from \"@mui/material/FormHelperText\";\r\nimport { t } from \"i18next\";\r\n\r\ninterface MyGridExtendedProps {\r\n enableNumWords?: boolean;\r\n maxLength?: number;\r\n GridProps?: GridProps;\r\n StartAdornment?: string;\r\n EndAdornment?: string;\r\n CircularProgressProps?: CircularProgressProps;\r\n enableGrid: boolean;\r\n setValueOnDependentFieldsChange?: any;\r\n setColor?: any;\r\n showMaxLength?: boolean;\r\n allowToggleVisiblity?: boolean;\r\n}\r\n\r\ntype MyTextFieldAllProps = Merge<TextFieldProps, MyGridExtendedProps>;\r\n\r\nexport type MyTextFieldProps = UseFieldHookProps & MyTextFieldAllProps;\r\n\r\nconst MyTextField: FC<MyTextFieldProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n postValidationSetCrossFieldValues,\r\n runValidationOnDependentFieldsChange,\r\n runPostValidationHookAlways,\r\n shouldExclude,\r\n isReadOnly,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n GridProps,\r\n CircularProgressProps,\r\n enableGrid,\r\n enableNumWords,\r\n InputProps,\r\n inputProps,\r\n StartAdornment,\r\n EndAdornment,\r\n //@ts-ignore\r\n isFieldFocused,\r\n maxLength = -1,\r\n setValueOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n setColor,\r\n showMaxLength = true,\r\n ...others\r\n}) => {\r\n const {\r\n value,\r\n error,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n validationRunning,\r\n fieldKey,\r\n name,\r\n excluded,\r\n readOnly,\r\n incomingMessage,\r\n whenToRunValidation,\r\n runValidation,\r\n validationAPIResult,\r\n dependentValues,\r\n setErrorAsCB,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n\r\n const [currentColor, setCurrentColor] = useState<string>(\r\n typeof setColor === \"string\" ? setColor : \"\"\r\n );\r\n useEffect(() => {\r\n if (typeof setColor === \"function\") {\r\n let result = setColor(value);\r\n if (typeof result !== \"string\") {\r\n setCurrentColor(\"\");\r\n } else {\r\n setCurrentColor(result);\r\n }\r\n }\r\n }, [value, setColor]);\r\n\r\n const customHandleChange = useCallback(\r\n (e) => {\r\n handleChange(e, e.target?.formattedValue ?? undefined);\r\n },\r\n [handleChange]\r\n );\r\n\r\n const focusRef = useRef();\r\n useEffect(() => {\r\n if (isFieldFocused) {\r\n //@ts-ignore\r\n setTimeout(() => {\r\n //@ts-ignore\r\n focusRef?.current?.focus?.();\r\n }, 1);\r\n }\r\n }, [isFieldFocused]);\r\n\r\n useEffect(() => {\r\n if (typeof setValueOnDependentFieldsChange === \"function\") {\r\n let result = setValueOnDependentFieldsChange(\r\n transformDependentFieldsState(dependentValues),\r\n value\r\n );\r\n if (result !== undefined && result !== null) {\r\n handleChange(result);\r\n }\r\n }\r\n }, [dependentValues, handleChange, setValueOnDependentFieldsChange]);\r\n\r\n useEffect(() => {\r\n if (incomingMessage !== null && typeof incomingMessage === \"object\") {\r\n const { value, error } = incomingMessage;\r\n if (Boolean(value) || value === \"\") {\r\n handleChange(value);\r\n if (whenToRunValidation === \"onBlur\") {\r\n runValidation({ value: value }, true);\r\n }\r\n }\r\n\r\n if (Boolean(error)) {\r\n setErrorAsCB(error);\r\n }\r\n }\r\n }, [\r\n incomingMessage,\r\n handleChange,\r\n runValidation,\r\n whenToRunValidation,\r\n setErrorAsCB,\r\n ]);\r\n\r\n if (excluded) {\r\n return null;\r\n }\r\n let myError = error;\r\n let numWordsVar: any = null;\r\n let myTouch = touched;\r\n try {\r\n if (enableNumWords && Boolean(value)) {\r\n let amountArray = String(value).split(\".\");\r\n let amountPart = Number(amountArray[0]);\r\n if (amountPart < 0) {\r\n amountPart = Math.abs(Number(amountPart));\r\n numWordsVar = `Negative ${numWords(amountPart)} Rupees`;\r\n } else {\r\n numWordsVar = `${numWords(amountPart)} Rupees`;\r\n }\r\n if (amountArray.length === 2 && Boolean(amountArray[1])) {\r\n numWordsVar = `${numWordsVar} and ${numWords(amountArray[1])} paise`;\r\n }\r\n }\r\n } catch (e) {\r\n myError = \"\";\r\n myTouch = true;\r\n }\r\n /*fix for numberFormat*/\r\n if (InputProps?.inputProps) {\r\n InputProps.inputProps = {\r\n ...InputProps.inputProps,\r\n readOnly: readOnly,\r\n tabIndex: readOnly ? -1 : undefined,\r\n };\r\n }\r\n const isError = myTouch && Boolean(myError);\r\n const result = (\r\n <TextField\r\n {...others}\r\n key={fieldKey}\r\n id={fieldKey}\r\n name={name}\r\n value={typeof value === \"string\" ? value.trimStart() : value}\r\n error={!isSubmitting && isError}\r\n helperText={\r\n <div style={{ display: \"flex\" }}>\r\n <FormHelperText>\r\n {!isSubmitting && isError\r\n ? t(myError)\r\n : Boolean(validationAPIResult)\r\n ? validationAPIResult\r\n : numWordsVar}\r\n </FormHelperText>\r\n {maxLength > 0 && Boolean(showMaxLength) ? (\r\n <FormHelperText\r\n error={false}\r\n disabled={isSubmitting}\r\n style={{\r\n flex: 1,\r\n textAlign: \"right\",\r\n margin: \"5px 15px 0 0\",\r\n }}\r\n >\r\n {value.length}/{maxLength}\r\n </FormHelperText>\r\n ) : null}\r\n </div>\r\n }\r\n FormHelperTextProps={{\r\n //@ts-ignore\r\n component: \"div\",\r\n }}\r\n InputProps={{\r\n style:\r\n !isSubmitting && Boolean(currentColor)\r\n ? { color: currentColor, fontWeight: \"bold\" }\r\n : {},\r\n endAdornment: validationRunning ? (\r\n <InputAdornment position=\"end\">\r\n <CircularProgress\r\n color=\"secondary\"\r\n variant=\"indeterminate\"\r\n size={20}\r\n style={{ marginRight: \"8px\" }}\r\n {...CircularProgressProps}\r\n />\r\n </InputAdornment>\r\n ) : Boolean(EndAdornment) ? (\r\n <InputAdornment position=\"end\" className=\"withBorder\">\r\n {EndAdornment}\r\n </InputAdornment>\r\n ) : null,\r\n startAdornment: Boolean(StartAdornment) ? (\r\n <InputAdornment position=\"start\">{StartAdornment}</InputAdornment>\r\n ) : null,\r\n ...InputProps,\r\n }}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n inputRef={focusRef}\r\n onChange={(e) => {\r\n if (maxLength === -1) {\r\n customHandleChange(e);\r\n } else if (e.target.value.length <= maxLength) {\r\n customHandleChange(e);\r\n }\r\n }}\r\n inputProps={{\r\n readOnly: readOnly,\r\n tabIndex: readOnly ? -1 : undefined,\r\n ...inputProps,\r\n }}\r\n onBlur={handleBlur}\r\n disabled={isSubmitting}\r\n />\r\n );\r\n if (Boolean(enableGrid)) {\r\n return <Grid {...GridProps}>{result}</Grid>;\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MyTextField;\r\n","import { useState, useCallback, useRef, useEffect } from \"react\";\r\nimport { TextField, TextFieldProps } from \"components/common/textField\";\r\nimport Visibility from \"@mui/icons-material/Visibility\";\r\nimport VisibilityOff from \"@mui/icons-material/VisibilityOff\";\r\nimport InputAdornment from \"@mui/material/InputAdornment\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\n\r\nconst PasswordField: React.FC<TextFieldProps> = ({\r\n allowToggleVisiblity,\r\n ...others\r\n}) => {\r\n // const [passwordVisibility, setPasswordVisibility] = useState(false);\r\n const [showPasswordTime, setShowPasswordTime] = useState(0);\r\n const passwordVisibility = Date.now() < showPasswordTime;\r\n const timerRef = useRef<any>(null);\r\n const [, forceUpdate] = useState<any | null>();\r\n\r\n useEffect(() => {\r\n return () => clearTimeout(timerRef.current);\r\n }, []);\r\n // const handleVisibility = useCallback(() => {\r\n // setPasswordVisibility((old) => !old);\r\n // }, [setPasswordVisibility]);\r\n return (\r\n <TextField\r\n {...others}\r\n type={passwordVisibility ? \"text\" : \"password\"}\r\n InputProps={{\r\n endAdornment: Boolean(allowToggleVisiblity) ? (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n aria-label=\"toggle password visibility\"\r\n // onClick={handleVisibility}\r\n onClick={() => {\r\n if (!passwordVisibility) {\r\n setShowPasswordTime(Date.now() + 5000);\r\n timerRef.current = setTimeout(\r\n () => forceUpdate(Date.now()),\r\n 5000\r\n );\r\n } else if (passwordVisibility) setShowPasswordTime(0);\r\n }}\r\n // edge=\"end\"\r\n // tabIndex={-1}\r\n >\r\n {passwordVisibility ? <Visibility /> : <VisibilityOff />}\r\n </IconButton>\r\n </InputAdornment>\r\n ) : null,\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default PasswordField;\r\n","import { NumericFormat, NumericFormatProps } from \"react-number-format\";\nimport { TextField, TextFieldProps } from \"components/common/textField\";\nimport { Merge } from \"components/common/types\";\nimport { forwardRef, useEffect, useRef } from \"react\";\n\nexport const NumberFormatCustom = forwardRef<any, any>((props, ref) => {\n const { inputRef, onChange, FormatProps, ...other } = props;\n const { formattedValue, ...others } = FormatProps;\n return (\n <NumericFormat\n {...other}\n getInputRef={inputRef}\n onValueChange={(values) => {\n onChange(\n {\n target: {\n name: props.name,\n value: Boolean(formattedValue)\n ? values.formattedValue\n : values.value,\n formattedValue: values.formattedValue,\n },\n },\n values.formattedValue\n );\n }}\n /**\n * Altaf Shaikh - 15/Feb/2024\n * added valueIsNumericString prop to avoid issue of zero prefixd and cursor moves to start of field\n * when pressed decimal point\n */\n valueIsNumericString={false}\n {...others}\n />\n );\n});\n\ninterface extendedProps {\n FormatProps: NumericFormatProps;\n formattedValue?: boolean;\n isFieldFocused?: boolean;\n}\n\nexport type AllNumberFormatProps = Merge<TextFieldProps, extendedProps>;\n\nconst MyNumberFormat: React.FC<AllNumberFormatProps> = ({\n FormatProps,\n formattedValue,\n isFieldFocused,\n ...others\n}) => {\n const ref = useRef<any>(null);\n useEffect(() => {\n if (isFieldFocused) {\n setTimeout(() => {\n ref?.current?.focus?.();\n }, 1);\n }\n }, [isFieldFocused]);\n return (\n <TextField\n {...others}\n inputRef={ref}\n InputProps={{\n inputComponent: NumberFormatCustom,\n inputProps: {\n FormatProps: { ...FormatProps, formattedValue },\n inputRef: ref,\n },\n }}\n />\n );\n};\n\nexport default MyNumberFormat;\n","import { FC } from \"react\";\r\nimport { IMaskInput as IMask } from \"react-imask\";\r\nimport { IMaskInputProps } from \"./types\";\r\nimport { TextField, TextFieldProps } from \"components/common/textField\";\r\nimport { Merge } from \"components/common/types\";\r\n\r\nexport function InputMaskCustom(props) {\r\n const { inputRef, onChange, MaskProps, ...other } = props;\r\n const { formattedValue, ...others } = MaskProps;\r\n return (\r\n <IMask\r\n {...other}\r\n inputRef={inputRef}\r\n onAccept={(value, mask) => {\r\n onChange({\r\n target: {\r\n name: props.name,\r\n //value: formattedValue ? mask._value : mask.unmaskedValue,\r\n value: formattedValue ? mask.value : mask.unmaskedValue,\r\n },\r\n });\r\n }}\r\n {...others}\r\n />\r\n );\r\n}\r\n\r\ninterface extendedProps {\r\n MaskProps: IMaskInputProps;\r\n formattedValue?: boolean;\r\n}\r\n\r\nexport type AllInputMaskProps = Merge<TextFieldProps, extendedProps>;\r\n\r\nconst MyInputMaskCustom: FC<AllInputMaskProps> = ({\r\n MaskProps,\r\n formattedValue,\r\n ...others\r\n}) => {\r\n return (\r\n <TextField\r\n {...others}\r\n InputProps={{\r\n inputComponent: InputMaskCustom,\r\n inputProps: { MaskProps: { ...MaskProps, formattedValue } },\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default MyInputMaskCustom;\r\n","import { makeStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\n// import { alpha } from \"@material-ui/core/styles/colorManipulator\";\r\nimport { alpha } from \"@mui/material/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: Theme) => ({\r\n searchRoot: {\r\n fontFamily: theme.typography.fontFamily,\r\n position: \"relative\",\r\n boxShadow:\r\n \"0px 2px 4px -1px rgba(0,0,0,0.2), 0px 4px 5px 0px rgba(0,0,0,0.14), 0px 1px 10px 0px rgba(0,0,0,0.12)\",\r\n marginRight: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginBottom: theme.spacing(0.25),\r\n marginTop: theme.spacing(0.25),\r\n borderRadius: 40,\r\n backgroundColor: theme.palette.common.white,\r\n // \"&:hover\": {\r\n // backgroundColor: alpha(theme.palette.common.white, 0.95),\r\n // },\r\n \"& $inputInput\": {\r\n transition: theme.transitions.create(\"width\"),\r\n width: 146,\r\n \"&:focus\": {\r\n width: 170,\r\n },\r\n },\r\n\r\n \"&:has(.route-search-bar)\": {\r\n boxShadow: \"none\",\r\n },\r\n },\r\n searchRoot2: {\r\n fontFamily: theme.typography.fontFamily,\r\n position: \"relative\",\r\n boxShadow:\r\n \"0px 2px 4px -1px rgba(0,0,0,0.2), 0px 4px 5px 0px rgba(0,0,0,0.14), 0px 1px 10px 0px rgba(0,0,0,0.12)\",\r\n marginRight: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n borderRadius: 40,\r\n backgroundColor: alpha(theme.palette.common.white, 0.15),\r\n \"&:hover\": {\r\n backgroundColor: alpha(theme.palette.common.white, 0.25),\r\n },\r\n },\r\n searchError: {\r\n marginRight: theme.spacing(2),\r\n marginLeft: theme.spacing(6),\r\n },\r\n search: {\r\n width: theme.spacing(6),\r\n height: \"100%\",\r\n position: \"absolute\",\r\n pointerEvents: \"none\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n inputRoot: {\r\n color: \"inherit\",\r\n marginTop: 0,\r\n borderRadius: \"40px\",\r\n },\r\n inputInput: {\r\n padding: theme.spacing(1, 1, 1, 6),\r\n },\r\n}));\r\n","import {\r\n useRef,\r\n FC,\r\n Fragment,\r\n useEffect,\r\n useImperativeHandle,\r\n forwardRef,\r\n} from \"react\";\r\nimport Input, { InputProps } from \"@mui/material/Input\";\r\nimport { useTheme } from \"@mui/material\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\r\nimport { useStyles } from \"./style\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport FormHelperText, {\r\n FormHelperTextProps,\r\n} from \"@mui/material/FormHelperText\";\r\n\r\n//@ts-ignore\r\nexport const SearchBar: FC<InputProps> = forwardRef<any, any>((props, ref) => {\r\n const theme = useTheme();\r\n const desktop = useMediaQuery(theme.breakpoints.up(\"sm\"));\r\n const classes = useStyles();\r\n const inputRef = useRef<any>(null);\r\n\r\n useImperativeHandle(ref, () => ({\r\n handleBlur: () => inputRef.current?.blur(),\r\n handleFocus: () => inputRef.current?.focus(),\r\n }));\r\n\r\n useEffect(() => {\r\n if (Boolean(props.autoFocus)) {\r\n setTimeout(() => {\r\n inputRef.current?.focus?.();\r\n }, 1000);\r\n }\r\n }, []);\r\n return (\r\n <div\r\n className={classes.searchRoot}\r\n style={{ display: desktop ? \"flex\" : \"none\" }}\r\n >\r\n <Input\r\n {...props}\r\n disableUnderline\r\n inputRef={inputRef}\r\n classes={{\r\n root: classes.inputRoot,\r\n input: classes.inputInput,\r\n }}\r\n />\r\n <div className={classes.search}>\r\n <SearchIcon color=\"secondary\" />\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nexport const SearchBar2: FC<\r\n InputProps & FormHelperTextProps & { helperText: string }\r\n> = ({ helperText, error, disabled, ...others }) => {\r\n const theme = useTheme();\r\n const desktop = useMediaQuery(theme.breakpoints.up(\"sm\"));\r\n const classes = useStyles();\r\n const inputRef = useRef(null);\r\n return (\r\n <Fragment>\r\n <div\r\n className={classes.searchRoot2}\r\n style={{ display: desktop ? \"flex\" : \"none\" }}\r\n >\r\n <Input\r\n {...others}\r\n disabled={disabled}\r\n error={error}\r\n disableUnderline\r\n inputRef={inputRef}\r\n classes={{\r\n root: classes.inputRoot,\r\n input: classes.inputInput,\r\n }}\r\n />\r\n <div className={classes.search}>\r\n <SearchIcon />\r\n </div>\r\n </div>\r\n {Boolean(error) ? (\r\n <FormHelperText\r\n disabled={disabled}\r\n error={error}\r\n className={classes.searchError}\r\n >\r\n {helperText}\r\n </FormHelperText>\r\n ) : null}\r\n </Fragment>\r\n );\r\n};\r\n","import React, { useState } from \"react\";\n\nimport { useAsyncDebounce } from \"react-table\";\nimport { SearchBar } from \"components/derived\";\nimport { useTranslation } from \"react-i18next\";\nexport const GlobalFilter = ({\n preGlobalFilteredRows,\n globalFilter,\n setGlobalFilter,\n}) => {\n const count = preGlobalFilteredRows.length;\n const [, setValue] = useState(globalFilter);\n const { t } = useTranslation();\n const onChange = useAsyncDebounce(\n (value) => setGlobalFilter(value || undefined),\n 200,\n );\n\n return (\n <SearchBar\n type=\"text\"\n onChange={(e) => {\n setValue(e.target.value);\n onChange(e.target.value);\n }}\n // placeholder={`search in ${count} records`}\n placeholder={`${t(\"profile.Searchin\")} ${count} ${t(\"profile.records\")}`}\n color=\"primary\"\n />\n );\n};\n","import React from \"react\";\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport TableCell from \"@mui/material/TableCell\";\r\nimport { withStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\n\r\nconst StyledCheckbox = withStyles((theme: Theme) => ({\r\n root: {\r\n \"&.Mui-checked\": {\r\n color: \"var(--theme-color1)\",\r\n },\r\n \"&.MuiCheckbox-indeterminate\": {\r\n color: theme.palette.text.secondary,\r\n },\r\n },\r\n checked: {},\r\n}))(Checkbox);\r\n\r\nexport const useCheckboxColumn = (allowRowSelection) => (hooks) => {\r\n if (Boolean(allowRowSelection)) {\r\n hooks.visibleColumns.push((columns) => [\r\n {\r\n id: \"selectionCheckbox\",\r\n Header: CheckboxHeaderRenderer,\r\n Cell: CheckboxCellRenderer,\r\n minWidth: 40,\r\n width: 40,\r\n maxWidth: 40,\r\n //sticky: true,\r\n },\r\n ...columns,\r\n ]);\r\n }\r\n};\r\n\r\nconst CheckboxCellRenderer = ({ row, cell }) => {\r\n return (\r\n <>\r\n <TableCell\r\n component=\"div\"\r\n variant=\"head\"\r\n {...cell.getCellProps([\r\n {\r\n style: {\r\n display: \"block\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n padding: \"0px 10px\",\r\n lineHeight: \"34px\",\r\n },\r\n },\r\n ])}\r\n >\r\n {Boolean(row?.original?.__isRowSelection ?? true) ? (\r\n <StyledCheckbox\r\n size=\"small\"\r\n {...row.getToggleRowSelectedProps([\r\n {\r\n style: {\r\n padding: 0,\r\n // color: \"var(--theme-color1)\"\r\n },\r\n },\r\n ])}\r\n />\r\n ) : null}\r\n </TableCell>\r\n </>\r\n );\r\n};\r\n\r\nconst CheckboxHeaderRenderer = ({ getToggleAllRowsSelectedProps }) => {\r\n return (\r\n <StyledCheckbox\r\n size=\"small\"\r\n {...getToggleAllRowsSelectedProps([\r\n {\r\n style: {\r\n padding: 0,\r\n // color: \"var(--theme-color1)\"\r\n },\r\n },\r\n ])}\r\n />\r\n );\r\n};\r\n","import React, { FC } from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport Tooltip from \"@mui/material/Tooltip\";\nimport Button from \"@mui/material/Button\";\n// import { lighten, makeStyles } from \"@material-ui/core/styles\";\nimport { lighten } from \"@mui/material/styles\";\nimport { makeStyles } from \"@mui/styles\";\nimport { Theme } from \"@mui/material/styles\";\nimport clsx from \"clsx\";\nimport { TableActionType, RenderActionType } from \"./types\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport Menu from \"@mui/material/Menu\";\nimport { filterAction } from \"./utils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst useStyles = makeStyles((theme: Theme) => ({\n root: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n highlight:\n theme?.palette?.mode === \"light\"\n ? {\n color: theme.palette.secondary.main,\n backgroundColor: lighten(theme.palette.secondary.light, 0.85),\n }\n : {\n color: theme.palette.secondary.dark,\n background: theme.palette.secondary.dark,\n },\n // highlight: {\n // color: theme.palette.secondary.main,\n // backgroundColor: lighten(theme.palette.secondary.light, 0.85),\n // },\n title: {\n flex: \"1 1 100%\",\n },\n}));\n\nexport const TableActionToolbar: FC<TableActionType> = ({\n dense,\n selectedFlatRows,\n multipleActions,\n singleActions,\n setGridAction,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const selectedCount = selectedFlatRows.length;\n const selectedRows = selectedFlatRows.map((one) => {\n return {\n data: one.original,\n id: one.id,\n };\n });\n if (selectedCount <= 0) {\n return null;\n }\n if (typeof setGridAction !== \"function\") {\n setGridAction = () => {};\n }\n return (\n <Toolbar\n className={clsx(classes.root, classes.highlight)}\n variant={dense ? \"dense\" : \"regular\"}\n >\n <Typography\n className={classes.title}\n color=\"inherit\"\n variant={selectedCount > 0 ? \"subtitle1\" : \"h6\"}\n component=\"div\"\n >\n {t(\"Selected\")} {selectedCount}\n </Typography>\n {selectedCount === 1 ? (\n <RenderActions\n key=\"singleFilters\"\n actions={singleActions}\n setAction={setGridAction}\n selectedRows={selectedRows}\n buttonTextColor={\"var(--theme-color1)\"}\n />\n ) : null}\n {selectedCount > 0 ? (\n <RenderActions\n key=\"multipleFilters\"\n actions={multipleActions ?? []}\n setAction={setGridAction}\n selectedRows={selectedRows}\n buttonTextColor={\"var(--theme-color1)\"}\n />\n ) : null}\n </Toolbar>\n );\n};\n\n//@ts-ignore\nexport const RenderActions: FC<RenderActionType> = ({\n actions,\n setAction,\n selectedRows,\n buttonTextColor = \"var(--white)\",\n}) => {\n const { t } = useTranslation();\n if (Array.isArray(actions) && actions.length > 0) {\n return actions.map((one) => (\n <Tooltip title={t(one.tooltip ?? one.actionLabel)} key={one.actionName}>\n <Button\n onClick={() => {\n setAction({\n name: one.actionName,\n rows: selectedRows,\n });\n }}\n //color=\"secondary\"\n // style={{\n // //background: \"var(--theme-color1)\",\n // color: \"var(--theme-color3)\", //\"var(--white)\",\n // marginRight: \"10px\",\n // }}\n style={{\n //background: \"rgb(239, 224, 224)\",\n color: buttonTextColor,\n //marginRight: \"10px\",\n }}\n >\n {t(one.actionLabel)}\n </Button>\n </Tooltip>\n ));\n } else {\n return null;\n }\n};\n\nexport const ActionContextMenu: FC<TableActionType> = ({\n singleActions,\n multipleActions,\n setGridAction,\n contextMenuRow,\n selectedFlatRows,\n mouseX,\n mouseY,\n handleClose,\n authState,\n}) => {\n const { t } = useTranslation();\n const selectedRows = selectedFlatRows.map((one) => {\n return {\n data: one.original,\n id: one.id,\n };\n });\n let menuItems: null | JSX.Element[] = null;\n if (typeof setGridAction !== \"function\") {\n setGridAction = () => {};\n }\n let allActions = [...singleActions, ...(multipleActions ?? [])];\n if (\n Array.isArray(allActions) &&\n allActions.length > 0 &&\n selectedFlatRows.length <= 1 &&\n contextMenuRow !== null\n ) {\n allActions = filterAction(allActions, [contextMenuRow], authState, false);\n menuItems = allActions.map((one) => (\n <MenuItem\n key={one.actionName}\n onClick={() => {\n setGridAction({\n name: one.actionName,\n rows: [\n {\n data: contextMenuRow?.original,\n id: contextMenuRow?.id,\n },\n ],\n });\n handleClose();\n }}\n >\n {t(one.actionLabel)}\n </MenuItem>\n ));\n } else if (\n Array.isArray(multipleActions) &&\n multipleActions.length > 0 &&\n selectedFlatRows.length > 1 &&\n selectedFlatRows !== null\n ) {\n menuItems = multipleActions?.map((one) => (\n <MenuItem\n key={one.actionName}\n onClick={() => {\n setGridAction({\n name: one.actionName,\n rows: selectedRows,\n });\n handleClose();\n }}\n >\n {t(one.actionLabel)}\n </MenuItem>\n ));\n }\n\n return (\n <>\n {/* {console.log(menuItems)} */}\n {menuItems !== null &&\n Array.isArray(menuItems) &&\n menuItems.length > 0 ? (\n <Menu\n onContextMenu={(e) => {\n e.preventDefault();\n handleClose();\n }}\n // open={mouseY !== null && singleActions.length > 0}\n open={mouseY !== null}\n onClose={handleClose}\n anchorReference=\"anchorPosition\"\n anchorPosition={\n mouseY !== null && mouseX !== null\n ? {\n top: mouseY,\n left: mouseX,\n }\n : undefined\n }\n >\n {menuItems}\n </Menu>\n ) : null}\n </>\n );\n};\n","import {\r\n useEffect,\r\n useState,\r\n useRef,\r\n useCallback,\r\n createContext,\r\n useContext,\r\n} from \"react\";\r\n\r\nexport const AutoRefreshContext = createContext({\r\n resume: () => {},\r\n pause: () => {},\r\n attachFunction: (cb, isEnabled) => {},\r\n});\r\n\r\nexport const AutoRefreshProvider = ({ children }) => {\r\n let timer = useRef<any>(null);\r\n let callbackRef = useRef<any>(null);\r\n let isEnabledRef = useRef<any>(false);\r\n let isTimerRunning = useRef<any>(false);\r\n\r\n const resume = useCallback(() => {\r\n if (Boolean(isEnabledRef.current) && !Boolean(isTimerRunning.current)) {\r\n timer.current = setInterval(() => {\r\n if (typeof callbackRef?.current === \"function\") {\r\n callbackRef.current();\r\n }\r\n }, 1000);\r\n isTimerRunning.current = true;\r\n }\r\n }, []);\r\n\r\n const pause = useCallback(() => {\r\n if (Boolean(isEnabledRef.current && Boolean(isTimerRunning.current))) {\r\n clearInterval(timer.current);\r\n isTimerRunning.current = false;\r\n }\r\n }, []);\r\n\r\n const attachFunction = (cb, isEnabled) => {\r\n callbackRef.current = cb;\r\n isEnabledRef.current = isEnabled;\r\n };\r\n\r\n return (\r\n <AutoRefreshContext.Provider value={{ resume, pause, attachFunction }}>\r\n {children}\r\n </AutoRefreshContext.Provider>\r\n );\r\n};\r\n\r\nexport const useAutoRefreshControls = () => {\r\n const { resume, pause } = useContext(AutoRefreshContext);\r\n return { resume, pause };\r\n};\r\n\r\nexport const useAutoRefresh = (callback, intervalInSeconds) => {\r\n const [progress, setProgress] = useState(0);\r\n const [enabled, setEnabled] = useState(false);\r\n const interval = useRef<any>(0);\r\n const cb = useRef(callback);\r\n cb.current = callback;\r\n const { resume, pause, attachFunction } = useContext(AutoRefreshContext);\r\n\r\n const runner = useCallback(() => {\r\n interval.current = Math.min(interval.current + 1, intervalInSeconds);\r\n let progress = Math.floor((interval.current / intervalInSeconds) * 100);\r\n if (interval.current === intervalInSeconds) {\r\n interval.current = 0;\r\n }\r\n setProgress(Math.min(progress, 100));\r\n }, [setProgress, intervalInSeconds]);\r\n\r\n /* eslint-disable react-hooks/exhaustive-deps */\r\n useEffect(() => {\r\n if (parseInt(intervalInSeconds) > 0) {\r\n attachFunction(runner, true);\r\n setEnabled(true);\r\n resume();\r\n }\r\n return () => {\r\n pause();\r\n };\r\n }, [intervalInSeconds, runner]);\r\n\r\n useEffect(() => {\r\n if (progress === 100) {\r\n if (typeof cb.current === \"function\") {\r\n cb.current();\r\n }\r\n }\r\n }, [progress]);\r\n\r\n return {\r\n intervalElapsed: Math.min(\r\n intervalInSeconds - interval.current,\r\n intervalInSeconds\r\n ),\r\n enabled,\r\n progress,\r\n resume,\r\n pause,\r\n };\r\n};\r\n","import CircularProgress from \"@mui/material/CircularProgress\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\nimport PauseIcon from \"@mui/icons-material/Pause\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { useState } from \"react\";\r\n\r\nexport const CircularProgressWithLabel = ({\r\n value,\r\n variant,\r\n interval,\r\n pause,\r\n resume,\r\n}) => {\r\n const [isPlaying, setIsPlaying] = useState(true);\r\n const [isMouseOver, setIsMouseOver] = useState(false);\r\n\r\n return (\r\n <div style={{ position: \"relative\", display: \"inline-flex\" }}>\r\n <CircularProgress variant={variant} value={value} size=\"2rem\" />\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n right: 0,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n backgroundColor: \"#80808042\",\r\n borderRadius: \"50%\",\r\n }}\r\n onMouseOver={() => setIsMouseOver(true)}\r\n onMouseOut={() => setIsMouseOver(false)}\r\n >\r\n {isMouseOver ? (\r\n <IconButton\r\n onClick={() => {\r\n if (isPlaying) {\r\n pause();\r\n setIsPlaying(false);\r\n } else {\r\n resume();\r\n setIsPlaying(true);\r\n }\r\n }}\r\n style={{ opacity: 0.6 }}\r\n >\r\n {isPlaying ? <PauseIcon /> : <PlayArrowIcon />}\r\n </IconButton>\r\n ) : isPlaying ? (\r\n <Typography variant=\"caption\" component=\"div\" color=\"textSecondary\">\r\n {interval ?? value}\r\n </Typography>\r\n ) : (\r\n <IconButton\r\n onClick={() => {\r\n if (isPlaying) {\r\n pause();\r\n setIsPlaying(false);\r\n } else {\r\n resume();\r\n setIsPlaying(true);\r\n }\r\n }}\r\n style={{ opacity: 0.6 }}\r\n >\r\n {isPlaying ? <PauseIcon /> : <PlayArrowIcon />}\r\n </IconButton>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import React, {\n useRef,\n useCallback,\n useState,\n createElement,\n useEffect,\n} from \"react\";\nimport FilterListTwoToneIcon from \"@mui/icons-material/FilterListTwoTone\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Typography from \"@mui/material/Typography\";\nimport CardContent from \"@mui/material/CardContent\";\nimport Button from \"@mui/material/Button\";\nimport Grid from \"@mui/material/Grid\";\nimport Drawer from \"@mui/material/Drawer\";\nimport AppBar from \"@mui/material/AppBar\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const filterReducer = (state: any = [], action: any = {}) => {\n switch (action.type) {\n case \"setValue\": {\n const { id, ...others } = action.payload;\n let index = state.findIndex((one) => one.id === id);\n if (index >= 0) {\n state[index].value = others;\n return [...state];\n }\n return [...state, { id, value: others }];\n }\n case \"removeValue\": {\n const { id } = action.payload;\n /* eslint-disable eqeqeq */\n let result = state.filter((one) => one.id != id);\n return result;\n }\n case \"resetAll\": {\n return [];\n }\n default: {\n return state;\n }\n }\n};\n\nexport const useFilterState = (reducer) => {\n const filterState = useRef<object>([]);\n /* eslint-disable react-hooks/exhaustive-deps */\n const dispatch = useCallback((action) => {\n let newState = reducer(filterState.current, action);\n filterState.current = newState;\n }, []);\n\n return {\n dispatch,\n filterState,\n };\n};\n\nexport const TableFilterComponent = ({\n filters,\n setAllFilters,\n filterMeta,\n setSortBy,\n gotoPage,\n classes,\n}) => {\n const [open, setOpen] = useState(false);\n const { filterState, dispatch } = useFilterState(filterReducer);\n const { t } = useTranslation();\n\n const handleClick = () => {\n setOpen(true);\n };\n\n const handleClearFilter = () => {\n filterState.current = [];\n setAllFilters(filterState.current);\n setSortBy([]);\n gotoPage(0);\n setOpen(false);\n };\n\n const handleFilterChange = () => {\n setAllFilters(filterState.current);\n setSortBy([]);\n gotoPage(0);\n setOpen(false);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n useEffect(() => {\n filterState.current = filters;\n }, [filters]);\n\n let filterColumns: any = [];\n //console.log(\"TableFilterComponent\", filterMeta);\n if (Array.isArray(filterMeta)) {\n filterColumns = filterMeta.filter(\n (one) => typeof one.Filter === \"function\",\n );\n // console.log(\"TableFilterComponent\", filterColumns);\n filterColumns = filterColumns.map((one) => {\n const { Filter, accessor, ...others } = one;\n //console.log(\"TableFilterComponent\", filters);\n return (\n //@ts-ignore\n\n createElement(Filter, {\n key: accessor,\n filterValue: filters.filter((one) => one.id === accessor)?.[0]?.value,\n id: accessor,\n dispatch,\n ...others,\n })\n );\n });\n }\n //console.log(\"TableFilterComponent\", filterColumns);\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n color=\"primary\"\n className={classes.refreshiconhover}\n >\n <FilterListTwoToneIcon />\n </IconButton>\n <Drawer\n anchor=\"right\"\n id={\"columnVisibility\"}\n open={open}\n onClose={handleClose}\n sx={{ zIndex: 1300 }}\n PaperProps={{\n style: { width: \"520px\" },\n }}\n >\n <AppBar position=\"relative\" color=\"secondary\">\n <Toolbar variant=\"dense\">\n <Typography variant=\"h6\">{t(\"Filter\")}</Typography>\n <div style={{ flexGrow: 1 }} />\n <Button onClick={handleFilterChange} color=\"primary\">\n {t(\"Apply\")}\n </Button>\n <Button onClick={handleClearFilter} color=\"primary\">\n {t(\"Clear\")}\n </Button>\n </Toolbar>\n </AppBar>\n <CardContent>\n <Grid container spacing={2}>\n {filterColumns}\n </Grid>\n </CardContent>\n </Drawer>\n </LocalizationProvider>\n );\n};\n","import MenuItem from \"@mui/material/MenuItem\";\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nexport const StyledMenuItem = withStyles((theme) => ({\r\n root: {\r\n \"& .MuiCheckbox-root\": {\r\n padding: \"2px 6px\",\r\n },\r\n \"& label\": {\r\n marginBottom: 0,\r\n },\r\n },\r\n}))(MenuItem);\r\n","import TextField from \"@mui/material/TextField\";\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nexport const StyledTextField = withStyles({\r\n root: {\r\n \"& .MuiInputBase-root\": {\r\n border: \"1px solid #BABABA\",\r\n marginTop: \"0 !important\",\r\n borderRadius: 5,\r\n backgroundColor: \"#fff\",\r\n padding: \"0 0\",\r\n \"& input\": {\r\n padding: \"4px 38px 4px 6px\",\r\n marginTop: \"0 !important\",\r\n fontSize: \"12px\",\r\n },\r\n },\r\n \"& .MuiInput-underline:before\": {\r\n borderBottom: \"0\",\r\n },\r\n \"& .MuiInput-underline:after\": {\r\n borderBottom: \"2px solid #26A456\",\r\n transition: \"transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms\",\r\n },\r\n \"&:hover .MuiInput-underline:before\": {\r\n borderBottom: \"0\",\r\n },\r\n \"& .MuiInputLabel-shrink\": {\r\n transform: \"translate(0, 1.5px) scale(1)\",\r\n },\r\n \"& .MuiSelect-selectMenu\": {\r\n minHeight: \"9px\",\r\n lineHeight: \"9px\",\r\n fontSize: 12,\r\n },\r\n },\r\n})(TextField);\r\n","import Slider from \"@mui/material/Slider\";\r\nimport { withStyles } from \"@mui/styles\";\r\nexport const StyledSlider = withStyles({\r\n root: {\r\n color: \"#26A456\",\r\n height: 8,\r\n },\r\n thumb: {\r\n height: 24,\r\n width: 24,\r\n backgroundColor: \"#fff\",\r\n border: \"2px solid currentColor\",\r\n marginTop: -8,\r\n marginLeft: -12,\r\n \"&:focus, &:hover, &$active\": {\r\n boxShadow: \"inherit\",\r\n },\r\n },\r\n active: {},\r\n valueLabel: {\r\n left: \"calc(-50% + 4px)\",\r\n },\r\n track: {\r\n height: 8,\r\n borderRadius: 4,\r\n },\r\n rail: {\r\n height: 8,\r\n borderRadius: 4,\r\n },\r\n})(Slider);\r\n","import React, { useState } from \"react\";\nimport MenuList from \"@mui/material/MenuList\";\nimport { StyledMenuItem } from \"./styledComponents\";\nimport Checkbox from \"@mui/material/Checkbox\";\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\nimport Paper from \"@mui/material/Paper\";\nimport ViewColumnOutlinedIcon from \"@mui/icons-material/ViewColumnOutlined\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Popover from \"@mui/material/Popover\";\nimport { useTranslation } from \"react-i18next\";\nconst ITEM_HEIGHT = 48;\n\nexport const ColumnVisibility = ({\n visibleColumns,\n defaultHiddenColumns,\n classes,\n}) => {\n const [anchorEl, setAnchorEl] = useState(null);\n const open = Boolean(anchorEl);\n const { t } = useTranslation();\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n //console.log(\"visibleColumns=>\", visibleColumns);\n const menuItems = visibleColumns.reduce((accum, column) => {\n //console.log(\"column=>\", column);\n const { checked, style, onChange } = column.getToggleHiddenProps();\n const isDisabled = column?.isColumnHidingDisabled ?? false;\n //console.log(style);\n if (\n defaultHiddenColumns.indexOf(column.id) === -1 ||\n column.isTableHidden === true\n ) {\n accum.push(\n <StyledMenuItem dense={true} key={column.id} onChange={onChange}>\n <FormControlLabel\n control={\n <Checkbox\n checked={checked}\n onChange={onChange}\n name={column.id}\n color=\"secondary\"\n disabled={isDisabled}\n />\n }\n label={t(column.columnName)}\n style={style}\n />\n </StyledMenuItem>,\n );\n }\n return accum;\n }, []);\n\n return (\n <div>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n color=\"primary\"\n className={classes.refreshiconhover}\n >\n <ViewColumnOutlinedIcon />\n </IconButton>\n <Popover\n id={\"columnVisibility\"}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"right\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n >\n <Paper\n style={{\n maxHeight: ITEM_HEIGHT * 4.5,\n overflow: \"scroll\",\n }}\n >\n <MenuList dense={true}>{menuItems}</MenuList>\n </Paper>\n </Popover>\n </div>\n );\n};\n","import React, { forwardRef, useImperativeHandle, useMemo } from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport IconButton from \"@mui/material/IconButton\";\nimport { makeStyles } from \"@mui/styles\";\nimport { Theme } from \"@mui/material/styles\";\nimport { GlobalFilter } from \"./components/filters\";\nimport { RenderActions } from \"components/dataTable/tableActionToolbar\";\nimport { useAutoRefresh } from \"../utils/autoRefresh\";\nimport { CircularProgressWithLabel } from \"../utils/circularProgressWithLabel\";\nimport { TableFilterComponent } from \"../dataTable/tableFilterComponent\";\nimport { ColumnVisibility } from \"../dataTable/columnVisibility\";\nconst useStyles = makeStyles((theme: Theme) => ({\n root: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n background: \"var(--theme-color1)\",\n borderTopLeftRadius: \"4px\",\n borderTopRightRadius: \"4px\",\n },\n title: {\n // flex: \"1 1 100%\",\n color: \"var(--white)\",\n letterSpacing: \"1px\",\n fontSize: \"1.5rem\",\n },\n refreshiconhover: {\n // \"&:hover\": {\n // backgroundColor: \"var(--theme-color2)\",\n // color: \"var(--theme-color1)\",\n // },\n },\n}));\n\nexport const TableHeaderToolbar = forwardRef<any, any>(\n (\n {\n dense,\n label,\n preGlobalFilteredRows,\n globalFilter,\n setGlobalFilter,\n alwaysAvailableAction,\n setGridAction,\n selectedFlatRows,\n disableGlobalFilter,\n refetchData,\n autoRefreshInterval,\n gotoPage,\n setSortBy,\n allowFilter,\n filters,\n setAllFilters,\n filterMeta,\n visibleColumns,\n defaultHiddenColumns,\n allowColumnHiding,\n loading = false,\n },\n ref,\n ) => {\n const { progress, enabled, intervalElapsed, pause, resume } =\n useAutoRefresh(refetchData, autoRefreshInterval);\n const classes = useStyles();\n const newselectedRows = useMemo(\n () =>\n selectedFlatRows.map((one) => {\n return {\n data: one.original,\n id: one.id,\n };\n }),\n [selectedFlatRows],\n );\n useImperativeHandle(ref, () => ({\n pause: pause,\n resume: resume,\n }));\n return (\n <Toolbar className={classes.root} variant={dense ? \"dense\" : \"regular\"}>\n <Typography\n className={classes.title}\n color=\"inherit\"\n variant={\"h6\"}\n component=\"div\"\n >\n {label}\n </Typography>\n <div\n style={{ display: \"flex\", alignItems: \"center\", marginLeft: \"auto\" }}\n >\n {allowFilter ? (\n <TableFilterComponent\n setAllFilters={setAllFilters}\n filters={filters}\n filterMeta={filterMeta}\n gotoPage={gotoPage}\n setSortBy={setSortBy}\n classes={classes}\n />\n ) : null}\n {typeof refetchData === \"function\" ? (\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n //@ts-ignore\n onClick={refetchData}\n color=\"primary\"\n >\n <RefreshIcon />\n </IconButton>\n ) : null}\n {enabled ? (\n <CircularProgressWithLabel\n variant=\"determinate\"\n value={progress}\n interval={intervalElapsed}\n pause={pause}\n resume={resume}\n />\n ) : null}\n {allowColumnHiding ? (\n <ColumnVisibility\n visibleColumns={visibleColumns}\n defaultHiddenColumns={defaultHiddenColumns}\n classes={classes}\n />\n ) : null}\n {disableGlobalFilter ? null : (\n <GlobalFilter\n preGlobalFilteredRows={preGlobalFilteredRows}\n globalFilter={globalFilter}\n setGlobalFilter={setGlobalFilter}\n />\n )}\n {loading ? null : (\n <RenderActions\n key=\"alwaysRender\"\n selectedRows={newselectedRows}\n setAction={setGridAction}\n actions={alwaysAvailableAction ?? []}\n />\n )}\n </div>\n </Toolbar>\n );\n },\n);\n","import { withStyles } from \"@mui/styles\";\r\nimport TableHead from \"@mui/material/TableHead\";\r\n\r\nexport const StickyTableHead = withStyles(() => ({\r\n root: {\r\n position: \"sticky\",\r\n zIndex: 10,\r\n top: 0,\r\n backgroundColor: \"white\",\r\n display: \"block\",\r\n },\r\n}))(TableHead);\r\n","import { withStyles } from \"@mui/styles\";\r\nimport TableRow from \"@mui/material/TableRow\";\r\n\r\nexport const MyTableRow = withStyles((theme) => {\r\n return {\r\n root: {\r\n \"&:focus\": {\r\n outline: \"none !important\",\r\n background: theme.palette.action.focus,\r\n },\r\n \"&$selected:focus\": {\r\n outline: \"none !important\",\r\n background: theme.palette.action.focus,\r\n },\r\n \"&$hover:hover\": {\r\n outline: \"none !important\",\r\n },\r\n \"&$selected, &$selected:hover\": {\r\n outline: \"none !important\",\r\n },\r\n \"&:hover\": {\r\n outline: \"none !important\",\r\n background: theme.palette.action.hover,\r\n },\r\n },\r\n selected: {\r\n background: theme.palette.action.selected,\r\n },\r\n };\r\n})(TableRow);\r\n","import TableCell from \"@mui/material/TableCell\";\nimport React from \"react\";\n\nexport const HeaderCellWrapper = ({ column, children }) => {\n const stickyHeaderCell =\n column.sticky === true\n ? {\n position: \"sticky\",\n background: \"white\",\n left: column.totalLeft,\n zIndex: 12,\n }\n : {};\n return (\n <TableCell\n component=\"div\"\n variant=\"head\"\n {...column.TableCellProps}\n {...column.getHeaderProps([\n {\n style: {\n position: \"relative\",\n display: \"flex\",\n padding: \"0px 10px\",\n lineHeight: \"34px\",\n ...stickyHeaderCell,\n },\n },\n ])}\n >\n {children}\n {/* {console.log(children)} */}\n </TableCell>\n );\n};\n","import IconButton from \"@mui/material/IconButton\";\nimport { makeStyles } from \"@mui/styles\";\nimport { InputAdornment, Typography, useTheme } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport FirstPageIcon from \"@mui/icons-material/FirstPage\";\nimport KeyboardArrowLeft from \"@mui/icons-material/KeyboardArrowLeft\";\nimport KeyboardArrowRight from \"@mui/icons-material/KeyboardArrowRight\";\nimport ArrowForwardIcon from \"@mui/icons-material/ArrowForward\";\nimport LastPageIcon from \"@mui/icons-material/LastPage\";\nimport React, { useState } from \"react\";\nimport { TextField } from \"components/styledComponent\";\n\nconst useStyles = makeStyles((theme: Theme) => ({\n root: {\n flexShrink: 0,\n marginLeft: theme.spacing(2.5),\n },\n}));\n\nexport const TablePaginationActions = (props) => {\n const classes = useStyles();\n const theme = useTheme();\n const { count, page, rowsPerPage, onPageChange } = props;\n\n const handleFirstPageChange = (event) => {\n onPageChange(event, 0);\n };\n const handleBackButtonClick = (event) => {\n onPageChange(event, page - 1);\n };\n const handleNextButtonClick = (event) => {\n onPageChange(event, page + 1);\n };\n const handleLastPageButtonClick = (event) => {\n onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));\n };\n\n return (\n <div className={classes.root}>\n <IconButton\n onClick={handleFirstPageChange}\n disabled={page === 0}\n aria-label=\"first page\"\n >\n {theme.direction === \"rtl\" ? <LastPageIcon /> : <FirstPageIcon />}\n </IconButton>\n <IconButton\n onClick={handleBackButtonClick}\n disabled={page === 0}\n aria-label=\"previous page\"\n >\n {theme.direction === \"rtl\" ? (\n <KeyboardArrowRight />\n ) : (\n <KeyboardArrowLeft />\n )}\n </IconButton>\n <IconButton\n onClick={handleNextButtonClick}\n disabled={page >= Math.ceil(count / rowsPerPage) - 1}\n aria-label=\"next Page\"\n >\n {theme.direction === \"rtl\" ? (\n <KeyboardArrowLeft />\n ) : (\n <KeyboardArrowRight />\n )}\n </IconButton>\n <IconButton\n onClick={handleLastPageButtonClick}\n disabled={page >= Math.ceil(count / rowsPerPage) - 1}\n >\n {theme.direction === \"rtl\" ? <FirstPageIcon /> : <LastPageIcon />}\n </IconButton>\n </div>\n );\n};\n\nexport const TablePaginationActionsWithInput = (props) => {\n const classes = useStyles();\n const theme = useTheme();\n const { count, page, rowsPerPage, onPageChange } = props;\n const [newPage, setNewPage] = useState(\"\");\n const endPage = Math.ceil(count / rowsPerPage);\n const startPage = endPage === 0 ? 0 : page + 1;\n\n const handleFirstPageChange = (event) => {\n onPageChange(event, 0);\n };\n\n const handleBackButtonClick = (event) => {\n onPageChange(event, page - 1);\n };\n\n const handleNextButtonClick = (event) => {\n onPageChange(event, page + 1);\n };\n\n const handleLastPageButtonClick = (event) => {\n onPageChange(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));\n };\n\n const handleInputChange = (event) => {\n setNewPage(event.target.value);\n };\n\n const handleGoToPage = () => {\n const nextPage = parseInt(newPage, 10) - 1;\n if (\n !isNaN(nextPage) &&\n nextPage >= 0 &&\n nextPage < Math.ceil(count / rowsPerPage)\n ) {\n onPageChange(null, nextPage);\n setNewPage(\"\");\n }\n };\n\n return (\n <div\n className={classes.root}\n style={{ display: \"flex\", alignItems: \"center\", marginLeft: \"1rem\" }}\n >\n <Typography variant=\"body2\">\n Page {`${startPage} of ${endPage}`}\n </Typography>\n <IconButton\n onClick={handleFirstPageChange}\n disabled={page === 0}\n aria-label=\"first page\"\n >\n {theme.direction === \"rtl\" ? <LastPageIcon /> : <FirstPageIcon />}\n </IconButton>\n <IconButton\n onClick={handleBackButtonClick}\n disabled={page === 0}\n aria-label=\"previous page\"\n >\n {theme.direction === \"rtl\" ? (\n <KeyboardArrowRight />\n ) : (\n <KeyboardArrowLeft />\n )}\n </IconButton>\n <TextField\n type=\"number\"\n sx={{\n \"& .MuiInputBase-root\": {\n marginTop: \"4px !important\",\n height: \"28px\",\n },\n }}\n value={newPage}\n onChange={handleInputChange}\n InputProps={{\n inputProps: { min: 1, max: Math.ceil(count / rowsPerPage) },\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={handleGoToPage}\n disabled={isNaN(parseInt(newPage, 10)) || newPage === \"\"}\n >\n <ArrowForwardIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n <IconButton\n onClick={handleNextButtonClick}\n disabled={page >= Math.ceil(count / rowsPerPage) - 1}\n aria-label=\"next Page\"\n >\n {theme.direction === \"rtl\" ? (\n <KeyboardArrowLeft />\n ) : (\n <KeyboardArrowRight />\n )}\n </IconButton>\n <IconButton\n onClick={handleLastPageButtonClick}\n disabled={page >= Math.ceil(count / rowsPerPage) - 1}\n >\n {theme.direction === \"rtl\" ? <FirstPageIcon /> : <LastPageIcon />}\n </IconButton>\n </div>\n );\n};\n","import { makeStyles } from \"@mui/styles\";\nimport React from \"react\";\n\nconst useStyles = makeStyles(() => ({\n root: {\n position: \"relative\",\n overflow: \"hidden\",\n display: \"block\",\n height: 4,\n zIndex: 0,\n \"@media print\": {\n colorAdjust: \"exact\",\n },\n },\n}));\n\nexport const LinearProgressBarSpacer = () => {\n const classes = useStyles();\n return <div className={classes.root}></div>;\n};\n","import Backdrop from \"@mui/material/Backdrop\";\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nexport const CustomBackdrop = withStyles(() => ({\r\n root: {\r\n position: \"absolute\",\r\n zIndex: 9,\r\n backgroundColor: \"rgb(0 0 0 / 0%)\",\r\n },\r\n}))(Backdrop);\r\n","import React from \"react\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport { makeStyles } from \"@mui/styles\";\nimport { Theme } from \"@mui/material/styles\";\nimport Chip from \"@mui/material/Chip\";\nimport Typography from \"@mui/material/Typography\";\nimport { format } from \"date-fns\";\nimport { useTranslation } from \"react-i18next\";\nconst useStyles = makeStyles((theme: Theme) => ({\n root: {\n display: \"flex\",\n justifyContent: \"left\",\n flexWrap: \"wrap\",\n listStyle: \"none\",\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n margin: 0,\n },\n chip: {\n margin: theme.spacing(0.5),\n },\n}));\n\nexport const TableFilterStatusBar = ({\n dense,\n filters,\n setAllFilters,\n gotoPage,\n setSortBy,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const handleDelete = (id) => {\n let newFilter = filters.filter((one) => one.id !== id);\n setAllFilters(newFilter);\n gotoPage(0);\n setSortBy([]);\n };\n if (Array.isArray(filters) && filters.length <= 0) {\n return null;\n }\n return (\n <Toolbar\n component=\"ul\"\n className={classes.root}\n variant={dense ? \"dense\" : \"regular\"}\n >\n <li>\n <Typography variant=\"h6\" color=\"secondary\">\n {t(\"AppliedFilters\")}:{\" \"}\n </Typography>\n </li>\n {filters.map((one: any) => {\n //console.log(one);\n return (\n <li key={one?.id}>\n <Chip\n label={computeFilterLabel(\n one?.value?.condition,\n t(one?.value?.columnName),\n one?.value?.value,\n one?.value?.label,\n )}\n onDelete={() => handleDelete(one?.id)}\n className={classes.chip}\n variant=\"outlined\"\n color=\"secondary\"\n />\n </li>\n );\n })}\n </Toolbar>\n );\n};\n\nconst computeFilterLabel = (condition, columnName, value, label) => {\n switch (condition) {\n case \"equal\":\n return `${columnName} = ${isDateThenFormat(value)}`;\n case \"between\":\n return `${columnName} between ${isDateThenFormat(\n value[0],\n )} and ${isDateThenFormat(value[1])}`;\n case \"in\":\n return `${columnName} in ${isLabelThenDisplay(value, label)}`;\n case \"contains\":\n return `${columnName} like ${value}`;\n case \"endsWith\":\n return `${columnName} ends with ${value}`;\n case \"startsWith\":\n return `${columnName} starts with ${value}`;\n default:\n return `${columnName}`;\n }\n};\n\nconst isDateThenFormat = (value) => {\n let myDate = new Date(value);\n //@ts-ignore\n if (!isNaN(myDate) && isNaN(value)) {\n return format(myDate, \"dd/MM/yyyy\");\n } else {\n return value;\n }\n};\n\nconst isLabelThenDisplay = (value, label) => {\n if (\n Array.isArray(label) &&\n Array.isArray(value) &&\n value.length === label.length\n ) {\n return JSON.stringify(label).replaceAll(/\"/g, \" \");\n } else {\n return JSON.stringify(value).replaceAll(/\"/g, \" \");\n }\n};\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport {\r\n useTable,\r\n useSortBy,\r\n useResizeColumns,\r\n useBlockLayout,\r\n useRowSelect,\r\n useColumnOrder,\r\n useGlobalFilter,\r\n useGroupBy,\r\n useExpanded,\r\n usePagination,\r\n} from \"react-table\";\r\nimport Paper from \"@mui/material/Paper\";\r\nimport TableContainer from \"@mui/material/TableContainer\";\r\nimport Table from \"@mui/material/Table\";\r\nimport TableBody from \"@mui/material/TableBody\";\r\nimport TableRow from \"@mui/material/TableRow\";\r\nimport TableCell from \"@mui/material/TableCell\";\r\nimport TablePagination from \"@mui/material/TablePagination\";\r\nimport { TableHeaderToolbar } from \"./tableHeaderToolbar\";\r\nimport { StickyTableHead } from \"components/dataTable/stickyTableHead\";\r\nimport { MyTableRow } from \"components/dataTable/focusableTableRow\";\r\nimport { HeaderCellWrapper } from \"components/dataTable/headerCellWrapper\";\r\nimport {\r\n TableActionToolbar,\r\n ActionContextMenu,\r\n} from \"components/dataTable/tableActionToolbar\";\r\nimport {\r\n TablePaginationActions,\r\n TablePaginationActionsWithInput,\r\n} from \"components/dataTable/tablePaginationToolbar\";\r\nimport { useCheckboxColumn } from \"./components/useCheckbox\";\r\nimport LinearProgress from \"@mui/material/LinearProgress\";\r\nimport { LinearProgressBarSpacer } from \"components/dataTable/linerProgressBarSpacer\";\r\nimport { CustomBackdrop } from \"components/dataTable/backdrop\";\r\nimport {\r\n filterAction,\r\n DataFilterComponents,\r\n filterActionWhenNoDataFound,\r\n} from \"components/dataTable/utils\";\r\nimport { TableFilterStatusBar } from \"components/dataTable/tableFilterStatusBar\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { useTranslation } from \"react-i18next\";\r\nlet data2: any[] = [];\r\nexport const DataGrid = ({\r\n label,\r\n dense,\r\n columns,\r\n data,\r\n loading,\r\n getRowId,\r\n defaultColumn,\r\n allowColumnReordering,\r\n disableSorting,\r\n defaultHiddenColumns,\r\n defaultSortOrder,\r\n defaultGroupBy,\r\n multipleActions,\r\n singleActions,\r\n doubleClickAction,\r\n alwaysAvailableAction,\r\n setGridAction,\r\n updateGridData,\r\n hideFooter,\r\n hideHeader,\r\n disableGlobalFilter,\r\n disableGroupBy,\r\n disableLoader,\r\n containerHeight,\r\n gridProps,\r\n pageSizes,\r\n defaultPageSize,\r\n enablePagination,\r\n allowRowSelection,\r\n hideNoDataFound,\r\n refetchData,\r\n hiddenFlag,\r\n autoRefreshInterval,\r\n allowFilter,\r\n filterMeta,\r\n allowColumnHiding,\r\n defaultFilter,\r\n isCusrsorFocused,\r\n onButtonActionHandel,\r\n authState,\r\n}) => {\r\n //@ts-ignore\r\n const [filters, setAllFilters] = useState(defaultFilter);\r\n\r\n data2 = useMemo(() => DataFilterComponents(filters, data), [filters, data]);\r\n\r\n useEffect(() => {\r\n setAllFilters(defaultFilter);\r\n }, [defaultFilter]);\r\n\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n prepareRow,\r\n selectedFlatRows,\r\n rows,\r\n page,\r\n gotoPage,\r\n setPageSize,\r\n state,\r\n setGlobalFilter,\r\n preGlobalFilteredRows,\r\n state: { pageIndex, pageSize },\r\n setSortBy,\r\n columns: availableColumns,\r\n } = useTable(\r\n {\r\n initialState: {\r\n pageIndex: 0,\r\n pageSize: defaultPageSize,\r\n hiddenColumns: defaultHiddenColumns,\r\n sortBy: defaultSortOrder,\r\n groupBy: defaultGroupBy,\r\n },\r\n columns,\r\n defaultColumn,\r\n data: data2,\r\n getRowId,\r\n allowColumnReordering: allowColumnReordering,\r\n autoResetSortBy: false,\r\n disableSortBy: Boolean(disableSorting),\r\n disableGlobalFilter: Boolean(disableGlobalFilter),\r\n disableGroupBy: Boolean(disableGroupBy),\r\n updateGridData,\r\n gridProps,\r\n singleActions,\r\n setGridAction,\r\n hiddenFlag,\r\n loading,\r\n onButtonActionHandel,\r\n autoResetGlobalFilter: false,\r\n },\r\n useGlobalFilter,\r\n useColumnOrder,\r\n useGroupBy,\r\n useSortBy,\r\n useExpanded,\r\n usePagination,\r\n useRowSelect,\r\n useResizeColumns,\r\n useBlockLayout,\r\n useCheckboxColumn(allowRowSelection),\r\n );\r\n //console.log(\"filter\", filter);\r\n //console.log(\"defaultHiddenColumns=>\", defaultHiddenColumns);\r\n\r\n const tbodyRef = useRef(null);\r\n\r\n const rowsToDisplay = enablePagination ? page : rows;\r\n const { t } = useTranslation();\r\n const rowCount = useMemo(() => {\r\n return rows.reduce((cnt, item) => {\r\n if (!(item?.original?._hidden ?? false)) {\r\n ++cnt;\r\n }\r\n return cnt;\r\n }, 0);\r\n }, [rows]);\r\n\r\n // console.log(rowsToDisplay);\r\n //alert(selectedFlatRows.length);\r\n singleActions = filterActionWhenNoDataFound(singleActions, rowCount);\r\n multipleActions = filterActionWhenNoDataFound(multipleActions, rowCount);\r\n\r\n singleActions = filterAction(singleActions, selectedFlatRows, authState);\r\n multipleActions = filterAction(multipleActions, selectedFlatRows, authState);\r\n\r\n const [contextMenuPosition, setContextMenuPosition] = useState<{\r\n mouseX: number;\r\n mouseY: number;\r\n } | null>(null);\r\n const [contextMenuRow, setContextMenuRow] = useState<null | any>(null);\r\n const [contextMenuSelectedRowId, setContextMenuSelectedRowId] = useState<\r\n string | null\r\n >(null);\r\n const handleContextMenuClose = () => {\r\n setContextMenuRow(null);\r\n setContextMenuPosition(null);\r\n setContextMenuSelectedRowId(null);\r\n };\r\n const handleContextMenuOpenforAdd = (event) => {\r\n //console.log(rowCount, singleActions, multipleActions);\r\n if (\r\n rowCount <= 0 &&\r\n (singleActions.length > 0 || multipleActions.length > 0)\r\n ) {\r\n event.preventDefault();\r\n setContextMenuRow({});\r\n setContextMenuSelectedRowId(\"\");\r\n setContextMenuPosition(\r\n contextMenuPosition === null\r\n ? { mouseX: event.clientX - 2, mouseY: event.clientY - 4 }\r\n : null,\r\n );\r\n }\r\n\r\n //alert(\"Test handleContextMenuOpenforAdd\");\r\n };\r\n const handleContextMenuOpen = (row) => (e) => {\r\n e.preventDefault();\r\n setContextMenuRow(row);\r\n setContextMenuSelectedRowId(row?.id);\r\n setContextMenuPosition(\r\n contextMenuPosition === null\r\n ? { mouseX: e.clientX - 2, mouseY: e.clientY - 4 }\r\n : null,\r\n );\r\n };\r\n const handleRowDoubleClickAction = (row) => (e) => {\r\n e.preventDefault();\r\n let result = filterAction(doubleClickAction, [row], authState, true);\r\n if (result === undefined) {\r\n return;\r\n }\r\n setGridAction({\r\n name: doubleClickAction.actionName,\r\n rows: [\r\n {\r\n data: row?.original,\r\n id: row?.id,\r\n },\r\n ],\r\n });\r\n };\r\n const handleChangePage = (_, newPage) => {\r\n gotoPage(newPage);\r\n };\r\n const handleChangeRowsPerPage = (event) => {\r\n setPageSize(Number(event.target.value));\r\n };\r\n //console.log(\"rowsToDisplay\", rowsToDisplay);\r\n return (\r\n <Paper\r\n style={{\r\n width: \"100%\",\r\n }}\r\n >\r\n {Boolean(hideHeader) ? null : (\r\n <TableHeaderToolbar\r\n label={label}\r\n dense={dense}\r\n preGlobalFilteredRows={preGlobalFilteredRows}\r\n globalFilter={state.globalFilter}\r\n setGlobalFilter={setGlobalFilter}\r\n alwaysAvailableAction={alwaysAvailableAction}\r\n setGridAction={setGridAction} //for always Actions\r\n selectedFlatRows={selectedFlatRows}\r\n disableGlobalFilter={Boolean(disableGlobalFilter)}\r\n refetchData={refetchData}\r\n autoRefreshInterval={autoRefreshInterval}\r\n gotoPage={gotoPage}\r\n setSortBy={setSortBy}\r\n allowFilter={allowFilter}\r\n filters={filters}\r\n setAllFilters={setAllFilters}\r\n filterMeta={filterMeta}\r\n visibleColumns={availableColumns}\r\n defaultHiddenColumns={defaultHiddenColumns}\r\n allowColumnHiding={allowColumnHiding}\r\n loading={loading}\r\n />\r\n )}\r\n <TableActionToolbar\r\n dense={dense}\r\n selectedFlatRows={selectedFlatRows}\r\n multipleActions={multipleActions}\r\n singleActions={singleActions}\r\n setGridAction={setGridAction} //for single/multiple actions\r\n />\r\n <ActionContextMenu\r\n contextMenuRow={contextMenuRow}\r\n selectedFlatRows={selectedFlatRows}\r\n singleActions={singleActions}\r\n multipleActions={multipleActions}\r\n setGridAction={setGridAction} //for right click actions\r\n mouseX={contextMenuPosition?.mouseX ?? null}\r\n mouseY={contextMenuPosition?.mouseY ?? null}\r\n handleClose={handleContextMenuClose}\r\n authState={authState}\r\n />\r\n <TableFilterStatusBar\r\n dense={dense}\r\n setAllFilters={setAllFilters}\r\n filters={filters}\r\n gotoPage={gotoPage}\r\n setSortBy={setSortBy}\r\n />\r\n {!disableLoader ? (\r\n loading ? (\r\n <LinearProgress color=\"secondary\" />\r\n ) : (\r\n <LinearProgressBarSpacer />\r\n )\r\n ) : null}\r\n <TableContainer\r\n style={{\r\n position: \"relative\",\r\n display: \"inline-block\",\r\n overflow: \"auto\",\r\n // maxHeight: containerHeight?.max ?? \"calc(100vh - 33*8px)\",\r\n // minHeight: containerHeight?.min ?? \"calc(100vh - 33*8px)\",\r\n maxHeight:\r\n selectedFlatRows.length > 0\r\n ? `calc(${containerHeight?.max} - 8vh)`\r\n : containerHeight?.max,\r\n minHeight:\r\n selectedFlatRows.length > 0\r\n ? `calc(${containerHeight?.min} - 8vh)`\r\n : containerHeight?.min,\r\n borderBottom: hideFooter ? \"\" : \"1px solid rgba(133, 130, 130, 0.8)\",\r\n }}\r\n >\r\n <Table\r\n component=\"div\"\r\n {...getTableProps()}\r\n size={dense ? \"small\" : \"medium\"}\r\n >\r\n {/*@ts-ignore*/}\r\n <StickyTableHead component=\"div\">\r\n {headerGroups.map((headerGroup) => {\r\n return (\r\n <TableRow\r\n component=\"div\"\r\n {...headerGroup.getHeaderGroupProps()}\r\n >\r\n {headerGroup.headers.map((column) => {\r\n return (\r\n <HeaderCellWrapper\r\n column={column}\r\n key={column.getHeaderProps().key}\r\n >\r\n {column.render(\"Header\")}\r\n </HeaderCellWrapper>\r\n );\r\n })}\r\n </TableRow>\r\n );\r\n })}\r\n </StickyTableHead>\r\n <TableBody\r\n component=\"div\"\r\n ref={tbodyRef}\r\n {...getTableBodyProps([\r\n {\r\n style: {\r\n display: \"block\",\r\n },\r\n },\r\n ])}\r\n onContextMenu={handleContextMenuOpenforAdd}\r\n >\r\n {rowsToDisplay.length <= 0 &&\r\n //loading === false &&\r\n hideNoDataFound === false ? (\r\n <Grid container justifyContent=\"center\">\r\n <div\r\n style={{\r\n height: Boolean(containerHeight?.min)\r\n ? \"calc(\" + containerHeight?.min + \" - 50px)\"\r\n : \"calc(100vh - 33*8px)\", //\"calc(100vh - 36*10px)\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n // marginLeft: \"450px\",\r\n fontStyle: \"italic\",\r\n color: \"rgba(133, 130, 130, 0.8)\",\r\n }}\r\n >\r\n {t(\"Nodatafound\")}\r\n </div>\r\n </Grid>\r\n ) : null}\r\n {rowsToDisplay.map((row) => {\r\n //console.log(row);\r\n if (Boolean(row?.original?.[hiddenFlag])) {\r\n return null;\r\n }\r\n prepareRow(row);\r\n const rightClickHandler = handleContextMenuOpen(row);\r\n const thisRowDblClickHandler = handleRowDoubleClickAction(row);\r\n let rowColorStyle: any[] = [];\r\n\r\n if (Boolean(row?.original?._rowColor)) {\r\n rowColorStyle = [\r\n { style: { background: row?.original?._rowColor } },\r\n ];\r\n }\r\n if (isCusrsorFocused) {\r\n if (rowColorStyle.length > 0) {\r\n rowColorStyle[0].style[\"cursor\"] = \"pointer\";\r\n } else {\r\n rowColorStyle = [{ style: { cursor: \"pointer\" } }];\r\n }\r\n }\r\n return (\r\n <MyTableRow\r\n {...row.getRowProps(rowColorStyle)}\r\n id={row.id}\r\n tabIndex={0}\r\n component=\"div\"\r\n selected={\r\n row.isSelected || contextMenuSelectedRowId === row.id\r\n }\r\n onContextMenu={rightClickHandler}\r\n onDoubleClick={\r\n Boolean(doubleClickAction)\r\n ? thisRowDblClickHandler\r\n : undefined\r\n }\r\n >\r\n {row.cells.map((cell) => {\r\n const { key } = cell.getCellProps();\r\n return cell.isAggregated\r\n ? cell.render(\"Aggregated\", { key })\r\n : cell.render(\"Cell\", { key });\r\n })}\r\n </MyTableRow>\r\n );\r\n })}\r\n </TableBody>\r\n </Table>\r\n <CustomBackdrop open={Boolean(loading)} />\r\n </TableContainer>\r\n\r\n {hideFooter ? null : enablePagination ? (\r\n <TablePagination\r\n sx={{\r\n display: \"flex\",\r\n \"& .MuiToolbar-root\": { display: \"flex\", alignItems: \"baseline\" },\r\n }}\r\n variant=\"body\"\r\n component=\"div\"\r\n rowsPerPageOptions={pageSizes}\r\n colSpan={3}\r\n count={rows.length}\r\n rowsPerPage={Number(pageSize)}\r\n page={Number(pageIndex)}\r\n onPageChange={handleChangePage}\r\n onRowsPerPageChange={handleChangeRowsPerPage}\r\n ActionsComponent={TablePaginationActionsWithInput}\r\n />\r\n ) : (\r\n <TableCell style={{ display: \"flex\" }}>\r\n {/* Total No. of Records: {rowCount} */}\r\n {t(\"TotalNoofRecords\")} {rowCount}\r\n </TableCell>\r\n )}\r\n </Paper>\r\n );\r\n};\r\n","import React, {\n useMemo,\n useCallback,\n useRef,\n useImperativeHandle,\n forwardRef,\n} from \"react\";\nimport { cloneDeep } from \"lodash-es\";\nimport {\n attachAlignmentProps,\n sortColumnsBySequence,\n extractHiddenColumns,\n SplitActions,\n attachCellComponentsToMetaData,\n} from \"components/dataTable/utils\";\nimport {\n attachMethodsToMetaData,\n attachYupSchemaValidator,\n attachcombinedValidationFns,\n} from \"./utils\";\nimport { GridMetaDataType, GridWrapperPropTypes } from \"./types\";\nimport { DefaultHeaderColumnRenderer } from \"./components\";\nimport { DataGrid } from \"./grid\";\nimport {\n AutoRefreshProvider,\n useAutoRefreshControls,\n} from \"../utils/autoRefresh\";\nimport { attachFilterComponentToMetaData } from \"components/dataTable/utils\";\nimport { useTranslation } from \"react-i18next\";\nexport const GridWrapper = forwardRef<any, GridWrapperPropTypes>(\n (props, ref) => {\n return (\n <AutoRefreshProvider>\n <GridWrapperStatic {...props} ref={ref} />\n </AutoRefreshProvider>\n );\n },\n);\n\nexport const GridWrapperStatic = forwardRef<any, GridWrapperPropTypes>(\n (\n {\n finalMetaData,\n data,\n setData,\n actions,\n setAction,\n loading,\n gridProps,\n refetchData,\n defaultSortOrder = [],\n defaultGroupBy = [],\n defaultFilter = [],\n hideHeader = false,\n hideFooter = false,\n autoRefreshInterval = 0,\n onClickActionEvent = () => {},\n authState = {},\n },\n ref,\n ) => {\n //console.log(finalMetaData);\n const { pause, resume } = useAutoRefreshControls();\n const metaDataRef = useRef<any>(null);\n const { t } = useTranslation();\n if (metaDataRef.current === null) {\n metaDataRef.current = transformMetaData({\n metaData: finalMetaData,\n actions,\n setAction,\n // lanTranslate: t,\n });\n }\n //console.log(data);\n let dataRef = useRef(data);\n dataRef.current = data;\n let metaData = metaDataRef.current;\n // console.table(metaData);\n /* eslint-disable react-hooks/exhaustive-deps */\n //console.log(metaData);\n // const columns = useMemo(() => metaData.columns ?? [], []);\n const columns = useMemo(() => {\n //console.log(\"columns\", metaData.columns);\n if (Array.isArray(metaData.columns)) {\n return metaData.columns.map((item) => {\n return { ...item, columnName: t(item.columnName) };\n });\n }\n return metaData.columns ?? [];\n }, [t]);\n //console.log(columns);\n // const filterMeta = useMemo(() => metaData.filters, []);\n const filterMeta = useMemo(() => {\n if (Array.isArray(metaData.filters)) {\n return metaData.filters.map((item) => {\n return { ...item, columnName: t(item.columnName) };\n });\n }\n return metaData.filters ?? [];\n }, [t]);\n const mydefaultFilter = useMemo(() => defaultFilter, [defaultFilter]);\n const columnsValidator = useMemo(() => {\n return columns.reduce((accum, one) => {\n accum[one.accessor] = one.validation;\n return accum;\n }, {});\n }, [columns]);\n //console.log(columnsValidator);\n const columnsObj = useMemo(() => {\n return columns.reduce((accum, one) => {\n accum[one.accessor] = \"\";\n return accum;\n }, {});\n }, [columns]);\n const defaultColumn = useMemo(\n () => ({\n width: 150,\n maxWidth: 200,\n minWidth: 50,\n Header: DefaultHeaderColumnRenderer,\n ...metaData?.gridConfig?.defaultColumnConfig,\n }),\n [metaData?.gridConfig?.defaultColumnConfig],\n );\n const getRowId = useCallback(\n (row) => row[metaData?.gridConfig?.rowIdColumn],\n [metaData?.gridConfig?.rowIdColumn],\n );\n const myDefaultSortOrder = useMemo(() => defaultSortOrder, []);\n const myDefaultGroupBy = useMemo(() => defaultGroupBy, []);\n //console.log(\"data\", data);\n const updateGridData = useCallback(\n (rowIndex, columnID, value, touched, error) => {\n let displaySeqNumber = 0;\n setData((old) =>\n old.map((row, index) => {\n if (index === rowIndex) {\n let isChanged = true;\n let isOldData = \"\";\n if (\n Boolean(old?.[rowIndex]?.[\"_oldData\"]?.[columnID]) &&\n Boolean(value) &&\n old?.[rowIndex]?.[\"_oldData\"]?.[columnID] === value\n ) {\n isChanged = false;\n } else {\n isChanged = Boolean(\n old?.[rowIndex]?.[\"_isTouchedCol\"]?.[columnID],\n )\n ? true\n : Boolean(old[rowIndex]?.[columnID]) && !Boolean(value)\n ? true\n : Boolean(old[rowIndex]?.[columnID]) &&\n Boolean(value) &&\n old[rowIndex]?.[columnID] != value\n ? true\n : !Boolean(old[rowIndex]?.[columnID]) && Boolean(value)\n ? true\n : false;\n\n //console.log(old?.[rowIndex]?.[\"_isTouchedCol\"], isChanged);\n }\n if (isChanged) {\n let oldValue = old?.[rowIndex]?.[\"_oldData\"]?.[columnID];\n if (typeof oldValue === \"undefined\" || oldValue === null) {\n isOldData = old?.[rowIndex]?.[columnID] ?? \"\";\n } else {\n isOldData = oldValue;\n }\n } else {\n isOldData = old?.[rowIndex]?.[\"_oldData\"]?.[columnID] ?? \"\";\n }\n let returnData = {\n ...old[rowIndex],\n [columnID]: value,\n _touched: {\n ...old?.[rowIndex]?.[\"_touched\"],\n [columnID]: touched,\n },\n _error: {\n ...old?.[rowIndex]?.[\"_error\"],\n [columnID]: error,\n },\n _isTouchedCol: {\n ...old?.[rowIndex]?.[\"_isTouchedCol\"],\n [columnID]: isChanged,\n },\n _oldData: {\n ...old?.[rowIndex]?.[\"_oldData\"],\n },\n };\n if (isChanged) {\n returnData = {\n ...returnData,\n _oldData: { ...returnData._oldData, [columnID]: isOldData },\n };\n }\n if (!(columnID === \"_hidden\")) {\n displaySeqNumber = displaySeqNumber + 1;\n }\n return { ...returnData, _displaySequence: displaySeqNumber };\n }\n if (!Boolean(row?._hidden)) {\n displaySeqNumber = displaySeqNumber + 1;\n }\n return { ...row, _displaySequence: displaySeqNumber };\n }),\n );\n },\n [setData],\n );\n const stripValidationFromData = useCallback(() => {\n if (Array.isArray(dataRef.current)) {\n return dataRef.current.map((one) => {\n const { _touched, _error, _rowColor, ...others } = one;\n return others;\n });\n }\n return [];\n }, []);\n const validator = useCallback(async (data, ignoreTouch) => {\n let isError = false;\n let keys = Object.keys(columnsValidator);\n if (!Array.isArray(data)) {\n return { isValid: isError, data: [] };\n }\n let validatedData = data.map(async (one, index) => {\n let hiddenFlag = metaData?.gridConfig?.hiddenFlag;\n if (Boolean(one?.[hiddenFlag])) {\n return one;\n }\n const touched = one[\"_touched\"] ?? {};\n const error = one[\"_error\"] ?? {};\n for (let i = 0; i < keys.length; i++) {\n const columnTouched = touched[keys[i]];\n const columnError = error[keys[i]];\n const columnValue = one[keys[i]];\n const columnValidator = columnsValidator[keys[i]];\n\n if (Boolean(columnTouched) && ignoreTouch === false) {\n if (Boolean(columnError)) {\n isError = true;\n } else {\n continue;\n }\n } else {\n if (typeof columnValidator === \"function\") {\n let validationResult = await columnValidator(\n columnValue,\n one,\n data\n .slice(0, index)\n .filter((one) => Boolean(one[hiddenFlag]) !== true),\n data\n .slice(index + 1)\n .filter((one) => Boolean(one[hiddenFlag]) !== true),\n );\n if (Boolean(validationResult)) {\n isError = true;\n }\n touched[keys[i]] = true;\n error[keys[i]] = validationResult;\n // console.log(\n // keys[i],\n // Boolean(columnTouched),\n // ignoreTouch,\n // validationResult\n // );\n }\n }\n }\n return { ...one, _touched: touched, _error: error };\n });\n let result = await Promise.all(validatedData);\n return { hasError: isError, data: result };\n }, []);\n const validateData = useCallback(async (ignoreTouch) => {\n return validator(dataRef.current, ignoreTouch);\n }, []);\n const onButtonActionHandel = useCallback(\n (index, id) => {\n onClickActionEvent(index, id, data[index]);\n },\n [data],\n );\n useImperativeHandle(ref, () => ({\n validate: (ignoreTouch = false) => validateData(ignoreTouch),\n validator: () => validator,\n cleanData: () => stripValidationFromData(),\n columns: columnsObj,\n pause: pause,\n resume: resume,\n refetch: refetchData,\n updateGridData: updateGridData,\n }));\n if (!Array.isArray(data)) {\n //console.log(Array.isArray(data), data);\n return <div>Invalid data received</div>;\n }\n return (\n <DataGrid\n label={t(metaData.gridConfig?.gridLabel ?? \"NO_NAME\")}\n dense={true}\n getRowId={getRowId}\n columns={columns}\n defaultColumn={defaultColumn}\n data={data}\n loading={loading}\n allowColumnReordering={metaData.gridConfig?.allowColumnReordering}\n disableSorting={metaData?.gridConfig?.disableSorting}\n defaultHiddenColumns={metaData.hiddenColumns}\n defaultSortOrder={myDefaultSortOrder}\n defaultGroupBy={myDefaultGroupBy}\n multipleActions={metaData?.multipleActions}\n singleActions={metaData?.singleActions}\n doubleClickAction={metaData?.doubleClickAction}\n alwaysAvailableAction={metaData?.alwaysAvailableAction}\n setGridAction={metaData?.setAction}\n updateGridData={updateGridData}\n hideFooter={metaData?.gridConfig?.hideFooter ?? hideFooter}\n hideHeader={metaData?.gridConfig?.hideHeader ?? hideHeader}\n containerHeight={metaData?.gridConfig?.containerHeight}\n allowRowSelection={metaData?.gridConfig?.allowRowSelection ?? true}\n disableGlobalFilter={metaData?.gridConfig?.disableGlobalFilter}\n disableGroupBy={metaData?.gridConfig?.disableGroupBy}\n disableLoader={metaData?.gridConfig?.disableLoader}\n pageSizes={metaData?.gridConfig?.pageSizes ?? [5, 10]}\n defaultPageSize={metaData?.gridConfig?.defaultPageSize ?? 10}\n enablePagination={metaData?.gridConfig?.enablePagination ?? false}\n hideNoDataFound={metaData?.gridConfig?.hideNoDataFound ?? false}\n hiddenFlag={metaData?.gridConfig?.hiddenFlag}\n gridProps={gridProps}\n refetchData={refetchData}\n autoRefreshInterval={autoRefreshInterval}\n allowFilter={metaData.gridConfig?.allowFilter ?? false}\n filterMeta={filterMeta}\n allowColumnHiding={metaData.gridConfig?.allowColumnHiding ?? false}\n defaultFilter={mydefaultFilter}\n isCusrsorFocused={metaData.gridConfig?.isCusrsorFocused ?? false}\n onButtonActionHandel={onButtonActionHandel}\n authState={authState}\n />\n );\n },\n);\n\nGridWrapper.displayName = \"GridWrapper\";\n\nconst transformMetaData = ({\n metaData: freshMetaData,\n actions,\n setAction,\n // lanTranslate,\n}): GridMetaDataType => {\n let metaData = cloneDeep(freshMetaData) as GridMetaDataType;\n //let metaData = JSON.parse(JSON.stringify(freshMetaData)) as GridMetaDataType;\n let newMetaData = attachMethodsToMetaData(metaData as GridMetaDataType);\n let columns = newMetaData.columns as any;\n const hiddenColumns = extractHiddenColumns(columns);\n ///Change Colomun Name for Language Change\n // columns = columns.map((item) => {\n // return { ...item, columnName: lanTranslate(item.columnName) };\n // });\n //make sure extract functions are called before attach and lastly sort\n columns = attachYupSchemaValidator(columns);\n columns = attachCellComponentsToMetaData(columns);\n columns = attachAlignmentProps(columns);\n //call this function after attaching yup schema and methods to metaData\n columns = attachcombinedValidationFns(columns);\n columns = sortColumnsBySequence(columns);\n let filters = metaData.filters as any;\n //make sure extract functions are called before attach and lastly sort\n try {\n filters = attachFilterComponentToMetaData(filters);\n } catch (e) {\n console.log(e);\n }\n //console.log(filters);\n const splittedActions = SplitActions(actions ?? null);\n return {\n hiddenColumns: hiddenColumns,\n columns: columns,\n gridConfig: metaData.gridConfig,\n setAction: setAction,\n filters: filters,\n ...splittedActions,\n };\n};\n","import { GridColumnType } from \"components/dataTableStatic\";\r\nimport { GridMetaDataType } from \"components/dataTableStatic\";\r\n\r\nexport const fileColumns = (fileNamedEditable: false): GridColumnType[] => [\r\n {\r\n columnName: \"FileName\",\r\n componentType: fileNamedEditable ? \"editableTextField\" : \"default\",\r\n accessor: \"name\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Size\",\r\n componentType: \"default\",\r\n accessor: \"sizeStr\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 100,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Type\",\r\n componentType: \"default\",\r\n accessor: \"fileExt\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 100,\r\n minWidth: 100,\r\n },\r\n];\r\n\r\nconst metaData: GridMetaDataType = {\r\n columns: [\r\n {\r\n columnName: \"File ID\",\r\n componentType: \"default\",\r\n accessor: \"id\",\r\n sequence: 0,\r\n alignment: \"left\",\r\n isVisible: false,\r\n },\r\n ...fileColumns(false),\r\n ],\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"Files\",\r\n rowIdColumn: \"id\",\r\n defaultColumnConfig: {\r\n width: 150,\r\n maxWidth: 250,\r\n minWidth: 100,\r\n },\r\n allowColumnReordering: true,\r\n disableSorting: true,\r\n disableGlobalFilter: true,\r\n disableGroupBy: true,\r\n disableLoader: true,\r\n hideHeader: true,\r\n containerHeight: {\r\n min: \"40vh\",\r\n max: \"50vh\",\r\n },\r\n },\r\n};\r\n\r\nexport default metaData;\r\n","import { GridMetaDataType } from \"components/dataTableStatic\";\r\n\r\nconst failedFilesMetaData: GridMetaDataType = {\r\n columns: [\r\n {\r\n columnName: \"File ID\",\r\n componentType: \"default\",\r\n accessor: \"id\",\r\n sequence: 0,\r\n alignment: \"left\",\r\n isVisible: false,\r\n },\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"name\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 400,\r\n maxWidth: 400,\r\n minWidth: 400,\r\n },\r\n {\r\n columnName: \"Size\",\r\n componentType: \"default\",\r\n accessor: \"sizeStr\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 100,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Type\",\r\n componentType: \"default\",\r\n accessor: \"fileExt\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 100,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Reason\",\r\n componentType: \"default\",\r\n accessor: \"failedReason\",\r\n sequence: 4,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 300,\r\n },\r\n ],\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"Failed To Add These Files For Upload\",\r\n rowIdColumn: \"id\",\r\n defaultColumnConfig: {\r\n width: 150,\r\n maxWidth: 250,\r\n minWidth: 100,\r\n },\r\n allowColumnReordering: true,\r\n allowRowSelection: false,\r\n disableGlobalFilter: true,\r\n disableSorting: true,\r\n disableGroupBy: true,\r\n hideHeader: true,\r\n },\r\n};\r\n\r\nexport default failedFilesMetaData;\r\n","import { makeStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: Theme) => ({\r\n uploadWrapper: {\r\n backgroundImage: `url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' stroke='%232538584A' stroke-width='4' stroke-dasharray='8' stroke-dashoffset='4' stroke-linecap='square'/%3e%3c/svg%3e\")`,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n padding: theme.spacing(4),\r\n },\r\n}));\r\n","import { FC, CSSProperties, useRef } from \"react\";\nimport { NativeTypes } from \"react-dnd-html5-backend\";\nimport { useDrop } from \"react-dnd\";\nimport { TargetBoxType } from \"./type\";\nimport Button from \"@mui/material/Button\";\nimport Typography from \"@mui/material/Typography\";\nimport { useStyles } from \"./style\";\nimport { useTranslation } from \"react-i18next\";\nconst style = ({ disabled }): CSSProperties => ({\n pointerEvents: disabled ? \"none\" : \"all\",\n opacity: disabled ? 0.5 : 1,\n});\n\nexport const UploadTarget: FC<TargetBoxType> = (props) => {\n const classes = useStyles();\n const { onDrop, disabled, existingFiles } = props;\n const fileUploadControl = useRef<any | null>(null);\n const { t } = useTranslation();\n const handleFileSelect = (e) => {\n const files = e.target.files;\n const filesArray = Array.from(files);\n onDrop(filesArray as File[], existingFiles);\n };\n const [{ canDrop, isOver }, drop] = useDrop({\n accept: [NativeTypes.FILE],\n drop(item, monitor: any) {\n if (typeof onDrop === \"function\") {\n const files = Array.from(monitor.getItem().files) as File[];\n onDrop(files, existingFiles);\n }\n },\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n canDrop: monitor.canDrop(),\n }),\n });\n\n const isActive = canDrop && isOver;\n return (\n <div\n ref={drop}\n style={style({ disabled: Boolean(disabled) })}\n className={classes.uploadWrapper}\n >\n {isActive ? (\n <Typography>{t(\"DropFileshere\")}</Typography>\n ) : (\n <>\n <Typography>{t(\"DragandDropor\")}</Typography>\n <Button\n color=\"secondary\"\n onClick={() => fileUploadControl?.current?.click()}\n >\n {t(\"Browse\")}\n </Button>\n <input\n type=\"file\"\n multiple\n style={{ display: \"none\" }}\n ref={fileUploadControl}\n onChange={handleFileSelect}\n onClick={(e) => {\n //to clear the file uploaded state to reupload the same file (AKA allow our handler to handle duplicate file)\n //@ts-ignore\n e.target.value = \"\";\n }}\n />\n </>\n )}\n </div>\n );\n};\n","import { cloneDeep } from \"lodash-es\";\nimport { FileObjectType } from \"./type\";\nimport { GridColumnType, GridMetaDataType } from \"components/dataTableStatic\";\nimport { utilFunction } from \"components/utils/utilFunctions\";\n\nexport function hashCode(str) {\n // from https://stackoverflow.com/a/8831937/151666\n var hash = 0;\n if (str.length === 0) {\n return hash;\n }\n for (var i = 0; i < str.length; i++) {\n var char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n\nexport function computeFileFingerprint(file) {\n return hashCode(\n [file.name, file.type, file.size, file.lastModified].join(\"-\"),\n );\n}\n\nexport const computeSize = (sizeInBytes) => {\n if (Number.isInteger(Number(sizeInBytes))) {\n let sOutput = `${sizeInBytes} bytes`;\n const aMultiples = [\"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n for (\n let nMultiple = 0, nApprox = sizeInBytes / 1024;\n nApprox > 1;\n nApprox = nApprox / 1024, nMultiple++\n ) {\n sOutput = `${nApprox.toFixed(2)} ${aMultiples[nMultiple]}`;\n }\n return sOutput;\n } else {\n return \"cannot compute size\";\n }\n};\n\nexport const detectMimeType = async (fileBlob): Promise<any | undefined> => {\n const mime = await getFileTypeFromBlob(fileBlob);\n return mime;\n};\n\n// creating function to detect file type. Replacing the use of file-type/browser package\nfunction getFileTypeFromBlob(blob) {\n return new Promise((resolve, reject) => {\n try {\n const reader = new FileReader();\n reader.onloadend = (result: any) => {\n const arr = new Uint8Array(result?.target?.result).subarray(0, 4);\n let header = \"\";\n for (let i = 0; i < arr.length; i++) {\n let hex = arr[i].toString(16);\n if (hex.length < 2) {\n hex = \"0\" + hex;\n }\n header += hex;\n }\n header = header.toUpperCase();\n let fileType;\n switch (header) {\n case \"FFD8FFE0\":\n case \"FFD8FFE1\":\n case \"FFD8FFE2\":\n case \"FFD8FFE3\":\n fileType = { ext: \"jpg\", mime: \"image/jpeg\" }; // JPEG\n break;\n case \"89504E47\":\n fileType = { ext: \"png\", mime: \"image/png\" }; // PNG\n break;\n case \"47494638\":\n fileType = { ext: \"gif\", mime: \"image/gif\" }; // GIF\n break;\n case \"25504446\":\n fileType = { ext: \"pdf\", mime: \"application/pdf\" }; // PDF\n break;\n case \"504B0304\":\n const fileExtension = blob.name.split(\".\").pop();\n fileType = {\n ext: fileExtension ?? \"xlsx\",\n mime:\n blob.type ??\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n }; // ZIP, DOCX, XLSX, PPTX\n break;\n case \"494433\":\n fileType = { ext: \"mp3\", mime: \"audio/mpeg\" }; // MP3\n break;\n case \"66747970\":\n fileType = { ext: \"mp4\", mime: \"video/mp4\" }; // MP4\n break;\n case \"52494646\":\n fileType = { ext: \"wav\", mime: \"audio/wav\" }; // WAV, AVI\n break;\n case \"74657874\":\n fileType = { ext: \"txt\", mime: \"text/plain\" }; // TXT\n break;\n default:\n resolve(undefined);\n return;\n }\n resolve(fileType);\n };\n reader.onerror = reject;\n reader.readAsArrayBuffer(blob.slice(0, 4));\n } catch (err) {\n reject(undefined);\n }\n });\n}\n\nexport const isMimeTypeValid = (ext, whiteListExtension: string[] | string) =>\n whiteListExtension === \"all\" ||\n (Array.isArray(whiteListExtension) && whiteListExtension.indexOf(ext) > -1);\n\nexport const isDuplicate = (file: FileObjectType, fileIDs: string[]) => {\n return Array.isArray(fileIDs) && fileIDs.indexOf(file.id) > -1;\n};\n\nexport function downloadFile(fileObj: File, fileName?: string) {\n const url = typeof fileObj === \"object\" && URL.createObjectURL(fileObj);\n\n const a = document.createElement(\"a\");\n a.href = String(url);\n\n a.download =\n fileName ?? fileObj.name ?? `download-${new Date().getUTCMilliseconds()}`;\n const clickHandler = () => {\n setTimeout(() => {\n URL.revokeObjectURL(String(url));\n a.removeEventListener(\"click\", clickHandler);\n }, 150);\n };\n a.target = \"_blank\";\n a.addEventListener(\"click\", clickHandler, false);\n a.click();\n}\n\nexport const transformMetaDataByMutating = (\n metaData: GridMetaDataType,\n additionalColumns?: GridColumnType[],\n editableFileName?: boolean,\n): GridMetaDataType => {\n //const newMetaData = JSON.parse(JSON.stringify(metaData));\n const newMetaData = cloneDeep(metaData);\n if (Boolean(editableFileName)) {\n for (let i = 0; i < newMetaData.columns.length; i++) {\n if (newMetaData.columns[i].accessor === \"name\") {\n newMetaData.columns[i].componentType = \"editableTextField\";\n }\n }\n }\n if (Array.isArray(additionalColumns)) {\n newMetaData.columns = [...metaData.columns, ...additionalColumns];\n }\n return newMetaData;\n};\n\nexport const extractColumnsFromAdditionalMetaData = (\n additionalColumns?: GridColumnType[],\n) => {\n if (Array.isArray(additionalColumns)) {\n const extractedFields = additionalColumns.reduce((accum, one) => {\n accum[one.accessor] = \"\";\n return accum;\n }, {});\n return extractedFields;\n }\n return {};\n};\n\nexport const validateFilesAndAddToList =\n (\n customTransformFileObj: any,\n maxAllowedSize: number,\n allowedExtensions: string | string[],\n ) =>\n async (newFiles: File[], existingFiles: FileObjectType[] | undefined) => {\n let failedFiles: any = [];\n let result = newFiles.map((one) => customTransformFileObj(one));\n\n let filesObj = await Promise.all(result);\n let existingFileIds: string[] = [];\n if (Array.isArray(existingFiles)) {\n existingFileIds = existingFiles.map((one) => one.id);\n }\n let filteredNewFilesObj = filesObj.filter((one) => {\n if (one.size > maxAllowedSize) {\n failedFiles.push({\n ...one,\n failedReason: \"File Size exceed maximum size\",\n });\n return false;\n }\n if (!isMimeTypeValid(one.fileExt, allowedExtensions)) {\n failedFiles.push({\n ...one,\n failedReason: \"File type is not allowed\",\n });\n return false;\n }\n if (isDuplicate(one, existingFileIds)) {\n failedFiles.push({\n ...one,\n failedReason: \"File already added for uploaing\",\n });\n return false;\n }\n return true;\n });\n return { failedFiles, filteredNewFilesObj };\n };\n\nexport const transformFileObject =\n (otherFieldsTemplate: any) =>\n async (file: File): Promise<FileObjectType> => {\n const mimeType = await detectMimeType(file);\n return {\n ...otherFieldsTemplate,\n id: computeFileFingerprint(file),\n blob: file,\n name: file.name.split(\".\").slice(0, -1).join(\".\"),\n sizeStr: computeSize(file.size),\n size: file.size,\n mimeType: file.type,\n _mimeType: mimeType?.mime ?? file.type,\n ext: mimeType?.ext ?? file.name.split(\".\").pop(),\n fileExt: file.name.split(\".\").pop(),\n };\n };\n\nexport const cleanFileObj = (filesObj: FileObjectType[]) => {\n if (!Array.isArray(filesObj)) {\n return [];\n }\n return filesObj.map((one) => {\n const {\n id,\n blob,\n name,\n sizeStr,\n size,\n mimeType,\n _mimeType,\n ext,\n fileExt,\n ...others\n } = one;\n return {\n name: `${name}.${ext}`,\n blob: blob,\n ext: ext,\n id: id,\n ...others,\n };\n });\n};\n\nexport const convertToJsonObject = async (fileArrayObj: any[]) => {\n let FileObj: any[] = [];\n if (!Array.isArray(fileArrayObj) || fileArrayObj.length === 0) {\n return FileObj;\n }\n for (let j = 0; j < fileArrayObj.length; j++) {\n const { blob, ...others } = fileArrayObj[j];\n let base64Data = await utilFunction.convertBlobToBase64(blob);\n FileObj.push({ ...others, blob: base64Data[1], blobtype: base64Data[0] });\n }\n return FileObj;\n};\nexport const convertToFormData = (fileArrayObj: any[]) => {\n const formData = new FormData();\n if (!Array.isArray(fileArrayObj) || fileArrayObj.length === 0) {\n return formData;\n }\n const metaData: any = {};\n for (let j = 0; j < fileArrayObj.length; j++) {\n const { blob, id, ...others } = fileArrayObj[j];\n formData.append(\"blob\", blob, `${id}`);\n metaData[`${id}`] = others;\n }\n formData.append(\"metaData\", JSON.stringify(metaData));\n //const keys = Object.keys(fileArrayObj[0]);\n // for (let j = 0; j < fileArrayObj.length; j++) {\n // for (let i = 0; i < keys.length; i++) {\n\n // formData.append(keys[i], fileArrayObj[j][keys[i]]);\n // }\n // }\n\n return formData;\n};\n","import { Fragment, FC, useEffect, useState } from \"react\";\nimport DialogActions from \"@mui/material/DialogActions\";\nimport DialogContent from \"@mui/material/DialogContent\";\nimport Typography from \"@mui/material/Typography\";\nimport IconButton from \"@mui/material/IconButton\";\n\nimport GetAppRoundedIcon from \"@mui/icons-material/GetAppRounded\";\nimport Close from \"@mui/icons-material/Close\";\nimport { downloadFile } from \"./utils\";\n\nimport * as XLSX from \"xlsx\";\n// for csv upload\nimport Papa from \"papaparse\";\n\nimport { LoadingTextAnimation } from \"components/common/loader\";\nimport { getParsedDate } from \"components/utils/utilFunctions/function\";\nimport { isValid } from \"date-fns\";\nimport { useTranslation } from \"react-i18next\";\nimport { GridMetaDataType } from \"components/dataTableStatic\";\nimport { GridWrapperStatic as GridWrapper } from \"components/dataTableStatic/gridWrapper\";\n\nconst transformedColumn = (fileData: any[]) => {\n const columns = fileData[0]?.map((col, index) => ({\n accessor: col,\n columnName: col,\n sequence: index + 1,\n componentType: \"default\",\n width: 180,\n minWidth: 120,\n maxWidth: 600,\n showTooltip: true,\n }));\n\n let finalColumn: any = [];\n if (columns) {\n finalColumn = [\n {\n columnName: \"UNIQUE\",\n accessor: \"UNIQUE\",\n componentType: \"default\",\n isVisible: false,\n },\n ...columns,\n ];\n }\n\n return finalColumn;\n};\n\nconst transformedGridData = (fileData: any[]) => {\n const gridData = fileData.slice(1).map((row) => {\n return row.reduce((acc, curr, i) => {\n return { ...acc, [fileData[0][i]]: curr };\n }, {});\n });\n let finalGridData: any = [];\n if (gridData) {\n finalGridData = gridData.map((row, index) => ({\n UNIQUE: index + 1,\n ...row,\n }));\n }\n\n return finalGridData;\n};\n\nconst generateMetada = (fileData: any[]) => {\n const metaData: GridMetaDataType = {\n gridConfig: {\n gridLabel: \"\",\n rowIdColumn: \"UNIQUE\",\n defaultColumnConfig: {\n width: 400,\n maxWidth: 450,\n minWidth: 300,\n },\n hideHeader: true,\n disableGroupBy: true,\n enablePagination: true,\n pageSizes: [15, 30, 50],\n defaultPageSize: 15,\n containerHeight: {\n min: \"67vh\",\n max: \"70vh\",\n },\n allowFilter: false,\n allowColumnHiding: false,\n allowRowSelection: false,\n },\n columns: transformedColumn(fileData) ?? [],\n };\n\n return metaData;\n};\n\nexport const ExcelViewer: FC<{\n blob: File;\n fileName: string;\n onClose?: any;\n}> = ({ blob, fileName, onClose }) => {\n const [excelData, setExcelData] = useState<any>([]);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const handleFileUpload = () => {\n const reader = new FileReader();\n\n setIsLoading(true);\n reader.onload = (event: any) => {\n const data = event.target.result;\n const workbook = XLSX.read(data, {\n type: \"binary\",\n raw: false,\n });\n const sheetName = workbook.SheetNames[0];\n const sheet = workbook.Sheets[sheetName];\n\n const jsonSheet: any = XLSX.utils.sheet_to_json(sheet, {\n header: 1,\n raw: false,\n });\n const parsedSheet = jsonSheet.map((row) => {\n return row.map((cell) => {\n const dateCell = getParsedDate(cell, true);\n if (dateCell instanceof Date && isValid(dateCell)) {\n return dateCell.toLocaleDateString(\"en-UK\");\n }\n return cell;\n });\n });\n setIsLoading(false);\n setExcelData(parsedSheet);\n };\n if (blob) reader.readAsBinaryString(blob);\n else setExcelData([]);\n };\n\n useEffect(() => {\n handleFileUpload();\n }, []);\n\n return (\n <Fragment>\n <DialogActions style={{ display: \"flex\", padding: \"8px 24px\" }}>\n <Typography variant=\"h6\" color=\"textSecondary\">\n File:\n </Typography>\n <Typography variant=\"h6\">{fileName}</Typography>\n <div style={{ flexGrow: 1 }}></div>\n {/* <IconButton\n color=\"secondary\"\n onClick={() => downloadFile(blob, fileName)}\n >\n <GetAppRoundedIcon />\n </IconButton> */}\n {typeof onClose === \"function\" ? (\n <IconButton color=\"secondary\" onClick={onClose}>\n <Close />\n </IconButton>\n ) : null}\n </DialogActions>\n <DialogContent>\n {isLoading ? <LoadingTextAnimation /> : null}\n {excelData.length > 0 ? (\n <GridWrapper\n key={\"previewExcelFileData\"}\n finalMetaData={generateMetada(excelData ?? [])}\n data={transformedGridData(excelData) ?? []}\n setData={() => null}\n />\n ) : (\n <p style={{ textAlign: \"center\", color: \"#888\" }}>\n <em>{isLoading ? \"File is Loading...\" : \"Empty file found!!!\"}</em>\n </p>\n )}\n </DialogContent>\n </Fragment>\n );\n};\n\n//csv\nexport const CsvViewer: FC<{\n blob: File;\n fileName: string;\n onClose?: any;\n}> = ({ blob, fileName, onClose }) => {\n const [csvData, setCsvData] = useState<any>([]);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n\n const handleFileUpload = async () => {\n setIsLoading(true);\n Papa.parse(blob, {\n header: false,\n skipEmptyLines: true,\n complete: (result) => {\n setIsLoading(false);\n const parsedSheet = result.data.map((row) => {\n return row.map((cell) => {\n const dateCell = getParsedDate(cell, true);\n if (dateCell instanceof Date && isValid(dateCell)) {\n return dateCell.toLocaleDateString(\"en-UK\");\n }\n return cell;\n });\n });\n setCsvData(parsedSheet);\n },\n error: (error) => {\n setIsLoading(false);\n setCsvData([]);\n },\n });\n };\n\n useEffect(() => {\n handleFileUpload();\n }, []);\n\n return (\n <Fragment>\n <DialogActions style={{ display: \"flex\", padding: \"8px 24px\" }}>\n <Typography variant=\"h6\" color=\"textSecondary\">\n File:\n </Typography>\n <Typography variant=\"h6\">{fileName}</Typography>\n <div style={{ flexGrow: 1 }}></div>\n {typeof onClose === \"function\" ? (\n <IconButton color=\"secondary\" onClick={onClose}>\n <Close />\n </IconButton>\n ) : null}\n </DialogActions>\n <DialogContent>\n {isLoading ? <LoadingTextAnimation /> : null}\n {csvData.length > 0 ? (\n <GridWrapper\n key={\"previewCsvFileData\"}\n finalMetaData={generateMetada(csvData ?? [])}\n data={transformedGridData(csvData) ?? []}\n setData={() => null}\n />\n ) : (\n <p style={{ textAlign: \"center\", color: \"#888\" }}>\n <em>{isLoading ? \"File is Loading...\" : \"Empty file found!!!\"}</em>\n </p>\n )}\n </DialogContent>\n </Fragment>\n );\n};\n\nexport const PDFViewer: FC<{ blob: File; fileName: string; onClose?: any }> = ({\n blob,\n fileName,\n onClose,\n}) => {\n const { t } = useTranslation();\n const [urlObj, setUrlObj] = useState(\n typeof blob === \"object\" && Boolean(blob)\n ? URL.createObjectURL(blob as any)\n : null,\n );\n //console.log(blob, urlObj);\n useEffect(() => {\n let toRemoveURL = urlObj ?? \"\";\n return () => {\n URL.revokeObjectURL(toRemoveURL);\n };\n }, []);\n useEffect(() => {\n setUrlObj(\n typeof blob === \"object\" && Boolean(blob)\n ? URL.createObjectURL(blob as any)\n : null,\n );\n }, [blob]);\n\n return (\n <Fragment>\n <DialogActions style={{ display: \"flex\", padding: \"8px 24px\" }}>\n <Typography variant=\"h6\" color=\"textSecondary\">\n {t(\"File\")}:\n </Typography>\n <Typography variant=\"h6\">{fileName}</Typography>\n <div style={{ flexGrow: 1 }}></div>\n <IconButton\n color=\"secondary\"\n onClick={() => downloadFile(blob, fileName)}\n >\n <GetAppRoundedIcon />\n </IconButton>\n {typeof onClose === \"function\" ? (\n <IconButton color=\"secondary\" onClick={onClose}>\n <Close />\n </IconButton>\n ) : null}\n </DialogActions>\n <DialogContent>\n <iframe\n title=\"Document Preview\"\n src={`${urlObj}`}\n style={{ height: \"100%\", width: \"100%\" }}\n aria-label=\"PDF Preview\"\n />\n </DialogContent>\n </Fragment>\n );\n};\n\nexport const ImageViewer: FC<{\n blob: File;\n fileName: string;\n onClose?: any;\n}> = ({ blob, fileName, onClose }) => {\n const [urlObj, setUrlObj] = useState(\n typeof blob === \"object\" && Boolean(blob)\n ? URL.createObjectURL(blob as any)\n : \"\",\n );\n\n useEffect(() => {\n let toRemoveURL = urlObj ?? \"\";\n\n return () => URL.revokeObjectURL(toRemoveURL);\n }, []);\n useEffect(() => {\n setUrlObj(\n typeof blob === \"object\" && Boolean(blob)\n ? URL.createObjectURL(blob as any)\n : \"\",\n );\n }, [blob]);\n return (\n <Fragment>\n <DialogActions style={{ display: \"flex\", padding: \"8px 24px\" }}>\n <Typography variant=\"h6\" color=\"textSecondary\">\n File:\n </Typography>\n <Typography variant=\"h6\">{fileName}</Typography>\n <div style={{ flexGrow: 1 }}></div>\n <IconButton\n color=\"secondary\"\n onClick={() => downloadFile(blob, fileName)}\n >\n <GetAppRoundedIcon />\n </IconButton>\n {typeof onClose === \"function\" ? (\n <IconButton color=\"secondary\" onClick={onClose}>\n <Close />\n </IconButton>\n ) : null}\n </DialogActions>\n <DialogContent>\n <img width=\"60%\" src={`${urlObj}`} alt=\"Preview of document\" />\n </DialogContent>\n </Fragment>\n );\n};\n\nexport const NoPreview: FC<{\n fileName: string;\n onClose?: any;\n message?: string;\n}> = ({ onClose, fileName, message }) => (\n <Fragment>\n <DialogActions style={{ display: \"flex\", padding: \"8px 24px\" }}>\n <Typography variant=\"h6\" color=\"textSecondary\">\n File:\n </Typography>\n <Typography variant=\"h6\">{fileName}</Typography>\n <div style={{ flexGrow: 1 }}></div>\n {typeof onClose === \"function\" ? (\n <IconButton color=\"secondary\" onClick={onClose}>\n <Close />\n </IconButton>\n ) : null}\n </DialogActions>\n <DialogContent>{message}</DialogContent>\n </Fragment>\n);\n","import React, {\r\n useState,\r\n useCallback,\r\n Fragment,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n} from \"react\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport CardActions from \"@mui/material/CardActions\";\r\nimport CardHeader from \"@mui/material/CardHeader\";\r\nimport Collapse from \"@mui/material/Collapse\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport Alert from \"@mui/lab/Alert\";\r\nimport Grid from \"components/dataTableStatic\";\r\nimport LinearProgress from \"@mui/material/LinearProgress\";\r\nimport { ActionTypes } from \"components/dataTable\";\r\nimport { GridColumnType } from \"components/dataTableStatic\";\r\nimport metaData from \"./metaData\";\r\nimport failedFilesMetaData from \"./failedFilesMetaData\";\r\nimport { UploadTarget } from \"./uploadTarget\";\r\nimport {\r\n transformFileObject,\r\n cleanFileObj,\r\n transformMetaDataByMutating,\r\n extractColumnsFromAdditionalMetaData,\r\n validateFilesAndAddToList,\r\n convertToFormData,\r\n convertToJsonObject,\r\n} from \"./utils\";\r\nimport { FileObjectType } from \"./type\";\r\nimport {\r\n PDFViewer,\r\n ImageViewer,\r\n NoPreview,\r\n ExcelViewer,\r\n CsvViewer,\r\n} from \"./preView\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst actions: ActionTypes[] = [\r\n {\r\n actionName: \"Delete\",\r\n actionLabel: \"Delete\",\r\n multiple: true,\r\n rowDoubleClick: false,\r\n },\r\n {\r\n actionName: \"View\",\r\n actionLabel: \"ViewFile\",\r\n multiple: false,\r\n rowDoubleClick: false,\r\n },\r\n];\r\n\r\nexport const FileUploadControl = ({\r\n additionalColumns,\r\n editableFileName,\r\n onClose,\r\n onUpload,\r\n dataChangedRef,\r\n allowedExtensions = [\"pdf\"],\r\n maxAllowedSize = 1024 * 1024 * 3,\r\n gridProps,\r\n defaultFileData = [],\r\n onUpdateFileData = (files) => {},\r\n}: {\r\n additionalColumns?: GridColumnType[];\r\n editableFileName?: boolean;\r\n onClose?: any;\r\n onUpload?: any;\r\n dataChangedRef?: any;\r\n allowedExtensions?: string | string[];\r\n maxAllowedSize?: number;\r\n gridProps?: any;\r\n defaultFileData?: any;\r\n onUpdateFileData?: Function;\r\n}) => {\r\n /*eslint-disable react-hooks/exhaustive-deps*/\r\n const transformedFilesMetaData = useMemo(\r\n () =>\r\n transformMetaDataByMutating(\r\n metaData,\r\n additionalColumns,\r\n editableFileName,\r\n ),\r\n [],\r\n );\r\n const additionalFieldsObj = useMemo(\r\n () => extractColumnsFromAdditionalMetaData(additionalColumns),\r\n [],\r\n );\r\n const customTransformFileObj = useCallback(\r\n (currentObj) => {\r\n return transformFileObject(additionalFieldsObj)(currentObj);\r\n },\r\n [additionalFieldsObj],\r\n );\r\n //console.log(defaultFileData);\r\n const [files, setFiles] = useState<FileObjectType[]>(defaultFileData);\r\n const [error, setError] = useState(\"\");\r\n const [failedFiles, setFailedFailes] = useState<FileObjectType[]>([]);\r\n const [openDialog, setOpenDialog] = useState(false);\r\n const [action, setAction] = useState<any>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [uploadProgress, setUploadProgress] = useState(Infinity);\r\n const gridRef = useRef<any>(null);\r\n const { t } = useTranslation();\r\n const validateFilesAndAddToListCB = useCallback(\r\n async (newFiles: File[], existingFiles: FileObjectType[] | undefined) => {\r\n let { filteredNewFilesObj, failedFiles } =\r\n await validateFilesAndAddToList(\r\n customTransformFileObj,\r\n maxAllowedSize,\r\n allowedExtensions,\r\n )(newFiles, existingFiles);\r\n setFiles((old) => [...old, ...filteredNewFilesObj]);\r\n if (failedFiles.length > 0) {\r\n setFailedFailes(failedFiles);\r\n setOpenDialog(true);\r\n }\r\n },\r\n [\r\n setFiles,\r\n setFailedFailes,\r\n setOpenDialog,\r\n customTransformFileObj,\r\n maxAllowedSize,\r\n allowedExtensions,\r\n ],\r\n );\r\n useEffect(() => {\r\n if (action?.name === \"Delete\") {\r\n const toDeleteObjs = action?.rows?.map?.((one) => one.id);\r\n const newFiles = files.filter((one) => toDeleteObjs.indexOf(one.id) < 0);\r\n setFiles(newFiles);\r\n setAction(null);\r\n }\r\n }, [action]);\r\n useEffect(() => {\r\n onUpdateFileData(files);\r\n }, [files]);\r\n const uploadDocuments = useCallback(\r\n async (onUpload) => {\r\n //console.log(files);\r\n let { hasError, data } = await gridRef?.current?.validate?.(true);\r\n if (hasError === true) {\r\n setFiles(data);\r\n } else {\r\n //console.log(files);\r\n let result = gridRef?.current?.cleanData?.();\r\n let cleanObj = cleanFileObj(result);\r\n let formDataObj = convertToFormData(cleanObj);\r\n let base64Object = await convertToJsonObject(result);\r\n //console.log(result, cleanObj, formDataObj, base64Object);\r\n //console.log(files);\r\n setLoading(true);\r\n setError(\"\");\r\n onUpload(\r\n formDataObj,\r\n (progressValue) => {\r\n setUploadProgress(progressValue);\r\n },\r\n ({ status, data }) => {\r\n if (status === \"success\") {\r\n dataChangedRef.current = true;\r\n onClose();\r\n } else {\r\n setError(data?.error_msg ?? \"unknown error occured\");\r\n }\r\n setLoading(false);\r\n },\r\n base64Object,\r\n result,\r\n );\r\n }\r\n },\r\n [setLoading, setError, setFiles],\r\n );\r\n return (\r\n <Fragment>\r\n {loading ? (\r\n <LinearProgress\r\n variant={\r\n uploadProgress === Infinity ? \"indeterminate\" : \"determinate\"\r\n }\r\n value={uploadProgress}\r\n color=\"secondary\"\r\n />\r\n ) : null}\r\n <Card>\r\n <CardHeader\r\n title={t(\"FileUpload\")}\r\n action={\r\n <CardActions>\r\n <div style={{ flexGrow: 2 }} />\r\n {typeof onUpload === \"function\" ? (\r\n <Button\r\n disabled={loading || files.length <= 0}\r\n size=\"small\"\r\n color=\"secondary\"\r\n onClick={() => uploadDocuments(onUpload)}\r\n endIcon={\r\n loading ? (\r\n <CircularProgress size={20} color=\"secondary\" />\r\n ) : null\r\n }\r\n >\r\n {t(\"Upload\")}\r\n </Button>\r\n ) : null}\r\n <Button\r\n disabled={loading || files.length <= 0}\r\n onClick={() => setFiles([])}\r\n size=\"small\"\r\n color=\"secondary\"\r\n >\r\n {t(\"ClearAll\")}\r\n </Button>\r\n {typeof onClose === \"function\" ? (\r\n <Button\r\n disabled={loading}\r\n onClick={() => {\r\n let result = gridRef?.current?.cleanData?.();\r\n onUpdateFileData(result);\r\n onClose();\r\n }}\r\n size=\"small\"\r\n color=\"secondary\"\r\n >\r\n {t(\"Close\")}\r\n </Button>\r\n ) : null}\r\n </CardActions>\r\n }\r\n />\r\n {Boolean(error) ? <Alert severity=\"error\">{error}</Alert> : null}\r\n <CardContent>\r\n <UploadTarget\r\n existingFiles={files}\r\n onDrop={validateFilesAndAddToListCB}\r\n disabled={loading}\r\n />\r\n <Collapse in={files.length > 0}>\r\n <Grid\r\n finalMetaData={transformedFilesMetaData}\r\n data={files}\r\n setData={setFiles}\r\n actions={actions}\r\n setAction={setAction}\r\n loading={loading}\r\n ref={gridRef}\r\n gridProps={gridProps}\r\n />\r\n </Collapse>\r\n </CardContent>\r\n </Card>\r\n <Dialog open={openDialog} maxWidth=\"lg\">\r\n <DialogTitle>{t(\"FailedToAddFollowingFilesForUpload\")}</DialogTitle>\r\n <DialogContent>\r\n <Grid\r\n finalMetaData={failedFilesMetaData}\r\n data={failedFiles}\r\n setData={(any) => null}\r\n />\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n onClick={() => {\r\n setOpenDialog(false);\r\n setFailedFailes([]);\r\n }}\r\n >\r\n {t(\"Ok\")}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n <Dialog\r\n open={Boolean(action)}\r\n maxWidth=\"lg\"\r\n onClose={() => setAction(null)}\r\n PaperProps={{\r\n style: { width: \"100%\", height: \"100%\" },\r\n }}\r\n >\r\n {action?.rows[0]?.data?._mimeType?.includes(\"pdf\") ? (\r\n <PDFViewer\r\n blob={action?.rows[0]?.data?.blob}\r\n fileName={action?.rows[0]?.data?.name}\r\n onClose={() => setAction(null)}\r\n />\r\n ) : action?.rows[0]?.data?._mimeType?.includes(\"image\") ? (\r\n <ImageViewer\r\n blob={action?.rows[0]?.data?.blob}\r\n fileName={action?.rows[0]?.data?.name}\r\n onClose={() => setAction(null)}\r\n />\r\n ) : action?.rows[0]?.data?.ext === \"xlsx\" ||\r\n action?.rows[0]?.data?.ext === \"xls\" ? (\r\n <ExcelViewer\r\n blob={action?.rows[0]?.data?.blob}\r\n fileName={action?.rows[0]?.data?.name}\r\n onClose={() => setAction(null)}\r\n />\r\n ) : action?.rows[0]?.data?.ext === \"csv\" ? (\r\n <CsvViewer\r\n blob={action?.rows[0]?.data?.blob}\r\n fileName={action?.rows[0]?.data?.name}\r\n onClose={() => setAction(null)}\r\n />\r\n ) : (\r\n <NoPreview\r\n fileName={action?.rows[0]?.data?.name}\r\n onClose={() => setAction(null)}\r\n message={\"No preview available for this file\"}\r\n />\r\n )}\r\n </Dialog>\r\n </Fragment>\r\n );\r\n};\r\n","import React, { useState, Fragment, useMemo, useRef } from \"react\";\nimport Card from \"@mui/material/Card\";\nimport CardContent from \"@mui/material/CardContent\";\nimport CardActions from \"@mui/material/CardActions\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport Button from \"@mui/material/Button\";\nimport Dialog from \"@mui/material/Dialog\";\nimport Grid from \"components/dataTableStatic\";\nimport { ActionTypes } from \"components/dataTable\";\nimport { GridColumnType } from \"components/dataTableStatic\";\nimport metaData from \"./metaData\";\nimport { transformMetaDataByMutating } from \"./utils\";\nimport { FileObjectType } from \"./type\";\nimport { PDFViewer, ImageViewer, NoPreview } from \"./preView\";\nimport { useTranslation } from \"react-i18next\";\n\nconst actions: ActionTypes[] = [\n {\n actionName: \"View\",\n actionLabel: \"ViewFile\",\n multiple: false,\n rowDoubleClick: false,\n },\n];\n\nexport const FileViewerGrid = ({\n additionalColumns,\n editableFileName,\n fileData,\n onClose,\n gridProps,\n}: {\n additionalColumns?: GridColumnType[];\n editableFileName?: boolean;\n fileData: any;\n onClose?: any;\n gridProps?: any;\n}) => {\n /*eslint-disable react-hooks/exhaustive-deps*/\n const transformedFilesMetaData = useMemo(\n () =>\n transformMetaDataByMutating(\n metaData,\n additionalColumns,\n editableFileName,\n ),\n [],\n );\n const [files, setFiles] = useState<FileObjectType[]>(fileData ?? []);\n const [action, setAction] = useState<any>(null);\n const gridRef = useRef<any>(null);\n const { t } = useTranslation();\n return (\n <Fragment>\n <Card>\n <CardContent>\n <CardHeader\n title={t(\"FileViewer\")}\n action={\n <CardActions>\n <div style={{ flexGrow: 2 }} />\n {typeof onClose === \"function\" ? (\n <Button\n disabled={false}\n onClick={() => onClose()}\n size=\"small\"\n color=\"secondary\"\n >\n {t(\"Close\")}\n </Button>\n ) : null}\n </CardActions>\n }\n />\n <Grid\n finalMetaData={transformedFilesMetaData}\n data={files}\n setData={setFiles}\n actions={actions}\n setAction={setAction}\n loading={false}\n ref={gridRef}\n gridProps={gridProps}\n />\n </CardContent>\n </Card>\n <Dialog\n open={Boolean(action)}\n maxWidth=\"lg\"\n onClose={() => setAction(null)}\n PaperProps={{\n style: { width: \"100%\", height: \"100%\" },\n }}\n >\n {action?.rows[0]?.data?._mimeType?.includes(\"pdf\") ? (\n <PDFViewer\n blob={action?.rows[0]?.data?.blob}\n fileName={action?.rows[0]?.data?.name}\n onClose={() => setAction(null)}\n />\n ) : action?.rows[0]?.data?._mimeType?.includes(\"image\") ? (\n <ImageViewer\n blob={action?.rows[0]?.data?.blob}\n fileName={action?.rows[0]?.data?.name}\n onClose={() => setAction(null)}\n />\n ) : (\n <NoPreview fileName={action?.rows[0]?.data?.name} />\n )}\n </Dialog>\n </Fragment>\n );\n};\n","import { Dialog } from \"@mui/material\";\r\nimport { FileUploadControl } from \"components/fileUpload\";\r\nimport { ConvertExcelToJSONData } from \"./importExcelFile\";\r\nimport React, { useState } from \"react\";\r\n\r\ninterface IProps {\r\n open: boolean;\r\n closeDialog: Function;\r\n setImportedData: Function;\r\n}\r\n\r\nexport const GridDataImport: React.FC<IProps> = ({\r\n open,\r\n closeDialog,\r\n setImportedData,\r\n}) => {\r\n const [isFileUploadopen, setFileUpload] = useState(true);\r\n const [FileData, setFileData] = useState<any>([]);\r\n\r\n const handleDialogClose = () => {\r\n closeDialog();\r\n };\r\n\r\n const getJsonData = (other, dataJSON, proccessFunc, endIndex) => {\r\n proccessFunc(endIndex - 10);\r\n return dataJSON;\r\n };\r\n\r\n const processData = async (base64Object, proccessFunc) => {\r\n proccessFunc(20);\r\n let proccessLength =\r\n 80 / (base64Object.length > 0 ? base64Object.length : 1);\r\n let alldata: any = [];\r\n base64Object.forEach((element, index) => {\r\n let jsonData = ConvertExcelToJSONData({\r\n data: element,\r\n });\r\n\r\n let { blob, ...other } = element;\r\n let data: any = getJsonData(\r\n other,\r\n jsonData,\r\n proccessFunc,\r\n 10 + proccessLength * (index + 1),\r\n );\r\n alldata = [...(alldata ?? []), ...data];\r\n });\r\n\r\n proccessFunc(95);\r\n\r\n proccessFunc(100);\r\n setFileData(alldata);\r\n setImportedData(alldata);\r\n setTimeout(() => {\r\n setFileUpload(false);\r\n handleDialogClose();\r\n }, 1000);\r\n proccessFunc(97);\r\n alldata = alldata.filter((item) => {\r\n return Boolean(item?._isNewRow);\r\n });\r\n proccessFunc(99);\r\n alldata = alldata.map((item, index) => {\r\n return { ...item, TRAN_CD: index + 1 };\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n {isFileUploadopen ? (\r\n <Dialog fullWidth maxWidth=\"md\" open={open}>\r\n <FileUploadControl\r\n key={\"GridFileUploadData\"}\r\n onClose={() => {\r\n handleDialogClose();\r\n }}\r\n additionalColumns={[]}\r\n editableFileName={false}\r\n // dataChangedRef={isDataChangedRef}\r\n defaultFileData={[]}\r\n onUpload={(\r\n formDataObj,\r\n proccessFunc,\r\n ResultFunc,\r\n base64Object,\r\n result,\r\n ) => {\r\n if (base64Object.length > 0) {\r\n proccessFunc(10);\r\n setTimeout(async () => {\r\n try {\r\n processData(base64Object, proccessFunc);\r\n } catch (error) {\r\n ResultFunc({\r\n status: \"failed\",\r\n data: {\r\n error_msg: \"Error in file read \" + String(error),\r\n },\r\n });\r\n }\r\n }, 1000);\r\n } else {\r\n ResultFunc({\r\n status: \"failed\",\r\n data: { error_msg: \"Error in file read\" },\r\n });\r\n }\r\n }}\r\n gridProps={{}}\r\n maxAllowedSize={1024 * 1204 * 10} //10Mb file\r\n allowedExtensions={[\"xlsx\", \"csv\"]}\r\n onUpdateFileData={(files) => {}}\r\n />\r\n </Dialog>\r\n ) : null}\r\n </>\r\n );\r\n};\r\n","import React from \"react\";\nimport { CellWrapper } from \"./cellWrapper\";\n\nconst renderStyle = new Intl.NumberFormat(\"en-IN\", {\n style: \"currency\",\n currency: \"BDT\",\n currencyDisplay: \"narrowSymbol\",\n});\n\nexport const CurrencyRowCellRenderer = (props) => {\n const { value } = props;\n let result = renderStyle.format(value);\n return <CellWrapper {...props}>{result}</CellWrapper>;\n};\n","import {\n FC,\n useEffect,\n useRef,\n useState,\n Fragment,\n ComponentType,\n HTMLAttributes,\n lazy,\n Suspense,\n useCallback,\n} from \"react\";\nimport { TextFieldProps } from \"@mui/material/TextField\";\nimport Grid, { GridProps } from \"@mui/material/Grid\";\nimport CircularProgress, {\n CircularProgressProps,\n} from \"@mui/material/CircularProgress\";\nimport Autocomplete, {\n AutocompleteProps,\n createFilterOptions,\n} from \"@mui/material/Autocomplete\";\n// import { CreateFilterOptionsConfig } from \"@material-ui/lab/useAutocomplete\";\nimport { CreateFilterOptionsConfig } from \"@mui/material/useAutocomplete\";\nimport { Checkbox } from \"components/styledComponent/checkbox\";\nimport { TextField } from \"components/styledComponent/textfield\";\nimport { useField, UseFieldHookProps } from \"packages/form\";\nimport { Merge, OptionsProps, dependentOptionsFn } from \"../types\";\nimport Chip, { ChipProps } from \"@mui/material/Chip\";\nimport match from \"autosuggest-highlight/match\";\nimport parse from \"autosuggest-highlight/parse\";\nimport { useOptionsFetcher } from \"../utils\";\nimport { makeStyles } from \"@mui/styles\";\nimport { Theme } from \"@mui/material/styles\";\nimport { Tooltip } from \"@mui/material\";\n\nconst ListBoxComponentVirtualized = lazy(() =>\n import(\"./virtualized\").then((module) => ({\n default: module.ListBoxComponent,\n })),\n);\n//will use it if there is a neeed for advance sorter\n//import matchSorter from \"match-sorter\";\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n root: {\n \"& .MuiInputBase-root.MuiAutocomplete-inputRoot\": {\n paddingRight: \"0 !important\",\n },\n \"& .MuiInputBase-root > .MuiAutocomplete-endAdornment\": {\n display: \"none\",\n },\n },\n}));\n\ninterface AutoCompleteExtendedProps {\n enableGrid: boolean;\n showCheckbox: boolean;\n GridProps?: GridProps;\n CircularProgressProps?: CircularProgressProps;\n TextFieldProps?: TextFieldProps;\n ChipProps?: ChipProps;\n CreateFilterOptionsConfig?: CreateFilterOptionsConfig<OptionsProps>;\n options?: OptionsProps[] | dependentOptionsFn;\n label?: string;\n placeholder?: string;\n required?: boolean;\n enableVirtualized?: boolean;\n _optionsKey?: string;\n disableCaching?: boolean;\n disableAdornment?: boolean;\n}\n\ntype MyAutocompleteProps = Merge<\n AutocompleteProps<OptionsProps, true, true, true>,\n AutoCompleteExtendedProps\n>;\n\nexport type MyAllAutocompleteProps = Merge<\n MyAutocompleteProps,\n UseFieldHookProps\n>;\n\nconst getOptionLabel = (freeSolo: any) => (option: OptionsProps) =>\n Boolean(freeSolo) ? option : option?.label ?? \"\";\nconst getOptionValue = (freeSolo: any) => (option: OptionsProps) =>\n Boolean(freeSolo) ? option : option?.value ?? \"\";\n\nconst MyAutocomplete: FC<MyAllAutocompleteProps> = ({\n name: fieldName,\n validate,\n validationRun,\n shouldExclude,\n isReadOnly,\n postValidationSetCrossFieldValues,\n skipValueUpdateFromCrossFieldWhenReadOnly,\n runPostValidationHookAlways,\n dependentFields,\n fieldKey: fieldID,\n options,\n GridProps,\n enableGrid,\n multiple,\n disableClearable,\n freeSolo,\n TextFieldProps,\n CircularProgressProps,\n ChipProps,\n showCheckbox,\n CreateFilterOptionsConfig,\n runValidationOnDependentFieldsChange,\n label,\n placeholder,\n limitTags,\n required,\n enableVirtualized,\n //@ts-ignore\n isFieldFocused,\n _optionsKey,\n disableCaching,\n disableAdornment,\n ...others\n}) => {\n const {\n formState,\n error,\n touched,\n handleChange,\n handleBlur,\n runValidation,\n isSubmitting,\n validationRunning,\n fieldKey,\n name,\n dependentValues,\n excluded,\n incomingMessage,\n whenToRunValidation,\n value,\n setIncomingMessage,\n } = useField({\n name: fieldName,\n fieldKey: fieldID,\n dependentFields,\n validate,\n validationRun,\n runPostValidationHookAlways,\n postValidationSetCrossFieldValues,\n isReadOnly,\n shouldExclude,\n runValidationOnDependentFieldsChange,\n skipValueUpdateFromCrossFieldWhenReadOnly,\n });\n const focusRef = useRef();\n const classes = useStyles();\n const indexRef = useRef<number>(-1);\n const optionsMapperRef = useRef(new Map());\n /* eslint-disable react-hooks/exhaustive-deps */\n const myGetOptionLabel = useCallback(getOptionLabel(freeSolo), []);\n const myGetOptionValue = useCallback(getOptionValue(freeSolo), []);\n\n const transformValues = useCallback((values, freeSolo) => {\n if (!Array.isArray(values)) {\n values = [values];\n }\n if (freeSolo) {\n return values;\n }\n let newValues = values.map((one) => {\n return optionsMapperRef.current.has(`${one}`)\n ? optionsMapperRef.current.get(`${one}`)\n : { label: one, value: one };\n });\n return newValues;\n }, []);\n\n useEffect(() => {\n if (isFieldFocused) {\n setTimeout(() => {\n //@ts-ignore\n focusRef?.current?.focus?.();\n }, 1);\n }\n }, [isFieldFocused]);\n\n const [_options, setOptions] = useState<OptionsProps[]>([]);\n /* eslint-disable array-callback-return */\n const setOptionsWrapper = useCallback(\n (value) => {\n optionsMapperRef.current.clear();\n if (typeof value === \"function\") {\n setOptions((old) => {\n let result = value(old);\n if (freeSolo && Array.isArray(result)) {\n return result.map((one) => getOptionLabel(false)(one));\n } else if (Array.isArray(result)) {\n result.map((one) => {\n optionsMapperRef.current.set(`${myGetOptionValue(one)}`, one);\n });\n }\n return result;\n });\n } else {\n if (freeSolo && Array.isArray(value)) {\n let newValue = value.map((one) => getOptionLabel(false)(one));\n setOptions(newValue as any);\n return;\n } else if (Array.isArray(value)) {\n value.map((one) => {\n optionsMapperRef.current.set(`${myGetOptionValue(one)}`, one);\n });\n }\n setOptions(value);\n }\n },\n [setOptions, myGetOptionLabel, myGetOptionValue],\n );\n\n const handleChangeCustom = (_, value) => {\n if (!value) indexRef.current = -1;\n if (!Array.isArray(value)) {\n value = [value];\n }\n if (freeSolo) {\n //@ts-ignore\n value = value.map((one) => myGetOptionLabel(one) ?? \"\");\n } else {\n //@ts-ignore\n value = value.map((one) => myGetOptionValue(one) ?? \"\");\n }\n if (!Boolean(multiple) && Array.isArray(value)) {\n //@ts-ignore\n handleChange(value[0]);\n } else {\n handleChange(value);\n }\n };\n\n const handleKeyDown = useCallback(\n (e: any) => {\n if (\n e.key.toLowerCase() === \"backspace\" ||\n e.key.toLowerCase() === \"escape\"\n )\n indexRef.current = -1;\n if (e.key.toLowerCase() === \"tab\") {\n if (indexRef.current !== -1 && _options[indexRef.current]) {\n handleChangeCustom(e, _options[indexRef.current]);\n }\n }\n },\n [myGetOptionLabel, _options, handleChangeCustom, indexRef.current],\n );\n\n // const [lastUpdatedTime, setLastUpdatedTime] = useState(new Date().getTime());\n // const initDoneRef = useRef(false);\n //const defaultValueRef = useRef<any>(null);\n const { loadingOptions } = useOptionsFetcher(\n formState,\n options,\n setOptionsWrapper,\n handleChange,\n dependentValues,\n incomingMessage,\n runValidation,\n whenToRunValidation,\n _optionsKey,\n disableCaching,\n setIncomingMessage,\n true,\n \"\",\n false,\n );\n\n //dont move it to top it can mess up with hooks calling mechanism, if there is another\n //hook added move this below all hook calls\n if (excluded) {\n return null;\n }\n const isError = touched && (error ?? \"\") !== \"\";\n const result = (\n <Suspense fallback={\"loading...\"}>\n <Autocomplete\n {...others}\n className={disableAdornment ? classes.root : \"\"}\n key={fieldKey}\n defaultValue={[]}\n limitTags={limitTags ?? 2}\n multiple={multiple}\n autoHighlight\n disableClearable={disableClearable}\n options={_options}\n freeSolo={freeSolo}\n //@ts-ignore\n getOptionLabel={myGetOptionLabel}\n value={\n loadingOptions\n ? []\n : multiple\n ? transformValues(value, freeSolo)\n : transformValues(value, freeSolo)[0]\n }\n isOptionEqualToValue={(option, value) => {\n if (freeSolo) {\n if (option === value) {\n return true;\n }\n return false;\n } else {\n if (option.value === value.value) {\n return true;\n }\n return false;\n }\n }}\n // @ts-ignore\n ListboxComponent={\n Boolean(enableVirtualized)\n ? (ListBoxComponentVirtualized as ComponentType<\n HTMLAttributes<HTMLElement>\n >)\n : undefined\n }\n PaperComponent={({ children }) => {\n return (\n <div\n // style={paperStyles}\n style={{\n width: \"fit-content\",\n background: \"white\",\n boxShadow:\n \"rgba(50, 50, 93, 0.25) 0px 2px 5px -1px, rgba(0, 0, 0, 0.3) 0px 1px 3px -1px\",\n overflow: \"hidden\",\n maxWidth: \"320px\",\n minWidth: \"max(120px, 100%)\",\n }}\n >\n {children}\n </div>\n );\n }}\n onKeyDown={handleKeyDown}\n onChange={handleChangeCustom}\n onBlur={() => {\n indexRef.current = -1;\n handleBlur();\n }}\n onHighlightChange={(e, option: any) => {\n indexRef.current = _options.indexOf(option);\n }}\n disabled={isSubmitting}\n filterOptions={\n Boolean(CreateFilterOptionsConfig) &&\n typeof CreateFilterOptionsConfig === \"object\"\n ? createFilterOptions(CreateFilterOptionsConfig)\n : undefined\n }\n renderTags={(value, getTagProps) => {\n return value.map((option, index) => {\n if (typeof option === \"string\") {\n return (\n <Chip\n variant=\"outlined\"\n {...ChipProps}\n label={option}\n {...getTagProps({ index })}\n key={option}\n />\n );\n }\n return (\n <Chip\n variant=\"outlined\"\n {...ChipProps}\n label={option.label}\n {...getTagProps({ index })}\n key={`${option.label}-${index}`}\n />\n );\n });\n }}\n renderInput={(params) => {\n return (\n <TextField\n {...TextFieldProps}\n {...params}\n name={name}\n label={label}\n placeholder={placeholder}\n autoComplete=\"disable\"\n type=\"text\"\n error={!isSubmitting && isError}\n required={required}\n helperText={!isSubmitting && isError ? error : null}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <Fragment>\n {validationRunning || loadingOptions ? (\n <CircularProgress\n sx={{\n position: \"absolute\",\n right: disableAdornment ? \"0.5rem\" : \"1.5rem\",\n }}\n size={25}\n color=\"secondary\"\n variant=\"indeterminate\"\n {...CircularProgressProps}\n />\n ) : null}\n {params.InputProps.endAdornment}\n </Fragment>\n ),\n }}\n InputLabelProps={{\n shrink: true,\n }}\n inputProps={{\n ...params.inputProps,\n autoComplete: \"off\",\n }}\n />\n );\n }}\n renderOption={(props, option, other) => {\n props[\"key\"] = props[\"id\"];\n let { selected, inputValue } = other;\n let label = myGetOptionLabel(option);\n const matches = match(label, inputValue);\n const parts = parse(label, matches);\n const labelJSX = parts.map((part, index) => (\n <span\n key={index}\n style={{ fontWeight: part.highlight ? 700 : 400 }}\n >\n {part.text}\n </span>\n ));\n return (\n //@ts-ignore\n <Tooltip title={label}>\n <li\n style={{\n whiteSpace: \"pre\",\n width: \"max-content\",\n minWidth: \"100%\",\n }}\n {...props}\n >\n {showCheckbox ? <Checkbox checked={selected} /> : null}\n {labelJSX}\n </li>\n </Tooltip>\n );\n }}\n />\n </Suspense>\n );\n if (Boolean(enableGrid)) {\n return <Grid {...GridProps}>{result}</Grid>;\n } else {\n return result;\n }\n};\n\nexport default MyAutocomplete;\n","import {\n FC,\n useRef,\n useState,\n Fragment,\n ComponentType,\n HTMLAttributes,\n lazy,\n Suspense,\n useCallback,\n} from \"react\";\nimport CircularProgress, {\n CircularProgressProps,\n} from \"@mui/material/CircularProgress\";\nimport Autocomplete, {\n AutocompleteProps,\n createFilterOptions,\n} from \"@mui/material/Autocomplete\";\nimport Input from \"@mui/material/Input\";\n// import { CreateFilterOptionsConfig } from \"@material-ui/lab/useAutocomplete\";\nimport { CreateFilterOptionsConfig } from \"@mui/material/useAutocomplete\";\nimport { Checkbox } from \"components/styledComponent/checkbox\";\nimport Chip, { ChipProps } from \"@mui/material/Chip\";\nimport { Merge, OptionsProps, dependentOptionsFn } from \"../types\";\nimport match from \"autosuggest-highlight/match\";\nimport parse from \"autosuggest-highlight/parse\";\nimport { useOptionsFetcherSimple } from \"../utils\";\nimport { useStyles } from \"./autocomplete\";\nimport { Tooltip } from \"@mui/material\";\n\nconst ListBoxComponentVirtualized = lazy(() =>\n import(\"./virtualized\").then((module) => ({\n default: module.ListBoxComponent,\n })),\n);\n\ninterface AutoCompleteExtendedProps {\n showCheckbox: boolean;\n CircularProgressProps?: CircularProgressProps;\n ChipProps?: ChipProps;\n CreateFilterOptionsConfig?: CreateFilterOptionsConfig<OptionsProps>;\n options?: OptionsProps[] | dependentOptionsFn;\n optionsProps?: any;\n placeholder?: string;\n required?: boolean;\n enableVirtualized?: boolean;\n _optionsKey?: string;\n disableCaching?: boolean;\n error: string;\n touched: boolean;\n handleBlur?: any;\n handleChange?: any;\n value: any;\n disableAdornment?: boolean;\n}\n\ntype MyAutocompleteProps = Merge<\n AutocompleteProps<OptionsProps, true, true, true>,\n AutoCompleteExtendedProps\n>;\n\nconst getOptionLabel = (freeSolo: any) => (option: OptionsProps) =>\n Boolean(freeSolo) ? option : option?.label ?? \"\";\nconst getOptionValue = (freeSolo: any) => (option: OptionsProps) =>\n Boolean(freeSolo) ? option : option?.value ?? \"\";\n\nexport const AutoCompleteGrid: FC<MyAutocompleteProps> = ({\n options,\n optionsProps,\n multiple,\n disableClearable,\n freeSolo,\n CircularProgressProps,\n ChipProps,\n showCheckbox,\n CreateFilterOptionsConfig,\n placeholder = \"Select Option\",\n limitTags,\n required,\n enableVirtualized,\n //@ts-ignore\n _optionsKey,\n disableCaching,\n error,\n handleChange,\n handleBlur,\n touched,\n value,\n fullWidth,\n disableAdornment,\n ...others\n}) => {\n const indexRef = useRef<number>(-1);\n const optionsMapperRef = useRef(new Map());\n const classes = useStyles();\n /* eslint-disable react-hooks/exhaustive-deps */\n const myGetOptionLabel = useCallback(getOptionLabel(freeSolo), []);\n const myGetOptionValue = useCallback(getOptionValue(freeSolo), []);\n\n const transformValues = useCallback((values, freeSolo) => {\n if (!Array.isArray(values)) {\n values = [values];\n }\n if (freeSolo) {\n return values;\n }\n let newValues = values.map((one) => {\n return optionsMapperRef.current.has(`${one}`)\n ? optionsMapperRef.current.get(`${one}`)\n : { label: one, value: one };\n });\n return newValues;\n }, []);\n\n const [_options, setOptions] = useState<OptionsProps[]>([]);\n\n const handleChangeCustom = (_, value) => {\n if (!value) indexRef.current = -1;\n if (!Array.isArray(value)) {\n value = [value];\n }\n if (freeSolo) {\n //@ts-ignore\n value = value.map((one) => myGetOptionLabel(one) ?? \"\");\n } else {\n //@ts-ignore\n value = value.map((one) => myGetOptionValue(one) ?? \"\");\n }\n if (!Boolean(multiple) && Array.isArray(value)) {\n //@ts-ignore\n handleChange(value[0]);\n } else {\n handleChange(value);\n }\n };\n\n const handleKeyDown = useCallback(\n (e: any) => {\n if (\n e.key.toLowerCase() === \"backspace\" ||\n e.key.toLowerCase() === \"escape\"\n )\n indexRef.current = -1;\n if (e.key.toLowerCase() === \"tab\") {\n if (indexRef.current !== -1 && _options[indexRef.current]) {\n handleChangeCustom(e, _options[indexRef.current]);\n }\n }\n },\n [myGetOptionLabel, _options, handleChangeCustom, indexRef.current],\n );\n\n /* eslint-disable array-callback-return */\n const setOptionsWrapper = useCallback(\n (value) => {\n optionsMapperRef.current.clear();\n if (typeof value === \"function\") {\n setOptions((old) => {\n let result = value(old);\n if (freeSolo && Array.isArray(result)) {\n return result.map((one) => getOptionLabel(false)(one));\n } else if (Array.isArray(result)) {\n result.map((one) => {\n optionsMapperRef.current.set(`${myGetOptionValue(one)}`, one);\n });\n }\n return result;\n });\n } else {\n if (freeSolo && Array.isArray(value)) {\n let newValue = value.map((one) => getOptionLabel(false)(one));\n setOptions(newValue as any);\n return;\n } else if (Array.isArray(value)) {\n value.map((one) => {\n optionsMapperRef.current.set(`${myGetOptionValue(one)}`, one);\n });\n }\n setOptions(value);\n }\n },\n [setOptions, myGetOptionLabel, myGetOptionValue],\n );\n\n const { loadingOptions } = useOptionsFetcherSimple(\n options,\n setOptionsWrapper,\n _optionsKey,\n disableCaching,\n optionsProps,\n true,\n \"\",\n false,\n );\n const isError = touched && (error ?? \"\") !== \"\";\n return (\n <Suspense fallback={\"loading...\"}>\n <Autocomplete\n {...others}\n //@ts-ignore\n className={disableAdornment ? classes.root : \"\"}\n defaultValue={[]}\n limitTags={limitTags ?? 2}\n multiple={multiple}\n disableClearable={disableClearable}\n options={_options}\n autoHighlight\n freeSolo={freeSolo}\n //@ts-ignore\n getOptionLabel={myGetOptionLabel}\n value={\n loadingOptions\n ? []\n : multiple\n ? transformValues(value, freeSolo)\n : transformValues(value, freeSolo)[0]\n }\n isOptionEqualToValue={(option, value) => {\n if (freeSolo) {\n if (option === value) {\n return true;\n }\n return false;\n } else {\n if (option.value === value.value) {\n return true;\n }\n return false;\n }\n }}\n PaperComponent={({ children }) => {\n return (\n <div\n // style={paperStyles}\n style={{\n width: \"fit-content\",\n background: \"white\",\n boxShadow:\n \"rgba(50, 50, 93, 0.25) 0px 2px 5px -1px, rgba(0, 0, 0, 0.3) 0px 1px 3px -1px\",\n overflow: \"hidden\",\n maxWidth: \"320px\",\n minWidth: \"max(120px, 100%)\",\n }}\n >\n {children}\n </div>\n );\n }}\n ListboxComponent={\n Boolean(enableVirtualized)\n ? (ListBoxComponentVirtualized as ComponentType<\n HTMLAttributes<HTMLElement>\n >)\n : undefined\n }\n // onChange={(_, value) => {\n // //condition for freeSolo functionality with multiple values\n // if (!Array.isArray(value)) {\n // value = [value];\n // }\n // if (freeSolo) {\n // //@ts-ignore\n // value = value.map((one) => myGetOptionLabel(one) ?? \"\");\n // } else {\n // //@ts-ignore\n // value = value.map((one) => myGetOptionValue(one) ?? \"\");\n // }\n // if (!Boolean(multiple) && Array.isArray(value)) {\n // //@ts-ignore\n // handleChange(value[0]);\n // } else {\n // handleChange(value);\n // }\n // }}\n onKeyDown={handleKeyDown}\n onChange={handleChangeCustom}\n onBlur={() => {\n indexRef.current = -1;\n handleBlur();\n }}\n onHighlightChange={(e, option: any) => {\n indexRef.current = _options.indexOf(option);\n }}\n filterOptions={\n Boolean(CreateFilterOptionsConfig) &&\n typeof CreateFilterOptionsConfig === \"object\"\n ? createFilterOptions(CreateFilterOptionsConfig)\n : undefined\n }\n renderTags={(value, getTagProps) => {\n return value.map((option, index) => {\n if (typeof option === \"string\") {\n return (\n <Chip\n variant=\"outlined\"\n {...ChipProps}\n label={option}\n {...getTagProps({ index })}\n key={option}\n />\n );\n }\n return (\n <Chip\n variant=\"outlined\"\n {...ChipProps}\n label={option.label}\n {...getTagProps({ index })}\n key={`${option.label}-${index}`}\n />\n );\n });\n }}\n renderInput={(params) => {\n return (\n <Input\n {...params}\n {...params.InputProps}\n placeholder={placeholder}\n autoComplete=\"disabled\"\n type=\"text\"\n error={isError}\n required={required}\n fullWidth={fullWidth}\n disableUnderline\n endAdornment={\n <Fragment>\n {loadingOptions ? (\n <CircularProgress\n size={25}\n color=\"secondary\"\n variant=\"indeterminate\"\n {...CircularProgressProps}\n />\n ) : null}\n {params.InputProps.endAdornment}\n </Fragment>\n }\n />\n );\n }}\n renderOption={(props, option, other) => {\n props[\"key\"] = props[\"id\"];\n let { selected, inputValue } = other;\n let label = myGetOptionLabel(option);\n const matches = match(label, inputValue);\n const parts = parse(label, matches);\n const labelJSX = parts.map((part, index) => (\n <span\n key={index}\n style={{ fontWeight: part.highlight ? 700 : 400 }}\n >\n {part.text}\n </span>\n ));\n return (\n //@ts-ignore\n <Tooltip title={label}>\n <li\n style={{\n whiteSpace: \"pre\",\n width: \"max-content\",\n minWidth: \"100%\",\n }}\n {...props}\n >\n {showCheckbox ? <Checkbox checked={selected} /> : null}\n {labelJSX}\n </li>\n </Tooltip>\n );\n }}\n />\n </Suspense>\n );\n};\n","import { FC, useCallback, useState } from \"react\";\nimport Select, { SelectProps } from \"@mui/material/Select\";\nimport Input, { InputProps } from \"@mui/material/Input\";\nimport MenuItem, { MenuItemProps } from \"@mui/material/MenuItem\";\nimport CircularProgress, {\n CircularProgressProps,\n} from \"@mui/material/CircularProgress\";\nimport InputAdornment from \"@mui/material/InputAdornment\";\nimport { Checkbox } from \"components/styledComponent/checkbox\";\nimport { OptionsProps, Merge, OptionsFn } from \"../types\";\nimport { getLabelFromValues, useOptionsFetcherSimple } from \"../utils\";\n\ninterface MySelectExtendedProps {\n MenuItemProps?: MenuItemProps;\n SelectProps?: SelectProps;\n CircularProgressProps?: CircularProgressProps;\n options?: OptionsProps[] | OptionsFn;\n _optionsKey?: string;\n multiple?: boolean;\n showCheckbox?: boolean;\n handleChange?: any;\n handleBlur?: any;\n error?: any;\n touched?: any;\n loading?: boolean;\n readOnly?: boolean;\n value?: any;\n disableCaching?: boolean;\n optionsProps?: any;\n skipDefaultOption?: boolean;\n defaultOptionLabel?: string;\n enableDefaultOption?: boolean;\n}\ntype MySelectProps = Merge<InputProps, MySelectExtendedProps>;\n\nexport const SelectForGrid: FC<MySelectProps> = ({\n options,\n MenuItemProps,\n SelectProps,\n multiple,\n showCheckbox,\n CircularProgressProps,\n handleBlur,\n handleChange,\n error,\n touched,\n value,\n loading,\n readOnly,\n _optionsKey,\n disableCaching,\n optionsProps,\n skipDefaultOption = false,\n defaultOptionLabel,\n enableDefaultOption = false,\n ...others\n}) => {\n const [_options, setOptions] = useState<OptionsProps[]>([]);\n const isTouched = Boolean(touched);\n const isError = isTouched && Boolean(error);\n const { loadingOptions } = useOptionsFetcherSimple(\n options,\n setOptions,\n _optionsKey,\n disableCaching,\n optionsProps,\n skipDefaultOption,\n defaultOptionLabel,\n enableDefaultOption,\n );\n const getLabelFromValuesForOptions = useCallback(\n (values) => getLabelFromValues(_options)(values),\n [_options],\n );\n // console.log(defaultOptionLabel, skipDefaultOption, optionsProps);\n const handleChangeInterceptor = useCallback(\n (e) => {\n const value = typeof e === \"object\" ? e?.target?.value ?? \"\" : e;\n let result = getLabelFromValuesForOptions(value);\n result = multiple ? result : result[0];\n if (value === \"00\") {\n e.target[\"value\"] = \"\";\n }\n handleChange(e, result as any);\n },\n [handleChange, getLabelFromValuesForOptions, multiple],\n );\n const menuItems = _options.map((menuItem, index) => {\n return (\n <MenuItem\n {...MenuItemProps}\n //keep button value to true else keyboard navigation for select will stop working\n // button={true}\n key={menuItem.value ?? index}\n value={menuItem.value}\n disabled={menuItem.disabled}\n style={{ fontWeight: menuItem.value === \"00\" ? 500 : \"inherit\" }}\n >\n {showCheckbox ? (\n <Checkbox\n checked={\n Boolean(multiple)\n ? Array.isArray(value) && value.indexOf(menuItem.value) >= 0\n : value === menuItem.value\n }\n />\n ) : null}\n {menuItem.label}\n </MenuItem>\n );\n });\n return (\n <Select\n {...others}\n value={\n multiple && !Array.isArray(value)\n ? [value]\n : Boolean(value)\n ? value\n : typeof value === \"string\"\n ? \"00\"\n : value\n }\n error={isError}\n onChange={handleChangeInterceptor}\n onBlur={handleBlur}\n native={false}\n multiple={multiple}\n renderValue={multiple ? getLabelFromValues(_options, true) : undefined}\n style={{\n fontWeight:\n (multiple && !Array.isArray(value)\n ? [value]\n : Boolean(value)\n ? value\n : typeof value === \"string\"\n ? \"00\"\n : value) === \"00\"\n ? \"500\"\n : \"\",\n }}\n input={\n <Input\n endAdornment={\n loading || loadingOptions ? (\n <InputAdornment position=\"end\">\n <CircularProgress\n color=\"primary\"\n variant=\"indeterminate\"\n {...CircularProgressProps}\n />\n </InputAdornment>\n ) : null\n }\n disableUnderline\n />\n }\n readOnly={readOnly}\n IconComponent={SelectProps?.IconComponent}\n >\n {menuItems}\n </Select>\n );\n};\n","import React, { useState } from \"react\";\nimport { IMaskInput as IMask } from \"react-imask\";\nimport Input from \"@mui/material/Input\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\n\nfunction InputMaskCustom(props) {\n const { inputRef, onChange, MaskProps, ...other } = props;\n return (\n <IMask\n {...other}\n inputRef={inputRef}\n onAccept={(value, mask) => {\n onChange({\n target: {\n value: mask.unmaskedValue,\n },\n });\n }}\n {...MaskProps}\n />\n );\n}\n\nexport const EditableMaskInputField = (props) => {\n const {\n value: initialValue,\n rows,\n row: { index, original },\n column: { id, validation, MaskProps },\n updateGridData,\n hiddenFlag,\n } = props;\n const externalTouched = Boolean(original?._touched?.[id]);\n const externalError = original?._error?.[id] ?? \"\";\n const [loading, setLoading] = useState(false);\n const [value, setValue] = useState(initialValue);\n const prevRows = rows\n .slice(0, index)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n const nextRows = rows\n .slice(index + 1)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const onChange = (e) => {\n setValue(e.target.value);\n };\n const onFocus = (e) => {\n e.target.select();\n };\n\n const onBlur = () => {\n setLoading(true);\n validation(value, original, prevRows, nextRows).then((result) => {\n setLoading(false);\n updateGridData(index, id, value, true, result);\n });\n };\n return (\n <CellWrapper showBorder {...props}>\n <Input\n name={id}\n value={value}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n fullWidth\n margin=\"none\"\n disableUnderline\n error={Boolean(externalTouched) && Boolean(externalError)}\n //@ts-ignore\n inputComponent={InputMaskCustom}\n inputProps={{\n MaskProps: MaskProps,\n }}\n disabled={loading}\n />\n {Boolean(externalTouched) && Boolean(externalError) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }} error={true}>\n {externalError}\n </FormHelperText>\n ) : null}\n </CellWrapper>\n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { NumericFormat } from \"react-number-format\";\nimport Input from \"@mui/material/Input\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport { numWords } from \"components/common/utils\";\nimport { useTranslation } from \"react-i18next\";\n\nfunction NumberFormatCustom(props) {\n const { inputRef, onChange, FormatProps, ...other } = props;\n return (\n <NumericFormat\n {...other}\n getInputRef={inputRef}\n onValueChange={(values) => {\n onChange(\n {\n target: {\n name: props.name,\n value: values.value,\n formattedValue: values.formattedValue,\n },\n },\n values.formattedValue,\n );\n }}\n valueIsNumericString={false}\n {...FormatProps}\n />\n );\n}\n\nexport const EditableNumberFormat = (props) => {\n const {\n value: initialValue,\n rows,\n row: { index, original },\n column: {\n id,\n validation,\n FormatProps,\n placeholder = \"\",\n enableNumWords,\n className,\n isDisabledOnBlurEvent,\n autoComplete,\n isAutoFocus,\n },\n updateGridData,\n hiddenFlag,\n loading,\n } = props;\n const prevRows = rows\n .slice(0, index)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n const nextRows = rows\n .slice(index + 1)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const externalTouched = Boolean(original?._touched?.[id]);\n const externalError = original?._error?.[id] ?? \"\";\n const [loadingcoll, setLoading] = useState(false);\n const [value, setValue] = useState(initialValue);\n const refInput = useRef<any>(null);\n const { t } = useTranslation();\n const onFocus = (e) => {\n e.target.select();\n };\n\n const onChange = (e) => {\n setValue(e.target.value);\n };\n\n let numWordsVar: any = null;\n try {\n if (enableNumWords && Boolean(value)) {\n let amountArray = String(value).split(\".\");\n let amountPart = Number(amountArray[0]);\n if (amountPart < 0) {\n amountPart = Math.abs(Number(amountPart));\n numWordsVar = `Negative ${numWords(amountPart)} Rupees`;\n } else {\n numWordsVar = `${numWords(amountPart)} Rupees`;\n }\n if (amountArray.length === 2 && Boolean(amountArray[1])) {\n numWordsVar = `${numWordsVar} and ${numWords(amountArray[1])} paise`;\n }\n }\n } catch (e) {}\n\n const onBlur = () => {\n if (!Boolean(isDisabledOnBlurEvent)) {\n onBlurEvent();\n }\n };\n const onBlurEvent = () => {\n setLoading(true);\n validation(value, original, prevRows, nextRows).then((result) => {\n setLoading(false);\n updateGridData(index, id, value, true, result);\n });\n };\n useEffect(() => {\n if (Boolean(isDisabledOnBlurEvent)) {\n onBlurEvent();\n }\n }, [value]);\n useEffect(() => {\n if (!Boolean(value) && Boolean(isAutoFocus) && rows.length === index + 1) {\n refInput?.current?.firstChild?.focus?.();\n }\n }, [rows, index, isAutoFocus]);\n return (\n <CellWrapper showBorder {...props}>\n <Input\n name={id}\n value={value}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={String(t(placeholder))}\n fullWidth\n margin=\"none\"\n disableUnderline\n error={Boolean(externalTouched) && Boolean(externalError)}\n inputComponent={NumberFormatCustom}\n inputProps={{\n FormatProps: FormatProps,\n }}\n disabled={loadingcoll || loading}\n className={className}\n // readOnly={loading}\n autoComplete={autoComplete}\n ref={refInput}\n />\n {Boolean(externalTouched) && Boolean(externalError) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }} error={true}>\n {externalError}\n </FormHelperText>\n ) : Boolean(enableNumWords) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }}>\n {numWordsVar}\n </FormHelperText>\n ) : null}\n </CellWrapper>\n );\n};\n\nexport const EditableNumberFormatLessValidation = (props) => {\n const {\n value: initialValue,\n rows,\n row: { index, original },\n column: {\n id,\n validation,\n FormatProps,\n placeholder = \"\",\n enableNumWords,\n className,\n isDisabledOnBlurEvent,\n },\n updateGridData,\n hiddenFlag,\n loading,\n } = props;\n const prevRows = [];\n const nextRows = [];\n\n const externalTouched = Boolean(original?._touched?.[id]);\n const externalError = original?._error?.[id] ?? \"\";\n const isFirstTimeRef = useRef(true);\n const [loadingcoll, setLoading] = useState(false);\n const [value, setValue] = useState(initialValue);\n const { t } = useTranslation();\n const onFocus = (e) => {\n e.target.select();\n };\n\n const onChange = (e) => {\n setValue(e.target.value);\n };\n\n let numWordsVar: any = null;\n // try {\n // if (enableNumWords && Boolean(value)) {\n // let amountArray = String(value).split(\".\");\n // let amountPart = Number(amountArray[0]);\n // if (amountPart < 0) {\n // amountPart = Math.abs(Number(amountPart));\n // numWordsVar = `Negative ${numWords(amountPart)} Rupees`;\n // } else {\n // numWordsVar = `${numWords(amountPart)} Rupees`;\n // }\n // if (amountArray.length === 2 && Boolean(amountArray[1])) {\n // numWordsVar = `${numWordsVar} and ${numWords(amountArray[1])} paise`;\n // }\n // }\n // } catch (e) {}\n\n const onBlur = () => {\n if (!Boolean(isDisabledOnBlurEvent)) {\n onBlurEvent();\n }\n };\n const onBlurEvent = () => {\n setLoading(true);\n validation(value, original, prevRows, nextRows).then((result) => {\n setLoading(false);\n updateGridData(index, id, value, true, result);\n });\n };\n useEffect(() => {\n if (Boolean(isDisabledOnBlurEvent) && !isFirstTimeRef.current) {\n onBlurEvent();\n }\n isFirstTimeRef.current = false;\n }, [value]);\n return (\n <CellWrapper showBorder {...props}>\n <Input\n name={id}\n value={value}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={String(t(placeholder))}\n fullWidth\n margin=\"none\"\n disableUnderline\n error={Boolean(externalTouched) && Boolean(externalError)}\n inputComponent={NumberFormatCustom}\n inputProps={{\n FormatProps: FormatProps,\n }}\n disabled={loadingcoll}\n className={className}\n readOnly={loading}\n />\n {Boolean(externalTouched) && Boolean(externalError) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }} error={true}>\n {externalError}\n </FormHelperText>\n ) : Boolean(enableNumWords) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }}>\n {numWordsVar}\n </FormHelperText>\n ) : null}\n </CellWrapper>\n );\n};\n","import React from \"react\";\nimport MoreHorizIcon from \"@mui/icons-material/MoreHoriz\";\nimport { withStyles } from \"@mui/styles\";\nimport { Theme } from \"@mui/material/styles\";\nimport Tooltip from \"@mui/material/Tooltip\";\nimport { CellWrapper } from \"./cellWrapper\";\n\nconst HtmlTooltip = withStyles((theme: Theme) => ({\n tooltip: {\n backgroundColor: \"#f5f5f9\",\n color: \"rgba(0, 0, 0, 0.87)\",\n maxWidth: 220,\n fontSize: theme.typography.pxToRem(12),\n border: \"1px solid #dadde9\",\n },\n}))(Tooltip);\n\nexport const MultipleValuesCellRenderer = (props) => {\n const {\n row: { original },\n column: { _accessor },\n } = props;\n\n let values = original[_accessor];\n let isArray = Array.isArray(values);\n\n let result = values.map((one, index) => {\n return <li key={index}>{one}</li>;\n });\n\n return (\n <CellWrapper positionRelative={true} {...props}>\n {isArray ? values[0] : \"-\"}\n {isArray && values.length > 1 ? (\n <HtmlTooltip\n title={\n <ul style={{ padding: 0, listStyle: \"none\", margin: \"0px 0px\" }}>\n {result}\n </ul>\n }\n >\n <MoreHorizIcon\n style={{\n position: \"absolute\",\n right: \"5px\",\n top: \"5px\",\n color: \"#8d868685\",\n }}\n />\n </HtmlTooltip>\n ) : null}\n </CellWrapper>\n );\n};\n","import { FC, useCallback } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport FormControlLabel, {\r\n FormControlLabelProps,\r\n} from \"@mui/material/FormControlLabel\";\r\nimport FormControl, { FormControlProps } from \"@mui/material/FormControl\";\r\nimport { CheckboxProps } from \"@mui/material/Checkbox\";\r\nimport { Checkbox } from \"components/styledComponent/checkbox\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport FormHelperText, {\r\n FormHelperTextProps,\r\n} from \"@mui/material/FormHelperText\";\r\nimport { Merge } from \"../types\";\r\n\r\ninterface extendedFiledProps extends UseFieldHookProps {\r\n label: string;\r\n}\r\n\r\ntype MyCheckboxMixedProps = Merge<CheckboxProps, extendedFiledProps>;\r\n\r\ninterface MyCheckboxExtendedProps {\r\n FormControlLabelProps?: FormControlLabelProps;\r\n FormControlProps?: FormControlProps;\r\n FormHelperTextProps?: FormHelperTextProps;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n}\r\n\r\nexport type MyCheckboxAllProps = Merge<\r\n MyCheckboxMixedProps,\r\n MyCheckboxExtendedProps\r\n>;\r\n\r\nconst MyCheckbox: FC<MyCheckboxAllProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n shouldExclude,\r\n isReadOnly,\r\n postValidationSetCrossFieldValues,\r\n runPostValidationHookAlways,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n label,\r\n FormControlProps,\r\n FormHelperTextProps,\r\n FormControlLabelProps,\r\n GridProps,\r\n enableGrid,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n ...others\r\n}) => {\r\n const {\r\n value,\r\n error,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n fieldKey,\r\n name,\r\n excluded,\r\n readOnly,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n\r\n const handelChange = useCallback(\r\n (event) => {\r\n const { value, checked } = event.target;\r\n event.target[\"value\"] = typeof checked === \"boolean\" ? checked : false;\r\n handleChange(event);\r\n },\r\n [handleChange]\r\n );\r\n\r\n if (excluded) {\r\n return null;\r\n }\r\n const isError = touched && (error ?? \"\") !== \"\";\r\n const result = (\r\n // @ts-ignore\r\n <FormControl\r\n {...FormControlProps}\r\n key={fieldKey}\r\n component=\"fieldset\"\r\n disabled={isSubmitting}\r\n error={!isSubmitting && isError}\r\n onBlur={handleBlur}\r\n >\r\n <FormControlLabel\r\n {...FormControlLabelProps}\r\n name={name}\r\n control={\r\n <Checkbox\r\n {...others}\r\n readOnly={readOnly}\r\n tabIndex={readOnly ? -1 : undefined}\r\n />\r\n }\r\n onChange={handelChange}\r\n label={label}\r\n checked={Boolean(\r\n typeof value === \"string\"\r\n ? value === \"Y\" || value === \"true\"\r\n ? true\r\n : value === \"N\" || value === \"false\"\r\n ? false\r\n : false\r\n : value\r\n )}\r\n />\r\n\r\n {!isSubmitting && isError ? (\r\n <FormHelperText {...FormHelperTextProps}>{error}</FormHelperText>\r\n ) : null}\r\n </FormControl>\r\n );\r\n if (Boolean(enableGrid)) {\r\n return (\r\n <Grid style={{ alignSelf: \"center\" }} {...GridProps} key={fieldKey}>\r\n {result}\r\n </Grid>\r\n );\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MyCheckbox;\r\n","import { FC, useCallback, useState } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport FormLabel, { FormLabelProps } from \"@mui/material/FormLabel\";\r\nimport FormGroup, { FormGroupProps } from \"@mui/material/FormGroup\";\r\nimport FormControlLabel, {\r\n FormControlLabelProps,\r\n} from \"@mui/material/FormControlLabel\";\r\nimport FormControl, { FormControlProps } from \"@mui/material/FormControl\";\r\nimport { CheckboxProps } from \"@mui/material/Checkbox\";\r\nimport { Checkbox } from \"components/styledComponent/checkbox\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport FormHelperText, {\r\n FormHelperTextProps,\r\n} from \"@mui/material/FormHelperText\";\r\nimport CircularProgress, {\r\n CircularProgressProps,\r\n} from \"@mui/material/CircularProgress\";\r\nimport InputAdornment from \"@mui/material/InputAdornment\";\r\nimport { Merge, OptionsProps, dependentOptionsFn } from \"../types\";\r\nimport { getLabelFromValues, useOptionsFetcher } from \"../utils\";\r\n\r\ninterface extendedFiledProps extends UseFieldHookProps {\r\n options: OptionsProps[] | dependentOptionsFn;\r\n _optionsKey?: string;\r\n label: string;\r\n}\r\n\r\ntype MyCheckboxMixedProps = Merge<CheckboxProps, extendedFiledProps>;\r\n\r\ninterface MyCheckboxExtendedProps {\r\n FormLabelProps?: FormLabelProps;\r\n FormGroupProps?: FormGroupProps;\r\n FormControlLabelProps?: FormControlLabelProps;\r\n FormControlProps?: FormControlProps;\r\n FormHelperTextProps?: FormHelperTextProps;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n CircularProgressProps?: CircularProgressProps;\r\n disableCaching?: boolean;\r\n}\r\n\r\nexport type MyCheckboxGroupAllProps = Merge<\r\n MyCheckboxMixedProps,\r\n MyCheckboxExtendedProps\r\n>;\r\n\r\nconst valueExists = (myValue: any[] | any, value: any) => {\r\n return Array.isArray(myValue) && myValue.indexOf(value) > -1;\r\n};\r\n\r\nconst MyCheckboxGroup: FC<MyCheckboxGroupAllProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n shouldExclude,\r\n isReadOnly,\r\n postValidationSetCrossFieldValues,\r\n runPostValidationHookAlways,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n label,\r\n options,\r\n FormControlProps,\r\n FormLabelProps,\r\n FormGroupProps,\r\n FormHelperTextProps,\r\n FormControlLabelProps,\r\n GridProps,\r\n enableGrid,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n CircularProgressProps,\r\n _optionsKey,\r\n disableCaching,\r\n ...others\r\n}) => {\r\n const {\r\n formState,\r\n value,\r\n error,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n fieldKey,\r\n name,\r\n excluded,\r\n readOnly,\r\n dependentValues,\r\n incomingMessage,\r\n runValidation,\r\n whenToRunValidation,\r\n setIncomingMessage,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n const [_options, setOptions] = useState<OptionsProps[]>([]);\r\n\r\n const getLabelFromValuesForOptions = useCallback(\r\n (values) => getLabelFromValues(_options)(values),\r\n [_options]\r\n );\r\n\r\n const handleChangeInterceptor = useCallback(\r\n (e) => {\r\n const value = typeof e === \"object\" ? e?.target?.value ?? \"\" : e;\r\n let result = getLabelFromValuesForOptions(value);\r\n handleChange(e, result[0] as any);\r\n },\r\n [handleChange, getLabelFromValuesForOptions]\r\n );\r\n const { loadingOptions } = useOptionsFetcher(\r\n formState,\r\n options,\r\n setOptions,\r\n handleChangeInterceptor,\r\n dependentValues,\r\n incomingMessage,\r\n runValidation,\r\n whenToRunValidation,\r\n _optionsKey,\r\n disableCaching,\r\n setIncomingMessage,\r\n true,\r\n \"\",\r\n false\r\n );\r\n\r\n if (excluded) {\r\n return null;\r\n }\r\n const isError = touched && (error ?? \"\") !== \"\";\r\n const checkboxes = _options.map((checkbox) => (\r\n <FormControlLabel\r\n {...FormControlLabelProps}\r\n control={\r\n <Checkbox\r\n {...others}\r\n readOnly={readOnly}\r\n tabIndex={readOnly ? -1 : undefined}\r\n />\r\n }\r\n key={checkbox.value}\r\n name={name}\r\n onChange={handleChangeInterceptor}\r\n label={checkbox.label}\r\n value={checkbox.value}\r\n checked={valueExists(value, checkbox.value)}\r\n />\r\n ));\r\n const result = (\r\n // @ts-ignore\r\n <FormControl\r\n {...FormControlProps}\r\n key={fieldKey}\r\n component=\"fieldset\"\r\n disabled={isSubmitting}\r\n error={!isSubmitting && isError}\r\n onBlur={handleBlur}\r\n >\r\n <FormLabel {...FormLabelProps} component=\"label\">\r\n {label}\r\n </FormLabel>\r\n <FormGroup {...FormGroupProps}>\r\n {loadingOptions ? (\r\n <InputAdornment position=\"end\">\r\n <CircularProgress\r\n color=\"primary\"\r\n variant=\"indeterminate\"\r\n {...CircularProgressProps}\r\n />\r\n </InputAdornment>\r\n ) : (\r\n checkboxes\r\n )}\r\n </FormGroup>\r\n {!isSubmitting && isError ? (\r\n <FormHelperText {...FormHelperTextProps}>{error}</FormHelperText>\r\n ) : null}\r\n </FormControl>\r\n );\r\n\r\n if (Boolean(enableGrid)) {\r\n return (\r\n <Grid {...GridProps} key={fieldKey}>\r\n {result}\r\n </Grid>\r\n );\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MyCheckboxGroup;\r\n","import React, { useState, useEffect } from \"react\";\nimport { Checkbox } from \"components/common/checkbox\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport { makeStyles } from \"@mui/styles\";\nconst useStyles = makeStyles((theme) => ({\n wrapperclass: {\n textAlign: \"center\",\n \"& div\": {\n \"& fieldset\": {\n verticalAlign: \"middle\",\n \"& label\": {\n marginLeft: 0,\n marginRight: 0,\n },\n },\n },\n },\n}));\nexport const EditableCheckbox = (props) => {\n const {\n value: initialValue,\n rows,\n row: { index, original },\n column: { id, validation, isReadOnly, setValueFUNC },\n updateGridData,\n hiddenFlag,\n loading,\n } = props;\n const externalTouched = Boolean(original?._touched?.[id]);\n const externalError = original?._error?.[id] ?? \"\";\n const [loadingcall, setLoading] = useState(false);\n const classes = useStyles();\n const [value, setValue] = useState(initialValue);\n // let CircularProgressProps = {\n // color: \"secondary\",\n // size: 20,\n // } as CircularProgressProps;\n // const reqGridProps =\n // typeof options === \"string\" &&\n // options === \"GetMiscValue\" &&\n // typeof requestProps !== \"undefined\"\n // ? requestProps\n // : gridProps;\n //console.log(requestProps, typeof requestProps);\n const prevRows = rows\n .slice(0, index)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const nextRows = rows\n .slice(index + 1)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const onChange = (e) => {\n //console.log(\"e.target.value\", e.target.checked);\n let checked = e.target.checked;\n if (typeof setValueFUNC === \"function\") {\n checked = setValueFUNC(checked);\n }\n setValue(checked);\n //onBlur();\n };\n\n const onBlur = () => {\n setLoading(true);\n validation(value, original, prevRows, nextRows).then((result) => {\n setLoading(false);\n const updValue = value === \"Y\" || value === true ? \"Y\" : \"N\";\n updateGridData(index, id, updValue, true, result);\n });\n };\n\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue, externalError]);\n\n return (\n <CellWrapper {...props}>\n <div className={classes.wrapperclass}>\n <Checkbox\n // <SelectForGrid\n checked={Boolean(\n typeof value === \"string\"\n ? value === \"Y\" || value === \"true\"\n ? true\n : value === \"N\" || value === \"false\"\n ? false\n : value\n : value,\n )}\n onChange={onChange}\n onBlur={onBlur}\n disabled={loadingcall || loading || isReadOnly}\n enableGrid={true}\n name={id}\n label={\"\"}\n fieldKey={id}\n />\n {Boolean(externalTouched) && Boolean(externalError) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }} error={true}>\n {externalError}\n </FormHelperText>\n ) : null}\n </div>\n </CellWrapper>\n );\n};\n","import Button from \"@mui/material/Button\";\nimport React, { useMemo } from \"react\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const ButtonRowCell = (props) => {\n const { t } = useTranslation();\n const {\n row: {\n index,\n original: { _isNewRow },\n },\n column: { id, buttonLabel, columnName, isVisible, isVisibleInNew = false },\n updateGridData,\n onButtonActionHandel,\n } = props;\n const is_Visible = useMemo(\n () => (Boolean(_isNewRow) ? isVisibleInNew : isVisible),\n [isVisible, _isNewRow],\n );\n const handleClick = (e) => {\n //updateGridData(index, id, true, true, \"\");\n //console.log(onButtonActionHandel, props);\n if (typeof onButtonActionHandel === \"function\") {\n onButtonActionHandel(index, id);\n }\n };\n return (\n <CellWrapper {...props}>\n {is_Visible ? (\n <Button\n onClick={handleClick}\n fullWidth\n style={{\n height: \"28px\",\n background: \"var(--theme-color1)\",\n color: \"var(--white)\",\n }}\n >\n {Boolean(buttonLabel) ? t(buttonLabel) : columnName}\n </Button>\n ) : null}\n </CellWrapper>\n );\n};\n","import { singletonFunctionRegisrationFactoryForTableCells } from \"components/utils\";\r\nimport { CurrencyRowCellRenderer } from \"./currencyRowCellRenderer\";\r\nimport { DateRowCellRenderer } from \"./dateRowCellRenderer\";\r\nimport { DefaultRowCellRenderer } from \"./defaultRowCellRenderer\";\r\nimport { EditableAutocomplete } from \"./editableAutocomplete\";\r\nimport { EditableSelect } from \"./editableSelect\";\r\nimport { EditableTextField } from \"./editableTextField\";\r\nimport { EditableMaskInputField } from \"./editableMaskInputField\";\r\nimport {\r\n EditableNumberFormat,\r\n EditableNumberFormatLessValidation,\r\n} from \"./editableNumberFormat\";\r\nimport { ActionCellRenderer } from \"./actionCellRenderer\";\r\nimport { DateDifferenceCalculatorRenderer } from \"./dateDifferenceRowCellRender\";\r\nimport { ChipCellRenderer } from \"./chipCellRenderer\";\r\nimport { MultipleValuesCellRenderer } from \"./multipleValuesCellRenderer\";\r\nimport { DeleteRowButton } from \"./deleteRowCell\";\r\nimport { PercentageDifferenceRowCellRenderer } from \"./percentageDifferenceCellRenderer\";\r\nimport { EditableCheckbox } from \"./editableCheckbox\";\r\nimport { EditableDatetimePicker } from \"./editableDatetimePicker\";\r\nimport { EditableDatePicker } from \"./editableDatePicker\";\r\nimport { IconRowCellRenderer } from \"./iconRowCellRenderer\";\r\nimport { ButtonRowCell } from \"./ButtonRowCell\";\r\nimport { DisableSelect } from \"./disableSelect\";\r\nexport type CellComponentType =\r\n | \"currency\"\r\n | \"date\"\r\n | \"default\"\r\n | \"icondefault\"\r\n | \"action\"\r\n | \"editableAutocomplete\"\r\n | \"editableSelect\"\r\n | \"editableTextField\"\r\n | \"editableMaskInputField\"\r\n | \"editableNumberFormat\"\r\n | \"dateDiffere\"\r\n | \"deleteRowCell\"\r\n | \"buttonRowCell\"\r\n | \"percentageDiff\"\r\n | \"editableCheckbox\"\r\n | \"editableDatetimePicker\"\r\n | \"editableDatePicker\"\r\n | \"editableNumberFormatLessValidation\"\r\n | \"disableSelect\";\r\n\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"currency\",\r\n CurrencyRowCellRenderer\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"date\",\r\n DateRowCellRenderer\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"default\",\r\n DefaultRowCellRenderer\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"icondefault\",\r\n IconRowCellRenderer\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"editableAutocomplete\",\r\n EditableAutocomplete\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"editableSelect\",\r\n EditableSelect\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"editableTextField\",\r\n EditableTextField\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"editableMaskInputField\",\r\n EditableMaskInputField\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"editableNumberFormat\",\r\n EditableNumberFormat\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"editableNumberFormatLessValidation\",\r\n EditableNumberFormatLessValidation\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"action\",\r\n ActionCellRenderer\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"dateDiffere\",\r\n DateDifferenceCalculatorRenderer\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"chip\",\r\n ChipCellRenderer\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"multipleValuesCellRenderer\",\r\n MultipleValuesCellRenderer\r\n);\r\n\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"deleteRowCell\",\r\n DeleteRowButton\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"buttonRowCell\",\r\n ButtonRowCell\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"percentageDiff\",\r\n PercentageDifferenceRowCellRenderer\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"editableCheckbox\",\r\n EditableCheckbox\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"editableDatetimePicker\",\r\n EditableDatetimePicker\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"editableDatePicker\",\r\n EditableDatePicker\r\n);\r\nsingletonFunctionRegisrationFactoryForTableCells.registerFn(\r\n \"disableSelect\",\r\n DisableSelect\r\n);\r\n","import React from \"react\";\nimport { format } from \"date-fns\";\nimport { CellWrapper } from \"./cellWrapper\";\n\nexport const DateRowCellRenderer = (props) => {\n const {\n value,\n column: { dateFormat = \"dd/MM/yyyy hh:mm aaa\" },\n } = props;\n\n if (!Boolean(value)) {\n return <CellWrapper {...props} />;\n }\n const date = new Date(value);\n let result;\n try {\n result = format(date, dateFormat);\n } catch (e) {\n result = \"-\";\n }\n return <CellWrapper {...props}>{result}</CellWrapper>;\n};\n","import React, { useEffect, useState } from \"react\";\nimport Avatar from \"@mui/material/Avatar\";\nimport Tooltip from \"@mui/material/Tooltip\";\nimport { utilFunction } from \"components/utils\";\n//import { boolean } from \"yup\";\nimport { CellWrapper } from \"./cellWrapper\";\n\nexport const IconRowCellRenderer = (props) => {\n const {\n value,\n column: {\n showTooltip = false,\n transform = (value) => value,\n isAutoSequence = false,\n isImageURL = false,\n },\n row,\n } = props;\n\n const [ProfilePictureURL, setProfilePictureURL] = useState<any | null>(null);\n let newValue;\n if (isAutoSequence) {\n newValue = Number(row?.index ?? 0) + 1;\n } else {\n newValue = transform(value);\n }\n\n useEffect(() => {\n if (Boolean(newValue)) {\n let url = \"\";\n if (isImageURL) {\n url = newValue;\n } else {\n let blob = utilFunction.base64toBlob(newValue);\n\n url =\n typeof blob === \"object\" && Boolean(blob)\n ? URL.createObjectURL(blob)\n : \"\";\n }\n setProfilePictureURL(url);\n }\n }, [newValue]);\n let result = showTooltip ? (\n <Tooltip title={newValue}>\n <div>\n <Avatar\n alt=\"User\"\n src={Boolean(ProfilePictureURL) ? ProfilePictureURL : \"\"}\n style={{\n width: \"40px\",\n height: \"40px\",\n borderRadius: 0,\n }}\n ></Avatar>\n </div>\n {/* <span>{newValue}</span> */}\n </Tooltip>\n ) : (\n <div>\n <Avatar\n alt=\"User\"\n src={Boolean(ProfilePictureURL) ? ProfilePictureURL : \"\"}\n style={{\n width: \"40px\",\n height: \"40px\",\n borderRadius: 0,\n }}\n ></Avatar>\n </div>\n );\n return <CellWrapper {...props}>{result}</CellWrapper>;\n};\n","import React, { useState, useEffect } from \"react\";\nimport { AutoCompleteGrid } from \"components/common/autocomplete/autocompleteGrid\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport { useTranslation } from \"react-i18next\";\nexport const EditableAutocomplete = (props) => {\n const {\n value: initialValue,\n rows,\n row: { index, original },\n column: {\n id,\n options,\n validation,\n _optionsKey,\n disableCachingOptions,\n disableAdornment,\n placeholder,\n },\n updateGridData,\n gridProps,\n loading: isLoading,\n hiddenFlag,\n loading,\n } = props;\n const prevRows = rows\n .slice(0, index)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n const nextRows = rows\n .slice(index + 1)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n const externalTouched = Boolean(original?._touched?.[id]);\n const externalError = original?._error?.[id] ?? \"\";\n const [loadingcoll, setLoading] = useState(false);\n const [value, setValue] = useState(initialValue);\n const { t } = useTranslation();\n const onChange = (value) => {\n setValue(value);\n };\n\n const onBlur = () => {\n setLoading(true);\n validation(value, original, prevRows, nextRows).then((result) => {\n setLoading(false);\n updateGridData(index, id, value, true, result);\n });\n };\n\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n return (\n <CellWrapper showBorder {...props}>\n <AutoCompleteGrid\n value={value}\n onChange={onChange}\n //@ts-ignore\n onBlur={onBlur}\n fullWidth\n error={externalError}\n touched={externalTouched}\n handleChange={onChange}\n handleBlur={onBlur}\n options={options}\n loading={loading}\n disabled={loading || isLoading}\n _optionsKey={_optionsKey}\n optionsProps={gridProps}\n disableCaching={disableCachingOptions}\n showCheckbox={false}\n renderInput={() => null}\n placeholder={String(t(placeholder))}\n disableAdornment={disableAdornment}\n />\n </CellWrapper>\n );\n};\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport { SelectForGrid } from \"components/common/select/renderForGrid\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport { CircularProgressProps } from \"@mui/material\";\n\nexport const EditableSelect = (props) => {\n const {\n value: initialValue,\n rows,\n row: { index, original },\n column: {\n id,\n options,\n validation,\n _optionsKey,\n disableCachingOptions,\n skipDefaultOption,\n defaultOptionLabel,\n requestProps,\n isReadOnly,\n __EDIT__,\n dependentOptionField,\n enableDefaultOption,\n },\n updateGridData,\n gridProps,\n hiddenFlag,\n loading,\n } = props;\n const externalTouched = Boolean(original?._touched?.[id]);\n const externalError = original?._error?.[id] ?? \"\";\n const [loadingcall, setLoading] = useState(false);\n const [value, setValue] = useState(initialValue);\n const isReadOnlyLocal = useMemo(() => {\n if (original?._isNewRow === true) {\n return false;\n }\n if (isReadOnly) {\n return true;\n }\n if (original?._isNewRow === false && __EDIT__?.isReadOnly === true) {\n return true;\n }\n return false;\n }, [isReadOnly, original?._isNewRow, __EDIT__]);\n let CircularProgressProps = {\n color: \"secondary\",\n size: 20,\n } as CircularProgressProps;\n const reqGridProps =\n typeof options === \"string\" &&\n options === \"GetMiscValue\" &&\n typeof requestProps !== \"undefined\"\n ? requestProps\n : gridProps;\n\n let modifiedRequestProps = Boolean(dependentOptionField)\n ? original[dependentOptionField]\n : requestProps;\n\n const prevRows = rows\n .slice(0, index)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const nextRows = rows\n .slice(index + 1)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const onChange = (e) => {\n setValue(e.target.value);\n };\n\n const onBlur = () => {\n setLoading(true);\n validation(value, original, prevRows, nextRows).then((result) => {\n setLoading(false);\n updateGridData(index, id, value, true, result);\n });\n };\n\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue, externalError]);\n return (\n <CellWrapper showBorder {...props}>\n <SelectForGrid\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n fullWidth\n touched={externalTouched}\n error={externalError}\n handleChange={onChange}\n handleBlur={onBlur}\n options={options}\n loading={loadingcall}\n disabled={loadingcall || loading || isReadOnlyLocal}\n _optionsKey={_optionsKey}\n optionsProps={modifiedRequestProps}\n disableCaching={disableCachingOptions}\n skipDefaultOption={skipDefaultOption}\n defaultOptionLabel={defaultOptionLabel}\n enableDefaultOption={enableDefaultOption}\n CircularProgressProps={CircularProgressProps}\n SelectProps={\n loadingcall || loading || isReadOnlyLocal\n ? { IconComponent: () => null }\n : undefined\n }\n />\n {Boolean(externalTouched) && Boolean(externalError) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }} error={true}>\n {externalError}\n </FormHelperText>\n ) : null}\n </CellWrapper>\n );\n};\n","import React, { useState, useEffect, useRef } from \"react\";\nimport Input from \"@mui/material/Input\";\nimport InputAdornment from \"@mui/material/InputAdornment\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Visibility from \"@mui/icons-material/Visibility\";\nimport VisibilityOff from \"@mui/icons-material/VisibilityOff\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const EditableTextField = (props) => {\n const {\n value: initialValue,\n rows,\n row: { index, original },\n column: {\n id,\n validation,\n isPassword,\n TableCellProps,\n isDisabledOnBlurEvent,\n maxLength,\n placeholder,\n autoComplete,\n isAutoFocus,\n },\n updateGridData,\n hiddenFlag,\n loading,\n } = props;\n const prevRows = rows\n .slice(0, index)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n const nextRows = rows\n .slice(index + 1)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n const externalTouched = Boolean(original?._touched?.[id]);\n const externalError = original?._error?.[id] ?? \"\";\n const isPasswordFieldRef = useRef(Boolean(isPassword));\n const [inputType, setInputType] = useState(\n Boolean(isPassword) ? \"password\" : \"text\",\n );\n const toggleInputType = () =>\n setInputType((old) => (old === \"password\" ? \"text\" : \"password\"));\n const handleMouseDownPassword = (event) => {\n event.preventDefault();\n };\n\n const [loadingCall, setLoadingCall] = useState(false);\n const [value, setValue] = useState(initialValue);\n const refInput = useRef<any>(null);\n const { t } = useTranslation();\n\n const onChange = (e) => {\n if (e.target.value.length <= (maxLength ?? 200)) {\n setValue(e.target.value);\n }\n };\n // We'll only update the external data when the input is blurred\n const onBlur = () => {\n if (!Boolean(isDisabledOnBlurEvent)) {\n onBlurEvent();\n }\n };\n const onFocus = (e) => {\n e.target.select();\n };\n\n const onBlurEvent = () => {\n setLoadingCall(true);\n validation(value, original, prevRows, nextRows).then((result) => {\n setLoadingCall(false);\n updateGridData(index, id, value, true, result);\n });\n };\n useEffect(() => {\n if (Boolean(isDisabledOnBlurEvent)) {\n onBlurEvent();\n }\n }, [value]);\n useEffect(() => {\n if (!Boolean(value) && Boolean(isAutoFocus) && rows.length === index + 1) {\n refInput?.current?.firstChild?.focus?.();\n }\n }, [index, isAutoFocus]);\n // If the initialValue is changed external, sync it up with our state\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n return (\n <CellWrapper showBorder {...props}>\n <Input\n name={id}\n value={typeof value === \"string\" ? value.trimStart() : value}\n onChange={onChange}\n onFocus={onFocus}\n type={inputType}\n onBlur={onBlur}\n margin=\"none\"\n fullWidth\n error={Boolean(externalTouched) && Boolean(externalError)}\n placeholder={String(t(placeholder))}\n autoComplete={autoComplete}\n endAdornment={\n isPasswordFieldRef.current ? (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={toggleInputType}\n onMouseDown={handleMouseDownPassword}\n >\n {inputType === \"password\" ? <Visibility /> : <VisibilityOff />}\n </IconButton>\n </InputAdornment>\n ) : null\n }\n style={{\n marginTop: \"0px\",\n direction: TableCellProps?.align === \"right\" ? \"rtl\" : \"ltr\",\n }}\n disableUnderline\n disabled={loading || loadingCall}\n ref={refInput}\n />\n {Boolean(externalTouched) && Boolean(externalError) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }} error={true}>\n {externalError}\n </FormHelperText>\n ) : null}\n {/* {maxLength ?? 0 > 0 ? (\n <FormHelperText\n error={false}\n style={{\n flex: 1,\n textAlign: \"right\",\n margin: \"5px 15px 0 0\",\n }}\n >\n {value.length}/{maxLength}\n </FormHelperText>\n ) : null} */}\n </CellWrapper>\n );\n};\n","import React from \"react\";\nimport { filterAction } from \"components/dataTable/utils\";\nimport ButtonGroup from \"@mui/material/ButtonGroup\";\nimport Button from \"@mui/material/Button\";\nimport { CellWrapper } from \"./cellWrapper\";\n\nexport const ActionCellRenderer = (props) => {\n let {\n column: { actions },\n row,\n setGridAction,\n singleActions,\n } = props;\n const setAction = (actionName) => {\n setGridAction({\n name: actionName,\n rows: [\n {\n data: row?.original,\n id: row?.id,\n },\n ],\n });\n };\n if (!Array.isArray(actions)) {\n actions = [actions];\n }\n singleActions = singleActions.filter((one) => {\n return actions.indexOf(one?.actionName) >= 0;\n });\n if (singleActions.length > 0) {\n singleActions = filterAction(singleActions, [row], {}, false);\n }\n return (\n <CellWrapper {...props}>\n <ButtonGroup size=\"small\" aria-label=\"actions\">\n {singleActions.map((one) => (\n <Button onClick={() => setAction(one.actionName)}>\n {one.actionLabel}\n </Button>\n ))}\n </ButtonGroup>\n </CellWrapper>\n );\n};\n","import React from \"react\";\nimport { differenceInCalendarDays } from \"date-fns\";\nimport { CellWrapper } from \"./cellWrapper\";\n\n/* eslint-disable eqeqeq */\n\nexport const DateDifferenceCalculatorRenderer = (props) => {\n const value = props?.cell?.row?.original ?? \"\";\n\n const todaysDate = new Date().getTime();\n const dueDate: any = new Date(value?.due_date).getTime();\n const completionDate: any = new Date(value?.completion_date).getTime();\n let result = \"-\";\n let elapseTime: any;\n\n if (dueDate !== \"\" || completionDate === \"\") {\n elapseTime = differenceInCalendarDays(todaysDate, dueDate);\n } else if (dueDate !== \"\" || completionDate !== \"\") {\n elapseTime = differenceInCalendarDays(dueDate, completionDate);\n }\n\n if (value?.status === \"Completed\") {\n result = \"-\";\n } else if (elapseTime > \"0\") {\n result = `${elapseTime} days over due`;\n } else if (elapseTime < \"0\") {\n result = `${elapseTime * -1} days left`;\n } else if (elapseTime == \"0\") {\n let msec: any = new Date(todaysDate - dueDate);\n var hh: any = Math.floor(msec / 1000 / 60 / 60);\n msec -= hh * 1000 * 60 * 60;\n var mm: any = Math.floor(msec / 1000 / 60);\n msec -= mm * 1000 * 60;\n if (hh < 10) {\n hh = `0${hh}`;\n }\n if (mm < 10) {\n mm = `0${mm}`;\n }\n result = `${hh + \":\" + mm} mins left`;\n }\n\n return <CellWrapper {...props}>{result}</CellWrapper>;\n};\n","import React from \"react\";\nimport Chip from \"@mui/material/Chip\";\nimport { CellWrapper } from \"./cellWrapper\";\n\nexport const ChipCellRenderer = (props) => {\n const {\n value,\n column: { transform = (value) => value },\n } = props;\n let newValue = transform(value);\n return (\n <CellWrapper {...props}>\n <Chip label={newValue} variant=\"outlined\" />\n </CellWrapper>\n );\n};\n","import React from \"react\";\nimport Button from \"@mui/material/Button\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport { useTranslation } from \"react-i18next\";\nexport const DeleteRowButton = (props) => {\n const {\n row: { index },\n column: { id },\n updateGridData,\n } = props;\n const { t } = useTranslation();\n const handleClick = (e) => {\n updateGridData(index, id, true, true, \"\");\n };\n return (\n <CellWrapper {...props}>\n <Button\n onClick={handleClick}\n fullWidth\n style={{\n height: \"28px\",\n background: \"var(--theme-color1)\",\n color: \"var(--white)\",\n }}\n >\n {t(\"Delete\")}\n </Button>\n </CellWrapper>\n );\n};\n","import React from \"react\";\nimport { CellWrapper } from \"./cellWrapper\";\n\nexport const PercentageDifferenceRowCellRenderer = (props) => {\n const value = props?.cell?.row?.original ?? \"\";\n let derivedPercentage: any = 0;\n\n const fromPercentage = Number(value?.fromPercentage);\n const toPercentage = Number(value?.toPercentage);\n\n if (!isNaN(fromPercentage) && !isNaN(toPercentage)) {\n derivedPercentage = `${toPercentage - fromPercentage}%`;\n }\n\n return <CellWrapper {...props}>{derivedPercentage}</CellWrapper>;\n};\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport {\n ThemeProvider,\n unstable_createMuiStrictModeTheme,\n} from \"@mui/material/styles\";\n// import DateFnsUtils from \"@date-io/date-fns\";\n// import {\n// KeyboardDateTimePicker,\n// MuiPickersUtilsProvider,\n// } from \"@material-ui/pickers\";\n// import { DateTimePicker } from \"@mui/x-date-pickers/DateTimePicker\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\n// import { theme2 } from \"app/audit/theme\";\nimport { KeyboardDateTimePicker } from \"components/styledComponent/datetime\";\nimport {\n getParsedDate,\n isValidDate,\n} from \"components/utils/utilFunctions/function\";\nimport { format } from \"date-fns\";\n\n// const themeObj = unstable_createMuiStrictModeTheme(theme2);\nexport const EditableDatetimePicker = (props) => {\n const {\n value: initialValue,\n rows,\n row: { index, original },\n column: { id, validation, dateFormat, mindate, isReadOnly, __EDIT__ },\n updateGridData,\n hiddenFlag,\n loading,\n } = props;\n const externalTouched = Boolean(original?._touched?.[id]);\n const externalError = original?._error?.[id] ?? \"\";\n const [loadingcall, setLoading] = useState(false);\n const [value, setValue] = useState(initialValue);\n const isReadOnlyLocal = useMemo(() => {\n if (isReadOnly) {\n return true;\n }\n if (original?._isNewRow === false && __EDIT__?.isReadOnly === true) {\n return true;\n }\n return false;\n }, [isReadOnly, original?._isNewRow, __EDIT__]);\n const prevRows = rows\n .slice(0, index)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const nextRows = rows\n .slice(index + 1)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const onChange = (date) => {\n //console.log(\"e.target.value\", e.target.checked);\n setValue(date);\n // setLoading(true);\n validation(date, original, prevRows, nextRows).then((result) => {\n // setLoading(false);const dateObj = date ? new Date(date) : date;\n const dateObj = date ? new Date(date) : date;\n let newValue = isValidDate(dateObj)\n ? format(dateObj, \"yyyy-MM-dd HH:mm:ss.S\")\n : dateObj;\n updateGridData(index, id, newValue, true, result);\n });\n };\n\n const onBlur = () => {\n setLoading(true);\n validation(value, original, prevRows, nextRows).then((result) => {\n setLoading(false);\n const dateObj = value ? new Date(value) : value;\n let newValue = isValidDate(dateObj)\n ? format(dateObj, \"yyyy-MM-dd HH:mm:ss.S\")\n : dateObj;\n updateGridData(index, id, newValue, true, result);\n });\n };\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n // console.log(value)\n return (\n <CellWrapper showBorder {...props}>\n {/* <ThemeProvider theme={themeObj}> */}\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <KeyboardDateTimePicker\n format={dateFormat || \"dd/MM/yyyy HH:mm:ss\"}\n onChange={onChange}\n value={value === \"\" || value === null ? null : getParsedDate(value)}\n disabled={loadingcall || loading}\n readOnly={isReadOnlyLocal}\n minDate={mindate || new Date(\"1900-01-01\")}\n views={[\"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\"]}\n slotProps={{\n textField: {\n onBlur,\n name: id,\n \"aria-label\": \"Select Date\",\n autoComplete: \"off\",\n InputProps: { disableUnderline: true },\n InputLabelProps: { shrink: true },\n },\n actionBar: {\n actions: [\"today\", \"accept\", \"cancel\"],\n },\n }}\n sx={{ width: \"100%\" }}\n />\n </LocalizationProvider>\n {/* </ThemeProvider> */}\n {Boolean(externalTouched) && Boolean(externalError) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }} error={true}>\n {externalError}\n </FormHelperText>\n ) : null}\n </CellWrapper>\n );\n};\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport {\n ThemeProvider,\n unstable_createMuiStrictModeTheme,\n} from \"@mui/material/styles\";\n// import DateFnsUtils from \"@date-io/date-fns\";\n// import {\n// KeyboardDatePicker,\n// MuiPickersUtilsProvider,\n// } from \"@material-ui/pickers\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\n// import { theme2 } from \"app/audit/theme\";\nimport { KeyboardDatePicker } from \"components/styledComponent/datetime\";\nimport {\n getParsedDate,\n isValidDate,\n} from \"components/utils/utilFunctions/function\";\nimport { format } from \"date-fns\";\n\n// const themeObj = unstable_createMuiStrictModeTheme(theme2);\nexport const EditableDatePicker = (props) => {\n const {\n value: initialValue,\n rows,\n row: { index, original },\n column: {\n id,\n validation,\n dateFormat,\n mindate,\n maxdate,\n disablePast,\n disableFuture,\n disableToday,\n isReadOnly,\n __EDIT__,\n },\n updateGridData,\n hiddenFlag,\n loading,\n } = props;\n const externalTouched = Boolean(original?._touched?.[id]);\n const externalError = original?._error?.[id] ?? \"\";\n const [loadingcall, setLoading] = useState(false);\n const [value, setValue] = useState(initialValue);\n\n const isReadOnlyLocal = useMemo(() => {\n if (isReadOnly) {\n return true;\n }\n if (original?._isNewRow === false && __EDIT__?.isReadOnly === true) {\n return true;\n }\n return false;\n }, [isReadOnly, original?._isNewRow, __EDIT__]);\n\n const prevRows = rows\n .slice(0, index)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const nextRows = rows\n .slice(index + 1)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const onChange = (date) => {\n if (date !== null && isValidDate(date) && disablePast === true) {\n const currentDate = new Date().toLocaleDateString();\n const selectedDate = new Date(date).toLocaleDateString();\n\n if (new Date(selectedDate) < new Date(currentDate)) {\n setValue(new Date());\n return;\n }\n }\n\n if (date !== null && isValidDate(date) && disableFuture === true) {\n const currentDate = new Date().toLocaleDateString();\n const selectedDate = new Date(date).toLocaleDateString();\n\n if (new Date(selectedDate) > new Date(currentDate)) {\n setValue(new Date());\n return;\n }\n }\n\n if (disableToday && isValidDate(date) && disablePast) {\n const currentDate = new Date().toLocaleDateString();\n const selectedDate = new Date(date).toLocaleDateString();\n\n if (selectedDate === currentDate) {\n const today = new Date();\n const yesterday = new Date(today);\n yesterday.setDate(today.getDate() + 1);\n setValue(yesterday);\n return;\n }\n }\n setValue(date);\n // setLoading(true);\n validation(date, original, prevRows, nextRows).then((result) => {\n // setLoading(false);\n const dateObj = date ? new Date(date) : date;\n let newValue = isValidDate(dateObj)\n ? format(dateObj, \"yyyy-MM-dd HH:mm:ss.S\")\n : dateObj;\n updateGridData(index, id, newValue, true, result);\n });\n };\n\n const onBlur = () => {\n setLoading(true);\n validation(value, original, prevRows, nextRows).then((result) => {\n setLoading(false);\n const dateObj = value ? new Date(value) : value;\n let newValue = isValidDate(dateObj)\n ? format(dateObj, \"yyyy-MM-dd HH:mm:ss.S\")\n : dateObj;\n updateGridData(index, id, newValue, true, result);\n });\n };\n useEffect(() => {\n // let initialDate = initialValue;\n // if (!initialDate) {\n // initialDate = new Date();\n // }\n setValue(initialValue);\n }, [initialValue]);\n\n return (\n <CellWrapper showBorder {...props}>\n {/* <ThemeProvider theme={themeObj}> */}\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <KeyboardDatePicker\n format={dateFormat ?? \"dd/MM/yyyy\"}\n onChange={onChange}\n value={value === \"\" || value === null ? null : getParsedDate(value)}\n disabled={loadingcall || loading}\n readOnly={isReadOnlyLocal}\n minDate={mindate || new Date(\"1900-01-01\")}\n maxDate={maxdate || null}\n disablePast={disablePast}\n disableFuture={disableFuture}\n // error={Boolean(externalTouched) && Boolean(externalError)}\n slotProps={{\n textField: {\n onBlur,\n \"aria-label\": \"Select Date\",\n name: id,\n autoComplete: \"off\",\n InputLabelProps: { shrink: true },\n InputProps: { disableUnderline: true },\n },\n actionBar: {\n actions: disableToday\n ? [\"accept\", \"cancel\"]\n : [\"today\", \"accept\", \"cancel\"],\n },\n }}\n />\n </LocalizationProvider>\n {/* </ThemeProvider> */}\n {Boolean(externalTouched) && Boolean(externalError) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }} error={true}>\n {externalError}\n </FormHelperText>\n ) : null}\n </CellWrapper>\n );\n};\n","import React from \"react\";\nimport { SelectForGrid } from \"components/common/select/renderForGrid\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport { useState, useEffect } from \"react\";\nimport { CellWrapper } from \"./cellWrapper\";\nimport { CircularProgressProps } from \"@mui/material\";\n\nexport const DisableSelect = (props) => {\n const {\n value: initialValue,\n rows,\n row: { index, original },\n column: {\n id,\n options,\n validation,\n _optionsKey,\n disableCachingOptions,\n defaultOptionLabel,\n requestProps,\n },\n updateGridData,\n gridProps,\n hiddenFlag,\n loading,\n } = props;\n const externalTouched = Boolean(original?._touched?.[id]);\n const externalError = original?._error?.[id] ?? \"\";\n const [loadingcall, setLoading] = useState(false);\n const [value, setValue] = useState(initialValue);\n let CircularProgressProps = {\n color: \"secondary\",\n size: 20,\n } as CircularProgressProps;\n const reqGridProps =\n typeof options === \"string\" &&\n options === \"GetMiscValue\" &&\n typeof requestProps !== \"undefined\"\n ? requestProps\n : gridProps;\n //console.log(requestProps, typeof requestProps);\n const prevRows = rows\n .slice(0, index)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const nextRows = rows\n .slice(index + 1)\n .map((one) => one?.original)\n .filter((one) => Boolean(one[hiddenFlag]) !== true);\n\n const onChange = (e) => {\n setValue(e.target.value);\n };\n\n const onBlur = () => {\n setLoading(true);\n validation(value, original, prevRows, nextRows).then((result) => {\n setLoading(false);\n updateGridData(index, id, value, true, result);\n });\n };\n\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue, externalError]);\n\n return (\n <CellWrapper showBorder {...props}>\n <SelectForGrid\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n fullWidth\n touched={externalTouched}\n error={externalError}\n handleChange={onChange}\n handleBlur={onBlur}\n options={options}\n loading={loadingcall}\n disabled={true}\n _optionsKey={_optionsKey}\n optionsProps={requestProps}\n disableCaching={disableCachingOptions}\n defaultOptionLabel={defaultOptionLabel}\n CircularProgressProps={CircularProgressProps}\n readOnly={true}\n SelectProps={{ IconComponent: () => null }}\n />\n {Boolean(externalTouched) && Boolean(externalError) ? (\n <FormHelperText style={{ whiteSpace: \"break-spaces\" }} error={true}>\n {externalError}\n </FormHelperText>\n ) : null}\n </CellWrapper>\n );\n};\n","import { lazy, FC } from \"react\";\r\nimport { RenderFunctionType } from \"../types\";\r\n\r\nconst CheckboxGroup = lazy(() =>\r\n import(\"components/common/checkbox\").then((module) => ({\r\n default: module.CheckboxGroup,\r\n }))\r\n);\r\n\r\nconst Checkbox = lazy(() =>\r\n import(\"components/common/checkbox\").then((module) => ({\r\n default: module.Checkbox,\r\n }))\r\n);\r\n\r\nconst SwitchGroup = lazy(() =>\r\n import(\"components/common/switch\").then((module) => ({\r\n default: module.SwitchGroup,\r\n }))\r\n);\r\n\r\nconst Switch = lazy(() =>\r\n import(\"components/common/switch\").then((module) => ({\r\n default: module.Switch,\r\n }))\r\n);\r\n\r\nconst DatePicker = lazy(() =>\r\n import(\"components/common/datetime\").then((module) => ({\r\n default: module.DatePicker,\r\n }))\r\n);\r\nconst DateTimePicker = lazy(() =>\r\n import(\"components/common/datetime\").then((module) => ({\r\n default: module.DateTimePicker,\r\n }))\r\n);\r\nconst TimePicker = lazy(() =>\r\n import(\"components/common/datetime\").then((module) => ({\r\n default: module.TimePicker,\r\n }))\r\n);\r\nconst Visaversa = lazy(() => import(\"components/common/visaversa\"));\r\nconst TextField = lazy(() => import(\"components/common/textField\"));\r\nconst Select = lazy(() => import(\"components/common/select\"));\r\nconst Radio = lazy(() => import(\"components/common/radio\"));\r\nconst Slider = lazy(() => import(\"components/common/slider\"));\r\nconst Rating = lazy(() => import(\"components/common/rating\"));\r\nconst Spacer = lazy(() => import(\"components/common/spacer\"));\r\nconst ToggleButtonGroup = lazy(\r\n () => import(\"components/common/toggleButtonGroup\")\r\n);\r\nconst NumberFormat = lazy(() => import(\"components/derived/numberFormat\"));\r\nconst PasswordField = lazy(() => import(\"components/derived/passwordField\"));\r\nconst InputMask = lazy(() => import(\"components/derived/inputMask\"));\r\nconst AutoComplete = lazy(() => import(\"components/common/autocomplete\"));\r\n\r\nconst ArrayField = lazy(() =>\r\n import(\"components/common/arrayField\").then((module) => ({\r\n default: module.ArrayField2,\r\n }))\r\n);\r\nconst TextareaField = lazy(() => import(\"components/common/textarea\"));\r\nconst HiddenField = lazy(() => import(\"components/common/hidden\"));\r\nconst Typography = lazy(() => import(\"components/common/typograhpy\"));\r\n\r\nconst TransferList = lazy(() => import(\"components/common/transferList\"));\r\n\r\nconst SearchField = lazy(() => import(\"components/common/search\"));\r\n\r\nconst DataTable = lazy(() => import(\"components/common/dataTable\"));\r\n\r\nconst FormButton = lazy(() => import(\"components/common/formbutton\"));\r\n\r\nconst EmptyComponent: FC<{ componentType: string }> = ({ componentType }) => {\r\n return <div>No Component of type: ${componentType}</div>;\r\n};\r\n\r\nexport const renderField: RenderFunctionType = (\r\n fieldObj,\r\n formRenderConfig,\r\n formName,\r\n componentProps = {}\r\n) => {\r\n const {\r\n render,\r\n schemaValidation,\r\n defaultValue,\r\n onFormButtonClickHandel,\r\n ...others\r\n } = fieldObj;\r\n let Component: any = null;\r\n switch (render.componentType) {\r\n case \"arrayField\":\r\n Component = ArrayField;\r\n break;\r\n case \"textarea\":\r\n Component = TextareaField;\r\n break;\r\n case \"textField\":\r\n Component = TextField;\r\n break;\r\n case \"select\":\r\n Component = Select;\r\n break;\r\n case \"checkbox\":\r\n Component = Checkbox;\r\n break;\r\n case \"checkboxGroup\":\r\n Component = CheckboxGroup;\r\n break;\r\n case \"radio\":\r\n Component = Radio;\r\n break;\r\n case \"switch\":\r\n Component = Switch;\r\n break;\r\n case \"switchGroup\":\r\n Component = SwitchGroup;\r\n break;\r\n case \"slider\":\r\n Component = Slider;\r\n break;\r\n case \"rating\":\r\n Component = Rating;\r\n break;\r\n case \"datePicker\":\r\n Component = DatePicker;\r\n break;\r\n case \"timePicker\":\r\n Component = TimePicker;\r\n break;\r\n case \"datetimePicker\":\r\n Component = DateTimePicker;\r\n break;\r\n case \"passwordField\":\r\n Component = PasswordField;\r\n break;\r\n case \"numberFormat\":\r\n Component = NumberFormat;\r\n break;\r\n case \"toggleButtonGroup\":\r\n Component = ToggleButtonGroup;\r\n break;\r\n case \"inputMask\":\r\n Component = InputMask;\r\n break;\r\n case \"autocomplete\":\r\n Component = AutoComplete;\r\n break;\r\n case \"spacer\":\r\n Component = Spacer;\r\n break;\r\n case \"typography\":\r\n Component = Typography;\r\n break;\r\n case \"hidden\":\r\n Component = HiddenField;\r\n break;\r\n case \"transferList\":\r\n Component = TransferList;\r\n break;\r\n case \"searchField\":\r\n Component = SearchField;\r\n break;\r\n case \"visaversa\":\r\n Component = Visaversa;\r\n break;\r\n case \"dataTable\":\r\n Component = DataTable;\r\n break;\r\n case \"formbutton\":\r\n Component = FormButton;\r\n break;\r\n default:\r\n Component = EmptyComponent;\r\n break;\r\n }\r\n if (Component === EmptyComponent) {\r\n return <Component componentType={render.componentType} />;\r\n } else if (Component === Spacer || Component === Typography) {\r\n return (\r\n <Component\r\n key={`${formName}/${others.name}`}\r\n {...others}\r\n enableGrid={true}\r\n GridProps={{ item: true, ...others?.GridProps }}\r\n />\r\n );\r\n } else if (Component === FormButton) {\r\n //console.log(fieldObj);\r\n const currentComponentTypeProps = componentProps[render.componentType];\r\n const allProps = { ...currentComponentTypeProps, ...others };\r\n const gridConfigOverrides = {\r\n ...formRenderConfig?.gridConfig?.item,\r\n ...others?.GridProps,\r\n };\r\n return (\r\n <Component\r\n {...allProps}\r\n fieldKey={others.name}\r\n key={`${formName}/${others.name}`}\r\n enableGrid={true}\r\n GridProps={{\r\n item: true,\r\n xs: gridConfigOverrides?.xs ?? \"auto\",\r\n md: gridConfigOverrides?.md ?? \"auto\",\r\n xl: gridConfigOverrides?.xl ?? gridConfigOverrides?.md ?? \"auto\",\r\n sm: gridConfigOverrides?.sm ?? \"auto\",\r\n lg: gridConfigOverrides?.lg ?? gridConfigOverrides?.md ?? \"auto\",\r\n }}\r\n onFormButtonClickHandel={onFormButtonClickHandel}\r\n />\r\n );\r\n } else {\r\n const currentComponentTypeProps = componentProps[render.componentType];\r\n const allProps = { ...currentComponentTypeProps, ...others };\r\n const gridConfigOverrides = {\r\n ...formRenderConfig?.gridConfig?.item,\r\n ...others?.GridProps,\r\n };\r\n if (render.componentType === \"arrayField\") {\r\n allProps[\"componentProps\"] = componentProps;\r\n }\r\n return (\r\n <Component\r\n {...allProps}\r\n fieldKey={others.name}\r\n key={`${formName}/${others.name}`}\r\n enableGrid={true}\r\n GridProps={{\r\n item: true,\r\n xs: gridConfigOverrides?.xs ?? \"auto\",\r\n md: gridConfigOverrides?.md ?? \"auto\",\r\n xl: gridConfigOverrides?.xl ?? gridConfigOverrides?.md ?? \"auto\",\r\n sm: gridConfigOverrides?.sm ?? \"auto\",\r\n lg: gridConfigOverrides?.lg ?? gridConfigOverrides?.md ?? \"auto\",\r\n }}\r\n />\r\n );\r\n }\r\n};\r\n","import { lazy } from \"react\";\r\nimport { RenderFunctionType } from \"../types\";\r\n\r\nconst ValueField = lazy(() => import(\"components/common/valueField\"));\r\nconst Spacer = lazy(() => import(\"components/common/spacer\"));\r\nconst ArrayFieldValue = lazy(() =>\r\n import(\"components/common/arrayField\").then((module) => ({\r\n default: module.ArrayFieldValues,\r\n }))\r\n);\r\nconst HiddenField = lazy(() => import(\"components/common/hidden\"));\r\nconst Typography = lazy(() => import(\"components/common/typograhpy\"));\r\n\r\nexport const renderValue: RenderFunctionType = (\r\n fieldObj,\r\n formRenderConfig,\r\n formName,\r\n componentProps = {}\r\n) => {\r\n const { render, schemaValidation, ...others } = fieldObj;\r\n let Component: any = null;\r\n switch (render.componentType) {\r\n case \"arrayField\":\r\n Component = ArrayFieldValue;\r\n break;\r\n case \"spacer\":\r\n Component = Spacer;\r\n break;\r\n case \"typography\":\r\n Component = Typography;\r\n break;\r\n case \"hidden\":\r\n Component = HiddenField;\r\n break;\r\n default:\r\n Component = ValueField;\r\n break;\r\n }\r\n if (Component === Spacer || Component === Typography) {\r\n return <Component key={`${formName}/${others.name}`} {...others} />;\r\n } else {\r\n const currentComponentTypeProps = componentProps[render.componentType];\r\n const allProps = { ...currentComponentTypeProps, ...others };\r\n const gridConfigOverrides = {\r\n ...formRenderConfig?.gridConfig?.item,\r\n ...others?.GridProps,\r\n };\r\n return (\r\n <Component\r\n {...allProps}\r\n fieldKey={others.name}\r\n key={`${formName}/${others.name}`}\r\n enableGrid={true}\r\n GridProps={{\r\n item: true,\r\n xs: gridConfigOverrides?.xs ?? \"auto\",\r\n md: gridConfigOverrides?.sm ?? \"auto\",\r\n xl: gridConfigOverrides?.xs ?? \"auto\",\r\n }}\r\n />\r\n );\r\n }\r\n};\r\n","import {\r\n MetaDataType,\r\n GroupWiseRenderedFieldsType,\r\n RenderedFieldsType,\r\n RenderFunctionType,\r\n} from \"../types\";\r\nimport { renderField } from \"./fieldRenderer\";\r\nimport { renderValue } from \"./valueRenderer\";\r\n\r\nconst renderByGroup =\r\n (renderMethod: RenderFunctionType) =>\r\n (\r\n metaData: MetaDataType,\r\n onFormButtonClickHandel: any = (id) => {},\r\n onFormDataChange = () => {}\r\n ) => {\r\n const { fields, form } = metaData;\r\n const defaultGroup = -1;\r\n let groupWiseRenderer: GroupWiseRenderedFieldsType = {};\r\n for (const oneField of fields) {\r\n let currentGroupName = defaultGroup;\r\n if (typeof form.render.groups === \"object\") {\r\n currentGroupName = form.render.groups.hasOwnProperty(\r\n `${oneField.render?.group}`\r\n )\r\n ? oneField.render?.group ?? -1\r\n : -1;\r\n }\r\n if (oneField?.render?.componentType === \"formbutton\") {\r\n oneField[\"onFormButtonClickHandel\"] = onFormButtonClickHandel;\r\n }\r\n oneField[\"onFormDataChange\"] = onFormDataChange;\r\n const element = renderMethod(\r\n oneField,\r\n form?.render,\r\n form?.name,\r\n form?.componentProps\r\n );\r\n let currentGroup: RenderedFieldsType;\r\n currentGroup = groupWiseRenderer[currentGroupName];\r\n if (currentGroup === undefined) {\r\n currentGroup = {\r\n fields: [],\r\n sequence: [],\r\n fieldNames: [],\r\n };\r\n groupWiseRenderer[currentGroupName] = currentGroup;\r\n }\r\n currentGroup.fields.push(element);\r\n currentGroup.sequence.push(oneField?.render?.sequence ?? 0);\r\n currentGroup.fieldNames.push(oneField.name);\r\n }\r\n //sort them by sequence\r\n if (form.render.ordering === \"sequence\") {\r\n const groups = Object.keys(groupWiseRenderer);\r\n for (const group of groups) {\r\n const currentGroup = groupWiseRenderer[group];\r\n //improve sorting\r\n for (let i = 0; i < currentGroup.sequence.length; i++) {\r\n for (let j = i + 1; j < currentGroup.sequence.length; j++) {\r\n if (currentGroup.sequence[i] > currentGroup.sequence[j]) {\r\n const temp = currentGroup.sequence[j];\r\n currentGroup.sequence[j] = currentGroup.sequence[i];\r\n currentGroup.sequence[i] = temp;\r\n const temp1 = currentGroup.fields[j];\r\n currentGroup.fields[j] = currentGroup.fields[i];\r\n currentGroup.fields[i] = temp1;\r\n const temp2 = currentGroup.fieldNames[j];\r\n currentGroup.fieldNames[j] = currentGroup.fieldNames[i];\r\n currentGroup.fieldNames[i] = temp2;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return groupWiseRenderer;\r\n };\r\n\r\nexport const renderFieldsByGroup = renderByGroup(renderField);\r\n\r\nexport const renderValuesByGroup = renderByGroup(renderValue);\r\n","import { getIn, setIn, InitialValuesType } from \"packages/form\";\r\nimport { FieldMetaDataType } from \"../types\";\r\n\r\nexport const constructInitialValue = (\r\n fields: FieldMetaDataType[],\r\n initialValues?: InitialValuesType\r\n) => {\r\n if (!Array.isArray(fields)) {\r\n return {};\r\n }\r\n let initialValuesObj = {};\r\n // console.log(\">>constructInitialValue \", initialValues);\r\n for (const field of fields) {\r\n const { defaultValue, name } = field;\r\n const value = getIn(initialValues, name, undefined);\r\n // console.log(\">>Value \", value, field, defaultValue);\r\n if (typeof value === \"boolean\" || Boolean(value)) {\r\n initialValuesObj = setIn(initialValuesObj, name, value);\r\n } else if (Boolean(defaultValue)) {\r\n const defaultVal =\r\n field.render.componentType === \"datetimePicker\"\r\n ? new Date()\r\n : defaultValue;\r\n initialValuesObj = setIn(initialValuesObj, name, defaultVal);\r\n }\r\n }\r\n return initialValuesObj;\r\n};\r\n\r\nexport const constructInitialValuesForArrayFields = (\r\n fields: FieldMetaDataType[]\r\n) => {\r\n if (!Array.isArray(fields)) {\r\n return {};\r\n }\r\n const initialValuesObj = {};\r\n for (const field of fields) {\r\n //@ts-ignore\r\n const { name, _fields } = field;\r\n if (Array.isArray(_fields)) {\r\n let result = constructInitialValue2(_fields);\r\n initialValuesObj[name] = result;\r\n }\r\n }\r\n return initialValuesObj;\r\n};\r\n\r\nconst constructInitialValue2 = (fields: FieldMetaDataType[]) => {\r\n if (!Array.isArray(fields)) {\r\n return {};\r\n }\r\n let initialValuesObj = {};\r\n for (const field of fields) {\r\n //@ts-ignore\r\n const { defaultValue, name, _fields } = field;\r\n if (Array.isArray(_fields)) {\r\n let result = constructInitialValue2(_fields);\r\n initialValuesObj = setIn(initialValuesObj, name, result);\r\n }\r\n if (Boolean(defaultValue)) {\r\n initialValuesObj = setIn(initialValuesObj, name, defaultValue);\r\n }\r\n }\r\n return initialValuesObj;\r\n};\r\n","import * as yup from \"yup\";\r\nimport { FieldMetaDataType } from \"../types\";\r\n\r\n//construct Yup schema from metaData\r\n\r\nexport const constructYupSchema = (fields: FieldMetaDataType[]) => {\r\n if (!Array.isArray(fields)) {\r\n return yup.object().shape({});\r\n }\r\n let schema = {};\r\n const schemaObject = fields.reduce(parseSchema, schema);\r\n const yupScheamObject = yup.object().shape(schemaObject);\r\n return yupScheamObject;\r\n};\r\n\r\nconst parseSchema = (schema, fieldObj: FieldMetaDataType) => {\r\n const { name, schemaValidation, render } = fieldObj;\r\n //for ArrayField support\r\n if (render.componentType === \"arrayField\") {\r\n //@ts-ignore\r\n let result = constructYupSchema(fieldObj._fields);\r\n let validator = yup.array().of(result);\r\n schema[name] = validator;\r\n return schema;\r\n }\r\n\r\n if (schemaValidation === undefined) {\r\n return schema;\r\n }\r\n const { type, rules } = schemaValidation;\r\n //check if type exist in yup\r\n if (!yup[type]) {\r\n return schema;\r\n }\r\n\r\n if (!Array.isArray(rules)) {\r\n return schema;\r\n }\r\n //@ts-ignore\r\n let validator = yup[type]();\r\n rules.forEach((rule) => {\r\n const { params, name } = rule;\r\n if (!validator[name]) {\r\n return;\r\n }\r\n validator = validator[name](...params);\r\n });\r\n schema[name] = validator;\r\n return schema;\r\n};\r\n\r\n/*\r\n//if fieldType is array pass template object to makeSchemaFromTemplate and attached it to nested array obj\r\nif (type === \"array\") {\r\n if ([\"string\", \"number\", \"boolean\", \"date\"].indexOf(arrayType ?? \"\") > -1) {\r\n //@ts-ignore\r\n let arrayOFTypeSchema = yup[type]()[\"of\"](arrayType);\r\n if (!Array.isArray(rules)) {\r\n return schema;\r\n }\r\n rules.forEach((rule) => {\r\n const { params, name } = rule;\r\n if (!arrayOFTypeSchema[name]) {\r\n return;\r\n }\r\n arrayOFTypeSchema = arrayOFTypeSchema[name](...params);\r\n });\r\n schema[name] = arrayOFTypeSchema;\r\n return schema;\r\n } else {\r\n const { template = [] } = fieldObj;\r\n const nestedschema = constructYupSchema(template);\r\n const arrayOFNestedSchema = yup[type]()[\"of\"](nestedschema);\r\n schema[name] = arrayOFNestedSchema;\r\n return schema;\r\n }\r\n } else {\r\n*/\r\n","import { MetaDataType } from \"../types\";\r\nimport {\r\n singletonFunctionRegisrationFactory,\r\n AttachMethodArrayType,\r\n attachMethodsToMetaData as _attachMethodsToMetaData,\r\n} from \"components/utils\";\r\n\r\nconst optionsMethodNotFound = (fieldKey) => () => {\r\n console.log(`no method found for options at ${fieldKey}`);\r\n return [{ label: \"Oops error occured\", value: \"\" }];\r\n};\r\nconst validateMethodNotFound = (fieldKey) => () => {\r\n console.log(`no method found for validation at ${fieldKey}`);\r\n return \"\";\r\n};\r\nconst postValidationSetCrossFieldValuesMethodNotFound = (fieldKey) => () => {\r\n console.log(\r\n `no method for postValidationSetCrossFieldValues found at ${fieldKey}`\r\n );\r\n return undefined;\r\n};\r\nconst isReadOnlyMethodNotFound = (fieldKey) => () => {\r\n console.log(`no method for isReadOnly found at ${fieldKey}`);\r\n return false;\r\n};\r\nconst shouldExcludeNotFound = (fieldKey) => () => {\r\n console.log(`no method for shouldExclude found at ${fieldKey}`);\r\n return false;\r\n};\r\nconst inputMaskPrepareNotFound = (fieldKey) => (value) => {\r\n console.log(`no method for inputMaskPrepare found at ${fieldKey}`);\r\n return value;\r\n};\r\nconst removeRowFnNotFound = (fieldKey) => (value) => {\r\n console.log(`no method for removeRowFn found at ${fieldKey}`);\r\n throw new Error(\"method not implemeneted\");\r\n};\r\nconst setValueOnDependentFieldsChangeNotFound = (fieldKey) => (value) => {\r\n console.log(`no method for removeRowFn found at ${fieldKey}`);\r\n return \"\";\r\n};\r\nconst getFixedRowsCount = (fieldKey) => (value) => {\r\n console.log(`no method for getFixedRowsCount found at ${fieldKey}`);\r\n return 0;\r\n};\r\nconst setColorMethodNotFound = (fieldKey) => () => {\r\n console.log(`no method for setColorMethodNotFound found at ${fieldKey}`);\r\n return \"\";\r\n};\r\nconst searchComponentNotFound = (fieldKey) => () => {\r\n console.log(`no method for searchComponentNotFound found at ${fieldKey}`);\r\n return \"Component not found\";\r\n};\r\nconst transformNotFound = (key) => (fieldKey) => (value) => {\r\n console.log(`no method found for ${key} Transform at ${fieldKey}`);\r\n return value;\r\n};\r\n\r\nexport const defaultFieldsToAttachMethods: AttachMethodArrayType[] = [\r\n [/^fields.*.options$/, optionsMethodNotFound],\r\n [/^fields.*.setColor$/, setColorMethodNotFound],\r\n [/^fields.*.leftOptions$/, optionsMethodNotFound],\r\n [/^fields.*.rightOptions$/, optionsMethodNotFound],\r\n [/^fields.*.validate$/, validateMethodNotFound],\r\n [\r\n /^fields.*.postValidationSetCrossFieldValues$/,\r\n postValidationSetCrossFieldValuesMethodNotFound,\r\n ],\r\n [/^fields.*.isReadOnly$/, isReadOnlyMethodNotFound],\r\n [/^fields.*.shouldExclude$/, shouldExcludeNotFound],\r\n [/^fields.*.MaskProps.prepare$/, inputMaskPrepareNotFound],\r\n [/^fields.*.removeRowFn$/, removeRowFnNotFound],\r\n [\r\n /^fields.*.setValueOnDependentFieldsChange$/,\r\n setValueOnDependentFieldsChangeNotFound,\r\n ],\r\n [/^fields.*.getFixedRowsCount$/, getFixedRowsCount],\r\n [/^fields.*.searchComponent$/, searchComponentNotFound],\r\n\r\n [/^fields.*.leftTransform$/, transformNotFound(\"left\")],\r\n [/^fields.*.rightTransform$/, transformNotFound(\"right\")],\r\n [/^fields.*.dataTransformer$/, undefined],\r\n [/^fields.*.rowValidator$/, undefined],\r\n];\r\n\r\n//do not walk for arrayFields _fields as well we will run it seperately\r\nconst skipWalkingForKeys = [\r\n \"validate\",\r\n \"isReadOnly\",\r\n \"shouldExclude\",\r\n \"setColor\",\r\n \"_fields\",\r\n \"_columns\",\r\n];\r\n\r\n//we will attach default function for each field Key type if we cannot the required function\r\n//array index\r\n//0-the path to set function at\r\n//1-the strign value that will be used as key to find mapped function from functions registry\r\n//2-is the key name\r\n//3-default function for that key - it can be undefined it its not declared\r\nexport const attachMethodsToMetaData = (metaData: MetaDataType) => {\r\n return _attachMethodsToMetaData(\r\n metaData,\r\n singletonFunctionRegisrationFactory,\r\n defaultFieldsToAttachMethods,\r\n skipWalkingForKeys\r\n );\r\n};\r\n","import {\r\n MetaDataType,\r\n ExtendedFieldMetaDataTypeOptional,\r\n FieldMetaDataType,\r\n} from \"../types\";\r\nexport const extendFieldTypes = (\r\n metaData: MetaDataType,\r\n extendedTypes: ExtendedFieldMetaDataTypeOptional,\r\n lanTranslate: any = (edata) => edata\r\n) => {\r\n const newMetaDataFields = metaData.fields.map((one) => {\r\n const extendedType = extendedTypes[one.render.componentType];\r\n one[\"label\"] = lanTranslate(one[\"label\"]);\r\n one[\"placeholder\"] = lanTranslate(one[\"placeholder\"]);\r\n //exclude the following types from extending\r\n if (typeof extendedType === \"object\") {\r\n const {\r\n defaultValue,\r\n render,\r\n validate,\r\n shouldExclude,\r\n isReadOnly,\r\n name,\r\n validationRun,\r\n dependentFields,\r\n postValidationSetCrossFieldValues,\r\n runPostValidationHookAlways,\r\n ...others\r\n } = extendedType;\r\n const result = Object.assign({}, one, others) as FieldMetaDataType;\r\n if (result && result.render && result.render.componentType) {\r\n //@ts-ignore\r\n result.render.componentType = extendedType.render?.componentType;\r\n }\r\n /*if (result.render.componentType === \"select\") {\r\n if (typeof result?.defaultValue === \"undefined\") {\r\n result[\"defaultValue\"] = null;\r\n }\r\n }*/\r\n return result;\r\n }\r\n /*if (one.render.componentType === \"select\") {\r\n if (typeof one?.defaultValue === \"undefined\") {\r\n one[\"defaultValue\"] = null;\r\n }\r\n }*/\r\n return one;\r\n });\r\n return {\r\n form: metaData.form,\r\n fields: [...newMetaDataFields],\r\n } as MetaDataType;\r\n};\r\n","import { MetaDataType } from \"../types\";\r\nexport const MoveSequenceToRender = (\r\n formMetaData: MetaDataType\r\n): MetaDataType => {\r\n let { fields, form } = formMetaData;\r\n if (Array.isArray(fields)) {\r\n //@ts-ignore\r\n fields = fields.map((one) => {\r\n //@ts-ignore\r\n const { sequence, render, ...others } = one;\r\n return { ...others, render: { sequence, ...render } };\r\n });\r\n }\r\n return {\r\n fields,\r\n form,\r\n };\r\n};\r\n","import { makeStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: Theme) => ({\r\n title: {\r\n color: \"#26A456\",\r\n letterSpacing: \"2px\",\r\n fontSize: \"1.75rem\",\r\n fontWeight: 700,\r\n alignSelf: \"flex-start\",\r\n marginBottom: \"10px\",\r\n },\r\n subTitle: {\r\n color: \"#26A456\",\r\n letterSpacing: \"2px\",\r\n fontSize: \"1.25rem\",\r\n fontWeight: 700,\r\n alignSelf: \"flex-start\",\r\n marginBottom: theme.spacing(2),\r\n },\r\n label: {\r\n color: \"#736f6f\",\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n fontSize: \"1rem\",\r\n marginBottom: \"0.5 rem\",\r\n },\r\n form: {\r\n width: \"100%\",\r\n },\r\n tabsSubmitBtn: {\r\n boxShadow: \"none \",\r\n background: \"#e0e0e0\",\r\n marginRight: theme.spacing(2),\r\n color: \"#0b6fb8 \",\r\n fontSize: \"1.2rem\",\r\n \"&:hover\": {\r\n color: \"#e0e0e0 \",\r\n background:\r\n \"linear-gradient(-90deg, rgba(94,231,131,1) 0%, rgba(74,205,159,1) 35%, rgba(33,150,218,1) 100%)\",\r\n boxShadow: \"none \",\r\n },\r\n },\r\n\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n fontSize: \"1.2rem\",\r\n borderRadius: \"24px\",\r\n },\r\n backBtn: {\r\n boxShadow: \"none \",\r\n background: \"#e0e0e0\",\r\n marginRight: theme.spacing(2),\r\n color: \"#0b6fb8 \",\r\n margin: theme.spacing(3, 0, 2),\r\n fontSize: \"1.2rem\",\r\n borderRadius: \"24px\",\r\n \"&:hover\": {\r\n color: \"#e0e0e0 \",\r\n background:\r\n \"linear-gradient(-90deg, rgba(94,231,131,1) 0%, rgba(74,205,159,1) 35%, rgba(33,150,218,1) 100%)\",\r\n boxShadow: \"none \",\r\n },\r\n },\r\n buttonProgress: {\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n buttonWrapper: {\r\n position: \"relative\",\r\n },\r\n stepper: {\r\n width: \"100%\",\r\n // width: theme.spacing(1),\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n },\r\n stepperLabel: {\r\n // width: theme.spacing(1),\r\n display: \"flex\",\r\n justifyContent: \"flex-start\",\r\n },\r\n formControlLabelSpacer: {\r\n flexGrow: 1,\r\n },\r\n}));\r\n","export const isGroupExcluded = (\r\n formName: string,\r\n currentGroupFields: string[],\r\n excludedFields: string[]\r\n) => {\r\n const remaningFields = currentGroupFields.filter((fieldName) => {\r\n const fullFieldName = `${formName}/${fieldName}`;\r\n return excludedFields.indexOf(fullFieldName) >= 0 ? false : true;\r\n });\r\n if (remaningFields.length > 0) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nexport const isGroupHavingError = (\r\n formName: string,\r\n currentGroupFields: string[],\r\n errorFields: string[]\r\n) => {\r\n const remaningFields = currentGroupFields.filter((fieldName) => {\r\n const fullFieldName = `${formName}/${fieldName}`;\r\n let result = errorFields.indexOf(fullFieldName) >= 0 ? true : false;\r\n if (result === false) {\r\n result = Boolean(\r\n errorFields.find((one) => one.indexOf(fullFieldName) > -1)\r\n )\r\n ? true\r\n : false;\r\n }\r\n return result;\r\n });\r\n if (remaningFields.length > 0) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n","export const getNextActiveStep = (\r\n currentStep: number,\r\n fieldGroupsActiveStatus: {\r\n name: string;\r\n status: boolean;\r\n }[]\r\n) => {\r\n for (let i = currentStep + 1; i < fieldGroupsActiveStatus.length; i++) {\r\n if (fieldGroupsActiveStatus[i].status === true) {\r\n return i;\r\n }\r\n }\r\n return currentStep;\r\n};\r\n\r\nexport const getPrevActiveStep = (\r\n currentStep: number,\r\n fieldGroupsActiveStatus: {\r\n name: string;\r\n status: boolean;\r\n }[]\r\n) => {\r\n for (let i = currentStep - 1; i >= 0; i--) {\r\n if (fieldGroupsActiveStatus[i].status === true) {\r\n return i;\r\n }\r\n }\r\n return currentStep;\r\n};\r\n\r\nexport const isLastActiveStep = (\r\n currentStep: number,\r\n fieldGroupsActiveStatus: {\r\n name: string;\r\n status: boolean;\r\n }[]\r\n) => {\r\n let finalStep = currentStep;\r\n for (let i = currentStep + 1; i < fieldGroupsActiveStatus.length; i++) {\r\n if (fieldGroupsActiveStatus[i].status === true) {\r\n finalStep = i;\r\n break;\r\n }\r\n }\r\n\r\n return finalStep === currentStep;\r\n};\r\n","import { Suspense, useState, useRef, cloneElement } from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport Button from \"@mui/material/Button\";\nimport Stepper from \"@mui/material/Stepper\";\nimport Step from \"@mui/material/Step\";\nimport StepLabel from \"@mui/material/StepLabel\";\nimport Grid from \"@mui/material/Grid\";\nimport Container from \"@mui/material/Container\";\nimport { Alert } from \"components/common/alert\";\nimport { useRecoilValue } from \"recoil\";\nimport {\n formFieldsExcludedAtom,\n formFieldsErrorWatcherAtom,\n} from \"packages/form\";\nimport { useStyles } from \"../style\";\nimport { isGroupExcluded, isGroupHavingError } from \"../groupUtils\";\nimport {\n getPrevActiveStep,\n getNextActiveStep,\n isLastActiveStep,\n} from \"./utils\";\n\nexport const StepperWrapper = ({\n fields,\n formRenderConfig,\n formName,\n handleSubmit,\n handleSubmitPartial,\n formDisplayLabel,\n hidden,\n defaultActiveStep = 0,\n wrapperChild,\n classes: parentClasses,\n children = undefined,\n isSubmitting,\n serverSentError,\n serverSentErrorDetail,\n}) => {\n const classes = useStyles();\n const [activeStep, setActiveStep] = useState(defaultActiveStep);\n const { current: fieldGroups } = useRef<string[]>(Object.keys(fields).sort());\n return (\n <Container\n component=\"main\"\n style={{ display: hidden ? \"none\" : \"block\", paddingTop: \"16px\" }}\n >\n <Toolbar variant=\"dense\">\n <Typography component=\"h3\" className={classes.title}>\n {formDisplayLabel}\n </Typography>\n <div className={parentClasses.formControlLabelSpacer} />\n {typeof wrapperChild === \"function\"\n ? wrapperChild({ isSubmitting, handleSubmit })\n : wrapperChild}\n </Toolbar>\n {!isSubmitting && Boolean(serverSentError) ? (\n <Alert\n severity=\"error\"\n errorMsg={serverSentError}\n errorDetail={serverSentErrorDetail}\n />\n ) : null}\n <div className={classes.form}>\n <Steps\n activeStep={activeStep}\n formRenderConfig={formRenderConfig}\n classes={classes}\n fieldGroups={fieldGroups}\n formName={formName}\n fields={fields}\n />\n <FieldsRenderer\n stepsRenderer={children}\n fieldGroups={fieldGroups}\n fields={fields}\n formRenderConfig={formRenderConfig}\n activeStep={activeStep}\n />\n <StepsController\n activeStep={activeStep}\n setActiveStep={setActiveStep}\n formRenderConfig={formRenderConfig}\n classes={classes}\n fieldGroups={fieldGroups}\n formName={formName}\n fields={fields}\n handleSubmit={handleSubmit}\n handleSubmitPartial={handleSubmitPartial}\n />\n </div>\n </Container>\n );\n};\n\nexport const Steps = ({\n activeStep,\n formRenderConfig,\n classes,\n fieldGroups,\n formName,\n fields,\n}) => {\n const defaultGroupName = \"DefaultGroup\";\n\n const excludedFields = useRecoilValue(formFieldsExcludedAtom(formName));\n const errorWatcherFields = useRecoilValue(\n formFieldsErrorWatcherAtom(formName),\n );\n const fieldGroupsActiveStatus = fieldGroups.map((one) => {\n let groupName = defaultGroupName;\n if (typeof formRenderConfig.groups === \"object\") {\n groupName = formRenderConfig.groups[one];\n }\n return {\n index: one,\n name: groupName,\n status: isGroupExcluded(formName, fields[one].fieldNames, excludedFields),\n hasError: isGroupHavingError(\n formName,\n fields[one].fieldNames,\n errorWatcherFields,\n ),\n };\n });\n const filteredFieldGroups = fieldGroupsActiveStatus.filter(\n (one) => one.status,\n );\n\n return (\n <>\n <Stepper activeStep={activeStep} alternativeLabel>\n {filteredFieldGroups.map((field) => {\n return (\n <Step key={field.name}>\n <StepLabel error={field.hasError}>{field.name}</StepLabel>\n </Step>\n );\n })}\n </Stepper>\n <div className={classes.stepperLabel}>\n <Typography component=\"h4\" className={classes.subTitle}>\n {typeof formRenderConfig.groups === \"object\"\n ? formRenderConfig.groups[fieldGroups[activeStep]]\n : defaultGroupName}\n </Typography>\n </div>\n </>\n );\n};\n\nexport const FieldsRenderer = ({\n activeStep,\n fields,\n fieldGroups,\n formRenderConfig,\n stepsRenderer,\n}) => {\n const steps = fieldGroups.map((one, index) => {\n const current = fields[one];\n current.fields[0] = cloneElement(current.fields[0], {\n isFieldFocused: index === activeStep ? true : false,\n });\n const hideMe = index !== Number(activeStep) ? { display: \"none\" } : {};\n return (\n <Grid\n key={one}\n container={true}\n spacing={formRenderConfig?.gridConfig?.container?.spacing ?? 2}\n direction={formRenderConfig?.gridConfig?.container?.direction ?? \"row\"}\n style={hideMe}\n >\n {current.fields}\n </Grid>\n );\n });\n return typeof stepsRenderer === \"function\" ? (\n stepsRenderer({ steps })\n ) : (\n <Suspense fallback={<div>Loading...</div>}>{steps}</Suspense>\n );\n};\n\nexport const StepsController = ({\n activeStep,\n formName,\n fieldGroups,\n formRenderConfig,\n fields,\n handleSubmitPartial,\n handleSubmit,\n setActiveStep,\n classes,\n}) => {\n const defaultGroupName = \"DefaultGroup\";\n\n const excludedFields = useRecoilValue(formFieldsExcludedAtom(formName));\n const errorWatcherFields = useRecoilValue(\n formFieldsErrorWatcherAtom(formName),\n );\n const fieldGroupsActiveStatus = fieldGroups.map((one) => {\n let groupName = defaultGroupName;\n if (typeof formRenderConfig.groups === \"object\") {\n groupName = formRenderConfig.groups[one];\n }\n return {\n index: one,\n name: groupName,\n status: isGroupExcluded(formName, fields[one].fieldNames, excludedFields),\n hasError: isGroupHavingError(\n formName,\n fields[one].fieldNames,\n errorWatcherFields,\n ),\n };\n });\n\n const handleNext = async () => {\n if (!isLastActiveStep(activeStep, fieldGroupsActiveStatus)) {\n const currentStep = fieldGroupsActiveStatus[activeStep];\n const currentFieldsToValidate = fields[currentStep.index].fieldNames;\n let hasError = await handleSubmitPartial(currentFieldsToValidate);\n //In debug mode allow to move to next step without validating\n // if (process.env.REACT_APP_DEBUG_MODE === \"true\") {\n // hasError = false;\n // }\n if (!hasError) {\n const nextStep = getNextActiveStep(activeStep, fieldGroupsActiveStatus);\n setActiveStep(nextStep);\n }\n }\n };\n const handlePrev = () => {\n if (activeStep > 0) {\n let step = getPrevActiveStep(activeStep, fieldGroupsActiveStatus);\n setActiveStep(step);\n }\n };\n return (\n <div className={classes.stepper}>\n {activeStep === 0 ? null : (\n <Button type=\"button\" onClick={handlePrev} className={classes.submit}>\n {formRenderConfig?.labels?.prev ?? \"Back\"}\n </Button>\n )}\n {!isLastActiveStep(activeStep, fieldGroupsActiveStatus) ? (\n <Button type=\"button\" className={classes.submit} onClick={handleNext}>\n {formRenderConfig?.labels?.next ?? \"Next\"}\n </Button>\n ) : (\n <Button type=\"button\" className={classes.submit} onClick={handleSubmit}>\n {formRenderConfig?.labels?.complete ?? \"Submit\"}\n </Button>\n )}\n </div>\n );\n};\n","import { FC, useRef, Suspense } from \"react\";\nimport Grid from \"@mui/material/Grid\";\nimport { FormProps } from \"./types\";\nimport Container from \"@mui/material/Container\";\nimport { Alert } from \"components/common/alert\";\nimport AppBar from \"@mui/material/AppBar\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport Typography from \"@mui/material/Typography\";\nimport Chip from \"@mui/material/Chip\";\nimport { t } from \"i18next\";\nexport const SimpleForm: FC<FormProps> = ({\n fields,\n formRenderConfig,\n children,\n}) => {\n const fieldGroups = useRef<string[]>(Object.keys(fields).sort());\n const formComponentGroupWise = fieldGroups.current.map((one) => {\n const current = fields[one];\n return current.fields;\n });\n const fieldsToRender = formComponentGroupWise.reduce((accum, current) => {\n const newAccum = [...accum, ...current];\n return newAccum;\n }, []);\n\n return typeof children === \"function\" ? (\n children({\n fieldsToRender,\n spacing: formRenderConfig?.gridConfig?.container?.spacing ?? 2,\n direction: formRenderConfig?.gridConfig?.container?.direction ?? \"row\",\n })\n ) : (\n <Grid\n container={true}\n spacing={formRenderConfig?.gridConfig?.container?.spacing ?? 2}\n direction={formRenderConfig?.gridConfig?.container?.direction ?? \"row\"}\n >\n <Suspense fallback={<div>Loading...</div>}>{fieldsToRender}</Suspense>\n </Grid>\n );\n};\n\nexport const SimpleFormWrapper = ({\n fields,\n formRenderConfig,\n formName,\n formStyle,\n hidden,\n formDisplayLabel,\n displayMode,\n hideDisplayModeInTitle,\n wrapperChild,\n serverSentError,\n serverSentErrorDetail,\n isSubmitting,\n classes,\n handleSubmit,\n controlsAtBottom,\n hideHeader,\n containerstyle = {},\n}) => (\n <Container\n component=\"main\"\n style={{ display: hidden ? \"none\" : \"block\", ...containerstyle }}\n >\n {hideHeader ? null : (\n <SimpleFormTitle\n formDisplayLabel={formDisplayLabel}\n displayMode={displayMode}\n hideDisplayModeInTitle={hideDisplayModeInTitle}\n wrapperChild={wrapperChild}\n serverSentError={serverSentError}\n serverSentErrorDetail={serverSentErrorDetail}\n isSubmitting={isSubmitting}\n classes={classes}\n handleSubmit={handleSubmit}\n controlsAtBottom={controlsAtBottom}\n />\n )}\n <div style={{ ...formStyle, paddingTop: \"10px\" }}>\n <SimpleForm\n key={`${formName}-simple`}\n fields={fields}\n formRenderConfig={formRenderConfig}\n formName={formName}\n >\n {({ spacing, direction, fieldsToRender }) => (\n <div>\n <Grid container={true} spacing={spacing} direction={direction}>\n <Suspense fallback={<div>Loading...</div>}>\n {fieldsToRender}\n </Suspense>\n </Grid>\n </div>\n )}\n </SimpleForm>\n {controlsAtBottom && (\n <BottomControl\n wrapperChild={wrapperChild}\n isSubmitting={isSubmitting}\n handleSubmit={handleSubmit}\n classes={classes}\n />\n )}\n </div>\n </Container>\n);\n\nexport const BottomControl = ({\n wrapperChild,\n isSubmitting,\n handleSubmit,\n classes,\n}) => (\n <Toolbar variant=\"dense\" disableGutters>\n <div className={classes.formControlLabelSpacer} />\n {typeof wrapperChild === \"function\"\n ? wrapperChild({ isSubmitting, handleSubmit })\n : wrapperChild}\n </Toolbar>\n);\n\nexport const SimpleFormTitle = ({\n formDisplayLabel,\n displayMode,\n hideDisplayModeInTitle,\n wrapperChild,\n serverSentError,\n serverSentErrorDetail,\n isSubmitting,\n classes,\n handleSubmit,\n controlsAtBottom,\n}) => {\n // console.log(\"mode<<\", displayMode)\n return (\n <AppBar position=\"relative\" color=\"secondary\">\n <Toolbar variant=\"dense\">\n <Typography component=\"div\" variant=\"h6\">\n {formDisplayLabel}\n {Boolean(displayMode) && !Boolean(hideDisplayModeInTitle) ? (\n <Chip\n style={{ color: \"white\", marginLeft: \"8px\" }}\n variant=\"outlined\"\n color=\"primary\"\n size=\"small\"\n // label={t(`${displayMode}mode`)}\n label={`${displayMode} mode`}\n />\n ) : (\n \"\"\n )}\n </Typography>\n <div className={classes.formControlLabelSpacer} />\n {!controlsAtBottom\n ? typeof wrapperChild === \"function\"\n ? wrapperChild({ isSubmitting, handleSubmit })\n : wrapperChild\n : null}\n </Toolbar>\n {!isSubmitting && Boolean(serverSentError) ? (\n <Alert\n severity=\"error\"\n errorMsg={serverSentError}\n errorDetail={serverSentErrorDetail}\n />\n ) : null}\n </AppBar>\n );\n};\n","import { Suspense, Fragment, useState, useRef, cloneElement } from \"react\";\r\nimport Tab from \"@mui/material/Tab\";\r\nimport Tabs from \"@mui/material/Tabs\";\r\nimport { Alert } from \"components/common/alert\";\r\nimport AppBar from \"@mui/material/AppBar\";\r\nimport Toolbar from \"@mui/material/Toolbar\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Chip from \"@mui/material/Chip\";\r\nimport { useRecoilValue } from \"recoil\";\r\nimport {\r\n formFieldsExcludedAtom,\r\n formFieldsErrorWatcherAtom,\r\n} from \"packages/form\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { isGroupExcluded, isGroupHavingError } from \"./groupUtils\";\r\nimport Container from \"@mui/material/Container\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n \"& .MuiTabs-indicator\": {\r\n background: \"var(--theme-color1)\",\r\n },\r\n \"& .MuiButtonBase-root.Mui-selected\": {\r\n color: \"#000\",\r\n },\r\n },\r\n}));\r\n\r\nexport const TabsFormWrapper = ({\r\n fields,\r\n formRenderConfig,\r\n formName,\r\n children,\r\n formStyle,\r\n hidden,\r\n formDisplayLabel,\r\n displayMode,\r\n hideDisplayModeInTitle,\r\n wrapperChild,\r\n serverSentError,\r\n serverSentErrorDetail,\r\n isSubmitting,\r\n classes,\r\n handleSubmit,\r\n defaultActiveStep = 0,\r\n hideHeader = false,\r\n}) => {\r\n const [activeStep, setActiveStep] = useState(defaultActiveStep);\r\n const { current: fieldGroups } = useRef<string[]>(Object.keys(fields).sort());\r\n\r\n return (\r\n <Container component=\"main\" style={{ display: hidden ? \"none\" : \"block\" }}>\r\n {hideHeader ? null : (\r\n <TabsFormTitle\r\n formDisplayLabel={formDisplayLabel}\r\n displayMode={displayMode}\r\n hideDisplayModeInTitle={hideDisplayModeInTitle}\r\n wrapperChild={wrapperChild}\r\n serverSentError={serverSentError}\r\n serverSentErrorDetail={serverSentErrorDetail}\r\n isSubmitting={isSubmitting}\r\n classes={classes}\r\n handleSubmit={handleSubmit}\r\n />\r\n )}\r\n\r\n <TabsRenderer\r\n formName={formName}\r\n fields={fields}\r\n fieldGroups={fieldGroups}\r\n formRenderConfig={formRenderConfig}\r\n activeStep={activeStep}\r\n setActiveStep={setActiveStep}\r\n />\r\n <div style={{ ...formStyle }}>\r\n <FieldsToRender\r\n fields={fields}\r\n fieldGroups={fieldGroups}\r\n formRenderConfig={formRenderConfig}\r\n activeStep={activeStep}\r\n tabsRenderer={children}\r\n />\r\n </div>\r\n </Container>\r\n );\r\n};\r\n\r\nexport const TabsFormTitle = ({\r\n formDisplayLabel,\r\n displayMode,\r\n hideDisplayModeInTitle,\r\n wrapperChild,\r\n serverSentError,\r\n serverSentErrorDetail,\r\n isSubmitting,\r\n classes,\r\n handleSubmit,\r\n}) => (\r\n <AppBar position=\"relative\" color=\"secondary\">\r\n <Toolbar variant=\"dense\">\r\n <Typography component=\"div\" variant=\"h6\">\r\n {formDisplayLabel}\r\n {Boolean(displayMode) && !Boolean(hideDisplayModeInTitle) ? (\r\n <Chip\r\n style={{ color: \"white\", marginLeft: \"8px\" }}\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n size=\"small\"\r\n label={`${displayMode} mode`}\r\n />\r\n ) : (\r\n \"\"\r\n )}\r\n </Typography>\r\n <div className={classes.formControlLabelSpacer} />\r\n {typeof wrapperChild === \"function\"\r\n ? wrapperChild({ isSubmitting, handleSubmit })\r\n : wrapperChild}\r\n </Toolbar>\r\n {!isSubmitting && Boolean(serverSentError) ? (\r\n <Alert\r\n severity=\"error\"\r\n errorMsg={serverSentError}\r\n errorDetail={serverSentErrorDetail}\r\n />\r\n ) : null}\r\n </AppBar>\r\n);\r\n\r\nexport const TabsRenderer = ({\r\n fields,\r\n formName,\r\n fieldGroups,\r\n formRenderConfig,\r\n activeStep,\r\n setActiveStep,\r\n}) => {\r\n const classes = useStyles();\r\n const defaultGroupName = \"DefaultGroup\";\r\n const excludedFields = useRecoilValue(formFieldsExcludedAtom(formName));\r\n const { t } = useTranslation();\r\n const errorWatcherFields = useRecoilValue(\r\n formFieldsErrorWatcherAtom(formName)\r\n );\r\n const fieldGroupsActiveStatus = fieldGroups.map((one) => {\r\n let groupName = defaultGroupName;\r\n if (typeof formRenderConfig.groups === \"object\") {\r\n groupName = t(formRenderConfig.groups[one]);\r\n }\r\n return {\r\n index: one,\r\n name: groupName,\r\n status: isGroupExcluded(formName, fields[one].fieldNames, excludedFields),\r\n hasError: isGroupHavingError(\r\n formName,\r\n fields[one].fieldNames,\r\n errorWatcherFields\r\n ),\r\n };\r\n });\r\n const filteredFieldGroups = fieldGroupsActiveStatus.filter(\r\n (one) => one.status\r\n );\r\n return (\r\n <Tabs\r\n value={Number(activeStep)}\r\n variant=\"scrollable\"\r\n scrollButtons=\"auto\"\r\n className={classes.root}\r\n >\r\n {filteredFieldGroups.map((field) => {\r\n return (\r\n <Tab\r\n value={Number(field.index)}\r\n key={field.name}\r\n label={field.name}\r\n onClick={() => setActiveStep(Number(field.index))}\r\n style={field.hasError ? { color: \"red\" } : {}}\r\n />\r\n );\r\n })}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport const FieldsToRender = ({\r\n fields,\r\n activeStep,\r\n fieldGroups,\r\n formRenderConfig,\r\n tabsRenderer,\r\n}) => {\r\n const steps = fieldGroups.map((one, index) => {\r\n const current = fields[one];\r\n current.fields[0] = cloneElement(current.fields[0], {\r\n isFieldFocused: index === activeStep ? true : false,\r\n });\r\n const hideMe = index !== Number(activeStep) ? { display: \"none\" } : {};\r\n return (\r\n <Grid\r\n key={one}\r\n container={true}\r\n spacing={formRenderConfig?.gridConfig?.container?.spacing ?? 2}\r\n direction={formRenderConfig?.gridConfig?.container?.direction ?? \"row\"}\r\n style={hideMe}\r\n >\r\n {current.fields}\r\n </Grid>\r\n );\r\n });\r\n return (\r\n <Fragment>\r\n {typeof tabsRenderer === \"function\" ? (\r\n tabsRenderer({ steps })\r\n ) : (\r\n <Suspense fallback={<div>Loading...</div>}>{steps}</Suspense>\r\n )}\r\n </Fragment>\r\n );\r\n};\r\n","import { ExtendedFieldMetaDataTypeOptional } from \"./types\";\r\nimport sub from \"date-fns/sub\";\r\n\r\nexport const extendedMetaData: ExtendedFieldMetaDataTypeOptional = {\r\n currency: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n FormatProps: {\r\n thousandSeparator: true,\r\n prefix: \"\",\r\n thousandsGroupStyle: \"lakh\",\r\n allowNegative: true,\r\n allowLeadingZeros: false,\r\n decimalScale: 2,\r\n isAllowed: (values) => {\r\n if (values?.value?.length > 10) {\r\n return false;\r\n }\r\n if (values.floatValue === 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n StartAdornment: \"৳\",\r\n enableNumWords: true,\r\n maxLength: 10,\r\n },\r\n currencyWithoutWords: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n FormatProps: {\r\n thousandSeparator: true,\r\n prefix: \"\",\r\n thousandsGroupStyle: \"lakh\",\r\n allowNegative: false,\r\n allowLeadingZeros: false,\r\n decimalScale: 2,\r\n isAllowed: (values) => {\r\n if (values?.value?.length > 10) {\r\n return false;\r\n }\r\n if (values.floatValue === 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n StartAdornment: \"৳\",\r\n enableNumWords: false,\r\n maxLength: 10,\r\n },\r\n dob: {\r\n render: {\r\n componentType: \"datePicker\",\r\n },\r\n //@ts-ignore\r\n schemaValidation: {\r\n type: \"date\",\r\n rules: [\r\n { name: \"typeError\", params: [\"Must be a valid date\"] },\r\n {\r\n name: \"max\",\r\n params: [\r\n sub(new Date(), { years: 18 }),\r\n \"minimum age must be 18 years\",\r\n ],\r\n },\r\n {\r\n name: \"min\",\r\n params: [\r\n sub(new Date(), { years: 100 }),\r\n \"maximum age must be 100 years\",\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n phoneNumber: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [\r\n { name: \"required\", params: [\"MobileNoisrequired\"] },\r\n { name: \"min\", params: [11, \"MobileNoshouldbe11digit\"] },\r\n { name: \"max\", params: [11, \"MobileNoshouldbe11digit\"] },\r\n ],\r\n },\r\n FormatProps: {\r\n format: \"###########\",\r\n allowNegative: false,\r\n allowLeadingZeros: true,\r\n isNumericString: true,\r\n },\r\n StartAdornment: \"+88\",\r\n },\r\n panCard: {\r\n render: {\r\n componentType: \"inputMask\",\r\n },\r\n fullWidth: true,\r\n MaskProps: {\r\n mask: \"aaaaa0000a\",\r\n prepare: function (str) {\r\n return str.toUpperCase();\r\n },\r\n lazy: true,\r\n },\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [\r\n { name: \"required\", params: [\"This Field is required\"] },\r\n {\r\n name: \"pancard\",\r\n params: [\"Please enter valid Pan Card Number\"],\r\n },\r\n ],\r\n },\r\n },\r\n panCardOptional: {\r\n render: {\r\n componentType: \"inputMask\",\r\n },\r\n MaskProps: {\r\n mask: \"aaaaa0000a\",\r\n prepare: function (str) {\r\n return str.toUpperCase();\r\n },\r\n lazy: true,\r\n },\r\n },\r\n aadharCard: {\r\n render: {\r\n componentType: \"inputMask\",\r\n },\r\n fullWidth: true,\r\n MaskProps: {\r\n mask: \"0000` 0000` 0000\",\r\n lazy: true,\r\n },\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [\r\n { name: \"required\", params: [\"This Field is required\"] },\r\n {\r\n name: \"aadhar\",\r\n params: [\"Please enter valid Aadhar Number\"],\r\n },\r\n ],\r\n },\r\n },\r\n rateOfInt: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n FormatProps: {\r\n suffix: \"%\",\r\n decimalScale: 2,\r\n placeholder: \"0\",\r\n fixedDecimalScale: true,\r\n allowNegative: false,\r\n allowEmptyFormatting: true,\r\n isAllowed: (values) => {\r\n //@ts-ignore\r\n if (values.floatValue <= 100) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n },\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [\r\n { name: \"typeError\", params: [\"This field is required\"] },\r\n { name: \"required\", params: [\"This field is required\"] },\r\n ],\r\n },\r\n },\r\n MonthlyEmiPayCurrency: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n FormatProps: {\r\n thousandSeparator: true,\r\n prefix: \"\",\r\n thousandsGroupStyle: \"lakh\",\r\n allowNegative: false,\r\n allowLeadingZeros: false,\r\n decimalScale: 0,\r\n maxLength: 13,\r\n isAllowed: (values) => {\r\n if (values.floatValue === null) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n StartAdornment: \"৳\",\r\n enableNumWords: true,\r\n },\r\n pincode: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [\r\n { name: \"required\", params: [\"Residence Pincode is required\"] },\r\n { name: \"min\", params: [6, \"Residence Pincode should be 6 digit.\"] },\r\n { name: \"max\", params: [6, \"Residence Pincode should be 6 digit.\"] },\r\n ],\r\n },\r\n FormatProps: {\r\n format: \"######\",\r\n isAllowed: (values) => {\r\n if (values.floatValue === 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n },\r\n futureDateNotAllowed: {\r\n render: {\r\n componentType: \"datePicker\",\r\n },\r\n //@ts-ignore\r\n schemaValidation: {\r\n type: \"date\",\r\n rules: [\r\n { name: \"typeError\", params: [\"Must be a valid date\"] },\r\n {\r\n name: \"max\",\r\n params: [new Date(), \"Future Date not allowed.\"],\r\n },\r\n ],\r\n },\r\n },\r\n minAge: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n schemaValidation: {\r\n type: \"number\",\r\n rules: [\r\n { name: \"required\", params: [\"Min Age is required\"] },\r\n { name: \"min\", params: [25, \"Min age should be 25 years\"] },\r\n ],\r\n },\r\n FormatProps: {\r\n format: \"##\",\r\n },\r\n },\r\n maxAge: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n schemaValidation: {\r\n type: \"number\",\r\n rules: [\r\n { name: \"required\", params: [\"Max Age is required\"] },\r\n { name: \"max\", params: [65, \"Max age should be 65 years\"] },\r\n ],\r\n },\r\n FormatProps: {\r\n format: \"##\",\r\n },\r\n },\r\n rateOfIntWithoutValidation: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n FormatProps: {\r\n suffix: \"%\",\r\n decimalScale: 2,\r\n fixedDecimalScale: true,\r\n allowNegative: true,\r\n allowEmptyFormatting: true,\r\n isAllowed: (values) => {\r\n //@ts-ignore\r\n if (values.floatValue >= 999.99) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n },\r\n\r\n rateOfIntUptoThreeDigits: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n FormatProps: {\r\n suffix: \"%\",\r\n decimalScale: 2,\r\n fixedDecimalScale: true,\r\n allowNegative: true,\r\n allowEmptyFormatting: true,\r\n isAllowed: (values) => {\r\n //@ts-ignore\r\n if (values.floatValue < 999.99) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n },\r\n\r\n squareFeetFormat: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n FormatProps: {\r\n thousandSeparator: true,\r\n thousandsGroupStyle: \"lakh\",\r\n allowNegative: false,\r\n allowLeadingZeros: false,\r\n isAllowed: (values) => {\r\n if (values?.value?.length > 20) {\r\n return false;\r\n }\r\n if (values.floatValue === 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n maxLength: 20,\r\n showMaxLength: false,\r\n },\r\n currencyWithLeadingZeros: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n FormatProps: {\r\n thousandSeparator: true,\r\n prefix: \"\",\r\n thousandsGroupStyle: \"lakh\",\r\n allowNegative: true,\r\n allowLeadingZeros: false,\r\n decimalScale: 2,\r\n isAllowed: (values) => {\r\n if (values?.value?.length > 10) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n StartAdornment: \"৳\",\r\n enableNumWords: true,\r\n maxLength: 10,\r\n },\r\n pincodeNoValidation: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n FormatProps: {\r\n format: \"######\",\r\n isAllowed: (values) => {\r\n if (values.floatValue === 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n },\r\n amountField: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n className: \"textInputFromRight\",\r\n FormatProps: {\r\n thousandSeparator: true,\r\n prefix: \"\",\r\n thousandsGroupStyle: \"lakh\",\r\n allowNegative: false,\r\n allowLeadingZeros: false,\r\n decimalScale: 2,\r\n fixedDecimalScale: true,\r\n placeholder: \"0.00\",\r\n isAllowed: (values) => {\r\n if (values?.value?.length > 15) {\r\n return false;\r\n }\r\n // if (values.floatValue === 0) {\r\n // return false;\r\n // }\r\n return true;\r\n },\r\n },\r\n enableNumWords: false,\r\n StartAdornment: \"৳\",\r\n maxLength: 15,\r\n showMaxLength: false,\r\n },\r\n accountNumber: {\r\n render: {\r\n componentType: \"textField\",\r\n },\r\n fullWidth: true,\r\n inputProps: {\r\n onChange: function (event) {\r\n const inputValue = event.target.value;\r\n const text = inputValue.replace(/[^0-9]/g, \"\");\r\n event.target.value = text;\r\n },\r\n },\r\n maxLength: 20,\r\n showMaxLength: true,\r\n },\r\n loginID: {\r\n render: {\r\n componentType: \"textField\",\r\n },\r\n fullWidth: true,\r\n inputProps: {\r\n onChange: function (event) {\r\n const inputValue = event.target.value;\r\n const text = inputValue.replace(/[^a-zA-Z0-9]/g, \"\");\r\n event.target.value = text;\r\n },\r\n },\r\n maxLength: 16,\r\n showMaxLength: true,\r\n },\r\n Percentage: {\r\n render: {\r\n componentType: \"numberFormat\",\r\n },\r\n className: \"textInputFromRight\",\r\n FormatProps: {\r\n allowNegative: false,\r\n allowLeadingZeros: true,\r\n decimalScale: 2,\r\n isAllowed: (values) => {\r\n if (values?.value?.length > 5) {\r\n return false;\r\n }\r\n if (parseFloat(values?.value) > 100) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n maxLength: 5,\r\n showMaxLength: true,\r\n EndAdornment: \"%\",\r\n },\r\n};\r\n","import { forwardRef, Suspense, useImperativeHandle } from \"react\";\r\n// import DateFnsUtils from \"@date-io/date-fns\";\r\n// import { MuiPickersUtilsProvider } from \"@material-ui/pickers\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport { FormContext, useForm } from \"packages/form\";\r\nimport { cloneDeep } from \"lodash-es\";\r\nimport { renderFieldsByGroup } from \"./utils/groupWiserenderer\";\r\nimport {\r\n constructInitialValue,\r\n constructInitialValuesForArrayFields,\r\n} from \"./utils/constructINITValues\";\r\nimport { constructYupSchema } from \"./utils/constructYupSchema\";\r\nimport { attachMethodsToMetaData } from \"./utils/attachMethodsToMetaData\";\r\nimport { extendFieldTypes } from \"./utils/extendedFieldTypes\";\r\nimport { MoveSequenceToRender } from \"./utils/fixSequenceInMetaData\";\r\nimport { MetaDataType, FormWrapperProps } from \"./types\";\r\nimport { StepperWrapper } from \"./stepperForm\";\r\nimport { SimpleFormWrapper } from \"./simpleForm\";\r\nimport { TabsFormWrapper } from \"./tabsForm\";\r\nimport { extendedMetaData } from \"./extendedTypes\";\r\nimport { useStyles } from \"./style\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport const FormWrapper = forwardRef<FormWrapperProps, any>(\r\n (\r\n {\r\n metaData: freshMetaData,\r\n initialValues,\r\n onSubmitHandler = () => console.log(\"onSubmitHandler is not passed\"),\r\n hidden = false,\r\n displayMode,\r\n hideTitleBar = false,\r\n hideDisplayModeInTitle = false,\r\n formStyle = {\r\n background: \"white\",\r\n height: \"calc(100vh - 230px)\",\r\n overflowY: \"auto\",\r\n overflowX: \"hidden\",\r\n },\r\n controlsAtBottom = false,\r\n children,\r\n formState,\r\n defaultActiveStep,\r\n hideHeader = false,\r\n containerstyle = { padding: \"10px\" },\r\n onFormButtonClickHandel = (id) => {},\r\n onFormDataChange = () => {},\r\n },\r\n ref\r\n ) => {\r\n const { t } = useTranslation();\r\n //this line is very important to preserve our metaData across render - deep clone hack\r\n let metaData = cloneDeep(freshMetaData) as MetaDataType;\r\n //let metaData = JSON.parse(JSON.stringify(freshMetaData)) as MetaDataType;\r\n //console.log(metaData);\r\n metaData = extendFieldTypes(metaData, extendedMetaData, t);\r\n //console.log(metaData);\r\n metaData = attachMethodsToMetaData(metaData);\r\n metaData = MoveSequenceToRender(metaData);\r\n const groupWiseFields = renderFieldsByGroup(\r\n metaData,\r\n onFormButtonClickHandel,\r\n onFormDataChange\r\n );\r\n const initValues = constructInitialValue(metaData.fields, initialValues);\r\n const defaultArrayFieldInitValues = constructInitialValuesForArrayFields(\r\n metaData.fields\r\n );\r\n const yupValidationSchema = constructYupSchema(metaData.fields);\r\n const formName = metaData.form.name ?? \"NO_NAME\";\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterDateFns}>\r\n <FormContext.Provider\r\n value={{\r\n formName: formName,\r\n resetFieldOnUnmount: Boolean(metaData.form.resetFieldOnUnmount),\r\n validationRun: metaData.form.validationRun,\r\n initialValues: initValues,\r\n defaultArrayFieldValues: defaultArrayFieldInitValues,\r\n validationSchema: yupValidationSchema,\r\n formState: {\r\n formCode: metaData.form.name,\r\n refID: metaData.form.refID,\r\n ...metaData.form?.formState,\r\n ...formState,\r\n },\r\n }}\r\n >\r\n <ChildFormWrapper\r\n //@ts-ignore\r\n ref={ref}\r\n formName={formName}\r\n formDisplayLabel={t(metaData?.form?.label ?? \"NO_LABEL\")}\r\n formRenderType={metaData.form.render.renderType ?? \"simple\"}\r\n formRenderConfig={metaData.form.render}\r\n submitFn={onSubmitHandler}\r\n hidden={hidden}\r\n displayMode={displayMode}\r\n groupWiseFields={groupWiseFields}\r\n hideTitleBar={hideTitleBar}\r\n hideDisplayModeInTitle={hideDisplayModeInTitle}\r\n wrapperChild={children}\r\n formStyle={formStyle}\r\n controlsAtBottom={controlsAtBottom}\r\n defaultActiveStep={defaultActiveStep}\r\n hideHeader={hideHeader}\r\n containerstyle={containerstyle}\r\n />\r\n </FormContext.Provider>\r\n </LocalizationProvider>\r\n );\r\n }\r\n);\r\n\r\nconst ChildFormWrapper = forwardRef<any, any>(\r\n (\r\n {\r\n formName,\r\n formDisplayLabel,\r\n formRenderType,\r\n formRenderConfig,\r\n submitFn,\r\n hidden,\r\n displayMode,\r\n groupWiseFields,\r\n hideTitleBar,\r\n hideDisplayModeInTitle,\r\n wrapperChild,\r\n formStyle,\r\n controlsAtBottom,\r\n defaultActiveStep,\r\n hideHeader,\r\n containerstyle = {},\r\n },\r\n ref\r\n ) => {\r\n const {\r\n handleSubmit,\r\n handleSubmitPartial,\r\n serverSentError,\r\n serverSentErrorDetail,\r\n isSubmitting,\r\n getFieldData,\r\n ...formState\r\n } = useForm({\r\n onSubmit: submitFn,\r\n readOnly: displayMode === \"view\" ? true : false,\r\n });\r\n const classes = useStyles();\r\n //this is useful in cases where we want to merge this form with other forms, but we should handle form submission\r\n //and only get form values\r\n useImperativeHandle(ref, () => ({\r\n handleSubmit: handleSubmit,\r\n formDisplayLabel: formDisplayLabel,\r\n getFieldData: getFieldData,\r\n }));\r\n return formRenderType === \"stepper\" ? (\r\n <StepperWrapper\r\n key={`${formName}-grouped-stepper`}\r\n fields={groupWiseFields}\r\n formRenderConfig={formRenderConfig}\r\n formName={formName}\r\n handleSubmit={handleSubmit}\r\n handleSubmitPartial={handleSubmitPartial}\r\n formDisplayLabel={formDisplayLabel}\r\n hidden={hidden}\r\n defaultActiveStep={defaultActiveStep}\r\n classes={classes}\r\n wrapperChild={wrapperChild}\r\n isSubmitting={isSubmitting}\r\n serverSentError={serverSentError}\r\n serverSentErrorDetail={serverSentErrorDetail}\r\n />\r\n ) : formRenderType === \"tabs\" ? (\r\n <TabsFormWrapper\r\n key={`${formName}-grouped-tabs`}\r\n fields={groupWiseFields}\r\n formRenderConfig={formRenderConfig}\r\n formName={formName}\r\n formStyle={formStyle}\r\n formDisplayLabel={formDisplayLabel}\r\n hidden={hidden}\r\n displayMode={displayMode}\r\n hideDisplayModeInTitle={hideDisplayModeInTitle}\r\n wrapperChild={wrapperChild}\r\n serverSentError={serverSentError}\r\n serverSentErrorDetail={serverSentErrorDetail}\r\n isSubmitting={isSubmitting}\r\n classes={classes}\r\n handleSubmit={handleSubmit}\r\n defaultActiveStep={defaultActiveStep}\r\n hideHeader={hideHeader}\r\n >\r\n {({ steps }) => (\r\n <div>\r\n <br />\r\n <Suspense fallback={<div>Loading...</div>}>{steps}</Suspense>\r\n </div>\r\n )}\r\n </TabsFormWrapper>\r\n ) : formRenderType === \"simple\" ? (\r\n <SimpleFormWrapper\r\n formStyle={formStyle}\r\n fields={groupWiseFields}\r\n formRenderConfig={formRenderConfig}\r\n formName={formName}\r\n formDisplayLabel={formDisplayLabel}\r\n hidden={hidden}\r\n displayMode={displayMode}\r\n hideDisplayModeInTitle={hideDisplayModeInTitle}\r\n wrapperChild={wrapperChild}\r\n serverSentError={serverSentError}\r\n serverSentErrorDetail={serverSentErrorDetail}\r\n isSubmitting={isSubmitting}\r\n classes={classes}\r\n handleSubmit={handleSubmit}\r\n controlsAtBottom={controlsAtBottom}\r\n hideHeader={hideHeader}\r\n containerstyle={containerstyle}\r\n />\r\n ) : (\r\n <div>RenderType {formRenderType} not available</div>\r\n );\r\n }\r\n);\r\n","import React, { createContext, FC } from \"react\";\nimport { GridContextType } from \"./types\";\n\nexport const GridContext = createContext<GridContextType | null>(null);\n\nexport const GridProvider: FC<GridContextType> = ({\n gridCode,\n getGridData,\n children,\n}) => {\n if (typeof getGridData !== \"function\") {\n return <div>Invalid Grid FNS passed</div>;\n }\n return (\n <GridContext.Provider value={{ getGridData, gridCode }}>\n {children}\n </GridContext.Provider>\n );\n};\n","import React, { useRef, Fragment } from \"react\";\nimport TableSortLabel from \"@mui/material/TableSortLabel\";\nimport { useDrag, useDrop } from \"react-dnd\";\n\nexport const DefaultHeaderColumnRenderer = ({\n column,\n visibleColumns,\n setColumnOrder,\n allowColumnReordering,\n}) => {\n const [{ isDragging }, drag] = useDrag({\n // item: { type: \"Column\" },\n type: \"Column\",\n collect: (monitor) => ({ isDragging: !!monitor.isDragging() }),\n end: (_, monitor: any) => {\n if (monitor.didDrop()) {\n const { id } = monitor.getDropResult();\n const columns = visibleColumns.map((one) => one.id);\n const toIndex = columns.indexOf(id);\n const fromIndex = columns.indexOf(column.id);\n var b = columns[toIndex];\n columns[toIndex] = columns[fromIndex];\n columns[fromIndex] = b;\n setColumnOrder(columns);\n }\n },\n canDrag: () => {\n return allowColumnReordering;\n },\n });\n const [{ isOver }, drop] = useDrop({\n accept: \"Column\",\n drop: () => ({ id: column.id }),\n collect: (monitor) => ({\n isOver: allowColumnReordering && !!monitor.isOver(),\n }),\n canDrop: () => {\n return allowColumnReordering;\n },\n });\n const dragDropRef = useRef(null);\n drag(drop(dragDropRef));\n return (\n <Fragment>\n <TableSortLabel\n active={column.isSorted}\n direction={column.isSortedDesc ? \"desc\" : \"asc\"}\n hideSortIcon={true}\n ref={dragDropRef}\n {...column.getSortByToggleProps([\n {\n style: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n display: \"flex\",\n color: \"#0063a3\",\n fontSize: \"1 rem\",\n fontWeight: \"600\",\n opacity: isDragging || isOver ? 0.5 : 1,\n cursor: isDragging ? \"move\" : \"default\",\n },\n },\n ])}\n >\n <span\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n paddingRight: \"10px\",\n }}\n >\n {column.columnName}\n </span>\n </TableSortLabel>\n <div\n {...column.getResizerProps([\n {\n style: {\n minHeight: \"34px\",\n opacity: 1,\n color: \"rgba(224, 224, 224, 1)\",\n right: \"0px\",\n display: \"flex\",\n zIndex: 100,\n position: \"absolute\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n },\n },\n ])}\n >\n <svg\n focusable=\"false\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n data-testid=\"SeparatorIcon\"\n style={{\n color: \"inherit\",\n userSelect: \"none\",\n width: \"1em\",\n height: \"1em\",\n display: \"inline-block\",\n fill: \"currentColor\",\n flexShrink: 0,\n transition: \"fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\n fontSize: \"20px\",\n }}\n >\n <path d=\"M11 19V5h2v14z\"></path>\n </svg>\n </div>\n </Fragment>\n );\n};\n","import Checkbox from \"@mui/material/Checkbox\";\nimport TableCell from \"@mui/material/TableCell\";\nimport React from \"react\";\n\nexport const useCheckboxColumn = (visible) => (hooks) => {\n if (Boolean(visible)) {\n hooks.visibleColumns.push((columns) => [\n {\n id: \"selectionCheckbox\",\n Header: CheckboxHeaderRenderer,\n Cell: CheckboxCellRenderer,\n minWidth: 40,\n width: 40,\n maxWidth: 40,\n //sticky: true,\n },\n ...columns,\n ]);\n }\n};\n\n/*\n\n*/\n\nconst CheckboxCellRenderer = ({ row, cell }) => {\n return (\n <TableCell\n component=\"div\"\n variant=\"head\"\n {...cell.getCellProps([\n {\n style: {\n display: \"block\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n padding: \"0px 10px\",\n lineHeight: \"34px\",\n },\n },\n ])}\n >\n <Checkbox\n size=\"small\"\n {...row.getToggleRowSelectedProps([\n {\n style: {\n padding: 0,\n position: \"sticky\",\n background: \"white\",\n left: 0,\n zIndex: 1,\n },\n },\n ])}\n />\n </TableCell>\n );\n};\n\nconst CheckboxHeaderRenderer = ({ getToggleAllPageRowsSelectedProps }) => {\n return (\n <Checkbox\n size=\"small\"\n {...getToggleAllPageRowsSelectedProps([\n {\n style: {\n padding: 0,\n position: \"sticky\",\n background: \"white\",\n left: 0,\n zIndex: 1,\n },\n },\n ])}\n />\n );\n};\n","import React, { forwardRef } from \"react\";\nimport Typography from \"@mui/material/Typography\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport IconButton from \"@mui/material/IconButton\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport { makeStyles } from \"@mui/styles\";\nimport { Theme } from \"@mui/material/styles\";\nimport { ColumnVisibility } from \"./columnVisibility\";\nimport { RenderActions } from \"./tableActionToolbar\";\nimport { TableFilterComponent } from \"./tableFilterComponent\";\nimport { useAutoRefresh } from \"../utils/autoRefresh\";\nimport { CircularProgressWithLabel } from \"../utils/circularProgressWithLabel\";\n\nconst useStyles = makeStyles((theme: Theme) => ({\n root: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n background: \"var(--theme-color1)\",\n },\n title: {\n flex: \"1 1 100%\",\n color: \"var(--white)\",\n letterSpacing: \"1px\",\n fontSize: \"2rem\",\n },\n refreshiconhover: {\n // \"&:hover\": {\n // backgroundColor: \"var(--theme-color2)\",\n // color: \"var(--theme-color1)\",\n // },\n },\n}));\n\nexport const TableHeaderToolbar = forwardRef<any, any>(\n (\n {\n dense,\n label,\n visibleColumns,\n defaultHiddenColumns,\n allowColumnHiding,\n setGridAction,\n selectedFlatRows,\n alwaysAvailableAction,\n allowFilter,\n setAllFilters,\n gotoPage,\n setSortBy,\n filterMeta,\n filters,\n autoRefreshInterval,\n },\n ref,\n ) => {\n const classes = useStyles();\n const { progress, enabled, intervalElapsed, pause, resume } =\n useAutoRefresh(\n //@ts-ignore\n ref?.current?.fetchData,\n autoRefreshInterval,\n );\n\n return (\n <Toolbar className={classes.root} variant={dense ? \"dense\" : \"regular\"}>\n <Typography\n className={classes.title}\n color=\"inherit\"\n variant={\"h6\"}\n component=\"div\"\n >\n {label}\n </Typography>\n <RenderActions\n key=\"alwaysRender\"\n actions={alwaysAvailableAction ?? []}\n setAction={setGridAction}\n selectedRows={selectedFlatRows}\n />\n {allowFilter ? (\n <TableFilterComponent\n setAllFilters={setAllFilters}\n filters={filters}\n filterMeta={filterMeta}\n gotoPage={gotoPage}\n setSortBy={setSortBy}\n classes={classes}\n />\n ) : null}\n <IconButton\n aria-label=\"refresh\"\n aria-controls=\"button\"\n aria-haspopup=\"false\"\n //@ts-ignore\n onClick={() => ref?.current?.fetchData?.()}\n color=\"primary\"\n className={classes.refreshiconhover}\n >\n <RefreshIcon />\n </IconButton>\n {enabled ? (\n <CircularProgressWithLabel\n variant=\"determinate\"\n value={progress}\n interval={intervalElapsed}\n pause={pause}\n resume={resume}\n />\n ) : null}\n\n {allowColumnHiding ? (\n <ColumnVisibility\n visibleColumns={visibleColumns}\n defaultHiddenColumns={defaultHiddenColumns}\n classes={classes}\n />\n ) : null}\n </Toolbar>\n );\n },\n);\n","import React, {\r\n useState,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from \"react\";\r\nimport {\r\n useTable,\r\n usePagination,\r\n useSortBy,\r\n useResizeColumns,\r\n useBlockLayout,\r\n useRowSelect,\r\n useFilters,\r\n useColumnOrder,\r\n useAsyncDebounce,\r\n} from \"react-table\";\r\nimport Paper from \"@mui/material/Paper\";\r\nimport LinearProgress from \"@mui/material/LinearProgress\";\r\nimport TableContainer from \"@mui/material/TableContainer\";\r\nimport Table from \"@mui/material/Table\";\r\nimport TableBody from \"@mui/material/TableBody\";\r\nimport TableRow from \"@mui/material/TableRow\";\r\nimport TablePagination from \"@mui/material/TablePagination\";\r\nimport { TableHeaderToolbar } from \"./tableHeaderToolbar\";\r\nimport { StickyTableHead } from \"./stickyTableHead\";\r\nimport { MyTableRow } from \"./focusableTableRow\";\r\nimport { TablePaginationActions } from \"./tablePaginationToolbar\";\r\nimport { TableActionToolbar, ActionContextMenu } from \"./tableActionToolbar\";\r\nimport { LinearProgressBarSpacer } from \"./linerProgressBarSpacer\";\r\nimport { CustomBackdrop } from \"./backdrop\";\r\nimport { useCheckboxColumn } from \"./components\";\r\nimport { HeaderCellWrapper } from \"./headerCellWrapper\";\r\nimport { filterAction } from \"./utils/filterAction\";\r\nimport { TableFilterStatusBar } from \"./tableFilterStatusBar\";\r\nimport { useAutoRefreshControls } from \"components/utils/autoRefresh\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport const DataGrid = forwardRef<any, any>(\r\n (\r\n {\r\n label,\r\n dense,\r\n columns,\r\n defaultColumn,\r\n setData,\r\n data,\r\n onFetchData,\r\n loading,\r\n getRowId,\r\n totalRecords: controlledTotalRecords,\r\n pageCount: controlledPageCount,\r\n pageSizes,\r\n defaultPageSize,\r\n defaultSortOrder,\r\n defaultFilter,\r\n defaultHiddenColumns,\r\n allowColumnReordering,\r\n allowColumnHiding,\r\n allowKeyboardNavigation,\r\n setGridAction,\r\n multipleActions,\r\n singleActions,\r\n doubleClickAction,\r\n alwaysAvailableAction,\r\n allowFilter,\r\n allowRowSelection,\r\n filterMeta,\r\n autoRefreshInterval,\r\n authState,\r\n },\r\n ref,\r\n ) => {\r\n //@ts-ignore\r\n const {\r\n getTableProps,\r\n getTableBodyProps,\r\n headerGroups,\r\n prepareRow,\r\n page,\r\n selectedFlatRows,\r\n gotoPage,\r\n setPageSize,\r\n state: tableState,\r\n //setAllFilters,\r\n setSortBy,\r\n columns: availableColumns,\r\n } = useTable(\r\n {\r\n columns,\r\n defaultColumn,\r\n data,\r\n getRowId,\r\n initialState: {\r\n pageIndex: 0,\r\n pageSize: defaultPageSize,\r\n hiddenColumns: defaultHiddenColumns,\r\n sortBy: defaultSortOrder,\r\n //filters: defaultFilter,\r\n },\r\n manualPagination: true,\r\n pageCount: controlledPageCount,\r\n autoResetPage: false,\r\n manualSortBy: true,\r\n autoResetSortBy: false,\r\n manualFilters: true,\r\n autoResetFilters: false,\r\n allowColumnReordering: allowColumnReordering,\r\n singleActions,\r\n setGridAction,\r\n },\r\n useColumnOrder,\r\n useFilters,\r\n useSortBy,\r\n usePagination,\r\n useRowSelect,\r\n useResizeColumns,\r\n useBlockLayout,\r\n useCheckboxColumn(allowRowSelection),\r\n );\r\n const [filters, setAllFilters] = useState(defaultFilter);\r\n const { t } = useTranslation();\r\n singleActions = filterAction(singleActions, selectedFlatRows, authState);\r\n multipleActions = filterAction(\r\n multipleActions,\r\n selectedFlatRows,\r\n authState,\r\n );\r\n\r\n const { pageIndex, pageSize, sortBy /*,filters*/ } = tableState;\r\n const onFetchDataDebounced = useAsyncDebounce(onFetchData, 500);\r\n //loading = true;\r\n const tbodyRef = useRef(null);\r\n const [contextMenuPosition, setContextMenuPosition] = useState<{\r\n mouseX: number;\r\n mouseY: number;\r\n } | null>(null);\r\n const [contextMenuRow, setContextMenuRow] = useState<null | any>(null);\r\n const [contextMenuSelectedRowId, setContextMenuSelectedRowId] = useState<\r\n string | null\r\n >(null);\r\n const handleContextMenuClose = () => {\r\n setContextMenuRow(null);\r\n setContextMenuPosition(null);\r\n setContextMenuSelectedRowId(null);\r\n };\r\n const handleContextMenuOpen = (row) => (e) => {\r\n e.preventDefault();\r\n setContextMenuRow(row);\r\n setContextMenuSelectedRowId(row?.id);\r\n setContextMenuPosition(\r\n contextMenuPosition === null\r\n ? { mouseX: e.clientX - 2, mouseY: e.clientY - 4 }\r\n : null,\r\n );\r\n };\r\n const handleRowDoubleClickAction = (row) => (e) => {\r\n e.preventDefault();\r\n let result = filterAction(doubleClickAction, [row], authState, true);\r\n if (result === undefined) {\r\n return;\r\n }\r\n setGridAction({\r\n name: doubleClickAction.actionName,\r\n rows: [\r\n {\r\n data: row?.original,\r\n id: row?.id,\r\n },\r\n ],\r\n });\r\n };\r\n\r\n const handleKeyDown = (event, row) => {\r\n event.stopPropagation();\r\n //@ts-ignore\r\n const currentRow = tbodyRef.current?.children.namedItem(row.id);\r\n //@ts-ignore\r\n let rowToFocus;\r\n switch (event.keyCode) {\r\n case 38:\r\n rowToFocus = currentRow?.previousElementSibling;\r\n if (rowToFocus !== null) {\r\n rowToFocus?.focus();\r\n event.preventDefault();\r\n //@ts-ignore\r\n if (rowToFocus.offsetTop > tbodyRef.current?.offsetHeight) {\r\n console.log(\"need to scroll here\");\r\n }\r\n }\r\n break;\r\n case 40:\r\n rowToFocus = currentRow?.nextElementSibling;\r\n if (rowToFocus !== null) {\r\n rowToFocus?.focus();\r\n event.preventDefault();\r\n }\r\n break;\r\n case 32:\r\n row.toggleRowSelected();\r\n event.preventDefault();\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n const { resume, pause } = useAutoRefreshControls();\r\n\r\n useEffect(() => {\r\n onFetchDataDebounced({ pageIndex, pageSize, sortBy, filters });\r\n }, [onFetchDataDebounced, pageIndex, pageSize, sortBy, filters]);\r\n\r\n //To allow outer component to refresh grid\r\n useImperativeHandle(ref, () => ({\r\n fetchData: () =>\r\n onFetchDataDebounced({ pageIndex, pageSize, sortBy, filters }),\r\n setData: setData,\r\n resume: resume,\r\n pause: pause,\r\n }));\r\n\r\n const handleChangePage = (_, newPage) => {\r\n gotoPage(newPage);\r\n };\r\n const handleChangeRowsPerPage = (event) => {\r\n setPageSize(Number(event.target.value));\r\n };\r\n //console.log(\"TableHeaderToolbar=>\", filterMeta);\r\n return (\r\n <Paper\r\n style={{\r\n width: \"100%\",\r\n background: \"var(--white)\",\r\n }}\r\n >\r\n <TableHeaderToolbar\r\n ref={ref}\r\n label={label}\r\n dense={dense}\r\n visibleColumns={availableColumns}\r\n defaultHiddenColumns={defaultHiddenColumns}\r\n allowColumnHiding={allowColumnHiding}\r\n alwaysAvailableAction={alwaysAvailableAction}\r\n setGridAction={setGridAction}\r\n selectedFlatRows={selectedFlatRows}\r\n allowFilter={allowFilter}\r\n setAllFilters={setAllFilters}\r\n gotoPage={gotoPage}\r\n setSortBy={setSortBy}\r\n filters={filters}\r\n filterMeta={filterMeta}\r\n autoRefreshInterval={autoRefreshInterval}\r\n />\r\n <TableActionToolbar\r\n dense={dense}\r\n selectedFlatRows={selectedFlatRows}\r\n multipleActions={multipleActions}\r\n singleActions={singleActions}\r\n setGridAction={setGridAction}\r\n />\r\n <ActionContextMenu\r\n selectedFlatRows={selectedFlatRows}\r\n contextMenuRow={contextMenuRow}\r\n multipleActions={multipleActions}\r\n singleActions={singleActions}\r\n setGridAction={setGridAction}\r\n mouseX={contextMenuPosition?.mouseX ?? null}\r\n mouseY={contextMenuPosition?.mouseY ?? null}\r\n handleClose={handleContextMenuClose}\r\n authState={authState}\r\n />\r\n <TableFilterStatusBar\r\n dense={dense}\r\n setAllFilters={setAllFilters}\r\n filters={filters}\r\n gotoPage={gotoPage}\r\n setSortBy={setSortBy}\r\n />\r\n {loading ? (\r\n <LinearProgress color=\"secondary\" style={{ marginTop: \"1px\" }} />\r\n ) : (\r\n <LinearProgressBarSpacer />\r\n )}\r\n <TableContainer\r\n style={{\r\n position: \"relative\",\r\n display: \"inline-block\",\r\n overflow: \"auto\",\r\n maxHeight: \"calc(100vh - 33*8px)\",\r\n minHeight: \"calc(100vh - 33*8px)\",\r\n borderBottom: \"1px solid rgba(133, 130, 130, 0.8)\",\r\n }}\r\n >\r\n <Table\r\n component=\"div\"\r\n {...getTableProps()}\r\n size={dense ? \"small\" : \"medium\"}\r\n >\r\n {/*@ts-ignore*/}\r\n <StickyTableHead component=\"div\">\r\n {headerGroups.map((headerGroup) => {\r\n return (\r\n <TableRow\r\n component=\"div\"\r\n {...headerGroup.getHeaderGroupProps()}\r\n >\r\n {headerGroup.headers.map((column) => {\r\n return (\r\n <HeaderCellWrapper\r\n column={column}\r\n key={column.getHeaderProps().key}\r\n >\r\n {column.render(\"Header\")}\r\n </HeaderCellWrapper>\r\n );\r\n })}\r\n </TableRow>\r\n );\r\n })}\r\n </StickyTableHead>\r\n <TableBody\r\n component=\"div\"\r\n ref={tbodyRef}\r\n {...getTableBodyProps([\r\n {\r\n style: {\r\n display: \"block\",\r\n },\r\n },\r\n ])}\r\n >\r\n {page.length <= 0 && loading === false ? (\r\n <div\r\n style={{\r\n height: \"calc(100vh - 36*10px)\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n marginLeft: \"450px\",\r\n fontStyle: \"italic\",\r\n color: \"rgba(133, 130, 130, 0.8)\",\r\n }}\r\n >\r\n {t(\"Nodatafound\")}\r\n </div>\r\n ) : null}\r\n {page.map((row, index) => {\r\n prepareRow(row);\r\n const rightClickHandler = handleContextMenuOpen(row);\r\n const thisRowDblClickHandler = handleRowDoubleClickAction(row);\r\n return (\r\n <MyTableRow\r\n {...row.getRowProps()}\r\n id={row.id}\r\n tabIndex={0}\r\n component=\"div\"\r\n selected={\r\n row.isSelected || contextMenuSelectedRowId === row.id\r\n }\r\n onKeyDown={\r\n allowKeyboardNavigation\r\n ? (e) => handleKeyDown(e, row)\r\n : undefined\r\n }\r\n onContextMenu={rightClickHandler}\r\n onDoubleClick={\r\n Boolean(doubleClickAction)\r\n ? thisRowDblClickHandler\r\n : undefined\r\n }\r\n >\r\n {row.cells.map((cell) => {\r\n const { key } = cell.getCellProps();\r\n return cell.render(\"Cell\", { key });\r\n })}\r\n </MyTableRow>\r\n );\r\n })}\r\n </TableBody>\r\n </Table>\r\n <CustomBackdrop open={loading} />\r\n </TableContainer>\r\n <TablePagination\r\n style={{ display: \"flex\" }}\r\n variant=\"body\"\r\n component=\"div\"\r\n rowsPerPageOptions={pageSizes}\r\n colSpan={3}\r\n count={controlledTotalRecords}\r\n rowsPerPage={Number(pageSize)}\r\n page={Number(pageIndex)}\r\n onPageChange={handleChangePage}\r\n onRowsPerPageChange={handleChangeRowsPerPage}\r\n ActionsComponent={TablePaginationActions}\r\n />\r\n </Paper>\r\n );\r\n },\r\n);\r\n","import React, {\n useState,\n useMemo,\n useCallback,\n useRef,\n useContext,\n forwardRef,\n} from \"react\";\nimport { useSnackbar } from \"notistack\";\nimport { GridMetaDataType } from \"./types\";\nimport { formatSortBy, formatFilterBy } from \"./utils\";\nimport { GridContext } from \"./context\";\nimport { DefaultHeaderColumnRenderer } from \"./components\";\nimport { DataGrid } from \"./grid\";\n\ninterface GridControllerType {\n metaData: GridMetaDataType;\n}\n\nexport const GirdController = forwardRef<GridControllerType, any>(\n (\n {\n metaData,\n defaultFilter,\n defaultSortOrder,\n dataTransformer,\n autoRefreshInterval,\n authState,\n },\n ref,\n ) => {\n const context = useContext(GridContext);\n const { enqueueSnackbar } = useSnackbar();\n /* eslint-disable react-hooks/exhaustive-deps */\n //console.log(metaData);\n const columns = useMemo(() => metaData.columns, []);\n const filterMeta = useMemo(() => metaData.filters, []);\n const defaultColumn = useMemo(\n () => ({\n width: 150,\n maxWidth: 400,\n minWidth: 50,\n Header: DefaultHeaderColumnRenderer,\n }),\n [],\n );\n const myDefaultFilter = useMemo(() => defaultFilter, []);\n const myDefaultSortOrder = useMemo(() => defaultSortOrder, []);\n const getRowId = useCallback(\n (row) => row[metaData?.gridConfig?.rowIdColumn],\n [metaData?.gridConfig?.rowIdColumn],\n );\n\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState([]);\n const [totalRecords, setTotalRecords] = useState(0);\n const [pageCount, setPageCount] = useState(0);\n const fetchIdCounterRef = useRef(0);\n\n const fetchData = useCallback(\n ({ pageSize, pageIndex, sortBy, filters }) => {\n setLoading(true);\n const currentFetchId = ++fetchIdCounterRef.current;\n const startRow = Number(pageSize) * Number(pageIndex) + 1;\n const endRow = Number(startRow) + Number(pageSize) - 1;\n let childFilter = formatFilterBy(filters);\n context\n ?.getGridData(startRow, endRow, formatSortBy(sortBy), childFilter)\n .then((result) => {\n if (currentFetchId === fetchIdCounterRef.current) {\n //console.log(\"getGridData=>\", result);\n if (result.status === \"0\") {\n setData(dataTransformer(result?.data?.rows ?? []));\n setPageCount(\n Math.ceil(\n Number(result?.data?.total_count ?? 1) / Number(pageSize),\n ),\n );\n setTotalRecords(Number(result?.data?.total_count ?? 1));\n setLoading(false);\n } else {\n enqueueSnackbar(\n result?.data?.error_msg ??\n \"Unknown error occured while fetching data\",\n {\n variant: \"error\",\n },\n );\n setLoading(false);\n }\n }\n })\n .catch((e) => {\n setLoading(false);\n });\n },\n [setTotalRecords, setLoading, setData, context],\n );\n\n return (\n <DataGrid\n //@ts-ignore\n ref={ref}\n label={metaData.gridConfig?.gridLabel ?? \"NO_NAME\"}\n dense={true}\n multipleActions={metaData?.multipleActions}\n singleActions={metaData?.singleActions}\n doubleClickAction={metaData?.doubleClickAction}\n alwaysAvailableAction={metaData?.alwaysAvailableAction}\n setGridAction={metaData?.setAction}\n filterMeta={filterMeta}\n getRowId={getRowId}\n columns={columns}\n defaultColumn={defaultColumn}\n defaultHiddenColumns={metaData.hiddenColumns}\n defaultFilter={myDefaultFilter}\n defaultSortOrder={myDefaultSortOrder}\n loading={loading}\n data={data}\n setData={setData}\n onFetchData={fetchData}\n pageCount={pageCount}\n totalRecords={totalRecords}\n pageSizes={metaData.gridConfig?.pageSize ?? 10}\n defaultPageSize={metaData.gridConfig?.defaultPageSize ?? [5, 10]}\n allowColumnReordering={\n metaData.gridConfig?.allowColumnReordering ?? false\n }\n allowColumnHiding={metaData.gridConfig?.allowColumnHiding ?? false}\n allowKeyboardNavigation={\n metaData.gridConfig?.allowKeyboardNavigation ?? false\n }\n allowFilter={metaData.gridConfig?.allowFilter ?? true}\n filterAlwaysVisible={metaData.gridConfig?.filterAlwaysVisible ?? false}\n allowRowSelection={metaData?.gridConfig?.allowRowSelection ?? true}\n autoRefreshInterval={autoRefreshInterval}\n authState={authState}\n />\n );\n },\n);\n","//import { useCallback, useRef } from \"react\";\n\n// export const formatSortBy = (sortBy = []) => {\n// const formatted = sortBy.map((one: any, index) => ({\n// [one?.id ?? \"\"]: one?.desc ? \"desc\" : \"asc\",\n// seq: index + 1,\n// }));\n// return formatted;\n// };\n\nexport const formatSortBy = (sortBy = []) => {\n const formatted = sortBy.map((one: any, index) => ({\n // [one?.id ?? \"\"]: one?.desc ? \"desc\" : \"asc\",\n ACCESSOR: one.id ?? \"\",\n VALUE: one?.desc ? \"desc\" : \"asc\",\n // seq: index + 1,\n }));\n return formatted;\n};\n\nexport const formatFilterBy = (filterBy = []) => {\n if (!Array.isArray(filterBy)) {\n filterBy = [filterBy];\n }\n const formatted = filterBy.map((one: any, index) => ({\n ACCESSOR: one.id,\n ...one.value,\n }));\n return formatted;\n};\n","import React, { forwardRef } from \"react\";\nimport { cloneDeep } from \"lodash-es\";\nimport { GridMetaDataType, ActionTypes } from \"./types\";\nimport {\n attachCellComponentsToMetaData,\n attachFilterComponentToMetaData,\n attachAlignmentProps,\n extractHiddenColumns,\n sortColumnsBySequence,\n SplitActions,\n} from \"./utils\";\nimport { GirdController } from \"./gridController\";\nimport { GridProvider } from \"./context\";\nimport { AutoRefreshProvider } from \"../utils/autoRefresh\";\nimport { AuthStateType } from \"components/types\";\n\ninterface GridWrapperPropsType {\n gridCode: any;\n getGridData: any;\n metaData: GridMetaDataType;\n actions?: ActionTypes[];\n setAction: any;\n defaultFilter?: any;\n fixedFilter?: any;\n defaultSortOrder?: any;\n dataTransformer?: any;\n autoRefreshInterval?: any;\n authState?: AuthStateType;\n}\n\nexport const GridWrapper = forwardRef<GridWrapperPropsType, any>(\n (\n {\n gridCode,\n getGridData,\n metaData,\n actions,\n setAction,\n defaultFilter = [],\n defaultSortOrder = [],\n dataTransformer = (data) => data,\n autoRefreshInterval,\n authState,\n },\n ref,\n ) => {\n let finalData = transformMetaData({\n metaData,\n actions,\n setAction,\n });\n //console.log(\"finalData=>\", finalData);\n\n return (\n <GridProvider gridCode={gridCode} getGridData={getGridData}>\n <AutoRefreshProvider>\n <GirdController\n //@ts-ignore\n ref={ref}\n metaData={finalData as GridMetaDataType}\n defaultFilter={defaultFilter}\n defaultSortOrder={defaultSortOrder}\n dataTransformer={dataTransformer}\n autoRefreshInterval={autoRefreshInterval}\n authState={authState}\n />\n </AutoRefreshProvider>\n </GridProvider>\n );\n },\n);\n\nconst transformMetaData = ({\n metaData: freshMetaData,\n actions,\n setAction,\n}): GridMetaDataType => {\n let metaData = cloneDeep(freshMetaData) as GridMetaDataType;\n //let metaData = JSON.parse(JSON.stringify(freshMetaData)) as GridMetaDataType;\n\n let columns = metaData.columns as any;\n let filters = metaData.filters as any;\n //make sure extract functions are called before attach and lastly sort\n filters = attachFilterComponentToMetaData(filters);\n const hiddenColumns = extractHiddenColumns(columns);\n columns = attachCellComponentsToMetaData(columns);\n\n columns = attachAlignmentProps(columns);\n columns = sortColumnsBySequence(columns);\n\n const splittedActions = SplitActions(actions ?? null);\n return {\n columns: columns,\n gridConfig: metaData.gridConfig,\n hiddenColumns: hiddenColumns,\n filters: filters,\n setAction: setAction,\n ...splittedActions,\n };\n};\n","import Paper from \"@mui/material/Paper\";\r\nimport { LoadingTextAnimation } from \"../loader/textLoading\";\r\nimport \"./loader.css\";\r\nexport const LoaderPaperComponent = (props) => {\r\n return (\r\n <Paper\r\n style={{\r\n width: \"100%\",\r\n }}\r\n >\r\n {/* <div className=\"sk-fading-circle\" {...props}>\r\n <div className=\"sk-circle1 sk-circle\"></div>\r\n <div className=\"sk-circle2 sk-circle\"></div>\r\n <div className=\"sk-circle3 sk-circle\"></div>\r\n <div className=\"sk-circle4 sk-circle\"></div>\r\n <div className=\"sk-circle5 sk-circle\"></div>\r\n <div className=\"sk-circle6 sk-circle\"></div>\r\n <div className=\"sk-circle7 sk-circle\"></div>\r\n <div className=\"sk-circle8 sk-circle\"></div>\r\n <div className=\"sk-circle9 sk-circle\"></div>\r\n <div className=\"sk-circle10 sk-circle\"></div>\r\n <div className=\"sk-circle11 sk-circle\"></div>\r\n <div className=\"sk-circle12 sk-circle\"></div>\r\n <div\r\n style={{\r\n fontSize: \"9px\",\r\n color: \"red\",\r\n paddingTop: \"27px\",\r\n paddingLeft: \"11px\",\r\n }}\r\n >\r\n Loading...\r\n </div>\r\n </div> */}\r\n {/* <div className=\"loading\" style={{ textAlign: \"center\", margin: \"2px\" }}>\r\n <div className=\"bounceball\"></div>\r\n <div className=\"text\"> Loading...</div>\r\n </div> */}\r\n <div className=\"loading\" style={{ textAlign: \"center\", margin: \"2px\" }}>\r\n <div className=\"bounceball\"></div>\r\n <div className=\"text-forloader\">\r\n <LoadingTextAnimation key={\"loaderWithbounce\"} text=\"Loading...\" />\r\n </div>\r\n </div>\r\n </Paper>\r\n );\r\n};\r\n","import \"./style.css\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const FullScreenLoader = () => {\r\n const { t } = useTranslation();\r\n return (\r\n <div className=\"wrap-forloader\">\r\n <div className=\"loading\">\r\n <div className=\"bounceball\"></div>\r\n <div className=\"text-forloader\">{t(\"Loading\")}...</div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import Tooltip from \"@mui/material/Tooltip\";\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst StyledTooltip = withStyles({\r\n tooltip: {\r\n backgroundColor: \"rgb(128,0,0)\",\r\n color: \"#fff\",\r\n boxShadow: \"0 3px 6px rgba(0,0,0,0.46)\",\r\n fontSize: 11,\r\n borderBottom: \"1px solid rgb(140,0,0)\",\r\n },\r\n arrow: {\r\n fontSize: 16,\r\n width: 17,\r\n \"&::before\": {\r\n border: \"1px solid #fff\",\r\n backgroundColor: \"rgb(128,0,0)\",\r\n boxSizing: \"border-box\",\r\n },\r\n },\r\n})(Tooltip);\r\n\r\nexport default StyledTooltip;\r\n","import ReactToPrint, {\n PrintContextConsumer,\n IReactToPrintProps,\n} from \"react-to-print\";\nimport { GradientButton } from \"components/styledComponent/button\";\nimport PrintIcon from \"@mui/icons-material/Print\";\nimport IconButton from \"@mui/material/IconButton\";\nimport { Tooltip } from \"components/styledComponent/tooltip\";\nimport { t } from \"i18next\";\n\nexport interface DefaultChieldData {\n buttonText?: string;\n}\ntype PrintAllProps = Merge<DefaultChieldData, IReactToPrintProps>;\nexport const PrintButton = ({\n content,\n buttonText = \"\",\n ...other\n}: PrintAllProps) => {\n return (\n <ReactToPrint {...other} content={content}>\n <PrintContextConsumer>\n {({ handlePrint }) => (\n <>\n {Boolean(buttonText) ? (\n <GradientButton onClick={handlePrint}>\n {buttonText}\n </GradientButton>\n ) : (\n <Tooltip title={t(\"Print\")} arrow={true}>\n <IconButton onClick={handlePrint} size=\"small\">\n <PrintIcon style={{ color: \"var(--white)\" }} />\n </IconButton>\n </Tooltip>\n )}\n </>\n )}\n </PrintContextConsumer>\n </ReactToPrint>\n );\n};\nexport type Merge<A, B> = {\n [K in keyof A]: K extends keyof B ? B[K] : A[K];\n} & B extends infer O\n ? { [K in keyof O]: O[K] }\n : never;\n","import { makeStyles } from \"@mui/styles\";\nimport { Theme } from \"@mui/material/styles\";\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n wrapper: {\n minHeight: \"100vh\",\n boxShadow: \"0 3px 6px rgba(0,0,0,0.03)\",\n [theme.breakpoints.down(\"sm\")]: {\n minHeight: \"100vh\",\n },\n background: \"var(--theme-color2)\",\n },\n loginEmp: {\n background: \"#fff\",\n padding: theme.spacing(2, 4),\n display: \"flex\",\n maxWidth: \"400px\",\n margin: \"auto\",\n boxShadow: \"0 0 20px rgba(0,0,0,0.06)\",\n borderRadius: \"8px\",\n [theme.breakpoints.down(\"sm\")]: {\n width: \"100%\",\n },\n },\n formWrap: {\n marginTop: theme.spacing(2),\n },\n otpformWrap: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n display: \"inline-flex\",\n },\n loginBtn: {\n minWidth: \"100% !important\",\n margin: theme.spacing(2, 0),\n fontSize: \"1rem\",\n padding: \"10px .75rem\",\n background: \"rgb(128,0,0)\",\n border: 0,\n color: \"#fff !important\",\n fontWeight: 600,\n letterSpacing: \"0.02857em\",\n boxShadow: \"none\",\n textTransform: \"capitalize\",\n alignSelf: \"flex-end\",\n \"&:hover\": {\n background: \"#fedad8\",\n boxShadow: \"none\",\n },\n },\n OTPTimer: {\n marginTop: \"10px\",\n color: theme.palette.primary.main,\n fontWeight: 600,\n },\n resendLink: {\n marginTop: \"10px\",\n cursor: \"pointer\",\n color: theme.palette.secondary.main,\n fontWeight: 600,\n fontSize: \"0.875 rem\",\n },\n logo: {\n marginBottom: theme.spacing(1),\n },\n loginLeft: {\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"2rem\",\n // background: \"var(--theme-color2)\",\n [theme.breakpoints.down(\"sm\")]: {\n display: \"none\",\n },\n },\n loginRight: {\n background: \"#fff\",\n padding: theme.spacing(2, 4),\n display: \"flex\",\n maxWidth: \"400px\",\n margin: \"auto\",\n boxShadow: \"0 0 20px rgba(0,0,0,0.06)\",\n borderRadius: \"8px\",\n [theme.breakpoints.down(\"sm\")]: {\n width: \"100%\",\n },\n \"& img\": {\n alignSelf: \"center\",\n },\n },\n loginImg: {\n // maxHeight: \"40vh\",\n },\n verifybutton: {\n alignSelf: \"center\",\n marginBottom: \"10px\",\n marginTop: \"10px\",\n },\n divflex: {\n display: \"flex\",\n },\n otpinputpadding: {\n \"& input\": {\n marginRight: \"8px !important\",\n },\n },\n otpinputform: {\n \"& input\": {\n marginRight: \"10px !important\",\n width: \"42px !important\",\n height: \"42px !important\",\n borderRadius: \"8px\",\n border: \"1px solid #000\",\n },\n },\n otpinputformauth: {\n \"& input\": {\n marginRight: \"8px !important\",\n width: \"40px !important\",\n height: \"40px !important\",\n borderRadius: \"8px\",\n border: \"1px solid #000\",\n },\n },\n ibtnvisible: {\n padding: \"7px !important\",\n },\n btnvisibleoff: {\n display: \"none\",\n },\n resendOTPalign: {\n textAlign: \"center\",\n marginTop: \"15px\",\n display: \"block !important\",\n },\n resendbtnLink: {\n textDecoration: \"underline\",\n color: \"blue\",\n cursor: \"pointer\",\n \"&:hover\": {\n textDecoration: \"underline\",\n color: \"blue\",\n },\n },\n dialogTitleClass: {\n background: \"var(--theme-color1)\",\n padding: \"8px 15px !important\",\n color: \"#fff\",\n\n \"& h2\": {\n color: \"white\",\n fontWeight: \"500 !important\",\n },\n },\n button: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexDirection: \"column\",\n margin: \"6px\",\n background: \"var(--theme-color1)\",\n \"&:hover\": {\n background: \"var(--theme-color1) !important\",\n },\n },\n lang_svg: {\n marginRight: \"10px\",\n width: \"22px\",\n height: \"22px\",\n },\n}));\n","import { useState, useRef } from \"react\";\nimport { TextField } from \"components/styledComponent/textfield\";\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n} from \"@mui/material\";\nimport { GradientButton } from \"components/styledComponent/button\";\nimport CircularProgress from \"@mui/material/CircularProgress\";\nimport { useStyles } from \"./style\";\nimport { useTranslation } from \"react-i18next\";\nconst inititalState = {\n loading: false,\n isError: false,\n userMessage: \"\",\n};\nexport const RemarksAPIWrapper = ({\n TitleText,\n onActionNo,\n onActionYes,\n isRequired = true,\n isEntertoSubmit = false,\n AcceptbuttonLabelText = \"Yes\",\n CanceltbuttonLabelText = \"No\",\n isLoading = false,\n open = false,\n rows,\n}) => {\n //const { state: rows }: any = useLocation();\n const [input, setInput] = useState(\"\");\n const [loginState, setLoginState] = useState(inititalState);\n const classes = useStyles();\n const inputRef = useRef<any>(null);\n const { t } = useTranslation();\n const inputButtonRef = useRef<any>(null);\n const handleChange = (event) => {\n setInput(event.target.value);\n if (event.target.value) {\n setLoginState((values) => ({\n ...values,\n isError: false,\n userMessage: \"\",\n }));\n }\n };\n\n return (\n <>\n <Dialog fullWidth={true} open={open}>\n <DialogTitle className={classes.dialogTitleClass}>\n {t(TitleText)}\n </DialogTitle>\n <DialogContent sx={{ mt: 2 }}>\n <TextField\n autoFocus={true}\n label={t(\"Remarks\")}\n placeholder={String(t(\"EnterRemarks\"))}\n fullWidth\n type={\"text\"}\n name=\"remarks\"\n value={input || \"\"}\n onChange={handleChange}\n error={loginState.isError}\n helperText={loginState.isError ? loginState.userMessage : \"\"}\n InputLabelProps={{ shrink: true }}\n disabled={isLoading}\n autoComplete=\"off\"\n ref={inputRef}\n required={isRequired}\n onKeyPress={(e) => {\n if (e.key === \"Enter\" && isEntertoSubmit) {\n inputButtonRef?.current?.click?.();\n }\n }}\n />\n </DialogContent>\n <DialogActions className={classes.verifybutton}>\n <GradientButton\n endIcon={isLoading ? <CircularProgress size={20} /> : null}\n onClick={() => {\n if (!Boolean(input) && isRequired) {\n setLoginState((values) => ({\n ...values,\n isError: true,\n userMessage: t(\"ThisFieldisrequired\"),\n }));\n } else {\n onActionYes(input, rows);\n setInput(\"\");\n }\n }}\n ref={inputButtonRef}\n >\n {t(AcceptbuttonLabelText)}\n </GradientButton>\n <GradientButton\n disabled={isLoading}\n onClick={() => {\n onActionNo();\n setInput(\"\");\n }}\n >\n {t(CanceltbuttonLabelText)}\n </GradientButton>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","//@ts-ignore\nimport { useLocation } from \"react-router-dom\";\nimport DialogTitle from \"@mui/material/DialogTitle\";\nimport DialogActions from \"@mui/material/DialogActions\";\nimport Button from \"@mui/material/Button\";\nimport { Alert } from \"components/common/alert\";\nimport DialogContent from \"@mui/material/DialogContent\";\nimport Dialog from \"@mui/material/Dialog\";\nimport { LoadingTextAnimation } from \"components/common/loader\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const MessageBoxWrapper = ({\n isOpen = false,\n validMessage,\n onActionYes,\n onActionNo,\n rows,\n isLoading = false,\n isError = false,\n error_msg = \"\",\n error_detail = \"\",\n loadingText = \"Loading...\",\n}) => {\n const { t } = useTranslation();\n\n return (\n <Dialog open={isOpen} maxWidth=\"sm\">\n <DialogTitle>{validMessage}</DialogTitle>\n <DialogContent>\n {isLoading ? (\n // \"Deleting...\"\n <LoadingTextAnimation key={\"loaderforDeleteing\"} text={loadingText} />\n ) : isError ? (\n <Alert\n severity=\"error\"\n // I suspect this, mutation.error?.error_msg is misspelt. Try errorMessage\n errorMsg={error_msg ?? \"Unknown Error occured\"}\n errorDetail={error_detail ?? \"\"}\n />\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => onActionNo()}\n color=\"secondary\"\n disabled={isLoading}\n >\n {t(\"No\")}\n </Button>\n <Button\n onClick={() => onActionYes(rows)}\n color=\"secondary\"\n disabled={isLoading}\n >\n {t(\"Yes\")}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const MessageBoxNavigateWrapper = ({\n validMessage,\n onActionYes,\n onActionNo,\n isLoading = false,\n isError = false,\n error_msg = \"\",\n error_detail = \"\",\n loadingText = \"Loading...\",\n}) => {\n const { state: rows } = useLocation();\n return (\n <MessageBoxWrapper\n isOpen={true}\n validMessage={validMessage}\n isLoading={isLoading}\n onActionYes={onActionYes}\n onActionNo={onActionNo}\n isError={isError}\n rows={rows}\n error_msg={error_msg}\n error_detail={error_detail}\n loadingText={loadingText}\n />\n );\n};\n","import {\n Box,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Typography,\n} from \"@mui/material\";\nimport { GradientButton } from \"components/styledComponent/button\";\nimport { useStyles } from \"./style\";\nimport InfoIcon from \"@mui/icons-material/Info\";\nimport WarningIcon from \"@mui/icons-material/Warning\";\nimport ErrorIcon from \"@mui/icons-material/Error\";\nimport CheckCircleIcon from \"@mui/icons-material/CheckCircle\";\n\nexport const PopupRequestWrapper = ({\n MessageTitle,\n Message,\n onClickButton,\n buttonNames = [\"Yes\", \"No\"],\n rows,\n open = false,\n loading = false,\n icon = \"INFO\",\n}) => {\n //const { state: rowsdata }: any = useLocation();\n const classes = useStyles();\n const colorMap = {\n INFO: \"#40A2D8\",\n SUCCESS: \"#0fd643\",\n WARNING: \"#FFA447\",\n ERROR: \"#DC143C\",\n };\n\n // const PopupList = popupData.map((key, val) => {\n // console.log(\"key\", key, val);\n // return;\n // });\n return (\n <>\n <Dialog fullWidth={false} open={open}>\n <DialogTitle\n className={classes.dialogTitleClass}\n style={{ textAlign: \"center\" }}\n >\n {MessageTitle}\n </DialogTitle>\n <DialogContent\n sx={{\n paddingTop: \"1rem !important\",\n paddingBottom: \"2rem !important\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.5rem\",\n }}\n >\n <Box>\n {icon === \"INFO\" ? (\n <InfoIcon fontSize=\"large\" style={{ color: colorMap[icon] }} />\n ) : icon === \"WARNING\" ? (\n <WarningIcon fontSize=\"large\" style={{ color: colorMap[icon] }} />\n ) : icon === \"SUCCESS\" ? (\n <CheckCircleIcon\n fontSize=\"large\"\n style={{ color: colorMap[icon] }}\n />\n ) : icon === \"ERROR\" ? (\n <ErrorIcon fontSize=\"large\" style={{ color: colorMap[icon] }} />\n ) : null}\n </Box>\n <DialogContentText>\n <Typography color={\"black\"}>{Message}</Typography>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n {buttonNames.map((buttonName, index) => {\n return (\n <GradientButton\n endIcon={loading ? <CircularProgress size={20} /> : null}\n onClick={() => onClickButton(buttonName)}\n >\n {buttonName}\n </GradientButton>\n );\n })}\n {/* <GradientButton //disabled={loading}\n onClick={() => onActionNo(\"No\")}\n >\n {\"fdfdf\"}\n </GradientButton> */}\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","import React, { createContext, useContext, useState } from \"react\";\nimport { PopupRequestWrapper } from \"./popupReqest\";\n\ntype TIcon = \"INFO\" | \"ERROR\" | \"WARNING\" | \"SUCCESS\";\ntype TButtonName =\n | \"Ok\"\n | \"Cancel\"\n | \"Yes\"\n | \"No\"\n | \"Close\"\n | \"Accept\"\n | \"Decline\";\n\ntype TMessage = {\n isOpen?: boolean;\n messageTitle: string;\n message: string;\n icon: TIcon;\n buttonNames: TButtonName[];\n callBack?: Function;\n};\n\ntype TMessageBoxParams = {\n messageTitle: string;\n message: string;\n icon?: TIcon;\n buttonNames?: TButtonName[];\n};\n\ntype TPopupContextType = {\n // message: TMessage;\n MessageBox: (params: TMessageBoxParams) => Promise<TButtonName> | any;\n CloseMessageBox: () => void;\n};\n\nconst initialMessage: TMessage = {\n isOpen: false,\n messageTitle: \"\",\n message: \"\",\n icon: \"INFO\",\n buttonNames: [\"Ok\"],\n};\n\nconst initialContext: TPopupContextType = {\n // message: initialMessage,\n MessageBox: () => {},\n CloseMessageBox: () => {},\n};\n\nexport const PopupContext = createContext<TPopupContextType>(initialContext);\n\nexport const PopupContextProvider: React.FC<React.PropsWithChildren> = ({\n children,\n}) => {\n const [message, setMessage] = useState<TMessage>(initialMessage);\n\n const MessageBox = ({\n messageTitle,\n message,\n icon = \"INFO\",\n buttonNames = [\"Ok\"],\n }: TMessageBoxParams) => {\n return new Promise((resolve) => {\n setMessage({\n isOpen: true,\n messageTitle,\n message,\n icon,\n buttonNames,\n callBack: (buttonName: TButtonName) => {\n resolve(buttonName);\n CloseMessageBox();\n },\n });\n });\n };\n\n const CloseMessageBox = () => {\n setMessage(initialMessage);\n };\n\n return (\n <PopupContext.Provider value={{ MessageBox, CloseMessageBox }}>\n <>\n {children}\n {message.isOpen ? (\n <PopupRequestWrapper\n open={message.isOpen}\n Message={message.message}\n MessageTitle={message.messageTitle}\n rows={[]}\n onClickButton={message.callBack}\n buttonNames={message.buttonNames}\n icon={message.icon}\n />\n ) : null}\n </>\n </PopupContext.Provider>\n );\n};\n\nexport const usePopupContext = () => {\n return useContext(PopupContext);\n};\n","import {\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@mui/material\";\nimport { GradientButton } from \"components/styledComponent/button\";\nimport { useStyles } from \"./style\";\nimport { useTranslation } from \"react-i18next\";\nexport const PopupMessageAPIWrapper = ({\n MessageTitle,\n Message,\n onActionYes,\n onActionNo,\n rows,\n open = false,\n loading = false,\n}) => {\n //const { state: rowsdata }: any = useLocation();\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <>\n <Dialog fullWidth={false} open={open}>\n <DialogTitle className={classes.dialogTitleClass}>\n {t(MessageTitle)}\n </DialogTitle>\n <DialogContent>\n <DialogContentText\n style={{ color: \"black\", marginTop: \"8px\", marginBottom: \"6px\" }}\n >\n {t(Message)}\n </DialogContentText>\n </DialogContent>\n <DialogActions className={classes.verifybutton}>\n <GradientButton\n endIcon={loading ? <CircularProgress size={20} /> : null}\n onClick={() => onActionYes(rows)}\n disabled={loading}\n >\n {t(\"Yes\")}\n </GradientButton>\n <GradientButton //disabled={loading}\n onClick={() => onActionNo()}\n disabled={loading}\n >\n {t(\"No\")}\n </GradientButton>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","import { FC, useEffect, useState, useRef, useCallback } from \"react\";\nimport {\n useField,\n UseFieldHookProps,\n transformDependentFieldsState,\n} from \"packages/form\";\nimport { SelectProps } from \"@mui/material/Select\";\nimport { TextFieldProps } from \"@mui/material/TextField\";\nimport { TextField } from \"components/styledComponent\";\nimport MenuItem, { MenuItemProps } from \"@mui/material/MenuItem\";\nimport Grid, { GridProps } from \"@mui/material/Grid\";\nimport CircularProgress, {\n CircularProgressProps,\n} from \"@mui/material/CircularProgress\";\nimport InputAdornment from \"@mui/material/InputAdornment\";\nimport { Checkbox } from \"components/styledComponent/checkbox\";\nimport { OptionsProps, Merge, dependentOptionsFn } from \"../types\";\nimport {\n getLabelFromValues,\n getSelectedOptionData,\n useOptionsFetcher,\n} from \"../utils\";\nimport { useTranslation } from \"react-i18next\";\ninterface extendedFieldProps extends UseFieldHookProps {\n options?: OptionsProps[] | dependentOptionsFn;\n _optionsKey?: string;\n disableCaching?: boolean;\n multiple?: boolean;\n showCheckbox?: boolean;\n skipDefaultOption?: boolean;\n defaultOptionLabel?: string;\n enableDefaultOption?: boolean;\n setValueOnDependentFieldsChange?: any;\n}\ntype MySelectProps = Merge<TextFieldProps, extendedFieldProps>;\n\ninterface MySelectExtendedProps {\n MenuItemProps?: MenuItemProps;\n SelectProps?: SelectProps;\n CircularProgressProps?: CircularProgressProps;\n GridProps?: GridProps;\n enableGrid: boolean;\n}\n\nexport type MySelectAllProps = Merge<MySelectProps, MySelectExtendedProps>;\n\nconst MySelect: FC<MySelectAllProps> = ({\n name: fieldName,\n validate,\n validationRun,\n shouldExclude,\n isReadOnly,\n postValidationSetCrossFieldValues,\n runPostValidationHookAlways,\n dependentFields,\n fieldKey: fieldID,\n options,\n MenuItemProps,\n SelectProps,\n GridProps,\n enableGrid,\n multiple,\n showCheckbox,\n //@ts-ignore\n isFieldFocused,\n InputProps,\n inputProps,\n CircularProgressProps,\n runValidationOnDependentFieldsChange,\n setValueOnDependentFieldsChange,\n skipValueUpdateFromCrossFieldWhenReadOnly,\n _optionsKey,\n disableCaching,\n skipDefaultOption,\n defaultOptionLabel,\n enableDefaultOption,\n runExternalFunction,\n onFormDataChange,\n ...others\n}) => {\n const {\n value,\n error,\n touched,\n handleChange,\n handleBlur,\n runValidation,\n validationRunning,\n isSubmitting,\n fieldKey,\n name,\n dependentValues,\n excluded,\n incomingMessage,\n whenToRunValidation,\n readOnly,\n formState,\n setIncomingMessage,\n handleOptionValueExtraData,\n setDisplayValue,\n ...otherAllData\n } = useField({\n name: fieldName,\n fieldKey: fieldID,\n dependentFields,\n validate,\n validationRun,\n runPostValidationHookAlways,\n postValidationSetCrossFieldValues,\n isReadOnly,\n shouldExclude,\n runValidationOnDependentFieldsChange,\n skipValueUpdateFromCrossFieldWhenReadOnly,\n runExternalFunction,\n onFormDataChange,\n });\n const focusRef = useRef();\n const [_options, setOptions] = useState<OptionsProps[]>([]);\n useEffect(() => {\n if (isFieldFocused) {\n setTimeout(() => {\n //@ts-ignore\n focusRef?.current?.focus?.();\n }, 1);\n }\n }, [isFieldFocused]);\n const getLabelFromValuesForOptions = useCallback(\n (values) => getLabelFromValues(_options)(values),\n [_options]\n );\n const getExtraOptionData = useCallback(\n (values) => getSelectedOptionData(_options)(values),\n [_options]\n );\n /* eslint-disable react-hooks/exhaustive-deps */\n const handleChangeInterceptor = useCallback(\n (e) => {\n let value = typeof e === \"object\" ? e?.target?.value ?? \"\" : e;\n // here we are ensuring when select has multiple options enabled we remove empty space we are getting in select\n if (Array.isArray(value)) {\n value = value.filter((one) => one !== \"\");\n }\n if (Array.isArray(value) && multiple) {\n let defaultValueIndex = value.indexOf(\"00\");\n if (defaultValueIndex >= 0) {\n value.splice(defaultValueIndex, 1);\n } else if (value.length === 0 && !skipDefaultOption) {\n value = [\"00\"];\n }\n //Remove this code to disable select All\n if (value[value.length - 1] === \"all\") {\n let values: any = [],\n labels: any = [];\n if (\n _options.filter((one) => one.value !== \"00\").length ===\n value.filter((one) => one !== \"all\").length\n ) {\n handleChange(\n [\"00\"],\n [\n Boolean(defaultOptionLabel)\n ? defaultOptionLabel\n : \"Select Option\",\n ]\n );\n } else {\n for (let i = 0; i < _options.length; i++) {\n if (_options[i].value === \"00\") {\n continue;\n }\n values.push(_options[i].value);\n labels.push(_options[i].label);\n }\n handleChange(values, labels);\n }\n return;\n }\n //End of select All Code\n }\n let result = getLabelFromValuesForOptions(value);\n let extraOptionData = getExtraOptionData(value);\n const isDefaultOption = Boolean(extraOptionData?.[0]?.isDefaultOption);\n result = multiple ? result : result[0];\n handleOptionValueExtraData(extraOptionData);\n if (isDefaultOption) {\n e.target[\"value\"] = e.target?.value?.trim?.();\n }\n handleChange(multiple ? value : e, result as any);\n },\n [handleChange, getLabelFromValuesForOptions, multiple, skipDefaultOption]\n );\n\n const handleBlurInterceptor = useCallback(() => {\n let extraOptionData = getExtraOptionData(value);\n handleOptionValueExtraData(extraOptionData);\n handleBlur();\n }, [handleBlur, getExtraOptionData, handleOptionValueExtraData, value]);\n useEffect(() => {\n if (typeof setValueOnDependentFieldsChange === \"function\") {\n let result = setValueOnDependentFieldsChange(\n transformDependentFieldsState(dependentValues)\n );\n // updating || with &&\n if (result !== undefined && result !== null) {\n handleChangeInterceptor(result);\n }\n }\n }, [\n dependentValues,\n handleChangeInterceptor,\n setValueOnDependentFieldsChange,\n ]);\n //useEffect added by Maulik Patel on 02/01/2024 for set display value\n useEffect(() => {\n if (value && Array.isArray(_options) && _options.length > 0) {\n let result = getLabelFromValuesForOptions(value);\n result = multiple ? result : result[0];\n setDisplayValue(result);\n }\n }, [setDisplayValue, _options]);\n //Remove This to disable selectAll\n const filteredOptions = _options.filter((one) => one.value !== \"00\");\n const filtervalue = Array.isArray(value)\n ? value.filter((one) => one !== \"00\")\n : [];\n const isAllSelected = multiple\n ? filteredOptions.length === (value?.length ?? -Infinity)\n : false;\n\n const isIndeterminate =\n multiple &&\n filtervalue.length > 0 &&\n filtervalue.length < filteredOptions.length;\n //end of select All\n const { loadingOptions } = useOptionsFetcher(\n formState,\n options,\n setOptions,\n handleChangeInterceptor,\n dependentValues,\n incomingMessage,\n runValidation,\n whenToRunValidation,\n _optionsKey,\n disableCaching,\n setIncomingMessage,\n skipDefaultOption,\n defaultOptionLabel,\n enableDefaultOption\n );\n const { t } = useTranslation();\n //console.log(_options);\n //dont move it to top it can mess up with hooks calling mechanism, if there is another\n //hook added move this below all hook calls\n if (excluded) {\n return null;\n }\n\n const isError = touched && (error ?? \"\") !== \"\";\n // const isDefaultOption = Boolean(\n // otherAllData?.optionData?.[0]?.isDefaultOption\n // );\n\n const menuItems = _options.map((menuItem, index) => {\n return (\n <MenuItem\n {...MenuItemProps}\n //keep button value to true else keyboard navigation for select will stop working\n // button={true}\n key={menuItem.value ?? index}\n value={menuItem.value}\n disabled={menuItem.disabled}\n >\n {showCheckbox && !menuItem.disabled ? (\n <Checkbox\n checked={\n Boolean(multiple)\n ? Array.isArray(value) && value.indexOf(menuItem.value) >= 0\n : value === menuItem.value\n }\n />\n ) : null}\n {menuItem.label}\n </MenuItem>\n );\n });\n //Remove this to disable select all\n const selectAllMenu = (\n <MenuItem\n // button={true}\n key=\"selectAll\"\n value=\"all\"\n >\n <Checkbox checked={isAllSelected} indeterminate={isIndeterminate} />\n {t(\"SelectAll\")}\n </MenuItem>\n );\n //end of select all\n const result = (\n <TextField\n {...others}\n select={true}\n key={fieldKey}\n id={fieldKey}\n name={name}\n value={\n multiple && !Array.isArray(value)\n ? [value]\n : Boolean(value)\n ? value\n : typeof value === \"string\"\n ? \" \"\n : value\n }\n error={!isSubmitting && isError}\n helperText={!isSubmitting && isError ? error : null}\n onChange={handleChangeInterceptor}\n onBlur={handleBlurInterceptor}\n disabled={isSubmitting || readOnly}\n SelectProps={{\n ...SelectProps,\n native: false,\n multiple: multiple,\n renderValue: multiple ? getLabelFromValues(_options, true) : undefined,\n //@ts-ignore\n }}\n InputLabelProps={{\n shrink: true,\n }}\n inputRef={focusRef}\n InputProps={{\n endAdornment:\n validationRunning || loadingOptions ? (\n <InputAdornment position=\"end\">\n <CircularProgress\n color=\"secondary\"\n variant=\"indeterminate\"\n size={24}\n {...CircularProgressProps}\n />\n </InputAdornment>\n ) : null,\n ...InputProps,\n }}\n inputProps={{\n readOnly: readOnly,\n tabIndex: readOnly ? -1 : undefined,\n ...inputProps,\n }}\n >\n {/*Uncomment first and comment/remove second line to remove select all}\n {/*menuItems*/}\n {multiple && showCheckbox ? [selectAllMenu, ...menuItems] : menuItems}\n {/*end of selectAll*/}\n </TextField>\n );\n if (Boolean(enableGrid)) {\n return <Grid {...GridProps}>{result}</Grid>;\n } else {\n return result;\n }\n};\n\nexport default MySelect;\n","import { FC } from \"react\";\r\nimport { useFieldArray, UseFieldArrayHookProps, RenderFn } from \"packages/form\";\r\ninterface RenderParentAttribs {\r\n rows: JSX.Element[];\r\n key: string;\r\n push: () => void;\r\n}\r\n\r\nexport interface ArrayFieldProps extends UseFieldArrayHookProps {\r\n renderParentFn: (options: RenderParentAttribs) => JSX.Element;\r\n renderRowsFn: RenderFn;\r\n}\r\n\r\nconst ArrayField: FC<ArrayFieldProps> = ({\r\n arrayFieldName,\r\n template,\r\n renderParentFn,\r\n renderRowsFn,\r\n}) => {\r\n const { renderRows, push } = useFieldArray({\r\n arrayFieldName,\r\n template,\r\n });\r\n if (\r\n typeof renderRowsFn === \"function\" &&\r\n typeof renderParentFn === \"function\"\r\n ) {\r\n const key = `${arrayFieldName}`;\r\n const rows = renderRows(renderRowsFn);\r\n return renderParentFn({ rows, key, push });\r\n } else {\r\n console.log(\r\n \"Expected renderRowFn type as function but got\",\r\n typeof renderParentFn\r\n );\r\n console.log(\r\n \"Expecte renderParentFn type as function but got\",\r\n typeof renderRowsFn\r\n );\r\n return null;\r\n }\r\n};\r\n\r\nexport default ArrayField;\r\n","import { makeStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: Theme) => ({\r\n arrayRowContainer: {\r\n position: \"relative\",\r\n boxShadow: theme.shadows[3],\r\n marginBottom: theme.spacing(3),\r\n },\r\n arrayRowRemoveBtn: {\r\n position: \"absolute\",\r\n top: -22,\r\n right: -22,\r\n color: \"#f50057\",\r\n },\r\n arrayRowCard: {\r\n width: \"100%\",\r\n position: \"relative\",\r\n overflow: \"auto\",\r\n },\r\n arrayRowCardContent: {\r\n paddingLeft: \"32px\",\r\n },\r\n arrayRowCount: {\r\n display: \"flex\",\r\n width: \"100%\",\r\n margin: \"0 0 16px -8px\",\r\n },\r\n}));\r\n","import {\n FC,\n cloneElement,\n Fragment,\n useRef,\n useState,\n useCallback,\n} from \"react\";\nimport Grid, { GridProps } from \"@mui/material/Grid\";\nimport {\n Card,\n CardContent,\n CardHeader,\n IconButton,\n Dialog,\n DialogTitle,\n DialogActions,\n DialogContent,\n Button,\n Typography,\n} from \"@mui/material\";\nimport AddCircleOutlineIcon from \"@mui/icons-material/AddCircleOutline\";\nimport RemoveCircleOutlineIcon from \"@mui/icons-material/RemoveCircleOutline\";\nimport { renderField } from \"components/dynamicForm/utils/fieldRenderer\";\nimport { FieldMetaDataType } from \"components/dynamicForm/\";\nimport { useFieldArray, formFieldAtom } from \"packages/form\";\nimport { extendFieldTypes } from \"components/dynamicForm/utils/extendedFieldTypes\";\nimport { extendedMetaData } from \"components/dynamicForm/extendedTypes\";\nimport { attachMethodsToMetaData } from \"components/dynamicForm/utils/attachMethodsToMetaData\";\nimport { MoveSequenceToRender } from \"components/dynamicForm/utils/fixSequenceInMetaData\";\nimport { MetaDataType } from \"components/dynamicForm\";\nimport { useStyles } from \"./style\";\nimport { useRecoilCallback } from \"recoil\";\nimport { cloneDeep } from \"lodash-es\";\nimport { t } from \"i18next\";\nexport interface ArrayField2Props {\n fieldKey: string;\n name: string;\n label: string;\n //just to satisfy typescript no use\n enableGrid: boolean;\n GridProps?: GridProps;\n _fields: FieldMetaDataType[];\n componentProps?: any;\n removeRowFn?: any;\n addRowFn?: any;\n arrayFieldIDName?: string;\n dependentFields?: string | string[];\n shouldExclude?: any;\n fixedRows?: boolean;\n getFixedRowsCount?: any;\n}\n\nconst metaDataTransform = (metaData: MetaDataType): MetaDataType => {\n metaData = extendFieldTypes(metaData, extendedMetaData);\n metaData = attachMethodsToMetaData(metaData);\n metaData = MoveSequenceToRender(metaData);\n return metaData;\n};\n\nexport const ArrayField2: FC<ArrayField2Props> = ({\n name,\n label,\n _fields,\n GridProps,\n enableGrid,\n componentProps = {},\n removeRowFn,\n addRowFn,\n arrayFieldIDName,\n dependentFields,\n shouldExclude,\n fixedRows,\n getFixedRowsCount,\n}) => {\n // let currentFieldsMeta = JSON.parse(\n // JSON.stringify(_fields)\n // ) as FieldMetaDataType[];\n let currentFieldsMeta = cloneDeep(_fields) as FieldMetaDataType[];\n const classes = useStyles();\n const [showAddDialog, setShowAddDialog] = useState(false);\n const [dialogMsg, setDialogMsg] = useState(\"\");\n let metaData = { form: {}, fields: currentFieldsMeta } as MetaDataType;\n const transformedMetaData = useRef<MetaDataType | null>(null);\n if (transformedMetaData.current === null) {\n transformedMetaData.current = metaDataTransform(metaData);\n }\n const template = useRef(\n transformedMetaData?.current?.fields?.reduce((accum, one) => {\n accum[one.name] = \"\";\n return accum;\n }, {})\n );\n\n const currentMetaToObj = useRef(\n transformedMetaData?.current?.fields?.reduce((accum, one) => {\n accum[one.name] = one;\n return accum;\n }, {})\n );\n\n const {\n renderRows,\n getAllRowsValues,\n unshift,\n isSubmitting,\n formState,\n formName,\n excluded,\n } = useFieldArray({\n arrayFieldName: name,\n template: template.current,\n dependentFields: dependentFields,\n shouldExclude: shouldExclude,\n getFixedRowsCount: getFixedRowsCount,\n });\n\n /*eslint-disable react-hooks/exhaustive-deps*/\n const addNewRow = useCallback(() => {\n if (typeof addRowFn === \"function\") {\n let result = addRowFn(getAllRowsValues());\n let allow = false;\n let reason = \"Cannot add a new Row\";\n if (typeof result === \"boolean\") {\n allow = result;\n }\n if (typeof result === \"object\") {\n allow = result?.allow ?? false;\n reason = result?.reason ?? \"Cannot add a new Row\";\n }\n if (allow) {\n unshift();\n } else {\n setShowAddDialog(true);\n setDialogMsg(reason);\n }\n } else {\n unshift();\n }\n }, [unshift, getAllRowsValues]);\n\n if (excluded) {\n return null;\n }\n\n let rows = renderRows(({ row, removeFn, rowIndex, fields, totalRows }) => {\n const oneRow = fields.map((field) => {\n const currentFieldMetaData = currentMetaToObj.current[field];\n if (!Boolean(currentFieldMetaData)) {\n return null;\n }\n const component = renderField(\n currentFieldMetaData,\n //@ts-ignore\n {},\n name,\n componentProps\n );\n let clonedComponent = cloneElement(component, {\n fieldKey: row.cells[field].key,\n name: row.cells[field].name,\n label: t(component?.props?.label),\n placeholder: t(component?.props?.placeholder),\n });\n return <Fragment key={row.cells[field].key}>{clonedComponent}</Fragment>;\n });\n return (\n <ArrayFieldRow\n key={row.fieldIndexKey}\n fieldKey={row.cells[arrayFieldIDName ?? \"\"]?.key ?? \"\"}\n oneRow={oneRow}\n classes={classes}\n removeFn={removeFn}\n rowIndex={rowIndex}\n removeRowFn={removeRowFn}\n row={row}\n totalRows={totalRows}\n isSubmitting={isSubmitting}\n formState={formState}\n formName={formName}\n arrayFieldIDName={arrayFieldIDName}\n arrayFieldName={name}\n fixedRows={fixedRows}\n />\n );\n });\n let result = (\n <Fragment>\n <Card className={classes.arrayRowCard}>\n <CardHeader\n title={label}\n style={{ paddingTop: \"0px\", paddingBottom: \"0px\" }}\n action={\n !Boolean(fixedRows) ? (\n <IconButton onClick={addNewRow} disabled={isSubmitting}>\n <AddCircleOutlineIcon />\n </IconButton>\n ) : null\n }\n />\n <CardContent\n className={classes.arrayRowCardContent}\n style={{ paddingTop: \"0px\", paddingBottom: \"16px\" }}\n >\n <Grid container item spacing={1} xs={12} md={12} sm={12}>\n {rows}\n {rows.length <= 0 ? (\n <Typography>\n {t(\"NoRecordsFoundclicktheaddbuttontoaddone\")}\n </Typography>\n ) : null}\n </Grid>\n </CardContent>\n </Card>\n <Dialog\n open={showAddDialog}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogContent>{dialogMsg}</DialogContent>\n <DialogActions>\n <Button\n onClick={() => {\n setShowAddDialog(false);\n setDialogMsg(\"\");\n }}\n color=\"primary\"\n >\n {t(\"Ok\")}\n </Button>\n </DialogActions>\n </Dialog>\n </Fragment>\n );\n if (Boolean(enableGrid)) {\n return (\n <Grid container {...GridProps} key={name}>\n {result}\n </Grid>\n );\n } else {\n return <Fragment key={name}>{result}</Fragment>;\n }\n};\n\nexport const ArrayFieldRow = ({\n row,\n fieldKey,\n oneRow,\n classes,\n removeFn,\n rowIndex,\n removeRowFn,\n totalRows,\n isSubmitting,\n formState,\n formName,\n arrayFieldIDName,\n arrayFieldName,\n fixedRows,\n}) => {\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n const [success, setSuccess] = useState(false);\n const dialogAccept = useRecoilCallback(\n ({ snapshot }) =>\n async () => {\n const loader = snapshot.getLoadable(\n formFieldAtom(`${formName}/${fieldKey}`)\n );\n if (loader.state === \"hasValue\") {\n const field = loader.contents;\n if (Boolean(field.value)) {\n try {\n setLoading(true);\n await Promise.resolve(\n removeRowFn(\n { ...formState, [arrayFieldIDName]: field.value },\n arrayFieldName\n )\n );\n setLoading(false);\n setError(\"\");\n setSuccess(true);\n } catch (e) {\n console.log(e);\n setLoading(false);\n //@ts-ignore\n setError(e?.error_msg ?? \"Unkown error occured\");\n }\n } else {\n setSuccess(true);\n }\n }\n },\n [setError, setSuccess, setLoading]\n );\n const dialogReject = useCallback(() => {\n if (success) {\n removeFn(rowIndex);\n } else {\n setIsDialogOpen(false);\n setTimeout(() => {\n setLoading(false);\n setError(\"\");\n setSuccess(false);\n }, 1);\n }\n }, [\n setIsDialogOpen,\n setLoading,\n setError,\n setSuccess,\n success,\n removeFn,\n rowIndex,\n ]);\n const dialogOpen = useCallback(() => {\n setIsDialogOpen(true);\n }, [setIsDialogOpen]);\n\n return (\n <Fragment key={row.fieldIndexKey}>\n <Typography gutterBottom className={classes.arrayRowCount}>\n {rowIndex + 1} of {totalRows}\n </Typography>\n <Grid\n container\n item\n xs={12}\n md={12}\n sm={12}\n spacing={2}\n className={classes.arrayRowContainer}\n >\n {oneRow}\n {typeof removeFn === \"function\" && !Boolean(fixedRows) ? (\n <IconButton\n onClick={dialogOpen}\n className={classes.arrayRowRemoveBtn}\n disabled={isSubmitting}\n >\n <RemoveCircleOutlineIcon />\n </IconButton>\n ) : null}\n </Grid>\n <Dialog\n open={isDialogOpen}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogTitle>\n {success\n ? t(\"Recordsuccessfullydeleted\")\n : loading\n ? t(\"Pleasewaitdeletingrecord\")\n : Boolean(error)\n ? error\n : t(\"AreyouSureyouwanttodeletethisrecord\")}\n </DialogTitle>\n {success || error ? (\n <DialogActions>\n <Button onClick={dialogReject} color=\"primary\">\n {t(\"Ok\")}\n </Button>\n </DialogActions>\n ) : loading ? null : (\n <DialogActions>\n <Button onClick={dialogAccept} color=\"primary\">\n {t(\"Yes\")}\n </Button>\n <Button onClick={dialogReject} color=\"primary\">\n {t(\"No\")}\n </Button>\n </DialogActions>\n )}\n </Dialog>\n </Fragment>\n );\n};\n","import { FC, Fragment } from \"react\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport CardHeader from \"@mui/material/CardHeader\";\r\nimport { renderValue } from \"components/dynamicForm/utils/valueRenderer\";\r\nimport { FieldMetaDataType } from \"components/dynamicForm\";\r\nimport { cloneDeep } from \"lodash-es\";\r\n//import { MoveSequenceToRender } from \"components/dynamicForm/utils/fixSequenceInMetaData\";\r\nimport { attachValuesToMetaData } from \"components/dynamicForm/utils/attachValuesToMetaData\";\r\n//import { MetaDataType } from \"components/dynamicForm\";\r\nimport { useStyles } from \"./style\";\r\nexport interface ArrayField2Props {\r\n fieldKey: string;\r\n name: string;\r\n label: string;\r\n //just to satisfy typescript no use\r\n enableGrid: boolean;\r\n GridProps?: GridProps;\r\n _fields: FieldMetaDataType[];\r\n componentProps?: any;\r\n removeRowFn?: any;\r\n arrayFieldIDName?: string;\r\n}\r\n\r\n// const sortMetaData = (metaData: MetaDataType) => {\r\n// if (Array.isArray(metaData.fields) && metaData?.fields.length > 0) {\r\n// let sortedFields = metaData.fields.sort((prev, next) => {\r\n// if ((prev?.render?.sequence ?? -1) > (next?.render?.sequence ?? -1)) {\r\n// return 1;\r\n// } else if (\r\n// prev?.render?.sequence ??\r\n// -1 < (next?.render?.sequence ?? -1)\r\n// ) {\r\n// return -1;\r\n// }\r\n// return 0;\r\n// });\r\n// return { form: metaData.form, fields: sortedFields };\r\n// }\r\n// return metaData;\r\n// };\r\n\r\nexport const ArrayFieldValues: FC<ArrayField2Props & { defaultValue: any }> = ({\r\n name,\r\n label,\r\n _fields,\r\n GridProps,\r\n enableGrid,\r\n defaultValue,\r\n componentProps = {},\r\n}) => {\r\n // let currentFieldsMeta = JSON.parse(\r\n // JSON.stringify(_fields)\r\n // ) as FieldMetaDataType[];\r\n let currentFieldsMeta = cloneDeep(_fields) as FieldMetaDataType[];\r\n const classes = useStyles();\r\n // let metaData = { form: {}, fields: currentFieldsMeta } as MetaDataType;\r\n // metaData = MoveSequenceToRender(metaData);\r\n // metaData = sortMetaData(metaData);\r\n\r\n if (!Array.isArray(defaultValue)) {\r\n return <div>Invalid data for arrayField</div>;\r\n }\r\n const rows = defaultValue.map((oneRowDefaultValues, RowIndex) => {\r\n const metaDataWithDefaultValuesForRow = attachValuesToMetaData(\r\n currentFieldsMeta,\r\n oneRowDefaultValues\r\n );\r\n const oneRow = metaDataWithDefaultValuesForRow.map(\r\n (oneColumnMeta, Columnindex) => {\r\n const component = renderValue(\r\n oneColumnMeta,\r\n {} as any,\r\n name,\r\n componentProps\r\n );\r\n return (\r\n <Fragment key={`${oneColumnMeta.name}-${Columnindex}`}>\r\n {component}\r\n </Fragment>\r\n );\r\n }\r\n );\r\n return (\r\n <Fragment key={RowIndex}>\r\n <Grid\r\n container\r\n item\r\n xs={12}\r\n md={12}\r\n sm={12}\r\n spacing={2}\r\n className={classes.arrayRowContainer}\r\n >\r\n {oneRow}\r\n </Grid>\r\n </Fragment>\r\n );\r\n });\r\n\r\n let result = (\r\n <Fragment>\r\n <Card className={classes.arrayRowCard}>\r\n <CardHeader title={label} />\r\n <CardContent className={classes.arrayRowCardContent}>\r\n <Grid container spacing={1} xs={12} md={12} sm={12}>\r\n {rows}\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Fragment>\r\n );\r\n if (Boolean(enableGrid)) {\r\n return (\r\n <Grid container {...GridProps} key={name}>\r\n {result}\r\n </Grid>\r\n );\r\n } else {\r\n return <Fragment key={name}>{result}</Fragment>;\r\n }\r\n};\r\n","import { FieldMetaDataType } from \"../types\";\nimport { InitialValuesType } from \"packages/form\";\n\nexport const attachValuesToMetaData = (\n fields: FieldMetaDataType[],\n formData: InitialValuesType,\n): FieldMetaDataType[] => {\n if (!Array.isArray(fields)) {\n return [];\n }\n return fields.map((one) => {\n const { name, ...others } = one;\n const value = formData[name] ?? \"N/A\";\n return { ...others, name, defaultValue: value };\n });\n};\n","import { FC, useCallback, useState } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport FormControl, { FormControlProps } from \"@mui/material/FormControl\";\r\nimport FormLabel, { FormLabelProps } from \"@mui/material/FormLabel\";\r\nimport RadioGroup, { RadioGroupProps } from \"@mui/material/RadioGroup\";\r\nimport FormControlLabel, {\r\n FormControlLabelProps,\r\n} from \"@mui/material/FormControlLabel\";\r\n\r\nimport Radio, { RadioProps } from \"@mui/material/Radio\";\r\nimport FormHelperText, {\r\n FormHelperTextProps,\r\n} from \"@mui/material/FormHelperText\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport CircularProgress, {\r\n CircularProgressProps,\r\n} from \"@mui/material/CircularProgress\";\r\nimport InputAdornment from \"@mui/material/InputAdornment\";\r\nimport { Merge, OptionsProps } from \"../types\";\r\nimport { getLabelFromValues, useOptionsFetcher } from \"../utils\";\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\ninterface extendedFiledProps extends UseFieldHookProps {\r\n options: OptionsProps[];\r\n _optionsKey?: string;\r\n disableCaching?: boolean;\r\n label: string;\r\n}\r\n\r\ntype MyRadioMixedProps = Merge<RadioProps, extendedFiledProps>;\r\n\r\ninterface MyCheckboxExtendedProps {\r\n FormLabelProps?: FormLabelProps;\r\n RadioGroupProps?: RadioGroupProps;\r\n FormControlLabelProps?: FormControlLabelProps;\r\n FormControlProps?: FormControlProps;\r\n FormHelperTextProps?: FormHelperTextProps;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n CircularProgressProps?: CircularProgressProps;\r\n}\r\n\r\nexport type MyRadioAllProps = Merge<MyRadioMixedProps, MyCheckboxExtendedProps>;\r\n\r\nconst StyledRadioField = withStyles({\r\n root: {\r\n \"& .MuiFormLabel-root\": {\r\n //color: \"#736f6f\",\r\n fontWeight: 600,\r\n textTransform: \"capitalize\",\r\n fontSize: \"1rem\",\r\n \"@media (max-width: 1200px)\": {\r\n fontSize: \"0.75rem\",\r\n },\r\n \"@media (max-width: 1440px)\": {\r\n fontSize: \"0.875rem\",\r\n },\r\n },\r\n \"& label.Mui-focused\": {\r\n //color: \"#26A456\",\r\n color: \"var(--theme-color1)\",\r\n },\r\n \"& .MuiRadio-root.Mui-checked\": {\r\n color: \"var(--theme-color1) !important\",\r\n },\r\n },\r\n})(FormControl);\r\n\r\nconst MyRadio: FC<MyRadioAllProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n shouldExclude,\r\n isReadOnly,\r\n postValidationSetCrossFieldValues,\r\n runPostValidationHookAlways,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n label,\r\n options,\r\n FormControlProps,\r\n FormLabelProps,\r\n RadioGroupProps,\r\n FormHelperTextProps,\r\n FormControlLabelProps,\r\n GridProps,\r\n enableGrid,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n CircularProgressProps,\r\n _optionsKey,\r\n disableCaching,\r\n ...others\r\n}) => {\r\n const {\r\n formState,\r\n value,\r\n error,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n fieldKey,\r\n name,\r\n excluded,\r\n readOnly,\r\n dependentValues,\r\n incomingMessage,\r\n runValidation,\r\n whenToRunValidation,\r\n setIncomingMessage,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n const [_options, setOptions] = useState<OptionsProps[]>([]);\r\n\r\n const getLabelFromValuesForOptions = useCallback(\r\n (values) => getLabelFromValues(_options)(values),\r\n [_options]\r\n );\r\n\r\n const handleChangeInterceptor = useCallback(\r\n (e) => {\r\n const value = typeof e === \"object\" ? e?.target?.value ?? \"\" : e;\r\n let result = getLabelFromValuesForOptions(value);\r\n handleChange(e, result[0] as any);\r\n },\r\n [handleChange, getLabelFromValuesForOptions]\r\n );\r\n const { loadingOptions } = useOptionsFetcher(\r\n formState,\r\n options,\r\n setOptions,\r\n handleChangeInterceptor,\r\n dependentValues,\r\n incomingMessage,\r\n runValidation,\r\n whenToRunValidation,\r\n _optionsKey,\r\n disableCaching,\r\n setIncomingMessage,\r\n true,\r\n \"\",\r\n false\r\n );\r\n\r\n if (excluded) {\r\n return null;\r\n }\r\n\r\n const isError = touched && (error ?? \"\") !== \"\";\r\n const radios = _options.map((radio) => (\r\n <FormControlLabel\r\n {...FormControlLabelProps}\r\n control={\r\n <Radio\r\n {...others}\r\n readOnly={readOnly}\r\n tabIndex={readOnly ? -1 : undefined}\r\n />\r\n }\r\n key={radio.value}\r\n label={radio.label}\r\n value={radio.value}\r\n />\r\n ));\r\n\r\n const result = (\r\n // @ts-ignore\r\n <StyledRadioField\r\n {...FormControlProps}\r\n key={fieldKey}\r\n //@ts-ignore\r\n component=\"fieldset\"\r\n disabled={isSubmitting}\r\n error={!isSubmitting && isError}\r\n onBlur={handleBlur}\r\n >\r\n <FormLabel {...FormLabelProps} component=\"label\">\r\n {label}\r\n </FormLabel>\r\n <RadioGroup\r\n {...RadioGroupProps}\r\n onChange={handleChangeInterceptor}\r\n name={name}\r\n value={value}\r\n >\r\n {loadingOptions ? (\r\n <InputAdornment position=\"end\">\r\n <CircularProgress\r\n color=\"primary\"\r\n variant=\"indeterminate\"\r\n {...CircularProgressProps}\r\n />\r\n </InputAdornment>\r\n ) : (\r\n radios\r\n )}\r\n </RadioGroup>\r\n {!isSubmitting && isError ? (\r\n <FormHelperText {...FormHelperTextProps}>{error}</FormHelperText>\r\n ) : null}\r\n </StyledRadioField>\r\n );\r\n\r\n if (Boolean(enableGrid)) {\r\n return (\r\n <Grid {...GridProps} key={fieldKey}>\r\n {result}\r\n </Grid>\r\n );\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MyRadio;\r\n","import { FC } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport FormControlLabel, {\r\n FormControlLabelProps,\r\n} from \"@mui/material/FormControlLabel\";\r\nimport FormControl, { FormControlProps } from \"@mui/material/FormControl\";\r\nimport Switch, { SwitchProps } from \"@mui/material/Switch\";\r\nimport FormHelperText, {\r\n FormHelperTextProps,\r\n} from \"@mui/material/FormHelperText\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport { Merge } from \"../types\";\r\n\r\ninterface extendedFiledProps extends UseFieldHookProps {\r\n label: string;\r\n}\r\n\r\ntype MySwitchMixedProps = Merge<SwitchProps, extendedFiledProps>;\r\n\r\ninterface MySwitchExtendedProps {\r\n FormControlLabelProps?: FormControlLabelProps;\r\n FormControlProps?: FormControlProps;\r\n FormHelperTextProps?: FormHelperTextProps;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n}\r\n\r\nexport type MySwitchAllProps = Merge<MySwitchMixedProps, MySwitchExtendedProps>;\r\n\r\nconst MySwitch: FC<MySwitchAllProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n shouldExclude,\r\n isReadOnly,\r\n postValidationSetCrossFieldValues,\r\n runPostValidationHookAlways,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n label,\r\n FormControlProps,\r\n FormHelperTextProps,\r\n FormControlLabelProps,\r\n GridProps,\r\n enableGrid,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n ...others\r\n}) => {\r\n const {\r\n value,\r\n error,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n fieldKey,\r\n name,\r\n excluded,\r\n readOnly,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n isReadOnly,\r\n shouldExclude,\r\n });\r\n if (excluded) {\r\n return null;\r\n }\r\n const isError = touched && (error ?? \"\") !== \"\";\r\n\r\n const result = (\r\n // @ts-ignore\r\n <FormControl\r\n {...FormControlProps}\r\n key={fieldKey}\r\n component=\"fieldset\"\r\n disabled={isSubmitting}\r\n error={!isSubmitting && isError}\r\n onBlur={handleBlur}\r\n tabIndex={readOnly ? -1 : undefined}\r\n >\r\n <FormControlLabel\r\n {...FormControlLabelProps}\r\n name={name}\r\n control={\r\n <Switch\r\n {...others}\r\n readOnly={readOnly}\r\n tabIndex={readOnly ? -1 : undefined}\r\n />\r\n }\r\n onChange={handleChange}\r\n label={label}\r\n checked={Boolean(value)}\r\n />\r\n\r\n {!isSubmitting && isError ? (\r\n <FormHelperText {...FormHelperTextProps}>{error}</FormHelperText>\r\n ) : null}\r\n </FormControl>\r\n );\r\n\r\n if (Boolean(enableGrid)) {\r\n return <Grid {...GridProps}>{result}</Grid>;\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MySwitch;\r\n","import { FC, useCallback, useState } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport FormLabel, { FormLabelProps } from \"@mui/material/FormLabel\";\r\nimport FormGroup, { FormGroupProps } from \"@mui/material/FormGroup\";\r\nimport FormControlLabel, {\r\n FormControlLabelProps,\r\n} from \"@mui/material/FormControlLabel\";\r\nimport FormControl, { FormControlProps } from \"@mui/material/FormControl\";\r\nimport Switch, { SwitchProps } from \"@mui/material/Switch\";\r\nimport FormHelperText, {\r\n FormHelperTextProps,\r\n} from \"@mui/material/FormHelperText\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport CircularProgress, {\r\n CircularProgressProps,\r\n} from \"@mui/material/CircularProgress\";\r\nimport InputAdornment from \"@mui/material/InputAdornment\";\r\nimport { Merge, OptionsProps } from \"../types\";\r\nimport { getLabelFromValues, useOptionsFetcher } from \"../utils\";\r\n\r\ninterface extendedFiledProps extends UseFieldHookProps {\r\n options: OptionsProps[];\r\n _optionsKey?: string;\r\n disableCaching?: boolean;\r\n label: string;\r\n}\r\n\r\ntype MySwitchMixedProps = Merge<SwitchProps, extendedFiledProps>;\r\n\r\ninterface MySwitchExtendedProps {\r\n FormLabelProps?: FormLabelProps;\r\n FormGroupProps?: FormGroupProps;\r\n FormControlLabelProps?: FormControlLabelProps;\r\n FormControlProps?: FormControlProps;\r\n FormHelperTextProps?: FormHelperTextProps;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n CircularProgressProps?: CircularProgressProps;\r\n}\r\n\r\nexport type MySwitchGroupAllProps = Merge<\r\n MySwitchMixedProps,\r\n MySwitchExtendedProps\r\n>;\r\n\r\nconst valueExists = (myValue: any[] | any, value: any) => {\r\n return Array.isArray(myValue) && myValue.indexOf(value) > -1;\r\n};\r\n\r\nconst MyCheckboxGroup: FC<MySwitchGroupAllProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n shouldExclude,\r\n isReadOnly,\r\n postValidationSetCrossFieldValues,\r\n runValidationOnDependentFieldsChange,\r\n runPostValidationHookAlways,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n label,\r\n options,\r\n FormControlProps,\r\n FormLabelProps,\r\n FormGroupProps,\r\n FormHelperTextProps,\r\n FormControlLabelProps,\r\n GridProps,\r\n enableGrid,\r\n CircularProgressProps,\r\n _optionsKey,\r\n disableCaching,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n ...others\r\n}) => {\r\n const {\r\n formState,\r\n value,\r\n error,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n fieldKey,\r\n name,\r\n excluded,\r\n readOnly,\r\n dependentValues,\r\n incomingMessage,\r\n runValidation,\r\n whenToRunValidation,\r\n setIncomingMessage,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n const [_options, setOptions] = useState<OptionsProps[]>([]);\r\n const getLabelFromValuesForOptions = useCallback(\r\n (values) => getLabelFromValues(_options)(values),\r\n [_options]\r\n );\r\n\r\n const handleChangeInterceptor = useCallback(\r\n (e) => {\r\n const value = typeof e === \"object\" ? e?.target?.value ?? \"\" : e;\r\n let result = getLabelFromValuesForOptions(value);\r\n handleChange(e, result[0] as any);\r\n },\r\n [handleChange, getLabelFromValuesForOptions]\r\n );\r\n const { loadingOptions } = useOptionsFetcher(\r\n formState,\r\n options,\r\n setOptions,\r\n handleChangeInterceptor,\r\n dependentValues,\r\n incomingMessage,\r\n runValidation,\r\n whenToRunValidation,\r\n _optionsKey,\r\n disableCaching,\r\n setIncomingMessage,\r\n true,\r\n \"\",\r\n false\r\n );\r\n\r\n if (excluded) {\r\n return null;\r\n }\r\n const isError = touched && (error ?? \"\") !== \"\";\r\n const switches = _options.map((oneSwitch) => (\r\n <FormControlLabel\r\n {...FormControlLabelProps}\r\n control={\r\n <Switch\r\n {...others}\r\n readOnly={readOnly}\r\n tabIndex={readOnly ? -1 : undefined}\r\n />\r\n }\r\n key={oneSwitch.value}\r\n name={name}\r\n onChange={handleChangeInterceptor}\r\n label={oneSwitch.label}\r\n value={oneSwitch.value}\r\n checked={valueExists(value, oneSwitch.value)}\r\n />\r\n ));\r\n const result = (\r\n // @ts-ignore\r\n <FormControl\r\n {...FormControlProps}\r\n key={fieldKey}\r\n component=\"fieldset\"\r\n disabled={isSubmitting}\r\n error={!isSubmitting && isError}\r\n onBlur={handleBlur}\r\n >\r\n <FormLabel {...FormLabelProps} component=\"label\">\r\n {label}\r\n </FormLabel>\r\n <FormGroup {...FormGroupProps}>\r\n {loadingOptions ? (\r\n <InputAdornment position=\"end\">\r\n <CircularProgress\r\n color=\"primary\"\r\n variant=\"indeterminate\"\r\n {...CircularProgressProps}\r\n />\r\n </InputAdornment>\r\n ) : (\r\n switches\r\n )}\r\n </FormGroup>\r\n {!isSubmitting && isError ? (\r\n <FormHelperText {...FormHelperTextProps}>{error}</FormHelperText>\r\n ) : null}\r\n </FormControl>\r\n );\r\n\r\n if (Boolean(enableGrid)) {\r\n return <Grid {...GridProps}>{result}</Grid>;\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MyCheckboxGroup;\r\n","import { FC, useState, useEffect, useCallback, Fragment } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport Slider, { SliderProps } from \"@mui/material/Slider\";\r\nimport InputLabel, { InputLabelProps } from \"@mui/material/InputLabel\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\n\r\ninterface ExtendedFieldProps extends UseFieldHookProps {\r\n label: string;\r\n InputLabelProps?: InputLabelProps;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n}\r\n\r\nexport type AllSliderProps = ExtendedFieldProps & SliderProps;\r\n\r\nconst MySlider: FC<AllSliderProps> = ({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n shouldExclude,\r\n isReadOnly,\r\n postValidationSetCrossFieldValues,\r\n runPostValidationHookAlways,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n label,\r\n InputLabelProps,\r\n GridProps,\r\n enableGrid,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n ...others\r\n}) => {\r\n const {\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n fieldKey,\r\n name,\r\n value,\r\n excluded,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n const [localValue, setLocalValue] = useState(Number(value));\r\n useEffect(() => {\r\n setLocalValue(Number(value));\r\n }, [value]);\r\n const [focus, setFocus] = useState(false);\r\n const localValueHandler = useCallback(\r\n (_, sliderValue) => {\r\n setLocalValue(sliderValue);\r\n },\r\n [setLocalValue]\r\n );\r\n const customHandleChange = useCallback(\r\n (_, sliderValue) => {\r\n handleChange(sliderValue);\r\n },\r\n [handleChange]\r\n );\r\n const customBlur = useCallback(() => {\r\n handleBlur();\r\n setFocus(false);\r\n }, [handleBlur, setFocus]);\r\n const focusHandler = useCallback(() => {\r\n setFocus(true);\r\n }, [setFocus]);\r\n\r\n if (excluded) {\r\n return null;\r\n }\r\n const result = (\r\n // @ts-ignore\r\n <Fragment key={fieldKey}>\r\n <InputLabel {...InputLabelProps} focused={focus} disabled={isSubmitting}>\r\n {label}\r\n </InputLabel>\r\n <Slider\r\n {...others}\r\n key={fieldKey}\r\n id={fieldKey}\r\n name={name}\r\n value={localValue}\r\n //@ts-ignore\r\n disabled={isSubmitting}\r\n onFocus={focusHandler}\r\n onChange={localValueHandler}\r\n onChangeCommitted={customHandleChange}\r\n onBlur={customBlur}\r\n />\r\n </Fragment>\r\n );\r\n if (Boolean(enableGrid)) {\r\n return <Grid {...GridProps}>{result}</Grid>;\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MySlider;\r\n","import { FC, useRef, useEffect } from \"react\";\nimport { useField, UseFieldHookProps } from \"packages/form\";\n// import { KeyboardDatePickerProps } from \"@material-ui/pickers\";\nimport { DatePickerProps } from \"@mui/lab/DatePicker\";\nimport { KeyboardDatePicker } from \"components/styledComponent/datetime\";\nimport Grid, { GridProps } from \"@mui/material/Grid\";\nimport { Omit, Merge } from \"../types\";\nimport Button from \"@mui/material/Button\";\n//import { theme2 } from \"app/audit/theme\";\nimport \"./style.css\";\nimport { TextField } from \"components/styledComponent/textfield\";\nimport {\n getParsedDate,\n isValidDate,\n} from \"components/utils/utilFunctions/function\";\nimport { useTranslation } from \"react-i18next\";\n//const themeObj: any = unstable_createMuiStrictModeTheme(theme2);\ntype KeyboardDatePickerPropsSubset = Omit<\n DatePickerProps<any>,\n \"onChange\" | \"value\"\n>;\n\ninterface MyGridExtendedProps {\n GridProps?: GridProps;\n disableTimestamp?: boolean;\n enableGrid: boolean;\n}\n\nexport type MyDataPickerAllProps = Merge<\n Merge<KeyboardDatePickerPropsSubset, MyGridExtendedProps>,\n UseFieldHookProps\n>;\nexport const MyDatePicker: FC<MyDataPickerAllProps> = ({\n name: fieldName,\n validate,\n validationRun,\n shouldExclude,\n isReadOnly,\n postValidationSetCrossFieldValues,\n runPostValidationHookAlways,\n dependentFields,\n fieldKey: fieldID,\n type,\n GridProps,\n enableGrid,\n //@ts-ignore\n isFieldFocused,\n InputProps,\n inputProps,\n runValidationOnDependentFieldsChange,\n skipValueUpdateFromCrossFieldWhenReadOnly,\n required,\n disablePast,\n disableFuture,\n ...others\n}) => {\n const {\n value,\n error,\n touched,\n handleChange,\n handleBlur,\n isSubmitting,\n fieldKey,\n name,\n excluded,\n readOnly,\n } = useField({\n name: fieldName,\n fieldKey: fieldID,\n dependentFields,\n validate,\n //uncomment this line if there is any issue while validating\n validationRun, // uncommented\n /**\n * By Altaf Shaikh on 19-Jan-2024\n * keep validationRun coming from metadata for new datepicker to work on blur event\n * Reason: in onblur event validation function not call due to this comment `validationRun: \"onChange\"` and uncomment `validationRun`.\n */\n // validationRun: \"onChange\", // commented\n runPostValidationHookAlways,\n postValidationSetCrossFieldValues,\n isReadOnly,\n shouldExclude,\n runValidationOnDependentFieldsChange,\n skipValueUpdateFromCrossFieldWhenReadOnly,\n //@ts-ignore\n });\n\n const handleChangeCustom = (date) => {\n if (date !== null && isValidDate(date) && disablePast) {\n const currentDate = new Date().toLocaleDateString();\n const selectedDate = new Date(date).toLocaleDateString();\n\n if (new Date(selectedDate) < new Date(currentDate)) {\n handleChange(new Date());\n return;\n }\n }\n\n if (date !== null && isValidDate(date) && disableFuture) {\n const currentDate = new Date().toLocaleDateString();\n const selectedDate = new Date(date).toLocaleDateString();\n\n if (new Date(selectedDate) > new Date(currentDate)) {\n handleChange(new Date());\n return;\n }\n }\n handleChange(date);\n };\n\n useEffect(() => {\n if (typeof value === \"string\") {\n let result: any = getParsedDate(value);\n //@ts-ignore\n if (!isNaN(result)) {\n handleChange(result);\n }\n }\n }, [value, handleChange]);\n const { t } = useTranslation();\n const focusRef = useRef();\n useEffect(() => {\n if (isFieldFocused) {\n //@ts-ignore\n setTimeout(() => {\n //@ts-ignore\n focusRef?.current?.focus?.();\n }, 1);\n }\n }, [isFieldFocused]);\n const isError = touched && (error ?? \"\") !== \"\";\n\n if (excluded) {\n return null;\n }\n const result = (\n // <ThemeProvider theme={themeObj}>\n <KeyboardDatePicker\n {...others}\n key={fieldKey}\n value={value === \"\" || value === null ? null : getParsedDate(value)} //make sure to pass null when input is empty string\n //@ts-ignore\n tabIndex={readOnly ? -1 : undefined}\n onChange={handleChangeCustom}\n // allowKeyboardControl={true}\n //option 2 if validationRun: \"onChange\" is not set, uncomment this code\n // onClose={() => {\n // setTimeout(() => {\n // //@ts-ignore\n // focusRef?.current?.focus?.();\n // }, 1);\n // }}\n disabled={isSubmitting}\n readOnly={readOnly}\n disablePast={disablePast}\n disableFuture={disableFuture}\n slots={{\n textField: TextField,\n }}\n slotProps={{\n textField: {\n onBlur: handleBlur,\n id: fieldKey,\n name,\n autoComplete: \"off\",\n required: required,\n error: !isSubmitting && isError,\n helperText: !isSubmitting && isError ? error : null,\n inputProps: {\n tabIndex: readOnly ? -1 : undefined,\n ...inputProps,\n },\n InputProps: {\n readOnly: readOnly,\n ...InputProps,\n },\n InputLabelProps: { shrink: true },\n inputRef: focusRef,\n },\n actionBar: {\n actions: [\"today\", \"accept\", \"cancel\"],\n },\n }}\n sx={{ width: \"100%\" }}\n cancelLabel={\n <Button\n color=\"secondary\"\n style={{ border: \"1px solid rgba(128, 0, 0, 0.23)\" }}\n disableElevation\n >\n {t(\"Cancel\")}\n </Button>\n }\n okLabel={\n <Button color=\"secondary\" variant=\"contained\" disableElevation>\n {t(\"Ok\")}\n </Button>\n }\n />\n //</ThemeProvider>\n );\n if (Boolean(enableGrid)) {\n return (\n <Grid {...GridProps} key={fieldKey}>\n {result}\n </Grid>\n );\n } else {\n return result;\n }\n};\n\nexport default MyDatePicker;\n","import { FC, useEffect, useRef } from \"react\";\nimport { useField, UseFieldHookProps } from \"packages/form\";\n// import { KeyboardTimePickerProps } from \"@material-ui/pickers\";\nimport { TimePickerProps } from \"@mui/lab/TimePicker\";\nimport { KeyboardTimePicker } from \"components/styledComponent/datetime\";\nimport Grid, { GridProps } from \"@mui/material/Grid\";\n\nimport { Omit, Merge } from \"../types\";\n\n//import { theme2 } from \"app/audit/theme\";\nimport \"./styleTimepicker.css\";\nimport { TextField } from \"components/styledComponent\";\n// import {\n// ThemeProvider,\n// unstable_createMuiStrictModeTheme,\n// } from \"@material-ui/core\";\n// const themeObj = unstable_createMuiStrictModeTheme(theme2);\n\ntype KeyboardTimePickerPropsSubset = Omit<\n TimePickerProps<any>,\n \"onChange\" | \"value\"\n>;\n\ninterface MyGridExtendedProps {\n GridProps?: GridProps;\n enableGrid: boolean;\n}\n\nexport type MyTimeTimePickerAllProps = Merge<\n Merge<KeyboardTimePickerPropsSubset, MyGridExtendedProps>,\n UseFieldHookProps\n>;\n\nexport const MyTimePicker: FC<MyTimeTimePickerAllProps> = ({\n name: fieldName,\n validate,\n validationRun,\n shouldExclude,\n isReadOnly,\n postValidationSetCrossFieldValues,\n runPostValidationHookAlways,\n dependentFields,\n fieldKey: fieldID,\n type,\n GridProps,\n enableGrid,\n //@ts-ignore\n isFieldFocused,\n InputProps,\n inputProps,\n runValidationOnDependentFieldsChange,\n skipValueUpdateFromCrossFieldWhenReadOnly,\n required,\n ...others\n}) => {\n const {\n value,\n error,\n touched,\n handleChange,\n handleBlur,\n isSubmitting,\n fieldKey,\n name,\n excluded,\n readOnly,\n } = useField({\n name: fieldName,\n fieldKey: fieldID,\n dependentFields,\n validate,\n //uncomment this line if there is any issue while validating\n //validationRun,\n validationRun: \"onChange\",\n runPostValidationHookAlways,\n postValidationSetCrossFieldValues,\n isReadOnly,\n shouldExclude,\n runValidationOnDependentFieldsChange,\n skipValueUpdateFromCrossFieldWhenReadOnly,\n });\n useEffect(() => {\n if (typeof value === \"string\") {\n let result = new Date(value);\n //console.log(value, result);\n //@ts-ignore\n if (!isNaN(result)) {\n handleChange(result);\n }\n }\n }, [value, handleChange]);\n const focusRef = useRef();\n useEffect(() => {\n if (isFieldFocused) {\n //@ts-ignore\n setTimeout(() => {\n //@ts-ignore\n focusRef?.current?.focus?.();\n }, 1);\n }\n }, [isFieldFocused]);\n const isError = touched && (error ?? \"\") !== \"\";\n\n if (excluded) {\n return null;\n }\n const result = (\n //<ThemeProvider theme={themeObj}>\n <KeyboardTimePicker\n {...others}\n key={fieldKey}\n id={fieldKey}\n name={name}\n value={value === \"\" ? null : new Date(value)} //make sure to pass null when input is empty string\n // @ts-ignore\n onChange={handleChange}\n disabled={isSubmitting}\n readOnly={readOnly}\n slots={{\n textField: TextField,\n }}\n slotProps={{\n textField: {\n onBlur: handleBlur,\n error: !isSubmitting && isError,\n helperText: !isSubmitting && isError ? error : null,\n inputProps: {\n tabIndex: readOnly ? -1 : undefined,\n ...inputProps,\n },\n InputLabelProps: {\n shrink: true,\n },\n InputProps: {\n readOnly: readOnly,\n tabIndex: readOnly ? -1 : undefined,\n ...InputProps,\n },\n required: required,\n },\n }}\n />\n //</ThemeProvider>\n );\n if (Boolean(enableGrid)) {\n return (\n <Grid {...GridProps} key={fieldKey}>\n {result}\n </Grid>\n );\n } else {\n return result;\n }\n};\n\nexport default MyTimePicker;\n","import { FC, useRef, useEffect } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\n// import { KeyboardDateTimePickerProps } from \"@material-ui/pickers\";\r\nimport { DateTimePickerProps } from \"@mui/lab/DateTimePicker\";\r\nimport { KeyboardDateTimePicker } from \"components/styledComponent/datetime\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\n\r\nimport { Omit, Merge } from \"../types\";\r\nimport { TextField } from \"components/styledComponent/textfield\";\r\nimport {\r\n getParsedDate,\r\n isValidDate,\r\n} from \"components/utils/utilFunctions/function\";\r\n\r\ntype KeyboardDateTimePickerPropsSubset = Omit<\r\n DateTimePickerProps<any>,\r\n \"onChange\" | \"value\"\r\n>;\r\n\r\ninterface MyGridExtendedProps {\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n}\r\n\r\nexport type MyDateTimePickerAllProps = Merge<\r\n Merge<KeyboardDateTimePickerPropsSubset, MyGridExtendedProps>,\r\n UseFieldHookProps\r\n>;\r\n\r\nexport const MyDateTimePicker: FC<MyDateTimePickerAllProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n shouldExclude,\r\n isReadOnly,\r\n postValidationSetCrossFieldValues,\r\n runPostValidationHookAlways,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n type,\r\n GridProps,\r\n enableGrid,\r\n //@ts-ignore\r\n isFieldFocused,\r\n InputProps,\r\n inputProps,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n disablePast,\r\n disableFuture,\r\n ...others\r\n}) => {\r\n const {\r\n value,\r\n error,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n fieldKey,\r\n name,\r\n excluded,\r\n readOnly,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n //uncomment this line if there is any issue while validating\r\n validationRun, // uncommented\r\n /**\r\n * By Altaf Shaikh on 19-Jan-2024\r\n * keep validationRun coming from metadata for new datepicker to work on blur event\r\n * Reason: in onblur event validation function not call due to this comment `validationRun: \"onChange\"` and uncomment `validationRun`.\r\n */\r\n // validationRun: \"onChange\", // commented\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n\r\n const handleChangeCustom = (date) => {\r\n if (date !== null && isValidDate(date) && disablePast) {\r\n const currentDate = new Date().toLocaleDateString();\r\n const selectedDate = new Date(date).toLocaleDateString();\r\n\r\n if (new Date(selectedDate) < new Date(currentDate)) {\r\n handleChange(new Date());\r\n return;\r\n }\r\n }\r\n\r\n if (date !== null && isValidDate(date) && disableFuture) {\r\n const currentDate = new Date().toLocaleDateString();\r\n const selectedDate = new Date(date).toLocaleDateString();\r\n\r\n if (new Date(selectedDate) > new Date(currentDate)) {\r\n handleChange(new Date());\r\n return;\r\n }\r\n }\r\n handleChange(date);\r\n };\r\n\r\n useEffect(() => {\r\n if (typeof value === \"string\") {\r\n let result: any = getParsedDate(value);\r\n //@ts-ignore\r\n if (!isNaN(result)) {\r\n handleChange(result);\r\n }\r\n }\r\n }, [value, handleChange]);\r\n const focusRef = useRef();\r\n useEffect(() => {\r\n if (isFieldFocused) {\r\n //@ts-ignore\r\n setTimeout(() => {\r\n //@ts-ignore\r\n focusRef?.current?.focus?.();\r\n }, 1);\r\n }\r\n }, [isFieldFocused]);\r\n\r\n const isError = touched && (error ?? \"\") !== \"\";\r\n if (excluded) {\r\n return null;\r\n }\r\n\r\n const result = (\r\n <KeyboardDateTimePicker\r\n {...others}\r\n key={fieldKey}\r\n value={value === \"\" || value === null ? null : getParsedDate(value)} //make sure to pass null when input is empty string\r\n views={[\"year\", \"month\", \"day\", \"hours\", \"minutes\", \"seconds\"]}\r\n disablePast={disablePast}\r\n disableFuture={disableFuture}\r\n //@ts-ignore\r\n onChange={handleChangeCustom}\r\n disabled={isSubmitting}\r\n readOnly={readOnly}\r\n slots={{\r\n textField: TextField,\r\n }}\r\n slotProps={{\r\n textField: {\r\n name,\r\n id: fieldKey,\r\n onBlur: handleBlur,\r\n error: !isSubmitting && isError,\r\n helperText: !isSubmitting && isError ? error : null,\r\n inputProps: {\r\n tabIndex: readOnly ? -1 : undefined,\r\n ...inputProps,\r\n },\r\n InputProps: {\r\n readOnly: readOnly,\r\n ...InputProps,\r\n },\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n },\r\n actionBar: {\r\n actions: [\"today\", \"accept\", \"cancel\"],\r\n },\r\n }}\r\n sx={{ width: \"100%\" }}\r\n />\r\n );\r\n if (Boolean(enableGrid)) {\r\n return (\r\n <Grid {...GridProps} key={fieldKey}>\r\n {result}\r\n </Grid>\r\n );\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MyDateTimePicker;\r\n","import { FC, Fragment, useState, useCallback } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\n// import Rating, { RatingProps } from \"@material-ui/lab/Rating\";\r\nimport Rating, { RatingProps } from \"@mui/material/Rating\";\r\nimport InputLabel, { InputLabelProps } from \"@mui/material/InputLabel\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport { Merge } from \"../types\";\r\n\r\ninterface ExtendedFieldProps extends UseFieldHookProps {\r\n label: string;\r\n InputLabelProps?: InputLabelProps;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n}\r\n\r\nexport type AllRatingProps = Merge<RatingProps, ExtendedFieldProps>;\r\n\r\nconst MyRating: FC<AllRatingProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n shouldExclude,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n runPostValidationHookAlways,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n label,\r\n InputLabelProps,\r\n GridProps,\r\n enableGrid,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n ...others\r\n}) => {\r\n const {\r\n value,\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n fieldKey,\r\n name,\r\n excluded,\r\n readOnly,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n const [focus, setFocus] = useState(false);\r\n const customBlur = useCallback(() => {\r\n handleBlur();\r\n setFocus(false);\r\n }, [handleBlur, setFocus]);\r\n const focusHandler = useCallback(() => {\r\n setFocus(true);\r\n }, [setFocus]);\r\n const customChange = useCallback(\r\n (_, value) => {\r\n handleChange(value);\r\n },\r\n [handleChange]\r\n );\r\n if (excluded) {\r\n return null;\r\n }\r\n const result = (\r\n <Fragment key={fieldKey}>\r\n <InputLabel {...InputLabelProps} focused={focus} disabled={isSubmitting}>\r\n {label}\r\n </InputLabel>\r\n <Rating\r\n {...others}\r\n key={fieldKey}\r\n id={fieldKey}\r\n name={name}\r\n value={value === \"\" ? 0 : value}\r\n //@ts-ignore\r\n onFocus={focusHandler}\r\n onChange={customChange}\r\n onBlur={customBlur}\r\n disabled={isSubmitting}\r\n readOnly={readOnly}\r\n tabIndex={readOnly ? -1 : undefined}\r\n />\r\n </Fragment>\r\n );\r\n if (Boolean(enableGrid)) {\r\n return (\r\n <Grid {...GridProps} key={fieldKey}>\r\n {result}\r\n </Grid>\r\n );\r\n }\r\n return result;\r\n};\r\n\r\nexport default MyRating;\r\n","import ToggleButtonGroup from \"@mui/material/ToggleButtonGroup\";\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst StyledToggleButtonGroup = withStyles((theme) => ({\r\n grouped: {\r\n marginRight: theme.spacing(2),\r\n marginTop: theme.spacing(1),\r\n borderColor: \"#8C8C8C\",\r\n transition: \"border 0.3s ease-in\",\r\n borderRadius: \"8px\",\r\n textTransform: \"capitalize\",\r\n color: \"#727272\",\r\n padding: \"4px 10px\",\r\n //@ts-ignore\r\n fontWeight: 700,\r\n \"&:not(:first-child)\": {\r\n borderRadius: \"8px\",\r\n borderLeft: \"1px solid #8C8C8C\",\r\n },\r\n \"&:first-child\": {\r\n borderRadius: \"8px\",\r\n },\r\n \"&.Mui-selected\": {\r\n border: \"1px solid #57D3C3\",\r\n background:\r\n \"linear-gradient(0deg, rgba(94,231,131,1) 0%, rgba(74,205,159,1) 10%, rgba(33,150,218,1) 100%)\",\r\n color: \"white\",\r\n },\r\n \"& label\": {\r\n color: \"#736f6f\",\r\n fontWeight: \"600\",\r\n textTransform: \"capitalize\",\r\n fontSize: \"1rem\",\r\n marginBottom: \"0.5 rem\",\r\n },\r\n \"& .MuiSvgIcon-root\": {\r\n maxHeight: \"20px\",\r\n },\r\n },\r\n}))(ToggleButtonGroup);\r\n\r\nexport default StyledToggleButtonGroup;\r\n","import { FC } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport ToggleButton, { ToggleButtonProps } from \"@mui/material/ToggleButton\";\r\nimport { ToggleButtonGroupProps } from \"@mui/material/ToggleButtonGroup\";\r\nimport { ToggleButtonGroup } from \"components/styledComponent/toggleButtonGroup\";\r\nimport FormControl, { FormControlProps } from \"@mui/material/FormControl\";\r\nimport FormLabel, { FormLabelProps } from \"@mui/material/FormLabel\";\r\nimport { Merge } from \"../types\";\r\nimport PersonIcon from \"@mui/icons-material/Person\";\r\nimport BusinessIcon from \"@mui/icons-material/Business\";\r\n\r\ninterface CustomProps {\r\n iconName?: \"business\" | \"person\";\r\n label: string;\r\n value: any;\r\n}\r\n\r\ninterface extendedFiledProps extends UseFieldHookProps {\r\n label: string;\r\n options: CustomProps[];\r\n}\r\n\r\ntype MyToggleMixedProps = Merge<ToggleButtonGroupProps, extendedFiledProps>;\r\n\r\ninterface MyToggleExtendedProps {\r\n ToggleButtonProps?: ToggleButtonProps;\r\n GridProps?: GridProps;\r\n FormControlProps?: FormControlProps;\r\n FormLabelProps?: FormLabelProps;\r\n enableGrid: boolean;\r\n}\r\n\r\nexport type MyAllToggleButtonGroupProps = Merge<\r\n MyToggleMixedProps,\r\n MyToggleExtendedProps\r\n>;\r\n\r\nconst MyToggleButtonGroupProps: FC<MyAllToggleButtonGroupProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n shouldExclude,\r\n isReadOnly,\r\n postValidationSetCrossFieldValues,\r\n runValidationOnDependentFieldsChange,\r\n runPostValidationHookAlways,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n options,\r\n ToggleButtonProps,\r\n GridProps,\r\n enableGrid,\r\n label,\r\n //@ts-ignore\r\n isFieldFocused,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n ...others\r\n}) => {\r\n const { value, handleChange, handleBlur, isSubmitting, fieldKey, excluded } =\r\n useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n runValidationOnDependentFieldsChange,\r\n isReadOnly,\r\n shouldExclude,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n if (excluded) {\r\n return null;\r\n }\r\n\r\n const toggleButtons = options.map((one) => (\r\n <ToggleButton\r\n {...ToggleButtonProps}\r\n key={one.value}\r\n value={one.value}\r\n disabled={isSubmitting}\r\n >\r\n {one.iconName === \"business\" ? (\r\n <BusinessIcon />\r\n ) : one.iconName === \"person\" ? (\r\n <PersonIcon />\r\n ) : null}\r\n {/*need to change this from span to typography */}\r\n <span>{one.label}</span>\r\n </ToggleButton>\r\n ));\r\n const result = (\r\n <FormControl disabled={isSubmitting}>\r\n <FormLabel>{label}</FormLabel>\r\n <ToggleButtonGroup\r\n {...others}\r\n value={value}\r\n onChange={(e, newValue) => {\r\n handleChange(newValue);\r\n }}\r\n //@ts-ignore\r\n onBlur={handleBlur}\r\n >\r\n {toggleButtons}\r\n </ToggleButtonGroup>\r\n </FormControl>\r\n );\r\n\r\n if (Boolean(enableGrid)) {\r\n return (\r\n <Grid {...GridProps} key={fieldKey}>\r\n {result}\r\n </Grid>\r\n );\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MyToggleButtonGroupProps;\r\n","import { FC, Fragment } from \"react\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport Hidden, { HiddenProps } from \"@mui/material/Hidden\";\r\n\r\nexport interface SpacerProps {\r\n HiddenProps?: HiddenProps;\r\n GridProps?: GridProps;\r\n name: string;\r\n}\r\n\r\nconst Spacer: FC<SpacerProps> = ({ name, HiddenProps, GridProps }) => {\r\n return (\r\n <Fragment key={name}>\r\n <Hidden {...HiddenProps}>\r\n <Grid item={true} {...GridProps} />\r\n </Hidden>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default Spacer;\r\n","import {\n FC,\n useEffect,\n useRef,\n useState,\n Fragment,\n ComponentType,\n HTMLAttributes,\n lazy,\n Suspense,\n} from \"react\";\nimport { TextFieldProps } from \"@mui/material/TextField\";\nimport CircularProgress, {\n CircularProgressProps,\n} from \"@mui/material/CircularProgress\";\n\n// import Autocomplete, {\n// AutocompleteProps,\n// createFilterOptions,\n// } from \"@material-ui/lab/Autocomplete\";\n\nimport Autocomplete, {\n AutocompleteProps,\n createFilterOptions,\n} from \"@mui/material/Autocomplete\";\n\n// import { CreateFilterOptionsConfig } from \"@material-ui/lab/useAutocomplete\";\nimport { CreateFilterOptionsConfig } from \"@mui/material/useAutocomplete\";\nimport { Checkbox } from \"components/styledComponent/checkbox\";\nimport { TextField } from \"components/styledComponent/textfield\";\nimport { Merge, OptionsProps, OptionsFn } from \"../types\";\nimport Chip, { ChipProps } from \"@mui/material/Chip\";\nimport match from \"autosuggest-highlight/match\";\nimport parse from \"autosuggest-highlight/parse\";\nimport { useOptionsFetcherSimple } from \"../utils\";\n\nconst ListBoxComponentVirtualized = lazy(() =>\n import(\"./virtualized\").then((module) => ({\n default: module.ListBoxComponent,\n }))\n);\n//will use it if there is a neeed for advance sorter\n//import matchSorter from \"match-sorter\";\n\ninterface AutoCompleteExtendedProps {\n label?: string;\n options: OptionsProps[] | OptionsFn;\n _optionsKey?: string;\n error: string;\n touched: boolean;\n handleBlur?: any;\n handleChange?: any;\n showCheckbox?: boolean;\n CircularProgressProps?: CircularProgressProps;\n TextFieldProps?: TextFieldProps;\n ChipProps?: ChipProps;\n CreateFilterOptionsConfig?: CreateFilterOptionsConfig<OptionsProps>;\n placeholder?: string;\n required?: boolean;\n enableVirtualized?: boolean;\n disableCaching?: boolean;\n optionsProps?: any;\n}\n\nconst getOptionLabel = (option: OptionsProps) => option?.label ?? \"\";\nconst getOptionValue = (option: OptionsProps) => option?.value ?? \"\";\n\ntype MyAutocompleteProps = Merge<\n AutocompleteProps<OptionsProps, true, true, true>,\n AutoCompleteExtendedProps\n>;\n\nexport const AutocompleteRenderOnly: FC<MyAutocompleteProps> = ({\n label,\n showCheckbox,\n CircularProgressProps,\n TextFieldProps,\n ChipProps,\n CreateFilterOptionsConfig,\n placeholder,\n required,\n enableVirtualized,\n handleBlur,\n handleChange,\n freeSolo,\n multiple,\n options,\n error,\n touched,\n disableClearable,\n value,\n _optionsKey,\n disableCaching,\n optionsProps,\n ...others\n}) => {\n const isTouched = Boolean(touched);\n const isError = isTouched && Boolean(error);\n\n const [_options, setOptions] = useState<OptionsProps[]>([]);\n const [lastUpdatedTime, setLastUpdatedTime] = useState(new Date().getTime());\n const initDoneRef = useRef(false);\n const defaultValueRef = useRef<any>(null);\n const { loadingOptions } = useOptionsFetcherSimple(\n options,\n setOptions,\n _optionsKey,\n disableCaching,\n optionsProps,\n true,\n \"\",\n false\n );\n\n //to set the default value\n useEffect(() => {\n let _internalValue: any | any[] = value;\n if (\n !initDoneRef.current &&\n Boolean(_internalValue) &&\n _options.length > 0 &&\n _options[0].value !== \"00\" &&\n _options[0].value !== null\n ) {\n if (!Array.isArray(_internalValue)) {\n _internalValue = [value];\n }\n let answers: OptionsProps[] = [];\n for (let i = 0; i < _options.length && _internalValue.length > 0; i++) {\n let foundIndex = _internalValue.findIndex((one) =>\n /* eslint-disable eqeqeq */\n one == _options[i].value ? true : false\n );\n if (foundIndex > -1) {\n answers.push(_options[i]);\n const prev = _internalValue.slice(0, foundIndex);\n const next = _internalValue.slice(foundIndex + 1);\n _internalValue = [...prev, ...next];\n }\n }\n initDoneRef.current = true;\n if (multiple) {\n defaultValueRef.current = answers;\n } else {\n defaultValueRef.current = answers[0];\n }\n setLastUpdatedTime(new Date().getTime());\n }\n }, [loadingOptions, _options, value, multiple]);\n\n return (\n <Suspense fallback={\"loading...\"}>\n <Autocomplete\n {...others}\n key={`${lastUpdatedTime}`}\n //@ts-ignore\n multiple={multiple}\n disableClearable={disableClearable}\n freeSolo={freeSolo}\n options={_options}\n // @ts-ignore\n getOptionLabel={getOptionLabel}\n ListboxComponent={\n Boolean(enableVirtualized)\n ? (ListBoxComponentVirtualized as ComponentType<\n HTMLAttributes<HTMLElement>\n >)\n : undefined\n }\n onChange={(_, value) => {\n if (!Array.isArray(value)) {\n value = [value];\n }\n value = value.map((one) => {\n if (typeof one === \"object\") {\n if (!Boolean(freeSolo)) {\n return getOptionValue(one);\n }\n return getOptionLabel(one);\n }\n return one;\n });\n\n if (!Boolean(multiple) && Array.isArray(value)) {\n //@ts-ignore\n handleChange(value[0]);\n } else {\n handleChange(value);\n }\n }}\n onBlur={handleBlur}\n //@ts-ignore\n filterOptions={\n Boolean(CreateFilterOptionsConfig) &&\n typeof CreateFilterOptionsConfig === \"object\"\n ? createFilterOptions(CreateFilterOptionsConfig)\n : undefined\n }\n renderTags={(value, getTagProps) => {\n return value.map((option, index) => {\n if (typeof option === \"string\") {\n return (\n <Chip\n variant=\"outlined\"\n {...ChipProps}\n label={option}\n {...getTagProps({ index })}\n key={option}\n />\n );\n }\n return (\n <Chip\n variant=\"outlined\"\n {...ChipProps}\n label={option.label}\n {...getTagProps({ index })}\n key={`${option.label}-${index}`}\n />\n );\n });\n }}\n renderInput={(params) => (\n <TextField\n {...TextFieldProps}\n {...params}\n label={label}\n placeholder={placeholder}\n autoComplete=\"disabled\"\n type=\"text\"\n error={isError}\n required={required}\n helperText={isError ? error : null}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <Fragment>\n {loadingOptions ? (\n <CircularProgress\n color=\"primary\"\n variant=\"indeterminate\"\n {...CircularProgressProps}\n />\n ) : null}\n {params.InputProps.endAdornment}\n </Fragment>\n ),\n }}\n InputLabelProps={{\n shrink: true,\n }}\n inputProps={{\n ...params.inputProps,\n autoComplete: \"new-user-street-address\",\n }}\n />\n )}\n renderOption={(props, option, other) => {\n props[\"key\"] = props[\"id\"];\n let { selected, inputValue } = other;\n let label = getOptionLabel(option as OptionsProps);\n const matches = match(label, inputValue);\n const parts = parse(label, matches);\n const labelJSX = parts.map((part, index) => (\n <span\n key={index}\n style={{ fontWeight: part.highlight ? 700 : 400 }}\n >\n {part.text}\n </span>\n ));\n return (\n <li style={{ whiteSpace: \"pre\" }} {...props}>\n {showCheckbox ? <Checkbox checked={selected} /> : null}\n {labelJSX}\n </li>\n );\n }}\n />\n </Suspense>\n );\n};\n","import { FC, useEffect, useRef } from \"react\";\r\nimport {\r\n useField,\r\n UseFieldHookProps,\r\n transformDependentFieldsState,\r\n} from \"packages/form\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport { TextField } from \"components/styledComponent\";\r\nimport { TextFieldProps } from \"@mui/material/TextField\";\r\nimport { NumericFormat } from \"react-number-format\";\r\nimport { Merge } from \"../types\";\r\n\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\ninterface VisaversaProps {\r\n leftName: string;\r\n rightName: string;\r\n leftLabel: string;\r\n rightLabel: string;\r\n leftTransform: any;\r\n rightTransform: any;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n}\r\n\r\nexport type MyTextFieldAllProps = Merge<TextFieldProps, VisaversaProps>;\r\n\r\nexport type MyVisaversaProps = UseFieldHookProps & MyTextFieldAllProps;\r\n\r\nfunction NumberFormatCustom(props) {\r\n const { inputRef, onChange, FormatProps, ...other } = props;\r\n return (\r\n <NumericFormat\r\n {...other}\r\n getInputRef={inputRef}\r\n onValueChange={(values) => {\r\n onChange(\r\n {\r\n target: {\r\n value: values.value,\r\n formattedValue: values.formattedValue,\r\n },\r\n },\r\n values.formattedValue\r\n );\r\n }}\r\n {...FormatProps}\r\n />\r\n );\r\n}\r\n\r\nfunction PercentageFormatCustom(props) {\r\n const { inputRef, onChange, FormatProps, ...other } = props;\r\n return (\r\n <NumericFormat\r\n {...other}\r\n getInputRef={inputRef}\r\n onValueChange={(values) => {\r\n onChange(\r\n {\r\n target: {\r\n value: values.value,\r\n formattedValue: values.formattedValue,\r\n },\r\n },\r\n values.formattedValue\r\n );\r\n }}\r\n {...FormatProps}\r\n />\r\n );\r\n}\r\n\r\nconst Visaversa: FC<MyVisaversaProps> = ({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n validate,\r\n leftName,\r\n rightName,\r\n leftLabel,\r\n rightLabel,\r\n leftTransform = (value) => value,\r\n rightTransform = (value) => value,\r\n GridProps,\r\n enableGrid,\r\n dependentFields,\r\n validationRun,\r\n runValidationOnDependentFieldsChange,\r\n}) => {\r\n const {\r\n touched,\r\n value,\r\n error,\r\n setValue,\r\n handleBlur,\r\n isSubmitting,\r\n dependentValues,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n validate,\r\n validationRun,\r\n dependentFields,\r\n runValidationOnDependentFieldsChange,\r\n });\r\n const leftValue = value[leftName];\r\n const rightValue = value[rightName];\r\n\r\n const leftValueRef = useRef<any>(leftValue);\r\n leftValueRef.current = leftValue;\r\n\r\n const rightValueRef = useRef<any>(rightValue);\r\n rightValueRef.current = rightValue;\r\n\r\n useEffect(() => {\r\n let newDependentValues = transformDependentFieldsState(dependentValues);\r\n\r\n let leftResult = leftTransform(\r\n leftValueRef.current,\r\n leftName,\r\n newDependentValues\r\n );\r\n let rightResult = rightTransform(\r\n rightValueRef.current,\r\n rightName,\r\n newDependentValues\r\n );\r\n if (leftResult === null && rightResult === null) {\r\n return;\r\n }\r\n setValue(\r\n { [leftName]: leftResult, [rightName]: rightResult },\r\n { [leftName]: leftResult, [rightName]: rightResult },\r\n true\r\n );\r\n }, [dependentValues]);\r\n\r\n const handleLeftChange = (e) => {\r\n let value = e.target.value;\r\n let result = rightTransform(\r\n value,\r\n rightName,\r\n transformDependentFieldsState(dependentValues)\r\n );\r\n setValue(\r\n { [leftName]: value, [rightName]: result },\r\n { [leftName]: value, [rightName]: result },\r\n true\r\n );\r\n };\r\n\r\n const handleRightChange = (e) => {\r\n let value = e.target.value;\r\n let result = leftTransform(\r\n value,\r\n leftName,\r\n transformDependentFieldsState(dependentValues)\r\n );\r\n setValue(\r\n { [leftName]: result, [rightName]: value },\r\n { [leftName]: result, [rightName]: value },\r\n true\r\n );\r\n };\r\n\r\n const isError = touched && (error ?? \"\") !== \"\";\r\n let result = (\r\n <div style={{ display: \"flex\" }} tabIndex={0} onBlur={handleBlur}>\r\n <TextField\r\n key=\"left\"\r\n id=\"left\"\r\n name={leftName}\r\n value={leftValue}\r\n label={leftLabel}\r\n onChange={handleLeftChange}\r\n disabled={isSubmitting}\r\n error={!isSubmitting && isError}\r\n helperText={!isSubmitting && isError ? error : \"\"}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n InputProps={{\r\n //@ts-ignore\r\n inputComponent: NumberFormatCustom,\r\n inputProps: {\r\n FormatProps: {\r\n thousandSeparator: true,\r\n prefix: \"৳\",\r\n thousandsGroupStyle: \"lakh\",\r\n allowNegative: true,\r\n allowLeadingZeros: false,\r\n decimalScale: 2,\r\n isAllowed: (values) => {\r\n if (values?.value?.length > 10) {\r\n return false;\r\n }\r\n if (values.floatValue === 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n <TextField\r\n key=\"right\"\r\n id=\"right\"\r\n name={rightName}\r\n label={rightLabel}\r\n value={rightValue}\r\n onChange={handleRightChange}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n InputProps={{\r\n //@ts-ignore\r\n inputComponent: PercentageFormatCustom,\r\n inputProps: {\r\n FormatProps: {\r\n suffix: \"%\",\r\n decimalScale: 2,\r\n fixedDecimalScale: true,\r\n allowNegative: true,\r\n allowEmptyFormatting: true,\r\n isAllowed: (values) => {\r\n //@ts-ignore\r\n if (values.floatValue >= 999.99) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n },\r\n },\r\n }}\r\n />\r\n </div>\r\n );\r\n if (Boolean(enableGrid)) {\r\n return <Grid {...GridProps}>{result}</Grid>;\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default Visaversa;\r\n","import Button from \"@mui/material/Button\";\r\nimport { Fragment } from \"react\";\r\n\r\nexport const ActionCell = ({\r\n requestRowEdit,\r\n currentEditRow,\r\n saveCurrentRow,\r\n cancelCurrentRowEdit,\r\n row: { id },\r\n}) => {\r\n return (\r\n <div style={{ display: \"flex\", alignItems: \"start\" }}>\r\n {currentEditRow === id ? (\r\n <Fragment>\r\n <Button\r\n onClick={() => saveCurrentRow(id)}\r\n size=\"small\"\r\n variant=\"outlined\"\r\n disableRipple={true}\r\n >\r\n Done\r\n </Button>\r\n <Button\r\n onClick={() => cancelCurrentRowEdit(id)}\r\n size=\"small\"\r\n variant=\"outlined\"\r\n disableRipple={true}\r\n >\r\n Cancel\r\n </Button>\r\n </Fragment>\r\n ) : (\r\n <Button\r\n onClick={() => requestRowEdit(id)}\r\n size=\"small\"\r\n variant=\"outlined\"\r\n disableRipple={true}\r\n >\r\n Edit\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import { useMemo } from \"react\";\r\n\r\nconst renderStyle = new Intl.NumberFormat(\"en-IN\", {\r\n style: \"currency\",\r\n currency: \"INR\",\r\n});\r\n\r\nexport const DefaultFooterCell = ({\r\n rows,\r\n column: { id: columnName, footerRenderStyle },\r\n}) => {\r\n const total = useMemo(\r\n () =>\r\n rows.reduce((sum, row) => Number(row.values?.[columnName] ?? 0) + sum, 0),\r\n [rows, columnName]\r\n );\r\n let renderResult = isNaN(total) ? \"\" : total;\r\n if (footerRenderStyle === \"currency\") {\r\n renderResult = renderStyle.format(total);\r\n }\r\n return (\r\n <span\r\n style={{\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {renderResult}\r\n </span>\r\n );\r\n};\r\n","import Typography from \"@mui/material/Typography\";\r\n\r\nexport const DefaultCell = ({ value }) => {\r\n return (\r\n <Typography\r\n component=\"span\"\r\n variant=\"subtitle2\"\r\n style={{ whiteSpace: \"nowrap\" }}\r\n >\r\n {value}\r\n </Typography>\r\n );\r\n};\r\n","import {\r\n createContext,\r\n forwardRef,\r\n useImperativeHandle,\r\n useMemo,\r\n useEffect,\r\n useState,\r\n useCallback,\r\n} from \"react\";\r\n\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nexport const RowContext = createContext<any>({});\r\n\r\nexport const RowContextProvider = forwardRef<any, any>(\r\n (\r\n {\r\n currentRowError,\r\n currentRowObj,\r\n children,\r\n initialData,\r\n rowValidator,\r\n setFormError,\r\n prevRows,\r\n nextRows,\r\n },\r\n ref\r\n ) => {\r\n const initialTouched = useMemo(() => {\r\n let touchedObj = {};\r\n for (const one in initialData) {\r\n touchedObj[one] = false;\r\n }\r\n return touchedObj;\r\n }, []);\r\n const [error, setError] = useState({});\r\n const [isError, setIsError] = useState(false);\r\n const [currentRow, setCurrentRow] = useState(initialData);\r\n const [touched, setTouched] = useState(initialTouched);\r\n\r\n const touchAll = useCallback(() => {\r\n let touchAll = {};\r\n for (const one in initialTouched) {\r\n touchAll[one] = true;\r\n }\r\n setTouched(touchAll);\r\n }, [initialTouched]);\r\n\r\n useImperativeHandle(ref, () => ({\r\n touchAll: touchAll,\r\n }));\r\n\r\n const setCellValue = useCallback((value) => {\r\n setCurrentRow((old) => {\r\n let result = { ...old, ...value };\r\n currentRowObj.current = result;\r\n return result;\r\n });\r\n }, []);\r\n\r\n const setCellTouched = useCallback((value) => {\r\n setTouched((old) => {\r\n let result = { ...old, ...value };\r\n return result;\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n const executeValidation = async (obj, prevRows, nextRows) => {\r\n try {\r\n await rowValidator(obj, prevRows, nextRows);\r\n setError({});\r\n setIsError(false);\r\n currentRowError.current = {};\r\n } catch (e: any) {\r\n setError(e);\r\n setIsError(true);\r\n currentRowError.current = e;\r\n }\r\n };\r\n executeValidation(currentRow, prevRows, nextRows);\r\n }, [currentRow]);\r\n\r\n useEffect(() => {\r\n isError ? setFormError(\"has error\") : setFormError(\"\");\r\n }, [isError]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n setFormError(\"\");\r\n };\r\n }, []);\r\n\r\n return (\r\n <RowContext.Provider\r\n value={{ error, currentRow, setCellValue, touched, setCellTouched }}\r\n >\r\n {children}\r\n </RowContext.Provider>\r\n );\r\n }\r\n);\r\n","import { useContext } from \"react\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport { RowContext } from \"./rowContext\";\r\nimport { DefaultCell } from \"./defaultCell\";\r\n\r\n/* eslint-disable no-self-compare */\r\n\r\nexport const TextFieldCell = (props) => {\r\n const {\r\n column: { id: columnName, type, clearFields, maxLength = NaN },\r\n row: { id },\r\n currentEditRow,\r\n } = props;\r\n if (currentEditRow === id) {\r\n return (\r\n <MyTextField\r\n key={columnName}\r\n columnName={columnName}\r\n type={type ?? \"text\"}\r\n clearFields={clearFields}\r\n maxLength={maxLength}\r\n />\r\n );\r\n } else {\r\n return <DefaultCell {...props} />;\r\n }\r\n};\r\n\r\nexport const MyTextField = ({ columnName, type, clearFields, maxLength }) => {\r\n const { error, setCellValue, currentRow, touched, setCellTouched } =\r\n useContext(RowContext);\r\n\r\n return (\r\n <TextField\r\n type={type}\r\n value={currentRow?.[columnName]}\r\n size=\"small\"\r\n variant=\"outlined\"\r\n onChange={(e) => {\r\n if (maxLength !== maxLength || e.target.value.length <= maxLength) {\r\n setCellValue({ [columnName]: e.target.value, ...clearFields });\r\n }\r\n }}\r\n helperText={touched?.[columnName] && error?.[columnName]}\r\n error={Boolean(touched?.[columnName]) && Boolean(error?.[columnName])}\r\n onBlur={() => setCellTouched({ [columnName]: true })}\r\n fullWidth\r\n />\r\n );\r\n};\r\n","import { useContext } from \"react\";\r\nimport { NumberFormatCustom } from \"components/derived/numberFormat\";\r\nimport { TextFieldForSelect as TextField } from \"components/styledComponent/textfield\";\r\nimport { RowContext } from \"./rowContext\";\r\nimport { numWords } from \"components/common/utils\";\r\nimport Typography from \"@mui/material/Typography\";\r\n\r\nlet currencyFormatter = new Intl.NumberFormat(\"en-IN\", {\r\n style: \"currency\",\r\n currency: \"INR\",\r\n});\r\n\r\nexport const DisplayCell = ({ value, displayStyle }) => {\r\n let finalNode = \"-\";\r\n if (!isNaN(value)) {\r\n switch (displayStyle) {\r\n case \"currency\":\r\n finalNode = currencyFormatter.format(value);\r\n break;\r\n case \"percentage\":\r\n finalNode = `${value}%`;\r\n break;\r\n case \"squareFeet\":\r\n finalNode = new Intl.NumberFormat().format(value);\r\n break;\r\n default:\r\n finalNode = value;\r\n }\r\n }\r\n return (\r\n <Typography\r\n component=\"span\"\r\n variant=\"subtitle2\"\r\n style={{ whiteSpace: \"nowrap\" }}\r\n >\r\n {finalNode}\r\n </Typography>\r\n );\r\n};\r\n\r\nexport const NumberCell = (props) => {\r\n const {\r\n column: {\r\n id: columnName,\r\n FormatProps,\r\n formattedValue,\r\n displayStyle,\r\n clearFields,\r\n enableNumWords,\r\n },\r\n row: { id },\r\n currentEditRow,\r\n } = props;\r\n if (currentEditRow === id) {\r\n return (\r\n <CurrencyInput\r\n key={columnName}\r\n columnName={columnName}\r\n FormatProps={FormatProps}\r\n formattedValue={formattedValue}\r\n clearFields={clearFields}\r\n enableNumWords={enableNumWords}\r\n />\r\n );\r\n } else {\r\n return <DisplayCell {...props} displayStyle={displayStyle} />;\r\n }\r\n};\r\n\r\nexport const CurrencyInput = ({\r\n columnName,\r\n FormatProps,\r\n formattedValue,\r\n clearFields,\r\n enableNumWords,\r\n}) => {\r\n const { error, setCellValue, currentRow, touched, setCellTouched } =\r\n useContext(RowContext);\r\n\r\n let numWordsVar: any = null;\r\n try {\r\n if (enableNumWords && Boolean(currentRow?.[columnName])) {\r\n let amountArray = String(currentRow?.[columnName]).split(\".\");\r\n let amountPart = Number(amountArray[0]);\r\n if (amountPart < 0) {\r\n amountPart = Math.abs(Number(amountPart));\r\n numWordsVar = `Negative ${numWords(amountPart)} Rupees`;\r\n } else {\r\n numWordsVar = `${numWords(amountPart)} Rupees`;\r\n }\r\n if (amountArray.length === 2 && Boolean(amountArray[1])) {\r\n numWordsVar = `${numWordsVar} and ${numWords(amountArray[1])} paise`;\r\n }\r\n }\r\n } catch (e) {}\r\n\r\n return (\r\n <TextField\r\n value={currentRow?.[columnName]}\r\n onChange={(e) =>\r\n setCellValue({ [columnName]: e.target.value, ...clearFields })\r\n }\r\n helperText={\r\n Boolean(error?.[columnName]) ? error?.[columnName] : numWordsVar\r\n }\r\n error={Boolean(touched?.[columnName]) && Boolean(error?.[columnName])}\r\n onBlur={() => setCellTouched({ [columnName]: true })}\r\n InputLabelProps={{ shrink: true }}\r\n size=\"small\"\r\n fullWidth\r\n margin=\"none\"\r\n InputProps={{\r\n //@ts-ignore\r\n inputComponent: NumberFormatCustom,\r\n inputProps: {\r\n FormatProps: { ...FormatProps, formattedValue },\r\n },\r\n }}\r\n />\r\n );\r\n};\r\n","import { useState, useContext } from \"react\";\r\nimport { SelectWithoutOptions } from \"../../select/render2\";\r\nimport { RowContext } from \"./rowContext\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport {\r\n getLabelFromValues,\r\n useOptionsFetcherSimpleWithRemoveCache,\r\n} from \"../../utils\";\r\n\r\nexport const SelectFieldCell = (props) => {\r\n const {\r\n column: {\r\n id: columnName,\r\n options,\r\n _optionsKey,\r\n multiple,\r\n showCheckbox,\r\n clearFields,\r\n },\r\n row: { id },\r\n currentEditRow,\r\n } = props;\r\n\r\n const [myOptions, setMyOptions] = useState([]);\r\n\r\n const { loadingOptions } = useOptionsFetcherSimpleWithRemoveCache(\r\n options,\r\n setMyOptions,\r\n _optionsKey,\r\n false,\r\n {},\r\n false,\r\n undefined\r\n );\r\n\r\n if (currentEditRow === id) {\r\n return (\r\n <MySelectField\r\n key={columnName}\r\n columnName={columnName}\r\n options={myOptions}\r\n loadingOptions={loadingOptions}\r\n multiple={multiple}\r\n showCheckbox={showCheckbox}\r\n clearFields={clearFields}\r\n />\r\n );\r\n } else {\r\n return <RenderValue {...props} options={myOptions} />;\r\n }\r\n};\r\n\r\nexport const MySelectField = ({\r\n columnName,\r\n options,\r\n loadingOptions,\r\n multiple,\r\n showCheckbox,\r\n clearFields,\r\n}) => {\r\n const { error, setCellValue, currentRow, setCellTouched, touched } =\r\n useContext(RowContext);\r\n\r\n let value = currentRow?.[columnName];\r\n\r\n return (\r\n <SelectWithoutOptions\r\n value={value}\r\n error={error?.[columnName]}\r\n touched={touched?.[columnName]}\r\n size=\"small\"\r\n variant=\"outlined\"\r\n handleChange={(e) => {\r\n setCellValue({ [columnName]: e.target.value, ...clearFields });\r\n }}\r\n handleBlur={() => setCellTouched({ [columnName]: true })}\r\n options={options}\r\n loadingOptions={loadingOptions}\r\n multiple={multiple}\r\n showCheckbox={showCheckbox}\r\n fullWidth\r\n />\r\n );\r\n};\r\n\r\nconst RenderValue = ({ value, options }) => {\r\n return (\r\n <Typography\r\n component=\"span\"\r\n variant=\"subtitle2\"\r\n style={{ whiteSpace: \"nowrap\" }}\r\n >\r\n {getLabelFromValues(options, true)(value)}\r\n </Typography>\r\n );\r\n};\r\n","import { useContext, useState, useEffect } from \"react\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { NumericFormat } from \"react-number-format\";\r\nimport { RowContext } from \"./rowContext\";\r\n\r\nlet currencyFormatter = new Intl.NumberFormat(\"en-IN\", {\r\n style: \"currency\",\r\n currency: \"INR\",\r\n});\r\n\r\nfunction NumberFormatCustom(props) {\r\n const { inputRef, onChange, FormatProps, setChange, side, ...other } = props;\r\n return (\r\n <NumericFormat\r\n {...other}\r\n getInputRef={inputRef}\r\n onChange={(e) => {\r\n setChange(side);\r\n }}\r\n onValueChange={(values) => {\r\n onChange(\r\n {\r\n target: {\r\n value: values.value,\r\n formattedValue: values.formattedValue,\r\n },\r\n },\r\n values.formattedValue\r\n );\r\n }}\r\n {...FormatProps}\r\n />\r\n );\r\n}\r\n\r\nexport const DefaultCell = ({ value }) => {\r\n return (\r\n <Typography\r\n component=\"span\"\r\n variant=\"subtitle2\"\r\n style={{ whiteSpace: \"nowrap\" }}\r\n >\r\n {currencyFormatter.format(value)}\r\n </Typography>\r\n );\r\n};\r\n\r\nexport const VisaversaCell = (props) => {\r\n const {\r\n column: { id: columnName, ViceVersaProps, clearFields },\r\n row: { id },\r\n currentEditRow,\r\n } = props;\r\n\r\n if (currentEditRow === id) {\r\n return (\r\n <Visaversa\r\n columnName={columnName}\r\n clearFields={clearFields}\r\n {...ViceVersaProps}\r\n />\r\n );\r\n } else {\r\n return (\r\n <DefaultCell {...props} displayStyle={ViceVersaProps.leftAdornment} />\r\n );\r\n }\r\n};\r\n\r\nconst defaultTransform = (value, dependentValue) => value;\r\n\r\nexport const Visaversa = ({\r\n columnName,\r\n rightTransform = defaultTransform,\r\n leftTransform = defaultTransform,\r\n //leftAdornment = \"\",\r\n //rightAdornment = \"\",\r\n dependentField,\r\n //clearFields,\r\n leftFormatProps,\r\n rightFormatProps,\r\n}) => {\r\n const { error, setCellValue, currentRow, touched, setCellTouched } =\r\n useContext(RowContext);\r\n const [computedValue, setComputedValue] = useState(\"\");\r\n const [change, setChange] = useState(\"\");\r\n /* eslint-disable react-hooks/exhaustive-deps */\r\n useEffect(() => {\r\n let result = rightTransform(\r\n currentRow?.[columnName],\r\n currentRow?.[dependentField]\r\n );\r\n setComputedValue(result);\r\n setCellTouched({ [columnName]: true });\r\n }, []);\r\n\r\n let cellValue = currentRow?.[columnName];\r\n\r\n useEffect(() => {\r\n if (cellValue === \"\") {\r\n setComputedValue(\"\");\r\n }\r\n }, [cellValue]);\r\n\r\n const handleLeftChange = (e) => {\r\n let value = e?.target?.value ?? e;\r\n setCellValue({ [columnName]: value });\r\n };\r\n\r\n const transformLeft = () => {\r\n if (change !== \"left\") {\r\n return;\r\n }\r\n let result = rightTransform(\r\n currentRow?.[columnName],\r\n currentRow?.[dependentField]\r\n );\r\n setComputedValue(result);\r\n };\r\n\r\n const transformRight = () => {\r\n if (change !== \"right\") {\r\n return;\r\n }\r\n let result = leftTransform(computedValue, currentRow?.[dependentField]);\r\n setCellValue({ [columnName]: result });\r\n };\r\n\r\n const handleRightChange = (e) => {\r\n let value = e?.target?.value ?? e;\r\n setComputedValue(value);\r\n };\r\n\r\n return (\r\n <div style={{ display: \"flex\" }}>\r\n <TextField\r\n key=\"left\"\r\n value={currentRow?.[columnName]}\r\n onChange={handleLeftChange}\r\n onBlur={transformLeft}\r\n helperText={touched?.[columnName] && error?.[columnName]}\r\n error={Boolean(touched?.[columnName]) && Boolean(error?.[columnName])}\r\n size=\"small\"\r\n variant=\"outlined\"\r\n InputProps={{\r\n //@ts-ignore\r\n inputComponent: NumberFormatCustom,\r\n inputProps: {\r\n FormatProps: leftFormatProps,\r\n setChange: setChange,\r\n side: \"left\",\r\n },\r\n }}\r\n fullWidth\r\n />\r\n <div style={{ padding: \"0px 4px\" }} />\r\n <TextField\r\n key=\"right\"\r\n value={computedValue}\r\n onChange={handleRightChange}\r\n onBlur={transformRight}\r\n size=\"small\"\r\n variant=\"outlined\"\r\n InputProps={{\r\n //@ts-ignore\r\n inputComponent: NumberFormatCustom,\r\n inputProps: {\r\n FormatProps: rightFormatProps,\r\n setChange: setChange,\r\n side: \"right\",\r\n },\r\n }}\r\n fullWidth\r\n />\r\n </div>\r\n );\r\n};\r\n","import { useContext } from \"react\";\r\nimport { InputMaskCustom } from \"components/derived/inputMask\";\r\nimport { TextFieldForSelect as TextField } from \"components/styledComponent/textfield\";\r\nimport { RowContext } from \"./rowContext\";\r\nimport Typography from \"@mui/material/Typography\";\r\n\r\nexport const DisplayCell = ({ value }) => {\r\n return (\r\n <Typography\r\n component=\"span\"\r\n variant=\"subtitle2\"\r\n style={{ whiteSpace: \"nowrap\" }}\r\n >\r\n {value}\r\n </Typography>\r\n );\r\n};\r\n\r\nexport const DateCell = (props) => {\r\n const {\r\n column: { id: columnName, MaskProps, formattedValue = true, clearFields },\r\n row: { id },\r\n currentEditRow,\r\n } = props;\r\n if (currentEditRow === id) {\r\n return (\r\n <DateInput\r\n key={columnName}\r\n columnName={columnName}\r\n MaskProps={MaskProps}\r\n formattedValue={formattedValue}\r\n clearFields={clearFields}\r\n />\r\n );\r\n } else {\r\n return <DisplayCell {...props} />;\r\n }\r\n};\r\n\r\nexport const DateInput = ({\r\n columnName,\r\n MaskProps,\r\n formattedValue,\r\n clearFields,\r\n}) => {\r\n const { error, setCellValue, currentRow, touched, setCellTouched } =\r\n useContext(RowContext);\r\n\r\n return (\r\n <TextField\r\n value={currentRow?.[columnName]}\r\n onChange={(e) =>\r\n setCellValue({ [columnName]: e.target.value, ...clearFields })\r\n }\r\n helperText={touched?.[columnName] ? error?.[columnName] : \"\"}\r\n error={Boolean(touched?.[columnName]) && Boolean(error?.[columnName])}\r\n onBlur={() => setCellTouched({ [columnName]: true })}\r\n InputLabelProps={{ shrink: true }}\r\n size=\"small\"\r\n fullWidth\r\n margin=\"none\"\r\n InputProps={{\r\n //@ts-ignore\r\n inputComponent: InputMaskCustom,\r\n inputProps: {\r\n MaskProps: { ...MaskProps, formattedValue },\r\n },\r\n }}\r\n />\r\n );\r\n};\r\n","import { ActionCell } from \"../components/actionCell\";\r\nimport { DefaultFooterCell } from \"../components/footerCell\";\r\nimport { DefaultCell } from \"../components/defaultCell\";\r\nimport { TextFieldCell } from \"../components/textFieldCell\";\r\nimport { NumberCell } from \"../components/NumberCell\";\r\nimport { SelectFieldCell } from \"../components/selectFieldCell\";\r\nimport { VisaversaCell } from \"../components/visaversa\";\r\nimport { DateCell } from \"../components/dateCell\";\r\nimport { singletonFunctionRegisrationFactory } from \"components/utils\";\r\n\r\nconst ActionControl = {\r\n accessor: \"action\",\r\n alignment: \"left\",\r\n width: 150,\r\n Cell: ActionCell,\r\n columnName: \"Action\",\r\n};\r\n\r\nexport const attachActionToMetaData = (myColumns) => {\r\n if (Array.isArray(myColumns)) {\r\n const columns = myColumns;\r\n return [...columns, ActionControl];\r\n }\r\n return myColumns;\r\n};\r\n\r\nexport const attachFooter = (myColumns) => {\r\n if (Array.isArray(myColumns)) {\r\n let columns = myColumns;\r\n columns = columns.map((one) => {\r\n if (Boolean(one.footer)) {\r\n const { footer, ...others } = one;\r\n return { ...others, Footer: DefaultFooterCell };\r\n } else {\r\n return one;\r\n }\r\n });\r\n return columns;\r\n }\r\n return myColumns;\r\n};\r\n\r\nexport const attachCells = (myColumns) => {\r\n if (Array.isArray(myColumns)) {\r\n let columns = myColumns;\r\n columns = columns.map((one) => {\r\n if (typeof one.Cell === \"string\") {\r\n switch (one.Cell) {\r\n case \"textField\": {\r\n return { ...one, Cell: TextFieldCell };\r\n }\r\n case \"numberField\": {\r\n return { ...one, Cell: NumberCell };\r\n }\r\n case \"selectField\": {\r\n return { ...one, Cell: SelectFieldCell };\r\n }\r\n case \"visaversa\": {\r\n return { ...one, Cell: VisaversaCell };\r\n }\r\n case \"monthYear\": {\r\n return { ...one, Cell: DateCell };\r\n }\r\n default: {\r\n return { ...one, Cell: DefaultCell };\r\n }\r\n }\r\n } else {\r\n return one;\r\n }\r\n });\r\n return columns;\r\n }\r\n return myColumns;\r\n};\r\n\r\nexport const attachOptions = (myColumns) => {\r\n if (Array.isArray(myColumns)) {\r\n let columns = myColumns;\r\n columns = columns.map((one) => {\r\n if (typeof one.options === \"string\") {\r\n let _optionsKey = one.options;\r\n let options = singletonFunctionRegisrationFactory.getFn(\r\n _optionsKey,\r\n async () => [{ label: \"Cannot fetch options\", value: \"\" }]\r\n );\r\n return { ...one, _optionsKey, options };\r\n } else {\r\n return one;\r\n }\r\n });\r\n return columns;\r\n }\r\n return myColumns;\r\n};\r\n\r\nexport const constructNewRowObj = (myColumns) => {\r\n if (Array.isArray(myColumns)) {\r\n let columns = myColumns;\r\n let newRowObj = columns.reduce((accum, current) => {\r\n accum[current.accessor] = current?.defaultValue ?? \"\";\r\n return accum;\r\n }, {});\r\n return newRowObj;\r\n }\r\n return {};\r\n};\r\n","import {\r\n attachActionToMetaData,\r\n attachCells,\r\n attachFooter,\r\n attachOptions,\r\n} from \"./methods\";\r\n\r\nexport const modifyMetaData = (columns) => {\r\n columns = attachOptions(columns);\r\n columns = attachActionToMetaData(columns);\r\n columns = attachFooter(columns);\r\n columns = attachCells(columns);\r\n return columns;\r\n};\r\n","export const HeaderColumnCell = ({\r\n column: { columnName, getResizerProps },\r\n}) => {\r\n return (\r\n <>\r\n <span\r\n style={{\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {columnName}\r\n </span>\r\n\r\n <div\r\n {...getResizerProps([\r\n {\r\n style: {\r\n display: \"inline-block\",\r\n position: \"absolute\",\r\n right: \"-5px\",\r\n top: \"0\",\r\n padding: \"0 5px\",\r\n zIndex: 1,\r\n },\r\n },\r\n ])}\r\n >\r\n <div\r\n style={{\r\n height: \"35px\",\r\n width: \"6px\",\r\n backgroundColor: \"#888\",\r\n }}\r\n ></div>\r\n </div>\r\n </>\r\n );\r\n};\r\n","import Checkbox from \"@mui/material/Checkbox\";\r\n\r\nexport const useCheckboxColumn = (visible) => (hooks) => {\r\n if (Boolean(visible)) {\r\n hooks.visibleColumns.push((columns) => [\r\n {\r\n id: \"selectionCheckbox\",\r\n Header: CheckboxHeaderRenderer,\r\n Cell: CheckboxCellRenderer,\r\n minWidth: 25,\r\n width: 25,\r\n maxWidth: 25,\r\n sticky: true,\r\n Footer: () => (\r\n <span\r\n style={{\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n paddingRight: \"10px\",\r\n }}\r\n >\r\n Total\r\n </span>\r\n ),\r\n },\r\n ...columns,\r\n ]);\r\n }\r\n};\r\n\r\nconst CheckboxCellRenderer = ({ row }) => {\r\n return (\r\n <Checkbox\r\n size=\"small\"\r\n {...row.getToggleRowSelectedProps([\r\n {\r\n style: {\r\n padding: 0,\r\n },\r\n },\r\n ])}\r\n />\r\n );\r\n};\r\n\r\nconst CheckboxHeaderRenderer = ({ getToggleAllRowsSelectedProps }) => {\r\n return (\r\n <Checkbox\r\n size=\"small\"\r\n {...getToggleAllRowsSelectedProps([{ style: { padding: 0 } }])}\r\n />\r\n );\r\n};\r\n","import { FC, useState, useCallback, useRef, Fragment } from \"react\";\nimport {\n useTable,\n useRowSelect,\n useBlockLayout,\n useResizeColumns,\n} from \"react-table\";\nimport { useMutation } from \"react-query\";\nimport Paper from \"@mui/material/Paper\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport TableContainer from \"@mui/material/TableContainer\";\nimport Table from \"@mui/material/Table\";\nimport TableHead from \"@mui/material/TableHead\";\nimport TableRow from \"@mui/material/TableRow\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableBody from \"@mui/material/TableBody\";\nimport Typography from \"@mui/material/Typography\";\nimport Button from \"@mui/material/Button\";\nimport Dialog from \"@mui/material/Dialog\";\nimport DialogActions from \"@mui/material/DialogActions\";\nimport DialogTitle from \"@mui/material/DialogTitle\";\nimport { Alert } from \"components/common/alert\";\nimport { useCheckboxColumn } from \"./components/useCheckbox\";\nimport { RowContextProvider } from \"./components/rowContext\";\nimport { useTranslation } from \"react-i18next\";\n/* eslint-disable react-hooks/exhaustive-deps */\ninterface GridTableType {\n columns: any;\n defaultColumn: any;\n data: any;\n setData: any;\n rowIDColumn: any;\n dataIdColumn: any;\n newRowObj?: any;\n rowValidator?: any;\n dataTransformer?: any;\n deleteRowFn?: any;\n onChange?: any;\n label: any;\n maxHeight?: string;\n setFormError?: any;\n disabled?: boolean;\n disableFooter?: boolean;\n}\n\nconst defaultValidator = async () => {};\nconst defaultNewRowObj = {};\nconst defaultIdColumn = \"id\"; //user data id identifier\nconst defaultMaxHeight = \"200px\";\n\nconst defaultRowDeleteFn = async () => {\n /* eslint-disable no-throw-literal */\n throw { error_msg: \"Fn not defined\" };\n};\n\nexport const GridTable: FC<GridTableType> = ({\n columns,\n defaultColumn,\n data,\n setData,\n rowIDColumn,\n label,\n setFormError,\n disabled,\n maxHeight = defaultMaxHeight,\n newRowObj = defaultNewRowObj,\n dataIdColumn = defaultIdColumn,\n rowValidator = defaultValidator,\n deleteRowFn = defaultRowDeleteFn,\n disableFooter = false,\n}) => {\n const touchAllDataRef = useRef<any>(null);\n const incrCounter = useRef(-1);\n const currentRowObj = useRef({});\n const currentRowError = useRef({});\n const [currentEditRow, setCurrentEditRow] = useState(-1);\n const [newRowAdded, setNewRowAdded] = useState(false);\n const [showDialog, setShowDialog] = useState(false);\n const rowContainerRef = useRef<HTMLDivElement | null>(null);\n\n const getRowId = useCallback((data) => data[rowIDColumn], []);\n const { t } = useTranslation();\n const closeDialog = useCallback(() => {\n setShowDialog(false);\n }, [setShowDialog]);\n\n const addNewRow = useCallback(() => {\n if (!newRowAdded) {\n setData((old) => [\n ...old,\n {\n ...newRowObj,\n [rowIDColumn]: ++incrCounter.current,\n },\n ]);\n setNewRowAdded(true);\n setCurrentEditRow(incrCounter.current);\n currentRowObj.current = {};\n setTimeout(() => {\n let elem = rowContainerRef.current;\n elem?.scrollTo({\n behavior: \"smooth\",\n top: elem.scrollHeight - elem.offsetHeight,\n left: 0,\n });\n }, 1);\n }\n }, [setData, setNewRowAdded, setCurrentEditRow, newRowAdded, data]);\n\n const saveCurrentRow = useCallback(\n (index) => {\n if (Object.keys(currentRowError.current).length > 0) {\n touchAllDataRef?.current?.touchAll?.();\n return false;\n }\n let newData = data.map((one) => {\n if (getRowId(one) === index) {\n return { ...one, ...currentRowObj.current };\n }\n return one;\n });\n setData(newData);\n setCurrentEditRow(-1);\n setNewRowAdded(false);\n currentRowObj.current = {};\n return true;\n },\n [setData, setNewRowAdded, setCurrentEditRow, data, getRowId]\n );\n\n const cancelCurrentRowEdit = useCallback(\n (index) => {\n if (newRowAdded) {\n setData((old) => old.filter((one) => !(getRowId(one) === index)));\n }\n setCurrentEditRow(-1);\n setNewRowAdded(false);\n currentRowObj.current = {};\n currentRowError.current = {};\n },\n [setData, setCurrentEditRow, setNewRowAdded, newRowAdded]\n );\n\n const requestRowEdit = useCallback(\n (index) => {\n if (newRowAdded || Object.keys(currentRowError.current).length > 0) {\n return;\n }\n if (currentEditRow === -1) {\n setCurrentEditRow(index);\n } else {\n // let success = saveCurrentRow(currentEditRow);\n // if (success) {\n // setCurrentEditRow(index);\n // }\n cancelCurrentRowEdit(currentEditRow);\n setCurrentEditRow(index);\n }\n currentRowObj.current = {};\n },\n [saveCurrentRow, setCurrentEditRow, currentEditRow, newRowAdded]\n );\n\n const tableProps = useTable(\n {\n columns: columns,\n data: data,\n defaultColumn: defaultColumn,\n requestRowEdit,\n currentEditRow,\n getRowId,\n saveCurrentRow,\n cancelCurrentRowEdit,\n },\n useRowSelect,\n useResizeColumns,\n useBlockLayout,\n useCheckboxColumn(true)\n );\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n footerGroups,\n rows,\n prepareRow,\n //totalColumnsWidth,\n selectedFlatRows,\n } = tableProps;\n\n return (\n <Fragment>\n <Paper\n style={{\n //width: `${totalColumnsWidth}px`,\n //maxWidth: \"750px\",\n width: \"90%\",\n overflow: \"hidden\",\n }}\n tabIndex={0}\n >\n <Toolbar\n variant=\"dense\"\n style={{\n display: \"flex\",\n minHeight: \"40px\",\n paddingLeft: \"16px\",\n paddingRight: \"16px\",\n }}\n >\n <Typography variant=\"h6\">{label}</Typography>\n <div style={{ flexGrow: 1 }} />\n {selectedFlatRows.length > 0 ? (\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => {\n setShowDialog(true);\n }}\n >\n {t(\"Delete\")}\n </Button>\n ) : null}\n </Toolbar>\n <TableContainer style={disabled ? { opacity: 0.5 } : {}}>\n <Table {...getTableProps()} size=\"small\" component=\"div\">\n <TableHead component=\"div\">\n {headerGroups.map((headerGroup) => (\n <TableRow\n {...headerGroup.getHeaderGroupProps()}\n component=\"div\"\n >\n {headerGroup.headers.map((column) => (\n <TableCell\n {...column.getHeaderProps([\n {\n style: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n textAlign: column?.alignment ?? \"unset\",\n pointerEvents: disabled ? \"none\" : \"unset\",\n },\n },\n ])}\n component=\"div\"\n >\n {column.render(\"Header\")}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableHead>\n <TableBody {...getTableBodyProps({})} component=\"div\">\n <div\n style={{\n overflowY: \"scroll\",\n maxHeight: maxHeight,\n overflowX: \"hidden\",\n }}\n ref={rowContainerRef}\n >\n {rows.map((row, i) => {\n prepareRow(row);\n const rowProps = row.getRowProps([\n { style: { pointerEvents: disabled ? \"none\" : \"unset\" } },\n ]);\n const renderRow = (\n <TableRow {...rowProps} component=\"div\">\n {row.cells.map((cell) => {\n return (\n <TableCell\n {...cell.getCellProps([\n {\n style: {\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n textAlign: cell?.column?.alignment ?? \"unset\",\n },\n },\n ])}\n component=\"div\"\n >\n {cell.render(\"Cell\")}\n </TableCell>\n );\n })}\n </TableRow>\n );\n if (currentEditRow === row.id) {\n let prevRows = rows.slice(0, i).map((one) => one?.original);\n let nextRows = rows\n .slice(i + 1)\n .map((one) => one?.original);\n return (\n <RowContextProvider\n currentRowError={currentRowError}\n currentRowObj={currentRowObj}\n key={`${rowProps.key}_row_with_context`}\n initialData={row.original}\n rowValidator={rowValidator}\n prevRows={prevRows}\n nextRows={nextRows}\n setFormError={setFormError}\n ref={touchAllDataRef}\n >\n {renderRow}\n </RowContextProvider>\n );\n } else {\n return renderRow;\n }\n })}\n </div>\n </TableBody>\n {disableFooter ? null : (\n <TableHead component=\"div\">\n {footerGroups.map((footerGroup) => (\n <TableRow\n {...footerGroup.getFooterGroupProps()}\n component=\"div\"\n >\n {footerGroup.headers.map((column) => (\n <TableCell\n {...column.getFooterProps([\n {\n style: { textAlign: column?.alignment ?? \"unset\" },\n },\n ])}\n component=\"div\"\n >\n {column.render(\"Footer\")}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableHead>\n )}\n </Table>\n </TableContainer>\n <Button onClick={addNewRow} disabled={disabled}>\n {t(\"AddRow\")}\n </Button>\n </Paper>\n\n <DeleteRows\n selectedRows={selectedFlatRows}\n dataIdColumn={dataIdColumn}\n open={showDialog}\n closeDialog={closeDialog}\n deleteFn={deleteRowFn}\n setData={setData}\n />\n </Fragment>\n );\n};\n\ninterface DeleteRowsFnType {\n data: object;\n displayData?: object;\n endSubmit?: any;\n setFieldError?: any;\n}\n\nconst deleteRowsFnWrapper =\n (deleteRowsFn) =>\n async ({ data }: DeleteRowsFnType) => {\n return deleteRowsFn(data);\n };\n\nconst DeleteRows = ({\n selectedRows,\n dataIdColumn,\n deleteFn,\n open,\n closeDialog,\n setData,\n}) => {\n const { t } = useTranslation();\n const closeWrapper = () => {\n mutation.reset();\n closeDialog();\n };\n const mutation = useMutation<any, any, any, any>(\n deleteRowsFnWrapper(deleteFn),\n {\n onSuccess: () => {\n //it seems like the row is deleting from DB\n // enqueueSnackbar(\"data successfully deleted\", {\n // variant: \"success\",\n // });\n closeWrapper();\n },\n }\n );\n\n const deleteData = () => {\n let result = selectedRows.map(\n (one) => one?.original?.[dataIdColumn] ?? Number.MAX_SAFE_INTEGER\n );\n let existingRecords = result.filter(\n (one) => one !== Number.MAX_SAFE_INTEGER\n );\n mutation.mutate({ data: existingRecords });\n setData((old) =>\n old.filter((one) =>\n existingRecords.indexOf(one[dataIdColumn]) >= 0 ? false : true\n )\n );\n };\n\n return (\n <Dialog open={open}>\n {mutation.isError ? (\n <Alert\n severity=\"error\"\n errorMsg={mutation.error?.error_msg ?? \"Unknown error occured\"}\n errorDetail={mutation.error?.error_detail ?? \"\"}\n />\n ) : null}\n <DialogTitle>{t(\"Wouldyouliketodeletetheselectedrecord\")}</DialogTitle>\n <DialogActions>\n <Button onClick={deleteData} disabled={mutation.isLoading}>\n {t(\"Yes\")}\n </Button>\n <Button onClick={closeWrapper} disabled={mutation.isLoading}>\n {t(\"No\")}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { FC, useMemo, useState, useRef, useEffect, useCallback } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport cloneDeep from \"lodash-es/cloneDeep\";\r\nimport { modifyMetaData } from \"./utils\";\r\nimport { constructNewRowObj } from \"./utils/methods\";\r\nimport { HeaderColumnCell } from \"./components/headerCell2\";\r\nimport { DefaultCell } from \"./components/defaultCell\";\r\nimport { GridTable } from \"./gridTable\";\r\nimport { GridColumnType } from \"./types\";\r\n\r\ninterface DataTableProps {\r\n _columns: GridColumnType[];\r\n arrayFieldIDName: string;\r\n dataTransformer?: any;\r\n rowValidator?: any;\r\n removeRowFn?: any;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n label: string;\r\n maxHeight?: string;\r\n disableFooter?: boolean;\r\n}\r\n\r\nexport type MyDataTableProps = UseFieldHookProps & DataTableProps;\r\n\r\nconst defaultTransformer = (data) => data;\r\n\r\nconst rowIDColumn = \"__id\"; //internal id through which we will manage data\r\n\r\n/* eslint-disable react-hooks/exhaustive-deps */\r\nexport const GridParent: FC<MyDataTableProps> = ({\r\n _columns,\r\n arrayFieldIDName,\r\n dataTransformer = defaultTransformer,\r\n rowValidator,\r\n removeRowFn,\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n GridProps,\r\n enableGrid,\r\n label,\r\n maxHeight,\r\n shouldExclude,\r\n dependentFields,\r\n disableFooter,\r\n}) => {\r\n const transformedMetaData = useMemo(() => {\r\n let newMetaData = cloneDeep(_columns);\r\n return modifyMetaData(newMetaData);\r\n }, []);\r\n const defaultColumn = useMemo(\r\n () => ({\r\n Header: HeaderColumnCell,\r\n Cell: DefaultCell,\r\n }),\r\n []\r\n );\r\n const newRowObj = useMemo(() => {\r\n let result = constructNewRowObj(_columns);\r\n result = { [arrayFieldIDName]: \"\", ...result };\r\n return result;\r\n }, []);\r\n const rowIDRef = useRef(-1000); //we've made an assumption initial rows will not be more than 1000\r\n const [isDefaultRowIDSet, setIsDefaultRowIDSet] = useState(false);\r\n\r\n const {\r\n value: data,\r\n setValueAsCB,\r\n setErrorAsCB,\r\n isSubmitting,\r\n fieldKey,\r\n excluded,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n shouldExclude: shouldExclude,\r\n dependentFields: dependentFields,\r\n });\r\n\r\n const setValueAsCBWrapper = useCallback(\r\n (data) => {\r\n if (typeof data === \"function\") {\r\n setValueAsCB((old) => dataTransformer(data(old)));\r\n } else {\r\n setValueAsCB(dataTransformer(data));\r\n }\r\n },\r\n [setValueAsCB, dataTransformer]\r\n );\r\n\r\n useEffect(() => {\r\n if (!isDefaultRowIDSet && Array.isArray(data) && data.length > 0) {\r\n let newData = data.map((one) => {\r\n if (one[rowIDColumn] === undefined) {\r\n return { ...one, [rowIDColumn]: rowIDRef.current++ };\r\n } else {\r\n return one;\r\n }\r\n });\r\n setValueAsCBWrapper(newData);\r\n setIsDefaultRowIDSet(true);\r\n }\r\n });\r\n\r\n if (excluded) {\r\n return null;\r\n }\r\n\r\n const result = (\r\n <GridTable\r\n key={fieldKey}\r\n columns={transformedMetaData}\r\n defaultColumn={defaultColumn}\r\n dataIdColumn={arrayFieldIDName}\r\n newRowObj={newRowObj}\r\n rowValidator={rowValidator}\r\n setData={setValueAsCBWrapper}\r\n data={Array.isArray(data) ? data : []}\r\n rowIDColumn={rowIDColumn}\r\n deleteRowFn={removeRowFn}\r\n label={label}\r\n maxHeight={maxHeight}\r\n setFormError={setErrorAsCB}\r\n disabled={isSubmitting}\r\n disableFooter={disableFooter}\r\n />\r\n );\r\n if (Boolean(enableGrid)) {\r\n return <Grid {...GridProps}>{result}</Grid>;\r\n } else {\r\n return result;\r\n }\r\n};\r\n","import { FC, Fragment } from \"react\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport Typography, { TypographyProps } from \"@mui/material/Typography\";\r\n\r\nexport interface AllTypographyProps {\r\n TypographyProps?: TypographyProps;\r\n GridProps?: GridProps;\r\n name: string;\r\n label: string;\r\n}\r\n\r\nconst MyTypography: FC<AllTypographyProps> = ({\r\n name,\r\n TypographyProps,\r\n GridProps,\r\n label,\r\n}) => {\r\n return (\r\n <Fragment key={name}>\r\n <Grid {...GridProps}>\r\n {/* <Typography {...TypographyProps}>{label}</Typography> */}\r\n <Typography {...TypographyProps} variant=\"h6\" style={undefined}>\r\n {label}\r\n </Typography>\r\n </Grid>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default MyTypography;\r\n","import {\r\n Fragment,\r\n useState,\r\n useMemo,\r\n useRef,\r\n useEffect,\r\n useCallback,\r\n Suspense,\r\n} from \"react\";\r\nimport Paper from \"@mui/material/Paper\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\nimport Toolbar from \"@mui/material/Toolbar\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { TextField } from \"components/styledComponent/textfield\";\r\nimport { GradientButton } from \"components/styledComponent/button\";\r\nimport { ColumnVisibility } from \"components/dataTable/columnVisibility\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport { SelectRenderOnly } from \"components/common/select\";\r\nimport { Spacer } from \"components/common\";\r\nimport FormHelperText from \"@mui/material/FormHelperText\";\r\nimport MyTypography from \"components/common/typograhpy/typography\";\r\nimport { KeyboardDateTimePicker } from \"components/styledComponent/datetime\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport { NumericFormat } from \"react-number-format\";\r\nimport { Autocomplete, InputAdornment } from \"@mui/material\";\r\nimport match from \"autosuggest-highlight/match\";\r\nimport parse from \"autosuggest-highlight/parse\";\r\nimport { OptionsProps } from \"components/common/types\";\r\nimport { useQuery } from \"react-query\";\r\nimport { useTranslation } from \"react-i18next\";\r\n//import { Label } from \"reactstrap\";\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n paddingLeft: theme.spacing(1.5),\r\n paddingRight: theme.spacing(1.5),\r\n background: \"var(--theme-color1)\",\r\n },\r\n title: {\r\n flex: \"1 1 100%\",\r\n color: \"var(--white)\",\r\n letterSpacing: \"1px\",\r\n fontSize: \"1.5rem\",\r\n },\r\n refreshiconhover: {\r\n // \"&:hover\": {\r\n // backgroundColor: \"var(--theme-color2)\",\r\n // color: \"var(--theme-color1)\",\r\n // },\r\n },\r\n}));\r\nlet visibleColumns = [];\r\n\r\nconst getOptionLabel = (freeSolo: any) => (option: OptionsProps) =>\r\n Boolean(freeSolo) ? option : option?.label ?? \"\";\r\n\r\nexport const FilterFormComponents = ({\r\n dense,\r\n title,\r\n allowColumnHiding,\r\n fields: oldfielddata,\r\n initialDataValue,\r\n initialVisibleColumnData,\r\n submitButtonHide,\r\n submitButtonName,\r\n submitSecondButtonHide = true,\r\n submitSecondButtonName = \"submit\",\r\n submitSecondLoading = false,\r\n submitSecondAction = (arg1, arg2) => {},\r\n submitSecondValidtion = true,\r\n hideHeader,\r\n isDisplayOnly,\r\n onAction,\r\n loading,\r\n onFieldAction = (name, value) => {},\r\n}) => {\r\n const classes = useStyles();\r\n const inputButtonRef = useRef<any>(null);\r\n const [ErrorData, setErrorData] = useState({});\r\n const [colomnValue, setColomnValue] = useState<any>(initialDataValue);\r\n const [fields, setFields] = useState(oldfielddata);\r\n const { t } = useTranslation();\r\n const [initialVisibleColumn, setInitialVisibleColumn] = useState(\r\n initialVisibleColumnData\r\n );\r\n const dependField = useMemo(() => {\r\n let dependData = {};\r\n oldfielddata.forEach((item) => {\r\n if (Boolean(item.dependFields) && Array.isArray(item.dependFields)) {\r\n item.dependFields.forEach((itemdepend) => {\r\n if (Boolean(dependData[itemdepend])) {\r\n // dependData[itemdepend].put(item.name);\r\n dependData[itemdepend].push(item.name);\r\n } else {\r\n dependData[itemdepend] = [item.name];\r\n }\r\n });\r\n }\r\n });\r\n return dependData;\r\n }, [oldfielddata]);\r\n const dependFieldFunc = useMemo(() => {\r\n let dependData = {};\r\n oldfielddata.forEach((item) => {\r\n if (\r\n Boolean(item.dependFields) &&\r\n Array.isArray(item.dependFields) &&\r\n typeof item.dependFieldsonchange === \"function\"\r\n ) {\r\n dependData[item.name] = item.dependFieldsonchange;\r\n }\r\n });\r\n return dependData;\r\n }, [oldfielddata]);\r\n //console.log(dependField, dependFieldFunc);\r\n const handleChange = (event: any, extraData: any = \"\") => {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n setColomnValue((values) => ({ ...values, [name]: value }));\r\n if (Boolean(value) && (ErrorData[name]?.isError ?? false)) {\r\n setErrorData((error) => ({\r\n ...error,\r\n [name]: { isError: false, ErrorMessage: \" \" },\r\n }));\r\n }\r\n if (Boolean(dependField[name])) {\r\n //console.log(extraData);\r\n dependField[name].forEach((item) => {\r\n if (typeof dependFieldFunc[item] === \"function\") {\r\n let returnvallue = dependFieldFunc[item](\r\n colomnValue,\r\n value,\r\n name,\r\n extraData\r\n );\r\n if (Boolean(returnvallue)) {\r\n setFields((value) => {\r\n return value.map((itemfiels) => {\r\n let newvalueData = itemfiels;\r\n if (itemfiels.name === item) {\r\n if (typeof returnvallue === \"object\") {\r\n newvalueData = {\r\n ...newvalueData,\r\n ...returnvallue,\r\n };\r\n if (returnvallue.hasOwnProperty(\"isVisible\")) {\r\n setInitialVisibleColumn((values) => ({\r\n ...values,\r\n [itemfiels.name]: Boolean(returnvallue?.isVisible),\r\n }));\r\n }\r\n if (returnvallue.hasOwnProperty(\"__DATA\")) {\r\n setColomnValue((values) => ({\r\n ...values,\r\n [itemfiels.name]: returnvallue.__DATA,\r\n }));\r\n }\r\n }\r\n }\r\n\r\n return newvalueData;\r\n });\r\n });\r\n }\r\n }\r\n });\r\n }\r\n };\r\n useEffect(() => {\r\n setColomnValue(initialDataValue);\r\n Object.keys(initialDataValue).forEach((item) => {\r\n let event = { target: { name: item, value: initialDataValue[item] } };\r\n handleChange(event);\r\n });\r\n }, [JSON.stringify(initialDataValue)]);\r\n const handleClick = () => {\r\n if (\r\n ValidateColumnValue(fields, colomnValue, initialVisibleColumn, \"FIRST\")\r\n ) {\r\n onAction(colomnValue, initialVisibleColumn);\r\n }\r\n };\r\n const handleSecondButtonClick = () => {\r\n if (\r\n !submitSecondValidtion ||\r\n ValidateColumnValue(fields, colomnValue, initialVisibleColumn, \"SECOND\")\r\n ) {\r\n submitSecondAction(colomnValue, initialVisibleColumn);\r\n }\r\n };\r\n visibleColumns = useMemo(() => {\r\n return fields.map((column) => {\r\n let onChange = () => {\r\n setInitialVisibleColumn((values) => ({\r\n ...values,\r\n [column.name]: !initialVisibleColumn[column.name],\r\n }));\r\n };\r\n return {\r\n id: column.name,\r\n isTableHidden: column?.isTableHidden ?? false,\r\n columnName: column?.label ?? \"\",\r\n isColumnHidingDisabled: column?.isColumnHidingDisabled ?? false,\r\n getToggleHiddenProps: () => {\r\n return {\r\n checked: initialVisibleColumn[column.name] ?? true,\r\n onChange,\r\n style: { cursor: \"pointer\" },\r\n };\r\n },\r\n };\r\n });\r\n }, [fields, initialVisibleColumn]);\r\n //console.log(fields, visibleColumns);\r\n const ValidateColumnValue = (\r\n fields,\r\n colomnValue,\r\n initialVisibleColumn,\r\n arg1\r\n ) => {\r\n let isValidForm = true;\r\n let errorData = {};\r\n fields.forEach((element) => {\r\n if (initialVisibleColumn[element.name] ?? true) {\r\n if (\r\n (element?.isRequired ?? false) &&\r\n !Boolean(colomnValue[element.name])\r\n ) {\r\n errorData = {\r\n ...errorData,\r\n [element.name]: {\r\n isError: true,\r\n ErrorMessage: t(\"ThisFieldisrequired\"),\r\n },\r\n };\r\n isValidForm = false;\r\n } else {\r\n let errorMessage = \"\";\r\n if (typeof element?.validate === \"function\") {\r\n errorMessage = element.validate(\r\n colomnValue[element.name],\r\n colomnValue,\r\n arg1\r\n );\r\n }\r\n //console.log(element.name, typeof element?.validate, errorMessage);\r\n isValidForm = Boolean(errorMessage) ? false : isValidForm;\r\n errorData = {\r\n ...errorData,\r\n [element.name]: {\r\n isError: Boolean(errorMessage),\r\n ErrorMessage: Boolean(errorMessage) ? errorMessage : \" \",\r\n },\r\n };\r\n }\r\n } else {\r\n errorData = {\r\n ...errorData,\r\n [element.name]: {\r\n isError: false,\r\n ErrorMessage: \" \",\r\n },\r\n };\r\n }\r\n });\r\n // console.log(errorData);\r\n setErrorData(errorData);\r\n return isValidForm;\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Paper\r\n style={{\r\n width: \"100%\",\r\n }}\r\n >\r\n {hideHeader ? null : (\r\n <Toolbar\r\n className={classes.root}\r\n variant={dense ? \"dense\" : \"regular\"}\r\n >\r\n <Typography\r\n className={classes.title}\r\n color=\"inherit\"\r\n variant={\"h6\"}\r\n component=\"div\"\r\n >\r\n {title}\r\n </Typography>\r\n {allowColumnHiding ? (\r\n <ColumnVisibility\r\n visibleColumns={visibleColumns}\r\n defaultHiddenColumns={[]}\r\n classes={classes}\r\n />\r\n ) : null}\r\n </Toolbar>\r\n )}\r\n <div style={{ flexGrow: \"1\", margin: \"15px\" }}>\r\n <Grid\r\n container\r\n spacing={2}\r\n justifyContent=\"flex-start\"\r\n alignItems=\"center\"\r\n direction=\"row\"\r\n >\r\n <Grid\r\n item\r\n xs={submitButtonHide ? 12 : 10}\r\n container\r\n spacing={1}\r\n justifyContent=\"flex-start\"\r\n alignItems=\"center\"\r\n // style={{ marginBottom: \"10px\" }}\r\n >\r\n {fields.map((column) => {\r\n return initialVisibleColumn[column.name] ?? true ? (\r\n <Grid\r\n key={`gird${column.name}`}\r\n item\r\n xs={column?.gridconfig?.xs ?? 6}\r\n sm={column?.gridconfig?.sm ?? 3}\r\n >\r\n {(column?.type ?? \"text\").toLowerCase() === \"select\" ? (\r\n <SelectRenderOnly\r\n name={column.name}\r\n options={column?.optiondata ?? []}\r\n _optionsKey={column?._optionsKey ?? \"\"}\r\n handleChange={(e, extraData) => {\r\n handleChange(e, extraData);\r\n if (\r\n Boolean(column?.externalFunctionCall) &&\r\n (column?.externalFunctionCall === \"onChange\" ||\r\n column?.externalFunctionCall === \"all\")\r\n ) {\r\n onFieldAction(e.target.name, e.target.value);\r\n }\r\n }}\r\n label={t(column?.label ?? \"\")}\r\n fullWidth\r\n value={colomnValue[column.name]}\r\n selectVariant=\"regular\"\r\n defaultOptionLabel={\r\n column?.defaultOptionLabel ?? \"Select Value\"\r\n }\r\n disabled={\r\n column?.isDisabled ?? false\r\n ? true\r\n : !isDisplayOnly\r\n ? loading || submitSecondLoading\r\n : true\r\n }\r\n skipDefaultOption={true}\r\n error={\r\n Boolean(ErrorData[column.name]?.isError)\r\n ? ErrorData[column.name]?.ErrorMessage ?? \"Error\"\r\n : \"\"\r\n }\r\n touched={true}\r\n defaultSpaceAdd={true}\r\n required={column?.isRequired ?? false}\r\n //error={error?.company ?? \"\"}\r\n //readOnly={mode !== \"new\" ? true : false}\r\n handleBlur={(e) => {\r\n if (\r\n Boolean(column?.externalFunctionCall) &&\r\n (column?.externalFunctionCall === \"onBlur\" ||\r\n column?.externalFunctionCall === \"all\")\r\n ) {\r\n onFieldAction(e.target.name, e.target.value);\r\n }\r\n }}\r\n />\r\n ) : (column?.type ?? \"text\").toLowerCase() === \"spacer\" ? (\r\n <Spacer key={`${column.name}`} {...column} />\r\n ) : (column?.type ?? \"text\").toLowerCase() ===\r\n \"typography\" ? (\r\n <MyTypography\r\n name={column.name}\r\n label={t(column?.label ?? \"\")}\r\n TypographyProps={{ color: \"secondary\" }}\r\n />\r\n ) : (column?.type ?? \"text\").toLowerCase() ===\r\n \"datetimepicker\" ? (\r\n <LocalizationProvider dateAdapter={AdapterDateFns}>\r\n <KeyboardDateTimePicker\r\n format={column?.dateFormat ?? \"dd/MM/yyyy HH:mm:ss\"}\r\n value={\r\n colomnValue[column.name] === \"\" ||\r\n colomnValue[column.name] === null\r\n ? null\r\n : new Date(colomnValue[column.name])\r\n }\r\n label={t(column?.label ?? \"\")}\r\n views={[\r\n \"year\",\r\n \"month\",\r\n \"day\",\r\n \"hours\",\r\n \"minutes\",\r\n \"seconds\",\r\n ]}\r\n onChange={(value) => {\r\n let ele = {\r\n target: { name: column.name, value },\r\n };\r\n handleChange(ele);\r\n if (\r\n Boolean(column?.externalFunctionCall) &&\r\n (column?.externalFunctionCall === \"onChange\" ||\r\n column?.externalFunctionCall === \"all\")\r\n ) {\r\n onFieldAction(ele.target.name, ele.target.value);\r\n }\r\n }}\r\n disabled={\r\n column?.isDisabled ?? false\r\n ? true\r\n : !isDisplayOnly\r\n ? loading || submitSecondLoading\r\n : true\r\n }\r\n slots={{\r\n textField: TextField,\r\n }}\r\n slotProps={{\r\n textField: {\r\n name: column.name,\r\n error: Boolean(ErrorData[column.name]?.isError),\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n },\r\n actionBar: {\r\n actions: [\"today\", \"accept\", \"cancel\"],\r\n },\r\n }}\r\n sx={{ width: \"100%\", mb: 3 }}\r\n />\r\n </LocalizationProvider>\r\n ) : (column?.type ?? \"text\").toLowerCase() ===\r\n \"amountfield\" ||\r\n (column?.type ?? \"text\").toLowerCase() ===\r\n \"numberfield\" ? (\r\n <TextField\r\n sx={{ mb: 3 }}\r\n label={t(column?.label ?? \"\")}\r\n value={colomnValue[column.name]}\r\n // onChange={handleChange}\r\n onChange={(e) => {\r\n handleChange(e);\r\n if (\r\n Boolean(column?.externalFunctionCall) &&\r\n (column?.externalFunctionCall === \"onChange\" ||\r\n column?.externalFunctionCall === \"all\")\r\n ) {\r\n onFieldAction(e.target.name, e.target.value);\r\n }\r\n }}\r\n onBlur={(e) => {\r\n if (\r\n Boolean(column?.externalFunctionCall) &&\r\n (column?.externalFunctionCall === \"onBlur\" ||\r\n column?.externalFunctionCall === \"all\")\r\n ) {\r\n onFieldAction(e.target.name, e.target.value);\r\n }\r\n }}\r\n InputProps={{\r\n inputComponent: NumberFormatCustom,\r\n inputProps: {\r\n FormatProps: {\r\n ...column?.FormatProps,\r\n type: column?.type ?? \"\",\r\n name: column?.name ?? \"\",\r\n },\r\n },\r\n startAdornment:\r\n column?.type === \"amountfield\" ? (\r\n <InputAdornment position=\"start\">\r\n {column?.StartAdornment ?? \"৳\"}\r\n </InputAdornment>\r\n ) : null,\r\n }}\r\n InputLabelProps={{ shrink: true }}\r\n disabled={\r\n column?.isDisabled ?? false\r\n ? true\r\n : !isDisplayOnly\r\n ? loading || submitSecondLoading\r\n : true\r\n }\r\n />\r\n ) : (column?.type ?? \"text\").toLowerCase() ===\r\n \"autocomplete\" ? (\r\n <MyAutocomplete\r\n name={column?.name ?? \"\"}\r\n placeholder={t(column?.placeholder ?? \"\")}\r\n label={t(column?.label ?? \"\")}\r\n options={column?.optiondata}\r\n _optionsKey={column?._optionsKey}\r\n // handleChange={handleChange}\r\n handleChange={(e, extraData) => {\r\n handleChange(e, extraData);\r\n if (\r\n Boolean(column?.externalFunctionCall) &&\r\n (column?.externalFunctionCall === \"onChange\" ||\r\n column?.externalFunctionCall === \"all\")\r\n ) {\r\n onFieldAction(e.target.name, e.target.value);\r\n }\r\n }}\r\n disabled={\r\n column?.isDisabled ?? false\r\n ? true\r\n : !isDisplayOnly\r\n ? loading || submitSecondLoading\r\n : true\r\n }\r\n />\r\n ) : (\r\n <TextField\r\n autoFocus={column?.defaultfocus ?? false}\r\n label={t(column?.label ?? \"\")}\r\n fullWidth\r\n placeholder={String(t(column?.placeholder ?? \"\"))}\r\n type={\"text\"}\r\n name={column.name}\r\n value={colomnValue[column.name]}\r\n onChange={(e) => {\r\n if (\r\n (column?.maxLength ?? -1) === -1 ||\r\n e.target.value.length <= column?.maxLength\r\n ) {\r\n const numberRegEx = /^[0-9\\b]+$/;\r\n const alphaNumericRegEx = /^[a-zA-Z0-9\\b]+$/;\r\n const isAllowed =\r\n e.target.value === \"\"\r\n ? true\r\n : (column?.type ?? \"text\") === \"number\"\r\n ? numberRegEx.test(e.target.value)\r\n : (column?.type ?? \"text\") === \"alphanumeric\"\r\n ? alphaNumericRegEx.test(e.target.value)\r\n : true;\r\n if (isAllowed) {\r\n handleChange(e);\r\n if (\r\n Boolean(column?.externalFunctionCall) &&\r\n (column?.externalFunctionCall === \"onChange\" ||\r\n column?.externalFunctionCall === \"all\")\r\n ) {\r\n onFieldAction(e.target.name, e.target.value);\r\n }\r\n }\r\n }\r\n }}\r\n onBlur={(e) => {\r\n if (\r\n Boolean(column?.externalFunctionCall) &&\r\n (column?.externalFunctionCall === \"onBlur\" ||\r\n column?.externalFunctionCall === \"all\")\r\n ) {\r\n onFieldAction(e.target.name, e.target.value);\r\n }\r\n }}\r\n InputLabelProps={{ shrink: true }}\r\n //required\r\n required={column?.isRequired ?? false}\r\n autoComplete={column?.autoComplete ?? \"off\"}\r\n disabled={\r\n column?.isDisabled ?? false\r\n ? true\r\n : !isDisplayOnly\r\n ? loading || submitSecondLoading\r\n : true\r\n }\r\n error={Boolean(ErrorData[column.name]?.isError)}\r\n helperText={\r\n <div style={{ display: \"flex\" }}>\r\n <FormHelperText>\r\n {Boolean(ErrorData[column.name]?.isError)\r\n ? ErrorData[column.name]?.ErrorMessage ??\r\n \"Error\"\r\n : \" \"}\r\n </FormHelperText>\r\n {(column?.maxLength ?? 0) > 0 &&\r\n Boolean(column?.showMaxLength ?? false) ? (\r\n <FormHelperText\r\n error={false}\r\n // disabled={isSubmitting}\r\n style={{\r\n flex: 1,\r\n textAlign: \"right\",\r\n margin: \"5px 15px 0 0\",\r\n }}\r\n >\r\n {colomnValue[column.name].length}/\r\n {column?.maxLength}\r\n </FormHelperText>\r\n ) : null}\r\n </div>\r\n }\r\n onKeyPress={(e) => {\r\n if (\r\n (e.key === \"Enter\" && column?.entertoSubmit) ??\r\n false\r\n ) {\r\n //console.log(inputButtonRef.current);\r\n inputButtonRef?.current?.click?.();\r\n }\r\n }}\r\n />\r\n )}\r\n </Grid>\r\n ) : null;\r\n })}\r\n </Grid>\r\n {submitButtonHide ? null : (\r\n <Grid\r\n item\r\n xs={2}\r\n container\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n spacing={2}\r\n >\r\n <Grid key={`gird${submitButtonName}`} item>\r\n <GradientButton\r\n disabled={loading || submitSecondLoading}\r\n endIcon={loading ? <CircularProgress size={20} /> : null}\r\n onClick={handleClick}\r\n ref={inputButtonRef}\r\n >\r\n {t(submitButtonName)}\r\n </GradientButton>\r\n </Grid>\r\n {submitSecondButtonHide ? null : (\r\n <Grid key={`gird${submitSecondButtonName}`} item>\r\n <GradientButton\r\n disabled={loading || submitSecondLoading}\r\n endIcon={\r\n submitSecondLoading ? (\r\n <CircularProgress size={20} />\r\n ) : null\r\n }\r\n onClick={handleSecondButtonClick}\r\n >\r\n {t(submitSecondButtonName)}\r\n </GradientButton>\r\n </Grid>\r\n )}\r\n </Grid>\r\n )}\r\n </Grid>\r\n </div>\r\n </Paper>\r\n </Fragment>\r\n );\r\n};\r\n\r\nconst NumberFormatCustom = (props) => {\r\n const { inputRef, onChange, FormatProps, ...other } = props;\r\n const { type, name, ...others } = FormatProps;\r\n\r\n const defaultOptions =\r\n type === \"amountfield\"\r\n ? {\r\n thousandSeparator: true,\r\n isNumericString: true,\r\n decimalScale: 2,\r\n fixedDecimalScale: true,\r\n }\r\n : {};\r\n\r\n return (\r\n <NumericFormat\r\n {...other}\r\n getInputRef={inputRef}\r\n onValueChange={(values) => {\r\n onChange({\r\n target: {\r\n value: values.value,\r\n name,\r\n },\r\n });\r\n }}\r\n valueIsNumericString={false}\r\n {...defaultOptions}\r\n {...others}\r\n />\r\n );\r\n};\r\n\r\nconst MyAutocomplete = ({\r\n name,\r\n label,\r\n placeholder,\r\n options,\r\n _optionsKey,\r\n handleChange,\r\n freeSolo = false,\r\n disabled,\r\n}) => {\r\n /* eslint-disable array-callback-return */\r\n const myGetOptionLabel = useCallback(getOptionLabel(freeSolo), []);\r\n const { t } = useTranslation();\r\n const { data, status, isLoading, isFetching, error } = useQuery(\r\n [_optionsKey],\r\n () => options()\r\n );\r\n\r\n return (\r\n <Autocomplete\r\n sx={{ mb: 3 }}\r\n options={data ?? []}\r\n onChange={(_, newValue) => {\r\n const ele = {\r\n target: {\r\n value: newValue?.value,\r\n name: name,\r\n },\r\n };\r\n handleChange(ele);\r\n }}\r\n disabled={disabled}\r\n //@ts-ignore\r\n getOptionLabel={myGetOptionLabel}\r\n renderInput={(params) => {\r\n return (\r\n <TextField\r\n {...params}\r\n label={t(label ?? \"\")}\r\n placeholder={String(t(placeholder ?? \"\"))}\r\n name={name}\r\n autoComplete=\"disable\"\r\n InputProps={{\r\n ...params.InputProps,\r\n endAdornment: (\r\n <Fragment>\r\n {isLoading || isFetching ? (\r\n <CircularProgress\r\n size={25}\r\n color=\"secondary\"\r\n variant=\"indeterminate\"\r\n />\r\n ) : null}\r\n {params.InputProps.endAdornment}\r\n </Fragment>\r\n ),\r\n }}\r\n InputLabelProps={{ shrink: true }}\r\n />\r\n );\r\n }}\r\n renderOption={(props, option, other) => {\r\n props[\"key\"] = props[\"id\"];\r\n let { selected, inputValue } = other;\r\n let label = myGetOptionLabel(option);\r\n const matches = match(label, inputValue);\r\n const parts = parse(label, matches);\r\n const labelJSX = parts.map((part, index) => (\r\n <span key={index} style={{ fontWeight: part.highlight ? 700 : 400 }}>\r\n {part.text}\r\n </span>\r\n ));\r\n return (\r\n <li style={{ whiteSpace: \"pre\" }} {...props}>\r\n {/* {showCheckbox ? <Checkbox checked={selected} /> : null} */}\r\n {labelJSX}\r\n </li>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import { FilterFormComponents } from \"./filterForm\";\r\nimport { cloneDeep } from \"lodash-es\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const FormComponentView = ({\r\n finalMetaData,\r\n onAction,\r\n loading,\r\n data,\r\n submitSecondButtonHide = true,\r\n submitSecondButtonName = \"submit\",\r\n submitSecondLoading = false,\r\n submitSecondAction = (arg1, arg2) => {},\r\n submitSecondValidtion = true,\r\n onFieldAction = (name, value) => {},\r\n}) => {\r\n const isDisplayOnly = finalMetaData.gridConfig?.isDisplayOnly ?? false;\r\n const { t } = useTranslation();\r\n let metadata = transformMetaData({\r\n metaData: finalMetaData,\r\n isDisplayOnly,\r\n data,\r\n });\r\n\r\n return (\r\n <FilterFormComponents\r\n dense={metadata.gridConfig?.dense ?? true}\r\n title={t(metadata.gridConfig?.title ?? \"No Title\")}\r\n fields={metadata.fields}\r\n allowColumnHiding={metadata.gridConfig?.allowColumnHiding ?? false}\r\n initialDataValue={metadata.initialData}\r\n initialVisibleColumnData={metadata.initialVisibleColumnData}\r\n submitButtonHide={metadata.gridConfig?.submitButtonHide ?? false}\r\n submitButtonName={metadata.gridConfig?.submitButtonName ?? \"SUBMIT\"}\r\n hideHeader={metadata.gridConfig?.HideHeader ?? false}\r\n isDisplayOnly={isDisplayOnly}\r\n onAction={onAction}\r\n loading={loading}\r\n submitSecondButtonHide={submitSecondButtonHide}\r\n submitSecondButtonName={submitSecondButtonName}\r\n submitSecondLoading={submitSecondLoading}\r\n submitSecondAction={submitSecondAction}\r\n submitSecondValidtion={submitSecondValidtion}\r\n onFieldAction={onFieldAction}\r\n ></FilterFormComponents>\r\n );\r\n};\r\nconst transformMetaData = ({ metaData, isDisplayOnly, data }) => {\r\n let metadata = cloneDeep(metaData);\r\n let initialData = metadata.fields.reduce((value, item) => {\r\n //console.log(item, Boolean(item?.isDisabled), data[item?.accessor]);\r\n value = {\r\n ...value,\r\n [item.name]: isDisplayOnly\r\n ? data[item?.accessor] ?? \"\"\r\n : Boolean(data[item?.accessor])\r\n ? data[item?.accessor] ?? \"\"\r\n : item?.defaultValue ?? \"\",\r\n };\r\n return value;\r\n }, {});\r\n //console.log(initialData, data);\r\n let initialVisibleColumnData = metadata.fields.reduce((value, item) => {\r\n value = { ...value, [item.name]: item?.isVisible ?? true };\r\n return value;\r\n }, {});\r\n // console.log(\"initialVisibleColumnData\", initialVisibleColumnData);\r\n return {\r\n gridConfig: metadata.gridConfig,\r\n fields: metadata.fields,\r\n initialData: initialData,\r\n initialVisibleColumnData: initialVisibleColumnData,\r\n };\r\n};\r\n","import * as yup from \"yup\";\nimport { MetaDataType } from \"../types\";\n\nconst form = yup.object().shape({\n name: yup.string().required(),\n label: yup.string().required(),\n render: yup.object().shape({\n ordering: yup.string().required(),\n renderType: yup.string().required(),\n groups: yup.object().required(),\n }),\n submitAction: yup.string().required(),\n});\n\nconst field = yup.array().of(\n yup.object().shape({\n name: yup.string().required(),\n label: yup.string().required(),\n render: yup.object().shape({\n componentType: yup.string().required(),\n group: yup.number().required(),\n }),\n sequence: yup.number(),\n GridProps: yup.object().shape({\n xs: yup.number().required(),\n md: yup.number().required(),\n sm: yup.number().required(),\n }),\n }),\n);\n\nconst metaDataChecker = yup.object().shape({\n form: form,\n fields: field,\n});\n\nexport const validateMetaData = (metaData: MetaDataType) => {\n try {\n metaDataChecker.validateSync(metaData, {\n abortEarly: false,\n strict: false,\n stripUnknown: false,\n });\n return true;\n } catch (e) {\n // if (process.env.REACT_APP_DEBUG_MODE === \"true\") {\n // console.log(e);\n // }\n return false;\n }\n};\n\nexport const isMetaDataValid = (metaData) => {\n if (Boolean(metaData) && typeof metaData === \"object\") {\n const { form, fields } = metaData;\n if (\n Array.isArray(fields) &&\n fields.length > 0 &&\n typeof form === \"object\"\n ) {\n return validateMetaData(metaData);\n }\n }\n return false;\n};\n","import {\n forwardRef,\n Fragment,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport FormWrapper, { MetaDataType } from \"components/dynamicForm\";\nimport GridWrapper, { GridMetaDataType } from \"components/dataTableStatic\";\nimport { MasterDetailsMetaData } from \"./types\";\nimport { Alert } from \"components/common/alert\";\nimport AppBar from \"@mui/material/AppBar\";\nimport {\n utilFunction,\n extractMetaData,\n extractGridMetaData,\n} from \"components/utils\";\nimport { CreateDetailsRequestData } from \"components/utils\";\nimport { CSSProperties } from \"@mui/styles/withStyles\";\nimport { useTranslation } from \"react-i18next\";\nexport interface MasterDetailsArgumentType {\n metaData: MasterDetailsMetaData;\n children?: any;\n actions?: any[];\n initialData?: any;\n isError?: boolean;\n errorObj?: any;\n handelActionEvent?: any;\n formStyle?: any;\n isNewRow?: boolean | null;\n isLoading?: boolean;\n onSubmitData?: Function;\n displayMode?: string | null;\n containerstyle?: CSSProperties;\n formName?: string | null;\n formNameMaster?: string | null;\n onFormButtonClickHandel?: any;\n onClickActionEvent?: any;\n hideHeader?: boolean;\n onFormDataChange?: any;\n isDetailHide?: boolean;\n formState?: any;\n}\nexport const MasterDetailsForm = forwardRef<any, MasterDetailsArgumentType>(\n (\n {\n metaData,\n children = () => {},\n actions = [],\n initialData = {},\n isError = false,\n errorObj = {},\n handelActionEvent = () => {},\n formStyle = {\n background: \"white\",\n height: \"calc(100vh - 650px)\",\n overflowY: \"auto\",\n overflowX: \"hidden\",\n },\n isNewRow = null,\n isLoading = false,\n onSubmitData = () => {},\n displayMode = null,\n containerstyle = { padding: \"10px\" },\n formName = \"\",\n formNameMaster = \"\",\n onFormButtonClickHandel = (id) => {},\n onClickActionEvent = () => {},\n hideHeader = false,\n onFormDataChange = () => {},\n isDetailHide = false,\n formState = {},\n },\n ref,\n ) => {\n const intialValueDetails = useMemo(() => {\n const { DETAILS_DATA = [], ...other } = initialData;\n return DETAILS_DATA;\n }, [initialData]);\n const [girdData, setGridData] = useState<any>(intialValueDetails);\n const { t } = useTranslation();\n const myGridRef = useRef<any>(null);\n const myMasterRef = useRef<any>(null);\n const isDetailsHideRef = useRef(false);\n const [serverError, setServerError] = useState(\"\");\n const masterMetadata: MetaDataType = useMemo(\n () => extractMetaData(metaData.masterForm, displayMode),\n [metaData, displayMode, formNameMaster],\n ) as MetaDataType;\n const detailsMetadata: GridMetaDataType = useMemo(() => {\n return extractGridMetaData(metaData.detailsGrid, displayMode);\n }, [metaData, displayMode, formName]) as GridMetaDataType;\n const GetKeyName = useMemo(\n () => metaData?.detailsGrid?.gridConfig?.rowIdColumn || \"id\",\n [metaData],\n );\n const intialValueMaster = useMemo(() => {\n const { DETAILS_DATA, ...other } = initialData;\n return other;\n }, [initialData]);\n const intialNewRowData = useMemo(() => {\n return detailsMetadata.columns.reduce((accu, item) => {\n if (item?.componentType === \"deleteRowCell\") {\n return accu;\n }\n accu[item?.accessor] = item?.defaultValue ?? \"\";\n return accu;\n }, {});\n }, [detailsMetadata]);\n const detailsMetadatarep = useMemo(() => {\n let myColumns = detailsMetadata.columns;\n if (displayMode === \"view\") {\n myColumns = detailsMetadata.columns.filter(\n (one) => one.accessor !== \"_hidden\",\n );\n }\n return { ...detailsMetadata, columns: myColumns };\n }, [displayMode, detailsMetadata]);\n // console.log(intialNewRowData);\n useEffect(() => {\n isDetailsHideRef.current = isDetailHide;\n if (isDetailHide && Boolean(serverError)) {\n setServerError(\"\");\n }\n }, [isDetailHide, setServerError]);\n const AddNewRow = async (\n isValiate = false,\n initValue = intialNewRowData,\n ) => {\n if (isLoading) {\n return;\n }\n if (Boolean(serverError)) {\n setServerError(\"\");\n }\n if (isValiate) {\n let { hasError, data: dataold } =\n await myGridRef.current?.validate(true);\n //console.log(hasError, dataold);\n if (hasError === true) {\n if (dataold) {\n setGridData(dataold);\n }\n return;\n }\n }\n\n setGridData((old) => {\n if (!Array.isArray(old)) {\n return [\n {\n ...initValue,\n _isNewRow: true,\n [GetKeyName]: 1,\n },\n ];\n } else {\n let srCount = utilFunction.GetMaxCdForDetails(old, GetKeyName); //old.length + 1;\n const myNewRowObj = {\n ...initValue,\n _isNewRow: true,\n [GetKeyName]: srCount,\n };\n return [...old, myNewRowObj];\n }\n });\n };\n\n const handleSubmitDetails = async (\n resultValueObj,\n resultDisplayValueObj,\n endSubmit,\n setFieldErrors,\n actionFlag,\n ) => {\n // console.log(\"handleSubmitDetails\");\n if (isDetailsHideRef.current) {\n if (Boolean(serverError)) {\n setServerError(\"\");\n }\n\n //console.log(intialValueMaster, resultValueObj);\n let updateValue = utilFunction.transformDetailsData(\n resultValueObj,\n intialValueMaster,\n );\n let data = {\n _isNewRow: Boolean(isNewRow),\n ...resultValueObj,\n DETAILS_DATA: { isNewRow: [], isUpdatedRow: [], isDeleteRow: [] },\n ...updateValue,\n };\n onSubmitData({\n data,\n resultValueObj,\n resultDisplayValueObj,\n endSubmit,\n setFieldErrors,\n actionFlag,\n });\n } else {\n let { hasError, data } = await myGridRef.current?.validate(true);\n // console.log(data);\n if (Boolean(serverError)) {\n setServerError(\"\");\n }\n if (hasError === true) {\n endSubmit(true);\n if (data) {\n setGridData(data);\n }\n } else {\n let result = myGridRef?.current?.cleanData?.();\n if (!Array.isArray(result)) {\n result = [result];\n }\n if (result.length === 0) {\n endSubmit(true);\n setServerError(String(t(\"Atleastonerowmustbeindetail\")));\n } else {\n let editModeValidateRow = result.filter((one) =>\n Boolean(one?._hidden),\n );\n if (\n displayMode === \"edit\" &&\n editModeValidateRow.length === result.length\n ) {\n endSubmit(true);\n setServerError(String(t(\"Atleastonerowmustbeindetail\")));\n return;\n }\n let finalResult = result.filter(\n (one) => !(Boolean(one?._hidden) && Boolean(one?._isNewRow)),\n );\n if (finalResult.length === 0) {\n endSubmit(true);\n setServerError(String(t(\"Atleastonerowmustbeindetail\")));\n } else {\n finalResult = CreateDetailsRequestData(finalResult);\n //console.log(intialValueMaster, resultValueObj);\n let updateValue = utilFunction.transformDetailsData(\n resultValueObj,\n intialValueMaster,\n );\n let data = {\n _isNewRow: Boolean(isNewRow),\n ...resultValueObj,\n DETAILS_DATA: finalResult,\n ...updateValue,\n };\n onSubmitData({\n data,\n resultValueObj,\n resultDisplayValueObj,\n endSubmit,\n setFieldErrors,\n actionFlag,\n });\n }\n }\n }\n }\n };\n // const handleSubmit = async (\n // resultValueObj,\n // resultDisplayValueObj,\n // endSubmit,\n // setFieldErrors,\n // actionFlag\n // ) => {\n // await handleSubmitDetails(\n // resultValueObj,\n // resultDisplayValueObj,\n // endSubmit,\n // setFieldErrors,\n // actionFlag\n // );\n // };\n useImperativeHandle(ref, () => ({\n addNewRow: (ignoreTouch = false, initValue = intialNewRowData) =>\n AddNewRow(ignoreTouch, initValue),\n GetGirdData: () => myGridRef?.current?.cleanData?.(),\n onSubmitHandler: (e, actionFlag = \"action\", isValidate = true) => {\n myMasterRef.current?.handleSubmit(e, actionFlag, isValidate);\n },\n setGridData: setGridData,\n }));\n return (\n <Fragment>\n <div\n style={{\n paddingBottom: \"10px\",\n }}\n >\n {isError ? (\n <div style={{ paddingRight: \"10px\", paddingLeft: \"10px\" }}>\n <AppBar position=\"relative\" color=\"primary\">\n <Alert\n severity=\"error\"\n errorMsg={errorObj?.error_msg ?? \"Unknow Error\"}\n errorDetail={errorObj?.error_detail ?? \"\"}\n color=\"error\"\n />\n </AppBar>\n </div>\n ) : Boolean(serverError) ? (\n <div style={{ paddingRight: \"10px\", paddingLeft: \"10px\" }}>\n <AppBar position=\"relative\" color=\"primary\">\n <Alert errorMsg={serverError} errorDetail=\"\" severity=\"error\" />\n </AppBar>\n </div>\n ) : null}\n <FormWrapper\n key={\n \"masterDetails-Master\" + Boolean(formNameMaster)\n ? formNameMaster\n : Boolean(formName)\n ? formName\n : \"\"\n }\n metaData={masterMetadata}\n initialValues={intialValueMaster}\n formStyle={formStyle}\n onSubmitHandler={handleSubmitDetails}\n displayMode={displayMode}\n containerstyle={containerstyle}\n onFormButtonClickHandel={onFormButtonClickHandel}\n onFormDataChange={onFormDataChange}\n hideHeader={hideHeader}\n formState={formState}\n ref={myMasterRef}\n >\n {children}\n </FormWrapper>\n <div\n style={{\n paddingRight: \"10px\",\n paddingLeft: \"10px\",\n display: isDetailHide ? \"none\" : \"inherit\",\n }}\n >\n <GridWrapper\n key={\"masterDetails-Detail\" + Boolean(formName) ? formName : \"\"}\n finalMetaData={detailsMetadatarep as GridMetaDataType}\n data={girdData}\n setData={setGridData}\n loading={isLoading}\n actions={actions}\n setAction={handelActionEvent}\n refetchData={null}\n ref={myGridRef}\n onClickActionEvent={onClickActionEvent}\n />\n </div>\n </div>\n </Fragment>\n );\n },\n);\n","import { createContext, FC, ReactNode } from \"react\";\n\ninterface CRUDProviderType {\n context: any;\n insertFormData: CRUDFNType;\n checkFormDataExist: CRUDFNType;\n deleteFormData: CRUDFNType;\n updateFormData: CRUDFNType;\n getFormMetaData: CRUDFNType;\n getFormData: CRUDFNType;\n getGridFormMetaData: CRUDFNType;\n getGridFormData: CRUDFNType;\n children?: ReactNode;\n}\n\nexport const CRUDContext = createContext<CRUDProviderType>(\n {} as CRUDProviderType,\n);\n\ninterface CRUDFNType {\n fn: any;\n args: any;\n}\n\nexport const CRUDContextProvider: FC<CRUDProviderType> = ({\n children,\n insertFormData,\n checkFormDataExist,\n deleteFormData,\n updateFormData,\n getFormData,\n getGridFormData,\n getFormMetaData,\n getGridFormMetaData,\n context,\n}) => {\n return (\n <CRUDContext.Provider\n value={{\n context,\n insertFormData,\n checkFormDataExist,\n deleteFormData,\n updateFormData,\n getFormData,\n getGridFormData,\n getFormMetaData,\n getGridFormMetaData,\n }}\n >\n {children}\n </CRUDContext.Provider>\n );\n};\n","import { FC, useContext, useRef, useEffect } from \"react\";\r\nimport Button from \"@mui/material/Button\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport HighlightOffOutlinedIcon from \"@mui/icons-material/HighlightOffOutlined\";\r\nimport { useMutation, useQuery } from \"react-query\";\r\nimport { SubmitFnType } from \"packages/form\";\r\nimport FormWrapper, { MetaDataType } from \"components/dynamicForm\";\r\nimport { cacheWrapperKeyGen, ClearCacheContext } from \"cache\";\r\nimport { cloneDeep } from \"lodash-es\";\r\nimport { CRUDContext } from \"./context\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { LoaderPaperComponent } from \"components/common/loaderPaper\";\r\n\r\ninterface InsertFormDataFnType {\r\n data: object;\r\n displayData?: object;\r\n endSubmit?: any;\r\n setFieldError?: any;\r\n}\r\n\r\nconst insertFormDataFnWrapper =\r\n (insertFormData) =>\r\n async ({ data }: InsertFormDataFnType) => {\r\n return insertFormData(data);\r\n };\r\n\r\nexport const FormNew: FC<{\r\n isDataChangedRef: any;\r\n successAction: any;\r\n cancelAction: any;\r\n formStyle?: any;\r\n}> = ({ isDataChangedRef, successAction, cancelAction, formStyle }) => {\r\n const { insertFormData, getFormMetaData, context } = useContext(CRUDContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const { addEntry } = useContext(ClearCacheContext);\r\n const wrapperKey = useRef<any>(null);\r\n if (wrapperKey.current === null) {\r\n wrapperKey.current = cacheWrapperKeyGen(Object.values(insertFormData.args));\r\n }\r\n const mutation = useMutation(\r\n insertFormDataFnWrapper(insertFormData.fn(insertFormData.args)),\r\n {\r\n onError: (error: any, { endSubmit }) => {\r\n let errorMsg = \"Unknown Error occured\";\r\n if (typeof error === \"object\") {\r\n errorMsg = error?.error_msg ?? errorMsg;\r\n }\r\n endSubmit(false, errorMsg, error?.error_detail ?? \"\");\r\n },\r\n onSuccess: (data, { endSubmit }) => {\r\n endSubmit(true, \"\");\r\n isDataChangedRef.current = true;\r\n enqueueSnackbar(\"Data is successfully saved with\", {\r\n variant: \"success\",\r\n });\r\n if (typeof successAction === \"function\") {\r\n successAction();\r\n }\r\n },\r\n }\r\n );\r\n const onSubmitHandler: SubmitFnType = (\r\n data,\r\n displayData,\r\n endSubmit,\r\n setFieldError\r\n ) => {\r\n mutation.mutate({\r\n data,\r\n displayData,\r\n endSubmit,\r\n setFieldError,\r\n });\r\n };\r\n useEffect(() => {\r\n addEntry([\"getFormMetaData\", wrapperKey.current, \"new\"]);\r\n }, [addEntry]);\r\n const result = useQuery([\"getFormMetaData\", wrapperKey.current, \"new\"], () =>\r\n getFormMetaData.fn(getFormMetaData.args)(\"new\")\r\n );\r\n const dataUniqueKey = result.dataUpdatedAt;\r\n const loading = result.isLoading || result.isFetching;\r\n let isError = result.isError;\r\n //@ts-ignore\r\n let errorMsg = `${result.error?.error_msg ?? \"unknown error occured\"}`;\r\n let newMetaData = {} as MetaDataType;\r\n if (result.isSuccess) {\r\n //newMetaData = JSON.parse(JSON.stringify(result.data)) as MetaDataType;\r\n newMetaData = cloneDeep(result.data) as MetaDataType;\r\n newMetaData.form.formState = {\r\n ...context,\r\n formCode: newMetaData?.form?.name,\r\n };\r\n newMetaData.form.name = `${newMetaData.form.name}-New`;\r\n if (newMetaData?.form?.render?.renderType === \"stepper\") {\r\n newMetaData.form.render.renderType = \"tabs\";\r\n }\r\n }\r\n if (loading === false && isError === false) {\r\n // isError = !isMetaDataValid(metaData);\r\n if (isError === false) {\r\n } else {\r\n errorMsg = \"Error loading form\";\r\n }\r\n }\r\n\r\n const renderResult = loading ? (\r\n <>\r\n <LoaderPaperComponent />\r\n {typeof cancelAction === \"function\" ? (\r\n <div style={{ position: \"absolute\", right: 0, top: 0 }}>\r\n <IconButton onClick={cancelAction}>\r\n <HighlightOffOutlinedIcon />\r\n </IconButton>\r\n </div>\r\n ) : null}\r\n </>\r\n ) : isError === true ? (\r\n <>\r\n <span>{errorMsg}</span>\r\n {typeof cancelAction === \"function\" ? (\r\n <div style={{ position: \"absolute\", right: 0, top: 0 }}>\r\n <IconButton onClick={cancelAction}>\r\n <HighlightOffOutlinedIcon />\r\n </IconButton>\r\n </div>\r\n ) : null}\r\n </>\r\n ) : (\r\n <FormWrapper\r\n key={`${wrapperKey.current}-${dataUniqueKey}-new`}\r\n metaData={newMetaData as MetaDataType}\r\n initialValues={{}}\r\n onSubmitHandler={onSubmitHandler}\r\n displayMode={\"new\"}\r\n formStyle={formStyle}\r\n >\r\n {({ isSubmitting, handleSubmit }) => {\r\n return (\r\n <>\r\n <Button\r\n onClick={handleSubmit}\r\n disabled={isSubmitting}\r\n endIcon={isSubmitting ? <CircularProgress size={20} /> : null}\r\n >\r\n Save\r\n </Button>\r\n {typeof cancelAction === \"function\" ? (\r\n <Button onClick={cancelAction} disabled={isSubmitting}>\r\n Cancel\r\n </Button>\r\n ) : null}\r\n </>\r\n );\r\n }}\r\n </FormWrapper>\r\n );\r\n return renderResult;\r\n};\r\n","import {\r\n FC,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport Button from \"@mui/material/Button\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport HighlightOffOutlinedIcon from \"@mui/icons-material/HighlightOffOutlined\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport FormWrapper, { MetaDataType } from \"components/dynamicForm\";\r\nimport { SubmitFnType, InitialValuesType } from \"packages/form\";\r\nimport { useMutation, useQueries } from \"react-query\";\r\nimport { queryClient, cacheWrapperKeyGen, ClearCacheContext } from \"cache\";\r\nimport { cloneDeep } from \"lodash-es\";\r\nimport { CRUDContext } from \"./context\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { LoaderPaperComponent } from \"components/common/loaderPaper\";\r\n\r\ninterface updateFormDataType {\r\n data: object;\r\n displayData?: object;\r\n endSubmit?: any;\r\n setFieldError?: any;\r\n serialNo?: string;\r\n}\r\n\r\nconst updateFormDataWrapperFn =\r\n (updateFormData) =>\r\n async ({ data, serialNo }: updateFormDataType) => {\r\n return updateFormData(data, serialNo);\r\n };\r\n\r\nexport const FormViewEdit: FC<{\r\n isDataChangedRef: any;\r\n closeDialog?: any;\r\n defaultView?: \"view\" | \"edit\";\r\n serialNo?: string; //need to find another way to pass it (its a little hardcoded)\r\n setEditFormStateFromInitValues?: any;\r\n readOnly?: boolean;\r\n disableCache?: boolean;\r\n formStyle?: any;\r\n}> = ({\r\n isDataChangedRef,\r\n closeDialog,\r\n defaultView = \"view\",\r\n serialNo = \"1\",\r\n setEditFormStateFromInitValues,\r\n readOnly = false,\r\n disableCache = false,\r\n formStyle,\r\n}) => {\r\n const { updateFormData, getFormData, getFormMetaData, context } =\r\n useContext(CRUDContext);\r\n const { addEntry } = useContext(ClearCacheContext);\r\n const [formMode, setFormMode] = useState(defaultView);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const moveToViewMode = useCallback(() => setFormMode(\"view\"), [setFormMode]);\r\n const moveToEditMode = useCallback(() => setFormMode(\"edit\"), [setFormMode]);\r\n const wrapperKey = useRef<any>(null);\r\n if (wrapperKey.current === null) {\r\n wrapperKey.current = cacheWrapperKeyGen(Object.values(getFormData.args));\r\n }\r\n const mutation = useMutation(\r\n updateFormDataWrapperFn(updateFormData.fn(updateFormData.args)),\r\n {\r\n onError: (error: any, { endSubmit }) => {\r\n let errorMsg = \"Unknown Error occured\";\r\n if (typeof error === \"object\") {\r\n errorMsg = error?.error_msg ?? errorMsg;\r\n }\r\n endSubmit(false, errorMsg, error?.error_detail ?? \"\");\r\n },\r\n onSuccess: (data, { serialNo }) => {\r\n queryClient.refetchQueries([\r\n \"getFormData\",\r\n wrapperKey.current,\r\n serialNo,\r\n ]);\r\n enqueueSnackbar(\"Data changes successfully saved\", {\r\n variant: \"success\",\r\n });\r\n isDataChangedRef.current = true;\r\n moveToViewMode();\r\n if (typeof closeDialog === \"function\") {\r\n closeDialog();\r\n }\r\n },\r\n }\r\n );\r\n\r\n const onSubmitHandler: SubmitFnType = (\r\n data,\r\n displayData,\r\n endSubmit,\r\n setFieldError\r\n ) => {\r\n mutation.mutate({\r\n data,\r\n displayData,\r\n endSubmit,\r\n setFieldError,\r\n serialNo,\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n addEntry([\"getFormData\", wrapperKey.current, serialNo]);\r\n addEntry([\"getFormMetaData\", wrapperKey.current, \"view\"]);\r\n addEntry([\"getFormMetaData\", wrapperKey.current, \"edit\"]);\r\n }, [addEntry, serialNo]);\r\n\r\n const result = useQueries([\r\n disableCache\r\n ? {\r\n queryKey: [\"getFormData\", wrapperKey.current, serialNo],\r\n queryFn: () => getFormData.fn(getFormData.args)(serialNo),\r\n cacheTime: 0,\r\n }\r\n : {\r\n queryKey: [\"getFormData\", wrapperKey.current, serialNo],\r\n queryFn: () => getFormData.fn(getFormData.args)(serialNo),\r\n },\r\n {\r\n queryKey: [\"getFormMetaData\", wrapperKey.current, \"view\"],\r\n queryFn: () => getFormMetaData.fn(getFormMetaData.args)(\"view\"),\r\n },\r\n {\r\n queryKey: [\"getFormMetaData\", wrapperKey.current, \"edit\"],\r\n queryFn: () => getFormMetaData.fn(getFormMetaData.args)(\"edit\"),\r\n },\r\n ]);\r\n\r\n const dataUniqueKey = `${result[0].dataUpdatedAt}`;\r\n const loading =\r\n result[0].isLoading ||\r\n result[1].isLoading ||\r\n result[2].isLoading ||\r\n result[0].isFetching ||\r\n result[1].isFetching ||\r\n result[2].isFetching;\r\n let isError = result[0].isError || result[1].isError || result[2].isError;\r\n //@ts-ignore\r\n let errorMsg = `${result[0].error?.error_msg} ${\r\n //@ts-ignore\r\n result[1].error?.error_msg\r\n } ${\r\n //@ts-ignore\r\n result[2].error?.error_msg\r\n }`;\r\n errorMsg = Boolean(errorMsg.trim()) ? errorMsg : \"Unknown error occured\";\r\n\r\n let formEditData = result[0].data;\r\n\r\n let editMetaData: MetaDataType = {} as MetaDataType;\r\n let viewMetaData: MetaDataType = {} as MetaDataType;\r\n\r\n if (result[1].isSuccess && result[2].isSuccess && result[0].isSuccess) {\r\n const formStateFromInitValues =\r\n typeof setEditFormStateFromInitValues === \"function\"\r\n ? setEditFormStateFromInitValues(result[0].data)\r\n : undefined;\r\n viewMetaData = cloneDeep(result[1].data) as MetaDataType;\r\n editMetaData = cloneDeep(result[2].data) as MetaDataType;\r\n //viewMetaData = JSON.parse(JSON.stringify(result[1].data)) as MetaDataType;\r\n //editMetaData = JSON.parse(JSON.stringify(result[2].data)) as MetaDataType;\r\n\r\n editMetaData.form.formState = {\r\n ...context,\r\n serialNo,\r\n formCode: editMetaData.form.name,\r\n ...formStateFromInitValues,\r\n };\r\n editMetaData.form.name = `${editMetaData.form.name}-edit`;\r\n if (editMetaData?.form?.render?.renderType === \"stepper\") {\r\n editMetaData.form.render.renderType = \"tabs\";\r\n }\r\n viewMetaData.form.formState = {\r\n ...context,\r\n serialNo,\r\n formCode: viewMetaData.form.name,\r\n ...formStateFromInitValues,\r\n };\r\n viewMetaData.form.name = `${viewMetaData.form.name}-view`;\r\n if (viewMetaData?.form?.render?.renderType === \"stepper\") {\r\n viewMetaData.form.render.renderType = \"tabs\";\r\n }\r\n }\r\n\r\n const renderResult = loading ? (\r\n <>\r\n <LoaderPaperComponent />\r\n {typeof closeDialog === \"function\" ? (\r\n <div style={{ position: \"absolute\", right: 0, top: 0 }}>\r\n <IconButton onClick={closeDialog}>\r\n <HighlightOffOutlinedIcon />\r\n </IconButton>\r\n </div>\r\n ) : null}\r\n </>\r\n ) : isError === true ? (\r\n <>\r\n <span>{errorMsg}</span>\r\n {typeof closeDialog === \"function\" ? (\r\n <div style={{ position: \"absolute\", right: 0, top: 0 }}>\r\n <IconButton onClick={closeDialog}>\r\n <HighlightOffOutlinedIcon />\r\n </IconButton>\r\n </div>\r\n ) : null}\r\n </>\r\n ) : formMode === \"view\" ? (\r\n <FormWrapper\r\n key={`${wrapperKey.current}-${dataUniqueKey}-${formMode}`}\r\n metaData={viewMetaData as MetaDataType}\r\n initialValues={formEditData as InitialValuesType}\r\n onSubmitHandler={onSubmitHandler}\r\n //@ts-ignore\r\n displayMode={formMode}\r\n formStyle={formStyle}\r\n >\r\n {!readOnly ? <Button onClick={moveToEditMode}>Edit</Button> : null}\r\n {typeof closeDialog === \"function\" ? (\r\n <Button onClick={closeDialog}>Cancel</Button>\r\n ) : null}\r\n </FormWrapper>\r\n ) : formMode === \"edit\" ? (\r\n <FormWrapper\r\n key={`${wrapperKey.current}-${dataUniqueKey}-${formMode}`}\r\n metaData={editMetaData as MetaDataType}\r\n initialValues={formEditData as InitialValuesType}\r\n onSubmitHandler={onSubmitHandler}\r\n //@ts-ignore\r\n displayMode={formMode}\r\n formStyle={formStyle}\r\n >\r\n {({ isSubmitting, handleSubmit }) => (\r\n <>\r\n <Button\r\n onClick={handleSubmit}\r\n disabled={isSubmitting}\r\n endIcon={isSubmitting ? <CircularProgress size={20} /> : null}\r\n >\r\n Save\r\n </Button>\r\n <Button onClick={moveToViewMode} disabled={isSubmitting}>\r\n Cancel\r\n </Button>\r\n </>\r\n )}\r\n </FormWrapper>\r\n ) : null;\r\n return renderResult;\r\n};\r\n","import { Fragment, useContext, useRef } from \"react\";\nimport { useMutation } from \"react-query\";\nimport DialogTitle from \"@mui/material/DialogTitle\";\nimport DialogActions from \"@mui/material/DialogActions\";\nimport Button from \"@mui/material/Button\";\nimport { Alert } from \"components/common/alert\";\nimport DialogContent from \"@mui/material/DialogContent\";\nimport { CRUDContext } from \"./context\";\nimport { cacheWrapperKeyGen } from \"cache\";\nimport { useTranslation } from \"react-i18next\";\ninterface DeleteFormDataType {\n serialNo?: string;\n}\n\nconst DeleteFormDataFnWrapper =\n (deleteFormData) =>\n async ({ serialNo }: DeleteFormDataType) => {\n return deleteFormData(serialNo);\n };\n\nexport const DeleteAction = ({ isDataChangedRef, closeDialog, serialNo }) => {\n const { deleteFormData } = useContext(CRUDContext);\n const wrapperKey = useRef<any>(null);\n const { t } = useTranslation();\n if (wrapperKey.current === null) {\n wrapperKey.current = cacheWrapperKeyGen(Object.values(deleteFormData.args));\n }\n\n const mutation = useMutation(\n DeleteFormDataFnWrapper(deleteFormData.fn(deleteFormData.args)),\n {\n onError: (error: any) => {},\n onSuccess: (data) => {\n isDataChangedRef.current = true;\n closeDialog();\n },\n }\n );\n\n return (\n <Fragment key={wrapperKey.current}>\n <DialogTitle id=\"alert-dialog-title\">\n {t(\"AreyousureyouwanttodeletetheselectedRecords\")}\n </DialogTitle>\n {mutation.isLoading ? (\n <DialogContent>Deleting...</DialogContent>\n ) : mutation?.isError ? (\n <DialogContent>\n <Alert\n severity=\"error\"\n errorMsg={mutation.error?.error_msg ?? \"Unknown Error occured\"}\n errorDetail={mutation.error?.error_detail ?? \"\"}\n />\n </DialogContent>\n ) : mutation.isSuccess ? (\n <DialogContent>{t(\"AllRecordssuccessfullydeleted\")}</DialogContent>\n ) : null}\n {mutation.isSuccess ? (\n <DialogActions>\n <Button onClick={closeDialog} color=\"primary\">\n {t(\"Close\")}\n </Button>\n </DialogActions>\n ) : (\n <DialogActions>\n <Button\n onClick={closeDialog}\n color=\"primary\"\n disabled={mutation.isLoading}\n >\n {t(\"Disagree\")}\n </Button>\n <Button\n onClick={() => mutation.mutate({ serialNo })}\n color=\"primary\"\n disabled={mutation.isLoading}\n >\n {t(\"Agree\")}\n </Button>\n </DialogActions>\n )}\n </Fragment>\n );\n};\n","import {\r\n useContext,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from \"react\";\r\nimport GridWrapper from \"components/dataTableStatic\";\r\nimport { useQueries } from \"react-query\";\r\nimport { ClearCacheContext } from \"cache\";\r\nimport { ActionTypes, GridMetaDataType } from \"components/dataTable\";\r\nimport { CRUDContext } from \"./context\";\r\nimport { cacheWrapperKeyGen } from \"cache\";\r\nimport { LoaderPaperComponent } from \"components/common/loaderPaper\";\r\n\r\ntype GridWrapperType = {\r\n actions: ActionTypes[];\r\n setAction: any;\r\n};\r\n\r\nexport const MyGridWrapper = forwardRef<any, GridWrapperType>(\r\n ({ actions, setAction }, ref) => {\r\n const { addEntry } = useContext(ClearCacheContext);\r\n const { getGridFormData, getGridFormMetaData, context } =\r\n useContext(CRUDContext);\r\n const wrapperKey = useRef<any>(null);\r\n if (wrapperKey.current === null) {\r\n wrapperKey.current = cacheWrapperKeyGen(\r\n Object.values(getGridFormData.args)\r\n );\r\n }\r\n const result = useQueries([\r\n {\r\n queryKey: [\"getGridFormMetaData\", wrapperKey.current],\r\n queryFn: () => getGridFormMetaData.fn(getGridFormMetaData.args)(),\r\n },\r\n {\r\n queryKey: [\"getStaticGridData\", wrapperKey.current],\r\n queryFn: () => getGridFormData.fn(getGridFormData.args)(),\r\n },\r\n ]);\r\n useEffect(() => {\r\n addEntry([\"getGridFormMetaData\", wrapperKey.current]);\r\n addEntry([\"getStaticGridData\", wrapperKey.current]);\r\n }, [addEntry]);\r\n useImperativeHandle(ref, () => ({\r\n refetch: () => result[1].refetch(),\r\n }));\r\n const loading = result[0].isLoading || result[0].isFetching;\r\n\r\n let isError = result[0].isError || result[1].isError;\r\n //@ts-ignore\r\n let errorMsg = `${result[0].error?.error_msg} ${result[1].error?.error_msg}`\r\n .trimStart()\r\n .trimEnd();\r\n errorMsg = !Boolean(errorMsg) ? \"unknown error occured\" : errorMsg;\r\n const renderResult = loading ? (\r\n <LoaderPaperComponent />\r\n ) : isError === true ? (\r\n <span>{errorMsg}</span>\r\n ) : (\r\n <GridWrapper\r\n key={`staticGridData-${wrapperKey.current}`}\r\n finalMetaData={result[0].data as GridMetaDataType}\r\n data={result[1].data ?? []}\r\n setData={() => null}\r\n actions={actions}\r\n setAction={setAction}\r\n loading={result[1].isLoading || result[1].isFetching}\r\n gridProps={context}\r\n />\r\n );\r\n return renderResult;\r\n }\r\n);\r\nMyGridWrapper.displayName = \"MyGridWrapper\";\r\n","export const tabsLegal = [\r\n {\r\n label: \"KYC\",\r\n sequence: 0,\r\n docType: [\r\n {\r\n label: \"Add Documents\",\r\n type: \"kyc\",\r\n primary: true,\r\n categoryCD: \"KYC_DOC_TYPE_CO\",\r\n },\r\n ],\r\n },\r\n {\r\n label: \"Bank\",\r\n sequence: 1,\r\n docType: [\r\n {\r\n label: \"Add Documents\",\r\n type: \"bank\",\r\n primary: true,\r\n categoryCD: \"BANK_DOC_TYPE\",\r\n },\r\n ],\r\n },\r\n {\r\n label: \"Financial\",\r\n sequence: 2,\r\n docType: [\r\n { label: \"ITR\", type: \"itr\", primary: true, categoryCD: \"ITR_DOC_TYPE\" },\r\n {\r\n label: \"Others\",\r\n type: \"itrOther\",\r\n primary: false,\r\n categoryCD: \"ITR_DOC_TYPE_O\",\r\n },\r\n ],\r\n },\r\n {\r\n label: \"GST\",\r\n sequence: 3,\r\n docType: [\r\n {\r\n label: \"Analysis\",\r\n type: \"gst\",\r\n primary: true,\r\n categoryCD: \"GST_DOC_TYPE\",\r\n },\r\n {\r\n label: \"Others\",\r\n type: \"gstOther\",\r\n primary: true,\r\n categoryCD: \"GST_DOC_TYPE_O\",\r\n },\r\n ],\r\n },\r\n {\r\n label: \"Others\",\r\n sequence: 4,\r\n docType: [\r\n {\r\n label: \"Add Documents\",\r\n type: \"other\",\r\n primary: true,\r\n categoryCD: \"OTHER_DOC_TYPE\",\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport const tabsManagement = [\r\n {\r\n label: \"KYC\",\r\n sequence: 0,\r\n docType: [\r\n {\r\n label: \"Add Documents\",\r\n type: \"kyc\",\r\n primary: true,\r\n categoryCD: \"KYC_DOC_TYPE\",\r\n },\r\n ],\r\n },\r\n {\r\n label: \"Bank\",\r\n sequence: 1,\r\n docType: [\r\n {\r\n label: \"Add Documents\",\r\n type: \"bank\",\r\n primary: true,\r\n categoryCD: \"BANK_DOC_TYPE\",\r\n },\r\n ],\r\n },\r\n {\r\n label: \"Financial\",\r\n sequence: 2,\r\n docType: [\r\n { label: \"ITR\", type: \"itr\", primary: true, categoryCD: \"ITR_DOC_TYPE\" },\r\n {\r\n label: \"Others\",\r\n type: \"itrOther\",\r\n primary: false,\r\n categoryCD: \"ITR_DOC_TYPE_O\",\r\n },\r\n ],\r\n },\r\n {\r\n label: \"Others\",\r\n sequence: 3,\r\n docType: [\r\n {\r\n label: \"Add Documents\",\r\n type: \"other\",\r\n primary: true,\r\n categoryCD: \"OTHER_DOC_TYPE\",\r\n },\r\n ],\r\n },\r\n];\r\n","export const bankEdit = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"Update Statement\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: true,\r\n disableGlobalFilter: true,\r\n disableGroupBy: true,\r\n containerHeight: { min: \"30vh\", max: \"30vh\" },\r\n hideFooter: true,\r\n hideHeader: true,\r\n disableLoader: true,\r\n enablePagination: false,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Bank\",\r\n componentType: \"editableSelect\",\r\n accessor: \"bankID\",\r\n sequence: 4,\r\n alignment: \"left\",\r\n options: \"getBankListForLeadDocuments\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n disableCachingOptions: true,\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getBankDocType\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n ],\r\n};\r\n","export const bankGrid = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"Bank Statement\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: false,\r\n disableGlobalFilter: false,\r\n disableGroupBy: false,\r\n containerHeight: { min: \"40vh\", max: \"50vh\" },\r\n enablePagination: true,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Uploaded Date\",\r\n componentType: \"date\",\r\n accessor: \"uploadDate\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Verification\",\r\n componentType: \"default\",\r\n accessor: \"status\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Bank Name\",\r\n componentType: \"default\",\r\n accessor: \"bank\",\r\n sequence: 4,\r\n alignment: \"left\",\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"default\",\r\n accessor: \"docType\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"default\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n ],\r\n};\r\n","export const bankUpload = [\r\n {\r\n columnName: \"Bank\",\r\n componentType: \"editableSelect\",\r\n accessor: \"bankLineID\",\r\n sequence: 4,\r\n alignment: \"left\",\r\n options: \"getBankListForLeadDocuments\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n disableCachingOptions: true,\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getBankDocType\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"editableTextField\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isVisible: false,\r\n },\r\n];\r\n","export const GSTEdit = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"GST Document Update\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: true,\r\n disableGlobalFilter: true,\r\n disableGroupBy: true,\r\n containerHeight: { min: \"30vh\", max: \"30vh\" },\r\n hideFooter: true,\r\n hideHeader: true,\r\n disableLoader: true,\r\n enablePagination: false,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getGSTDocType\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n ],\r\n};\r\n","export const GSTGrid = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"GST\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: false,\r\n disableGlobalFilter: false,\r\n disableGroupBy: false,\r\n containerHeight: { min: \"40vh\", max: \"50vh\" },\r\n enablePagination: true,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Uploaded Date\",\r\n componentType: \"date\",\r\n accessor: \"uploadDate\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Verification\",\r\n componentType: \"default\",\r\n accessor: \"status\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"default\",\r\n accessor: \"docType\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"default\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n ],\r\n};\r\n","export const GSTUpload = [\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getGSTDocType\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"editableTextField\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isVisible: false,\r\n },\r\n];\r\n","export const GSTOtherUpload = [\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getGSTDocTypeOther\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"editableTextField\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isVisible: false,\r\n },\r\n];\r\n","export const GSTOtherEdit = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"GST Document Update\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: true,\r\n disableGlobalFilter: true,\r\n disableGroupBy: true,\r\n containerHeight: { min: \"30vh\", max: \"30vh\" },\r\n hideFooter: true,\r\n hideHeader: true,\r\n disableLoader: true,\r\n enablePagination: false,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getGSTDocTypeOther\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n ],\r\n};\r\n","export const ITREdit = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"ITR Document Update\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: true,\r\n disableGlobalFilter: true,\r\n disableGroupBy: true,\r\n containerHeight: { min: \"30vh\", max: \"30vh\" },\r\n hideFooter: true,\r\n hideHeader: true,\r\n disableLoader: true,\r\n enablePagination: false,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Financial Year\",\r\n componentType: \"editableNumberFormat\",\r\n accessor: \"finYear\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n FormatProps: {\r\n format: \"####\",\r\n placeholder: \"YYYY\",\r\n mask: [\"Y\", \"Y\", \"Y\", \"Y\"],\r\n },\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getITRDocType\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n ],\r\n};\r\n","export const ITRGrid = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"ITR\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: false,\r\n disableGlobalFilter: false,\r\n disableGroupBy: false,\r\n containerHeight: { min: \"40vh\", max: \"50vh\" },\r\n enablePagination: true,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Uploaded Date\",\r\n componentType: \"date\",\r\n accessor: \"uploadDate\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Verification\",\r\n componentType: \"default\",\r\n accessor: \"status\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Financial Year\",\r\n componentType: \"default\",\r\n accessor: \"finYear\",\r\n sequence: 4,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"default\",\r\n accessor: \"docType\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"default\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n ],\r\n};\r\n","export const ITRUpload = [\r\n {\r\n columnName: \"Financial Year\",\r\n componentType: \"editableNumberFormat\",\r\n accessor: \"finYear\",\r\n sequence: 4,\r\n alignment: \"left\",\r\n FormatProps: {\r\n format: \"####\",\r\n placeholder: \"YYYY\",\r\n mask: [\"Y\", \"Y\", \"Y\", \"Y\"],\r\n },\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getITRDocType\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"editableTextField\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isVisible: false,\r\n },\r\n];\r\n","export const ITROtherEdit = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"ITR Document Update\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: true,\r\n disableGlobalFilter: true,\r\n disableGroupBy: true,\r\n containerHeight: { min: \"30vh\", max: \"30vh\" },\r\n hideFooter: true,\r\n hideHeader: true,\r\n disableLoader: true,\r\n enablePagination: false,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getITRDocTypeOther\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n ],\r\n};\r\n","export const ITROtherUpload = [\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getITRDocTypeOther\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"editableTextField\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isVisible: false,\r\n },\r\n];\r\n","export const KYCManagementEdit = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"KYC Document Update\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: true,\r\n disableGlobalFilter: true,\r\n disableGroupBy: true,\r\n containerHeight: { min: \"30vh\", max: \"30vh\" },\r\n hideFooter: true,\r\n hideHeader: true,\r\n disableLoader: true,\r\n enablePagination: false,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getKYCDocType\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n ],\r\n};\r\n","export const KYCGrid = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"KYC\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: false,\r\n disableGlobalFilter: false,\r\n disableGroupBy: false,\r\n containerHeight: { min: \"40vh\", max: \"50vh\" },\r\n enablePagination: true,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Uploaded Date\",\r\n componentType: \"date\",\r\n accessor: \"uploadDate\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Verification\",\r\n componentType: \"default\",\r\n accessor: \"status\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"default\",\r\n accessor: \"docType\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"default\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n ],\r\n};\r\n","export const KYCManagementUpload = [\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getKYCDocType\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"editableTextField\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isVisible: false,\r\n },\r\n];\r\n","export const KYCLegalEdit = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"KYC Document Update\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: true,\r\n disableGlobalFilter: true,\r\n disableGroupBy: true,\r\n containerHeight: { min: \"30vh\", max: \"30vh\" },\r\n hideFooter: true,\r\n hideHeader: true,\r\n disableLoader: true,\r\n enablePagination: false,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getKYCDocTypeLegal\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n ],\r\n};\r\n","export const KYCLegalUpload = [\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getKYCDocTypeLegal\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"editableTextField\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isVisible: false,\r\n },\r\n];\r\n","export const othersEdit = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"Others Document Update\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: true,\r\n disableGlobalFilter: true,\r\n disableGroupBy: true,\r\n containerHeight: { min: \"30vh\", max: \"30vh\" },\r\n hideFooter: true,\r\n hideHeader: true,\r\n disableLoader: true,\r\n enablePagination: false,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getOtherDocType\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n ],\r\n};\r\n","export const othersGrid = {\r\n gridConfig: {\r\n dense: true,\r\n gridLabel: \"Others\",\r\n rowIdColumn: \"docUUID\",\r\n defaultColumnConfig: { width: 150, maxWidth: 250, minWidth: 100 },\r\n allowColumnReordering: true,\r\n disableSorting: false,\r\n disableGlobalFilter: false,\r\n disableGroupBy: false,\r\n containerHeight: { min: \"40vh\", max: \"50vh\" },\r\n enablePagination: true,\r\n },\r\n columns: [\r\n {\r\n columnName: \"File Name\",\r\n componentType: \"default\",\r\n accessor: \"fileName\",\r\n sequence: 1,\r\n alignment: \"left\",\r\n width: 300,\r\n maxWidth: 300,\r\n minWidth: 100,\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"This is a required field\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Uploaded Date\",\r\n componentType: \"date\",\r\n accessor: \"uploadDate\",\r\n sequence: 2,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Verification\",\r\n componentType: \"default\",\r\n accessor: \"status\",\r\n sequence: 3,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"default\",\r\n accessor: \"docType\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n width: 150,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"default\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n width: 100,\r\n maxWidth: 200,\r\n minWidth: 100,\r\n },\r\n ],\r\n};\r\n","export const OthersUpload = [\r\n {\r\n columnName: \"Document Type\",\r\n componentType: \"editableSelect\",\r\n accessor: \"docTypeID\",\r\n sequence: 5,\r\n alignment: \"left\",\r\n options: \"getOtherDocType\",\r\n schemaValidation: {\r\n type: \"string\",\r\n rules: [{ name: \"required\", params: [\"required\"] }],\r\n },\r\n },\r\n {\r\n columnName: \"Password\",\r\n componentType: \"editableTextField\",\r\n accessor: \"password\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isPassword: true,\r\n },\r\n {\r\n columnName: \"Remarks\",\r\n componentType: \"editableTextField\",\r\n accessor: \"remarks\",\r\n sequence: 6,\r\n alignment: \"left\",\r\n isVisible: false,\r\n },\r\n];\r\n","//import { LOSSDK, DOCCRUDTYPE } from \"registry/fns/los\";\r\nimport { tabsLegal, tabsManagement } from \"./metaData/tabs\";\r\nimport { bankEdit, bankGrid, bankUpload } from \"./metaData/bank\";\r\nimport {\r\n GSTEdit,\r\n GSTGrid,\r\n GSTUpload,\r\n GSTOtherEdit,\r\n GSTOtherUpload,\r\n} from \"./metaData/gst\";\r\nimport {\r\n ITREdit,\r\n ITRGrid,\r\n ITRUpload,\r\n ITROtherEdit,\r\n ITROtherUpload,\r\n} from \"./metaData/itr\";\r\nimport {\r\n KYCLegalEdit,\r\n KYCGrid,\r\n KYCLegalUpload,\r\n KYCManagementEdit,\r\n KYCManagementUpload,\r\n} from \"./metaData/kyc\";\r\nimport { othersEdit, othersGrid, OthersUpload } from \"./metaData/others\";\r\n\r\nexport const uploadDocuments =\r\n ({ moduleType, productType, docCategory, categoryCD, refID, serialNo }) =>\r\n async (\r\n data: FormData,\r\n progressHandler: any = () => {},\r\n completeHandler: any = () => {}\r\n ) => {\r\n // if (!LOSSDK.isAPIInitialized()) {\r\n // return {\r\n // status: \"failure\",\r\n // data: \"Invalid token or API not initialized\",\r\n // };\r\n // }\r\n // const newURL = new URL(\r\n // Boolean(productType)\r\n // ? `./${moduleType}/${productType}/document/${docCategory}/data/post`\r\n // : `./${moduleType}/document/${docCategory}/data/post`,\r\n // LOSSDK.getBaseURL() as URL\r\n // ).href;\r\n // let xhr = new XMLHttpRequest();\r\n // data.append(\"categoryCD\", categoryCD ?? \"\");\r\n // data.append(\"refID\", refID);\r\n // data.append(\"serialNo\", serialNo ?? \"\");\r\n // xhr.open(\"POST\", newURL, true);\r\n // xhr.setRequestHeader(\"Authorization\", `Bearer ${LOSSDK.getToken()}`);\r\n // xhr.upload.onprogress = (e) => {\r\n // if (e.lengthComputable) {\r\n // var precentage = Math.round((e.loaded / e.total) * 100);\r\n // progressHandler(precentage);\r\n // } else {\r\n // progressHandler(Infinity);\r\n // }\r\n // };\r\n // xhr.onload = (e) => {\r\n // try {\r\n // const result = JSON.parse(xhr.responseText);\r\n // if (result.status === \"0\") {\r\n // completeHandler({ status: \"success\", data: result?.response_data });\r\n // } else {\r\n // completeHandler({ status: \"failure\", data: result?.error_data });\r\n // }\r\n // } catch (e) {\r\n // completeHandler({\r\n // status: \"failure\",\r\n // data: { message: \"unknown error occured\" },\r\n // });\r\n // }\r\n // };\r\n // xhr.send(data);\r\n };\r\n\r\nexport const listDocuments =\r\n ({ moduleType, productType, refID, serialNo }) =>\r\n async (docCategory) => {\r\n // const { data, status } = await LOSSDK.internalFetcher(\r\n // Boolean(productType)\r\n // ? `./${moduleType}/${productType}/document/${docCategory}/data/get`\r\n // : `./${moduleType}/document/${docCategory}/data/get`,\r\n // {\r\n // body: JSON.stringify({\r\n // request_data: {\r\n // refID: refID,\r\n // serialNo: serialNo,\r\n // },\r\n // }),\r\n // }\r\n // );\r\n // if (status === \"success\") {\r\n // return data?.request_data;\r\n // } else {\r\n // throw data?.error_data;\r\n // }\r\n };\r\n\r\nexport const deleteDocuments =\r\n ({ moduleType, productType, refID, serialNo }) =>\r\n async (docCategory: any, docUUID: any) => {\r\n // const { data, status } = await LOSSDK.internalFetcher(\r\n // Boolean(productType)\r\n // ? `./${moduleType}/${productType}/document/${docCategory}/data/delete`\r\n // : `./${moduleType}/document/${docCategory}/data/delete`,\r\n // {\r\n // body: JSON.stringify({\r\n // request_data: {\r\n // refID: refID,\r\n // serialNo: serialNo,\r\n // docUUID: docUUID,\r\n // },\r\n // channel: \"W\",\r\n // }),\r\n // }\r\n // );\r\n // if (status === \"success\") {\r\n // return data?.response_data;\r\n // } else {\r\n // throw data?.error_data;\r\n // }\r\n };\r\n\r\nexport const updateDocuments =\r\n ({ moduleType, productType, refID, serialNo }) =>\r\n async (docCategory: any, updateData: any) => {\r\n // const { data, status } = await LOSSDK.internalFetcher(\r\n // Boolean(productType)\r\n // ? `./${moduleType}/${productType}/document/${docCategory}/data/put`\r\n // : `./${moduleType}/document/${docCategory}/data/put`,\r\n // {\r\n // body: JSON.stringify({\r\n // request_data: {\r\n // refID: refID,\r\n // serialNo: serialNo,\r\n // details: updateData,\r\n // },\r\n // channel: \"W\",\r\n // }),\r\n // }\r\n // );\r\n // if (status === \"success\") {\r\n // return data?.response_data;\r\n // } else {\r\n // throw data?.error_data;\r\n // }\r\n };\r\n\r\nexport const verifyDocuments =\r\n ({ moduleType, productType, refID, serialNo }) =>\r\n async (\r\n docCategory: any,\r\n docUUID: any,\r\n remarks: any,\r\n docStatus: \"Verify\" | \"Rejected\"\r\n ) => {\r\n // const { data, status } = await LOSSDK.internalFetcher(\r\n // Boolean(productType)\r\n // ? `./${moduleType}/${productType}/document/${docCategory}/data/verification`\r\n // : `./${moduleType}/document/${docCategory}/data/verification`,\r\n // {\r\n // body: JSON.stringify({\r\n // request_data: {\r\n // refID: refID,\r\n // serialNo: serialNo,\r\n // docUUID: docUUID,\r\n // remarks: remarks,\r\n // status:\r\n // docStatus === \"Verify\"\r\n // ? \"Y\"\r\n // : docStatus === \"Rejected\"\r\n // ? \"R\"\r\n // : \"X\",\r\n // },\r\n // channel: \"W\",\r\n // }),\r\n // }\r\n // );\r\n // if (status === \"success\") {\r\n // return data?.response_data;\r\n // } else {\r\n // throw data?.error_data;\r\n // }\r\n };\r\n\r\nexport const generateDocumentDownloadURL =\r\n ({ moduleType, productType }) =>\r\n (docCategory, docUUID) => {\r\n if (!Array.isArray(docUUID)) {\r\n docUUID = [docUUID];\r\n }\r\n let docs = docUUID.join(\",\");\r\n return new URL(\r\n // Boolean(productType)\r\n // ? `./${moduleType}/${productType}/document/${docCategory}/data/download?docUUID=${docs}&tokenID=${LOSSDK.getToken()}`\r\n // : `./${moduleType}/document/${docCategory}/data/download?docUUID=${docs}&tokenID=${LOSSDK.getToken()}`,\r\n // LOSSDK.getBaseURL() as URL\r\n \"\"\r\n ).href;\r\n };\r\n\r\nexport const previewDocument =\r\n ({ moduleType, productType }) =>\r\n async (docCategory, docUUID) => {\r\n if (!Array.isArray(docUUID)) {\r\n docUUID = [docUUID];\r\n }\r\n const url = new URL(\r\n // Boolean(productType)\r\n // ? `./${moduleType}/${productType}/document/${docCategory}/data/preview`\r\n // : `./${moduleType}/document/${docCategory}/data/preview`,\r\n // LOSSDK.getBaseURL() as URL\r\n \"\"\r\n ).href;\r\n try {\r\n let response = await fetch(url, {\r\n method: \"POST\",\r\n body: JSON.stringify({\r\n request_data: {\r\n docUUID: docUUID,\r\n },\r\n }),\r\n headers: new Headers({\r\n //Authorization: `Bearer ${LOSSDK.getToken()}`,\r\n \"Content-Type\": \"application/json\",\r\n }),\r\n });\r\n if (String(response.status) === \"200\") {\r\n let data = await response.blob();\r\n return data;\r\n } else {\r\n return new Error(\"Error getting file\");\r\n }\r\n } catch (e) {\r\n return e;\r\n }\r\n };\r\n\r\nexport const getDocumentCRUDTabsMetadata = async ({\r\n moduleType,\r\n productType,\r\n refID,\r\n}) => {\r\n return Boolean(productType) ? tabsManagement : tabsLegal;\r\n};\r\n\r\n// export const getDocumentMetaData = async ({\r\n// moduleType,\r\n// productType,\r\n// docCategory,\r\n// metaDataType,\r\n// }) => {\r\n// const { data, status } = await LOSSDK.internalFetcher(\r\n// `./${moduleType}/document/${docCategory}/metaData/${metaDataType}`,\r\n// {\r\n// body: JSON.stringify({\r\n// request_data: {},\r\n// channel: \"W\",\r\n// }),\r\n// }\r\n// );\r\n// if (status === \"success\") {\r\n// return data?.response_data;\r\n// } else {\r\n// throw data?.error_data;\r\n// }\r\n// };\r\n\r\nexport const getDocumentMetaData =\r\n ({ moduleType, productType, metaDataType }) =>\r\n async (docCategory) => {\r\n if (metaDataType === \"grid\") {\r\n switch (docCategory) {\r\n case \"bank\":\r\n return bankGrid;\r\n case \"itr\":\r\n return ITRGrid;\r\n case \"gst\":\r\n return GSTGrid;\r\n case \"other\":\r\n return othersGrid;\r\n case \"kyc\":\r\n return KYCGrid;\r\n default:\r\n /*eslint-disable no-throw-literal*/\r\n throw { error_msg: \"Invalid docCategory\" };\r\n }\r\n } else if (metaDataType === \"upload\") {\r\n switch (docCategory) {\r\n case \"bank\":\r\n return bankUpload;\r\n case \"itr\":\r\n return ITRUpload;\r\n case \"itrOther\":\r\n return ITROtherUpload;\r\n case \"gst\":\r\n return GSTUpload;\r\n case \"gstOther\":\r\n return GSTOtherUpload;\r\n case \"other\":\r\n return OthersUpload;\r\n case \"kyc\":\r\n if (productType === \"management\") {\r\n return KYCManagementUpload;\r\n } else {\r\n return KYCLegalUpload;\r\n }\r\n default:\r\n throw { error_msg: \"Invalid docCategory\" };\r\n }\r\n } else if (metaDataType === \"edit\") {\r\n switch (docCategory) {\r\n case \"bank\":\r\n return bankEdit;\r\n case \"itr\":\r\n return ITREdit;\r\n case \"itrOther\":\r\n return ITROtherEdit;\r\n case \"gst\":\r\n return GSTEdit;\r\n case \"gstOther\":\r\n return GSTOtherEdit;\r\n case \"other\":\r\n return othersEdit;\r\n case \"kyc\":\r\n if (productType === \"management\") {\r\n return KYCManagementEdit;\r\n } else {\r\n return KYCLegalEdit;\r\n }\r\n default:\r\n throw { error_msg: \"Invalid docCategory\" };\r\n }\r\n } else {\r\n throw { error_msg: \"Invalid MetaData Type requested\" };\r\n }\r\n };\r\n","import { createContext, FC, ReactNode } from \"react\";\r\nimport * as API from \"./api\";\r\n\r\ninterface DOCCRUDProviderType {\r\n context: any;\r\n uploadDocuments: CRUDFNType;\r\n deleteDocuments: CRUDFNType;\r\n updateDocument: CRUDFNType;\r\n getDocumentsGridData: CRUDFNType;\r\n verifyDocuments: CRUDFNType;\r\n getDocumentListingGridMetaData: CRUDFNType;\r\n getDocumentUploadAddtionalFieldsMetaData: CRUDFNType;\r\n getDocumentEditGridMetaData: CRUDFNType;\r\n generateDocumentDownloadURL: CRUDFNType;\r\n previewDocument: CRUDFNType;\r\n children?: ReactNode;\r\n}\r\n\r\nexport const DOCCRUDContext = createContext<DOCCRUDProviderType>(\r\n {} as DOCCRUDProviderType\r\n);\r\n\r\ninterface CRUDFNType {\r\n fn: any;\r\n args: any;\r\n}\r\n\r\nexport const DOCCRUDContextProvider: FC<DOCCRUDProviderType> = ({\r\n children,\r\n uploadDocuments,\r\n deleteDocuments,\r\n updateDocument,\r\n verifyDocuments,\r\n getDocumentsGridData,\r\n getDocumentListingGridMetaData,\r\n getDocumentUploadAddtionalFieldsMetaData,\r\n getDocumentEditGridMetaData,\r\n generateDocumentDownloadURL,\r\n previewDocument,\r\n context,\r\n}) => {\r\n return (\r\n <DOCCRUDContext.Provider\r\n value={{\r\n uploadDocuments,\r\n deleteDocuments,\r\n updateDocument,\r\n verifyDocuments,\r\n getDocumentsGridData,\r\n getDocumentListingGridMetaData,\r\n getDocumentUploadAddtionalFieldsMetaData,\r\n getDocumentEditGridMetaData,\r\n generateDocumentDownloadURL,\r\n previewDocument,\r\n context,\r\n }}\r\n >\r\n {children}\r\n </DOCCRUDContext.Provider>\r\n );\r\n};\r\n\r\nexport const DocAPICrudProviderGenerator = (\r\n moduleType,\r\n productType,\r\n docCategory,\r\n refID,\r\n serialNo\r\n) => ({\r\n context: {\r\n moduleType,\r\n productType,\r\n docCategory,\r\n refID,\r\n serialNo,\r\n },\r\n uploadDocuments: {\r\n fn: API.uploadDocuments,\r\n args: { moduleType, productType, refID, serialNo },\r\n },\r\n getDocumentsGridData: {\r\n fn: API.listDocuments,\r\n args: { moduleType, productType, refID, serialNo },\r\n },\r\n deleteDocuments: {\r\n fn: API.deleteDocuments,\r\n args: { moduleType, productType, refID, serialNo },\r\n },\r\n updateDocument: {\r\n fn: API.updateDocuments,\r\n args: { moduleType, productType, refID, serialNo },\r\n },\r\n verifyDocuments: {\r\n fn: API.verifyDocuments,\r\n args: { moduleType, productType, refID, serialNo },\r\n },\r\n getDocumentListingGridMetaData: {\r\n fn: API.getDocumentMetaData,\r\n args: { moduleType, productType, metaDataType: \"grid\" },\r\n },\r\n getDocumentUploadAddtionalFieldsMetaData: {\r\n fn: API.getDocumentMetaData,\r\n args: { moduleType, productType, metaDataType: \"upload\" },\r\n },\r\n getDocumentEditGridMetaData: {\r\n fn: API.getDocumentMetaData,\r\n args: { moduleType, productType, metaDataType: \"edit\" },\r\n },\r\n generateDocumentDownloadURL: {\r\n fn: API.generateDocumentDownloadURL,\r\n args: { moduleType, productType },\r\n },\r\n previewDocument: {\r\n fn: API.previewDocument,\r\n args: { moduleType, productType },\r\n },\r\n});\r\n","import {\r\n useContext,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n Fragment,\r\n} from \"react\";\r\nimport GridWrapper from \"components/dataTableStatic\";\r\nimport { useQueries } from \"react-query\";\r\nimport { ClearCacheContext, cacheWrapperKeyGen } from \"cache\";\r\nimport { ActionTypes, GridMetaDataType } from \"components/dataTable\";\r\nimport { DOCCRUDContext } from \"./context\";\r\nimport Alert from \"@mui/lab/Alert\";\r\nimport { LoaderPaperComponent } from \"components/common/loaderPaper\";\r\n\r\ntype GridWrapperType = {\r\n actions: ActionTypes[];\r\n setAction: any;\r\n transformData?: any;\r\n defaultSortOrder?: any;\r\n defaultGroupBy?: any;\r\n};\r\n\r\nexport const MyGridWrapper = forwardRef<any, GridWrapperType>(\r\n (\r\n {\r\n actions,\r\n setAction,\r\n transformData = (data) => data,\r\n defaultSortOrder,\r\n defaultGroupBy,\r\n },\r\n ref\r\n ) => {\r\n const { addEntry } = useContext(ClearCacheContext);\r\n const { getDocumentsGridData, getDocumentListingGridMetaData, context } =\r\n useContext(DOCCRUDContext);\r\n const docType = context.docCategory.filter((one) => one.primary === true)[0]\r\n .type;\r\n const wrapperKey = useRef<any>(null);\r\n if (wrapperKey.current === null) {\r\n wrapperKey.current = cacheWrapperKeyGen(\r\n Object.values(getDocumentsGridData.args)\r\n );\r\n }\r\n useEffect(() => {\r\n addEntry([\"getDocumentListingGridMetaData\", context.refID, docType]);\r\n addEntry([\"getDocumentsGridData\", wrapperKey.current, docType]);\r\n }, [addEntry, context, docType]);\r\n\r\n useImperativeHandle(ref, () => ({\r\n refetch: () => result[0].refetch(),\r\n }));\r\n\r\n const result = useQueries([\r\n {\r\n queryKey: [\"getDocumentsGridData\", wrapperKey.current, docType],\r\n queryFn: () =>\r\n getDocumentsGridData.fn(getDocumentsGridData.args)(docType),\r\n },\r\n {\r\n queryKey: [\"getDocumentListingGridMetaData\", context.refID, docType],\r\n queryFn: () =>\r\n getDocumentListingGridMetaData.fn(\r\n getDocumentListingGridMetaData.args\r\n )(docType),\r\n },\r\n ]);\r\n\r\n const renderResult =\r\n result[1].isLoading || result[1].isFetching ? (\r\n <LoaderPaperComponent />\r\n ) : result[1].isError ? (\r\n <span>\r\n {\r\n //@ts-ignore\r\n result[1]?.error?.error_msg ?? \"Unknown Error occured\"\r\n }\r\n </span>\r\n ) : (\r\n <Fragment>\r\n {result[0].isError ? (\r\n <Alert severity=\"error\">\r\n {\r\n //@ts-ignore\r\n result[0]?.error?.error_msg ?? \"Unknown Error occured\"\r\n }\r\n </Alert>\r\n ) : null}\r\n <GridWrapper\r\n key={`listingDocuments`}\r\n data={transformData(result[0].data ?? [])}\r\n finalMetaData={result[1].data as GridMetaDataType}\r\n setData={() => null}\r\n actions={actions}\r\n setAction={setAction}\r\n loading={result[0].isFetching || result[0].isLoading}\r\n refetchData={() => result[0].refetch()}\r\n defaultSortOrder={defaultSortOrder}\r\n defaultGroupBy={defaultGroupBy}\r\n />\r\n </Fragment>\r\n );\r\n return renderResult;\r\n }\r\n);\r\nMyGridWrapper.displayName = \"MyGridWrapper\";\r\n\r\n//If need to coloreize Data wrap Data in this function\r\n// const ColorizeData = (data) => {\r\n// if (Array.isArray(data) && data.length > 0) {\r\n// data = data.map((one) => {\r\n// if (one.status === \"Pending\") {\r\n// return { ...one, _rowColor: \"rgb(232, 244, 253)\" };\r\n// } else if (one.status === \"Rejected\") {\r\n// return { ...one, _rowColor: \"rgb(253, 236, 234)\" };\r\n// } else if (one.status === \"Verified\") {\r\n// return { ...one, _rowColor: \"rgb(237, 247, 237)\" };\r\n// } else {\r\n// return one;\r\n// }\r\n// });\r\n// }\r\n// return data;\r\n// };\r\n","import { Fragment, useContext } from \"react\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Alert from \"@mui/lab/Alert\";\r\nimport LinearProgress from \"@mui/material/LinearProgress\";\r\nimport { useMutation } from \"react-query\";\r\nimport { DOCCRUDContext } from \"./context\";\r\nimport { useSnackbar } from \"notistack\";\r\n\r\ninterface DeleteFormDataType {\r\n docType: string;\r\n docUUID?: string;\r\n}\r\n\r\nconst DeleteDocumentDataFnWrapper =\r\n (deleteDocuments) =>\r\n async ({ docType, docUUID }: DeleteFormDataType) => {\r\n return deleteDocuments(docType, docUUID);\r\n };\r\n\r\nexport const DeleteAction = ({ dataChangedRef, closeDialog, docUUID }) => {\r\n const { deleteDocuments, context } = useContext(DOCCRUDContext);\r\n const docType = context.docCategory.filter((one) => one.primary === true)[0]\r\n .type;\r\n const { enqueueSnackbar } = useSnackbar();\r\n const mutation = useMutation(\r\n DeleteDocumentDataFnWrapper(deleteDocuments.fn(deleteDocuments.args)),\r\n {\r\n onError: (error: any) => {},\r\n onSuccess: (data) => {\r\n dataChangedRef.current = true;\r\n enqueueSnackbar(\"Documents successful deleted\", { variant: \"success\" });\r\n closeDialog();\r\n },\r\n }\r\n );\r\n\r\n return (\r\n <Fragment>\r\n {mutation.isError ? (\r\n <Alert severity=\"error\">\r\n {mutation?.error?.error_msg ?? \"Unknown Error occured\"}\r\n </Alert>\r\n ) : null}\r\n {mutation.isLoading ? <LinearProgress variant={\"indeterminate\"} /> : null}\r\n <DialogTitle id=\"alert-dialog-title\">\r\n Are you sure you want to delete the selected Records\r\n </DialogTitle>\r\n <DialogActions>\r\n <Button\r\n onClick={closeDialog}\r\n color=\"primary\"\r\n disabled={mutation.isLoading}\r\n >\r\n No\r\n </Button>\r\n <Button\r\n color=\"primary\"\r\n onClick={() => mutation.mutate({ docType: docType, docUUID })}\r\n disabled={mutation.isLoading}\r\n >\r\n Yes\r\n </Button>\r\n </DialogActions>\r\n </Fragment>\r\n );\r\n};\r\n","import { Fragment, useContext, useState } from \"react\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Alert from \"@mui/lab/Alert\";\r\nimport LinearProgress from \"@mui/material/LinearProgress\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport { useMutation } from \"react-query\";\r\nimport { DOCCRUDContext } from \"./context\";\r\nimport { useSnackbar } from \"notistack\";\r\n\r\ninterface VerifyFormDataType {\r\n docType: string;\r\n docUUID?: string;\r\n remarks?: string;\r\n}\r\n\r\nconst ConfirmDocumentDataFnWrapper =\r\n (verifyDocuments) =>\r\n async ({ docType, docUUID, remarks }: VerifyFormDataType) => {\r\n return verifyDocuments(docType, docUUID, remarks, \"Verify\");\r\n };\r\nconst RejectDocumentDataFnWrapper =\r\n (verifyDocuments) =>\r\n async ({ docType, docUUID, remarks }: VerifyFormDataType) => {\r\n return verifyDocuments(docType, docUUID, remarks, \"Rejected\");\r\n };\r\n\r\nexport const VerifyDocumentAction = ({\r\n dataChangedRef,\r\n closeDialog,\r\n docUUID,\r\n}) => {\r\n const { verifyDocuments, context } = useContext(DOCCRUDContext);\r\n const docType = context.docCategory.filter((one) => one.primary === true)[0]\r\n .type;\r\n const [remarks, setRemarks] = useState(\"\");\r\n const [error, setError] = useState(\"\");\r\n const { enqueueSnackbar } = useSnackbar();\r\n const verifyMutation = useMutation(\r\n ConfirmDocumentDataFnWrapper(verifyDocuments.fn(verifyDocuments.args)),\r\n {\r\n onError: (error: any) => {},\r\n onSuccess: (data) => {\r\n dataChangedRef.current = true;\r\n enqueueSnackbar(\"Documents Successfully verified\", {\r\n variant: \"success\",\r\n });\r\n closeDialog();\r\n },\r\n }\r\n );\r\n const rejectMutation = useMutation(\r\n RejectDocumentDataFnWrapper(verifyDocuments.fn(verifyDocuments.args)),\r\n {\r\n onError: (error: any) => {},\r\n onSuccess: (data) => {\r\n dataChangedRef.current = true;\r\n enqueueSnackbar(\"Documents Successfully Rejected\", {\r\n variant: \"success\",\r\n });\r\n closeDialog();\r\n },\r\n }\r\n );\r\n const isError = rejectMutation.isError || verifyMutation.isError;\r\n const isLoading = rejectMutation.isLoading || verifyMutation.isLoading;\r\n let errorMsg = `${rejectMutation?.error?.error_msg ?? \"\"} ${\r\n verifyMutation?.error?.error_msg ?? \"\"\r\n }`;\r\n errorMsg = Boolean(errorMsg.trimEnd().trimStart())\r\n ? errorMsg\r\n : \"unknown error occured\";\r\n\r\n return (\r\n <Fragment>\r\n {isLoading ? <LinearProgress variant={\"indeterminate\"} /> : null}\r\n {isError ? <Alert severity=\"error\">{errorMsg}</Alert> : null}\r\n <DialogTitle id=\"alert-dialog-title\">Document Verification</DialogTitle>\r\n <DialogContent>\r\n <TextField\r\n onChange={(e) => setRemarks(e.target.value)}\r\n multiline={true}\r\n rows={4}\r\n // rowsMax={4} // mui v4\r\n maxRows={4} // mui v5\r\n error={Boolean(error)}\r\n helperText={error}\r\n fullWidth={true}\r\n label=\"Remarks\"\r\n InputLabelProps={{ shrink: true }}\r\n />\r\n </DialogContent>\r\n <DialogActions>\r\n <Button onClick={closeDialog} color=\"primary\">\r\n Cancel\r\n </Button>\r\n <Button\r\n color=\"primary\"\r\n onClick={() => {\r\n if (Boolean(remarks)) {\r\n verifyMutation.mutate({ docType, docUUID, remarks });\r\n } else {\r\n setError(\"This is a required field\");\r\n }\r\n }}\r\n disabled={isLoading}\r\n >\r\n Verify\r\n </Button>\r\n <Button\r\n color=\"primary\"\r\n onClick={() => {\r\n if (Boolean(remarks)) {\r\n rejectMutation.mutate({ docType, docUUID, remarks });\r\n } else {\r\n setError(\"This is a required filed\");\r\n }\r\n }}\r\n disabled={isLoading}\r\n >\r\n Reject\r\n </Button>\r\n </DialogActions>\r\n </Fragment>\r\n );\r\n};\r\n","import { useContext, useRef, useState, useEffect } from \"react\";\r\nimport { useMutation, useQuery } from \"react-query\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Alert from \"@mui/lab/Alert\";\r\nimport LinearProgress from \"@mui/material/LinearProgress\";\r\nimport GridWrapper from \"components/dataTableStatic\";\r\nimport { ClearCacheContext } from \"cache\";\r\nimport { DOCCRUDContext } from \"./context\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { LoaderPaperComponent } from \"components/common/loaderPaper\";\r\n\r\ninterface DeleteFormDataType {\r\n docType: string;\r\n data?: any;\r\n}\r\n\r\nconst updateDocumentDataFnWrapper =\r\n (updateDocuments) =>\r\n async ({ docType, data }: DeleteFormDataType) => {\r\n return updateDocuments(docType, data);\r\n };\r\n\r\nexport const UpdateDocumentData = ({\r\n row: { data, id },\r\n closeDialog,\r\n dataChangedRef,\r\n}) => {\r\n const [gridData, setGridData] = useState(Array.isArray(data) ? data : [data]);\r\n const { updateDocument, getDocumentEditGridMetaData, context } =\r\n useContext(DOCCRUDContext);\r\n const docType = context.docCategory.filter(\r\n (one) => one.categoryCD === data.docCategory\r\n )[0].type;\r\n\r\n const primaryDocType = context.docCategory.filter(\r\n (one) => one.primary === true\r\n )[0].type;\r\n const { addEntry } = useContext(ClearCacheContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const gridRef = useRef<any>(null);\r\n useEffect(() => {\r\n addEntry([\r\n \"getDocumentEditGridMetaData\",\r\n context.moduleType,\r\n context.productType ?? \"legal\",\r\n docType,\r\n ]);\r\n }, [addEntry, context, docType]);\r\n const query = useQuery(\r\n [\r\n \"getDocumentEditGridMetaData\",\r\n context.moduleType,\r\n context.productType ?? \"legal\",\r\n docType,\r\n ],\r\n () =>\r\n getDocumentEditGridMetaData.fn(getDocumentEditGridMetaData.args)(docType)\r\n );\r\n\r\n const mutation = useMutation(\r\n updateDocumentDataFnWrapper(updateDocument.fn(updateDocument.args)),\r\n {\r\n onError: (error: any) => {},\r\n onSuccess: (data) => {\r\n dataChangedRef.current = true;\r\n enqueueSnackbar(\"Document changes successful\", { variant: \"success\" });\r\n closeDialog();\r\n },\r\n }\r\n );\r\n\r\n const sendDataForUpdate = async () => {\r\n let { hasError, data } = await gridRef?.current?.validate?.();\r\n if (hasError === true) {\r\n setGridData(data);\r\n } else {\r\n let result = gridRef?.current?.cleanData?.();\r\n await mutation.mutate({ docType: primaryDocType, data: result });\r\n }\r\n };\r\n //@ts-ignore\r\n let error = `${query.error?.error_msg ?? \"unknown message\"}`;\r\n\r\n const renderResult = query.isLoading ? (\r\n <LoaderPaperComponent />\r\n ) : query.isError === true ? (\r\n <span>{error}</span>\r\n ) : (\r\n <>\r\n {mutation.isError ? (\r\n <Alert severity=\"error\">\r\n {mutation?.error?.error_msg ?? \"Unknown Error occured\"}\r\n </Alert>\r\n ) : null}\r\n {mutation.isLoading ? <LinearProgress variant={\"indeterminate\"} /> : null}\r\n <DialogTitle id=\"alert-dialog-title\">Update Documents</DialogTitle>\r\n <DialogContent>\r\n <GridWrapper\r\n key={`listingDocumentsForUpdate`}\r\n data={gridData ?? []}\r\n finalMetaData={query.data}\r\n setData={setGridData}\r\n gridProps={context}\r\n ref={gridRef}\r\n loading={mutation.isLoading}\r\n />\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n onClick={closeDialog}\r\n color=\"primary\"\r\n disabled={mutation.isLoading}\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n color=\"primary\"\r\n onClick={sendDataForUpdate}\r\n disabled={mutation.isLoading}\r\n >\r\n Update\r\n </Button>\r\n </DialogActions>\r\n </>\r\n );\r\n return renderResult;\r\n};\r\n","import { useContext, useEffect } from \"react\";\r\nimport { FileUploadControl } from \"components/fileUpload\";\r\nimport { useQuery } from \"react-query\";\r\nimport { DOCCRUDContext } from \"./context\";\r\nimport { ClearCacheContext } from \"cache\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { LoaderPaperComponent } from \"components/common/loaderPaper\";\r\n\r\nexport const UploadDocumentsApiWrapper = ({\r\n onClose,\r\n editableFileName,\r\n dataChangedRef,\r\n currentAction,\r\n}) => {\r\n const { uploadDocuments, getDocumentUploadAddtionalFieldsMetaData, context } =\r\n useContext(DOCCRUDContext);\r\n const currentDoc = context.docCategory.filter(\r\n (one) => one.type === currentAction\r\n )[0];\r\n const docType = currentDoc.type;\r\n const categoryCD = currentDoc.categoryCD;\r\n const primaryDocType = context.docCategory.filter(\r\n (one) => one.primary === true\r\n )[0].type;\r\n const { addEntry } = useContext(ClearCacheContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const closeWrapper = () => {\r\n if (dataChangedRef.current === true) {\r\n enqueueSnackbar(\"Documents Successfully uploaded\", {\r\n variant: \"success\",\r\n });\r\n }\r\n onClose();\r\n };\r\n\r\n useEffect(() => {\r\n addEntry([\r\n \"getDocumentUploadAddtionalFieldsMetaData\",\r\n context.moduleType,\r\n context.productType,\r\n docType,\r\n ]);\r\n }, [context, addEntry, docType]);\r\n const query = useQuery(\r\n [\r\n \"getDocumentUploadAddtionalFieldsMetaData\",\r\n context.moduleType,\r\n context.productType,\r\n docType,\r\n ],\r\n () =>\r\n getDocumentUploadAddtionalFieldsMetaData.fn(\r\n getDocumentUploadAddtionalFieldsMetaData.args\r\n )(docType)\r\n );\r\n //@ts-ignore\r\n let error = `${query.error?.error_msg ?? \"unknown error occured\"}`;\r\n const renderResult = query.isLoading ? (\r\n <LoaderPaperComponent />\r\n ) : query.isError === true ? (\r\n <span>{error}</span>\r\n ) : (\r\n <FileUploadControl\r\n onClose={closeWrapper}\r\n additionalColumns={query.data}\r\n editableFileName={editableFileName}\r\n dataChangedRef={dataChangedRef}\r\n onUpload={uploadDocuments.fn({\r\n ...uploadDocuments.args,\r\n docCategory: primaryDocType,\r\n categoryCD: categoryCD,\r\n })}\r\n gridProps={{ ...context, docCategory: docType }}\r\n maxAllowedSize={1024 * 1204 * 10} //10Mb file\r\n allowedExtensions={\r\n context.productType === \"partner\"\r\n ? [\"pdf\", \"jpg\", \"jpeg\", \"png\"]\r\n : [\"kyc\", \"other\"].indexOf(docType) >= 0\r\n ? [\"pdf\", \"jpg\", \"jpeg\", \"png\"]\r\n : [\"pdf\"]\r\n }\r\n />\r\n );\r\n return renderResult;\r\n};\r\n","export const downloadFile = (url: string, fileName: string) => {\r\n const a = document.createElement(\"a\");\r\n a.href = String(url);\r\n a.download = fileName;\r\n const clickHandler = () => {\r\n setTimeout(() => {\r\n URL.revokeObjectURL(String(url));\r\n a.removeEventListener(\"click\", clickHandler);\r\n }, 150);\r\n };\r\n a.target = \"_blank\";\r\n a.addEventListener(\"click\", clickHandler, false);\r\n a.click();\r\n};\r\n","import { Fragment, useContext, useEffect, useState } from \"react\";\r\nimport { DOCCRUDContext } from \"./context\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport Button from \"@mui/material/Button\";\r\nimport { downloadFile } from \"../download\";\r\n\r\nexport const Download = ({ docData, closeDialog, maxDownloadLimit = 3 }) => {\r\n const { generateDocumentDownloadURL, context } = useContext(DOCCRUDContext);\r\n const docType = context.docCategory.filter((one) => one.primary === true)[0]\r\n .type;\r\n const [error, setError] = useState(\"\");\r\n const closeMe = () => {\r\n setError(\"\");\r\n closeDialog();\r\n };\r\n useEffect(() => {\r\n if (docData.length > Number(maxDownloadLimit)) {\r\n setError(`Cannot download more than ${maxDownloadLimit} files at a time`);\r\n return;\r\n }\r\n if (docData.length === 1) {\r\n const url = generateDocumentDownloadURL.fn(\r\n generateDocumentDownloadURL.args\r\n )(\r\n docType,\r\n docData.map((one) => one.id)\r\n );\r\n downloadFile(url, docData[0].name);\r\n } else if (docData.length > 1) {\r\n const url = generateDocumentDownloadURL.fn(\r\n generateDocumentDownloadURL.args\r\n )(\r\n docType,\r\n docData.map((one) => one.id)\r\n );\r\n downloadFile(url, `download-${new Date().getUTCMilliseconds()}`);\r\n }\r\n closeDialog();\r\n }, [\r\n maxDownloadLimit,\r\n docData,\r\n docType,\r\n closeDialog,\r\n generateDocumentDownloadURL,\r\n ]);\r\n return Boolean(error) ? (\r\n <Fragment>\r\n <DialogTitle>{error}</DialogTitle>\r\n <DialogActions>\r\n <Button onClick={closeMe}>Ok</Button>\r\n </DialogActions>\r\n </Fragment>\r\n ) : null;\r\n};\r\n","import { useContext, useEffect, useState, Fragment, FC, useRef } from \"react\";\r\nimport { DOCCRUDContext } from \"./context\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport GetAppRoundedIcon from \"@mui/icons-material/GetAppRounded\";\r\nimport Close from \"@mui/icons-material/Close\";\r\nimport { downloadFile } from \"components/fileUpload/utils\";\r\nimport { LoaderPaperComponent } from \"components/common/loaderPaper\";\r\n\r\nexport const PreviewWrapper = ({\r\n fileType,\r\n fileName,\r\n docUUID,\r\n closeDialog,\r\n}) => {\r\n return fileType.indexOf(\"pdf\") >= 0 || fileType.indexOf(\"image\") >= 0 ? (\r\n //@ts-ignore\r\n <FileViewer\r\n fileName={fileName}\r\n onClose={closeDialog}\r\n docUUID={docUUID}\r\n fileType={fileType}\r\n />\r\n ) : (\r\n <NoPreview onClose={closeDialog} fileName={fileName} />\r\n );\r\n};\r\n\r\nexport const FileViewer: FC<{\r\n fileName: string;\r\n onClose?: any;\r\n docUUID: string;\r\n fileType: string;\r\n}> = ({ fileName, onClose, docUUID, fileType }) => {\r\n const { loading, blob, error, success } = useBlobLoader({\r\n docUUID,\r\n fileType,\r\n });\r\n const urlObj = useRef<any>(\"\");\r\n if (success) {\r\n urlObj.current = URL.createObjectURL(blob as any);\r\n }\r\n useEffect(() => {\r\n let toRemoveURL = urlObj.current ?? \"\";\r\n return () => {\r\n URL.revokeObjectURL(toRemoveURL);\r\n };\r\n }, []);\r\n return (\r\n <Fragment>\r\n <DialogActions style={{ display: \"flex\", padding: \"8px 24px\" }}>\r\n <Typography variant=\"h6\" color=\"textSecondary\">\r\n File:\r\n </Typography>\r\n <Typography variant=\"h6\">{fileName}</Typography>\r\n <div style={{ flexGrow: 1 }}></div>\r\n {success ? (\r\n <IconButton\r\n color=\"primary\"\r\n onClick={() => downloadFile(blob as File, fileName)}\r\n >\r\n <GetAppRoundedIcon />\r\n </IconButton>\r\n ) : null}\r\n {typeof onClose === \"function\" ? (\r\n <IconButton color=\"primary\" onClick={onClose}>\r\n <Close />\r\n </IconButton>\r\n ) : null}\r\n </DialogActions>\r\n <DialogContent>\r\n {loading ? (\r\n <LoaderPaperComponent />\r\n ) : Boolean(error) ? (\r\n <span>{error}</span>\r\n ) : (\r\n <iframe\r\n src={`${urlObj.current}`}\r\n title=\"Document View\"\r\n style={{ height: \"100%\", width: \"100%\" }}\r\n aria-label=\"File Preview\"\r\n />\r\n )}\r\n </DialogContent>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport const NoPreview: FC<{\r\n fileName: string;\r\n onClose?: any;\r\n message?: string;\r\n}> = ({ onClose, fileName, message }) => (\r\n <Fragment>\r\n <DialogActions style={{ display: \"flex\", padding: \"8px 24px\" }}>\r\n <Typography variant=\"h6\" color=\"textSecondary\">\r\n File:\r\n </Typography>\r\n <Typography variant=\"h6\">{fileName}</Typography>\r\n <div style={{ flexGrow: 1 }}></div>\r\n {typeof onClose === \"function\" ? (\r\n <IconButton color=\"primary\" onClick={onClose}>\r\n <Close />\r\n </IconButton>\r\n ) : null}\r\n </DialogActions>\r\n <DialogContent>{message}</DialogContent>\r\n </Fragment>\r\n);\r\n\r\nconst useBlobLoader = ({ docUUID, fileType }) => {\r\n const [loading, setLoading] = useState(true);\r\n const [success, setSuccess] = useState(false);\r\n const [error, setError] = useState(\"\");\r\n const { previewDocument, context } = useContext(DOCCRUDContext);\r\n const docType = context.docCategory.filter((one) => one.primary === true)[0]\r\n .type;\r\n const [blob, setBlob] = useState<Blob | null>(null);\r\n useEffect(() => {\r\n previewDocument\r\n .fn(previewDocument.args)(docType, docUUID)\r\n .then((blob) => {\r\n if (blob instanceof Error) {\r\n setError(blob.message);\r\n setLoading(false);\r\n setSuccess(false);\r\n } else {\r\n if (blob.type === \"application/json\") {\r\n blob.text((data) => {\r\n setError(data);\r\n setLoading(false);\r\n setSuccess(false);\r\n });\r\n } else {\r\n const fileTypeBlob = new Blob([blob], { type: fileType });\r\n setBlob(fileTypeBlob);\r\n setSuccess(true);\r\n setError(\"\");\r\n setLoading(false);\r\n }\r\n }\r\n })\r\n .catch((e) => {\r\n setError(e.message);\r\n setLoading(true);\r\n setSuccess(false);\r\n });\r\n }, [\r\n setError,\r\n setLoading,\r\n setSuccess,\r\n setBlob,\r\n docUUID,\r\n fileType,\r\n previewDocument,\r\n docType,\r\n ]);\r\n return {\r\n success,\r\n loading,\r\n error,\r\n blob,\r\n };\r\n};\r\n","import { useEffect } from \"react\";\r\n\r\nexport const InvalidAction = ({ closeDialog }) => {\r\n useEffect(() => {\r\n closeDialog();\r\n }, [closeDialog]);\r\n return null;\r\n};\r\n","import {\r\n useState,\r\n Fragment,\r\n useRef,\r\n useCallback,\r\n useEffect,\r\n useContext,\r\n FC,\r\n} from \"react\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport { ActionTypes } from \"components/dataTable\";\r\nimport { queryClient } from \"cache\";\r\nimport { MyGridWrapper } from \"./gridWrapper\";\r\nimport { DeleteAction } from \"./delete\";\r\nimport { VerifyDocumentAction } from \"./verify\";\r\nimport { UpdateDocumentData } from \"./update\";\r\nimport { UploadDocumentsApiWrapper } from \"./upload\";\r\nimport { Download } from \"./download\";\r\nimport { PreviewWrapper } from \"./view\";\r\nimport { InvalidAction } from \"pages_audit/common/invalidAction\";\r\nimport { DOCCRUDContext } from \"./context\";\r\n\r\nconst actions: ActionTypes[] = [\r\n {\r\n actionName: \"Verify\",\r\n actionLabel: \"Verify\",\r\n multiple: true,\r\n shouldExclude: (rows) => {\r\n let exclude = false;\r\n for (let i = 0; i < rows.length; i++) {\r\n if (rows[i].data?.status !== \"Pending\") {\r\n exclude = true;\r\n break;\r\n }\r\n }\r\n return exclude;\r\n },\r\n },\r\n {\r\n actionName: \"View\",\r\n actionLabel: \"View\",\r\n multiple: false,\r\n rowDoubleClick: true,\r\n },\r\n {\r\n actionName: \"Download\",\r\n actionLabel: \"Download\",\r\n multiple: true,\r\n },\r\n {\r\n actionName: \"Delete\",\r\n actionLabel: \"Delete\",\r\n multiple: true,\r\n },\r\n {\r\n actionName: \"Update\",\r\n actionLabel: \"Update\",\r\n multiple: false,\r\n },\r\n];\r\n\r\nexport const DocumentGridCRUD: FC<{ disableActions?: any }> = ({\r\n disableActions,\r\n}) => {\r\n const { context } = useContext(DOCCRUDContext);\r\n const allActions = useRef<any>(null);\r\n if (allActions.current === null) {\r\n let newAddActions = context.docCategory.map((one) => ({\r\n actionName: `Add_${one.type}`,\r\n actionLabel: one.label,\r\n multiple: undefined,\r\n alwaysAvailable: true,\r\n }));\r\n allActions.current = [...newAddActions, ...actions];\r\n let disableActionsArray: string[];\r\n if (typeof disableActions === \"string\") {\r\n disableActionsArray = [disableActions];\r\n } else if (Array.isArray(disableActions)) {\r\n disableActionsArray = disableActions;\r\n } else {\r\n disableActionsArray = [];\r\n }\r\n if (Array.isArray(disableActionsArray)) {\r\n allActions.current = allActions.current.filter((one) => {\r\n if (\r\n disableActionsArray.indexOf(\"Add\") >= 0 &&\r\n one.actionName?.indexOf(\"Add\") >= 0\r\n ) {\r\n return false;\r\n } else {\r\n return disableActionsArray?.indexOf(one.actionName) >= 0\r\n ? false\r\n : true;\r\n }\r\n });\r\n }\r\n }\r\n const [currentAction, setCurrentAction] = useState<any>(null);\r\n const gridRef = useRef<any>(null);\r\n const dataChangedRef = useRef(false);\r\n const closeMyDialog = useCallback(() => {\r\n setCurrentAction(null);\r\n if (dataChangedRef.current === true) {\r\n gridRef.current?.refetch?.();\r\n dataChangedRef.current = false;\r\n }\r\n }, [setCurrentAction]);\r\n //Remove Bank List from caching - when upload unmounts\r\n useEffect(() => {\r\n return () => {\r\n queryClient.removeQueries([\"getBankListForLeadDocuments\"], {\r\n exact: false,\r\n });\r\n };\r\n }, []);\r\n let selectedAction = currentAction?.name ?? \"\";\r\n\r\n return (\r\n <Fragment>\r\n <MyGridWrapper\r\n ref={gridRef}\r\n key={`documentListing`}\r\n actions={allActions.current}\r\n setAction={setCurrentAction}\r\n />\r\n <Dialog\r\n open={Boolean(currentAction)}\r\n maxWidth=\"xl\"\r\n PaperProps={{\r\n style:\r\n selectedAction.indexOf(\"Add\") >= 0 || selectedAction === \"View\"\r\n ? { width: \"100%\", height: \"100%\" }\r\n : selectedAction === \"Verify\"\r\n ? { width: \"40%\" }\r\n : {},\r\n }}\r\n >\r\n {selectedAction.indexOf(\"Add\") >= 0 ? (\r\n <UploadDocumentsApiWrapper\r\n onClose={closeMyDialog}\r\n editableFileName={false}\r\n dataChangedRef={dataChangedRef}\r\n currentAction={selectedAction.slice(\r\n selectedAction.indexOf(\"Add_\") + \"Add_\".length\r\n )}\r\n />\r\n ) : selectedAction === \"Update\" ? (\r\n <UpdateDocumentData\r\n row={currentAction?.rows[0]}\r\n closeDialog={closeMyDialog}\r\n dataChangedRef={dataChangedRef}\r\n />\r\n ) : selectedAction === \"Delete\" ? (\r\n <DeleteAction\r\n docUUID={currentAction?.rows.map((one) => one.id)}\r\n closeDialog={closeMyDialog}\r\n dataChangedRef={dataChangedRef}\r\n />\r\n ) : selectedAction === \"Verify\" ? (\r\n <VerifyDocumentAction\r\n docUUID={currentAction?.rows.map((one) => one.id)}\r\n closeDialog={closeMyDialog}\r\n dataChangedRef={dataChangedRef}\r\n />\r\n ) : selectedAction === \"Download\" ? (\r\n <Download\r\n closeDialog={closeMyDialog}\r\n docData={currentAction?.rows.map((one) => ({\r\n id: one.id,\r\n name: one.data?.fileName,\r\n }))}\r\n />\r\n ) : selectedAction === \"View\" ? (\r\n <PreviewWrapper\r\n closeDialog={closeMyDialog}\r\n docUUID={currentAction?.rows[0]?.id}\r\n fileName={currentAction?.rows[0]?.data?.fileName}\r\n fileType={currentAction?.rows[0]?.data?.fileType}\r\n />\r\n ) : (\r\n <InvalidAction closeDialog={closeMyDialog} />\r\n )}\r\n </Dialog>\r\n </Fragment>\r\n );\r\n};\r\n","import { makeStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: Theme) => ({\r\n tabPanel: {\r\n //border: \"1px solid #e8e8e8\",\r\n borderTop: \"0\",\r\n padding: `${theme.spacing(2)},0`,\r\n backgroundColor: \"#fff\",\r\n // boxShadow:\r\n // \"0px 2px 1px -1px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 1px 3px 0px rgba(0,0,0,0.12)\",\r\n },\r\n}));\r\n","import { Fragment, useState, FC, useContext, useEffect } from \"react\";\r\nimport Tabs from \"@mui/material/Tabs\";\r\nimport Tab from \"@mui/material/Tab\";\r\nimport Button from \"@mui/material/Button\";\r\nimport { DocumentGridCRUD as DocGrid } from \"./documentGridCRUD\";\r\nimport { DOCCRUDContextProvider, DocAPICrudProviderGenerator } from \"./context\";\r\nimport { useQuery } from \"react-query\";\r\nimport { ClearCacheContext } from \"cache\";\r\nimport { useStyles } from \"./style\";\r\nimport * as API from \"./api\";\r\nimport { LoaderPaperComponent } from \"components/common/loaderPaper\";\r\n\r\nconst TabPanel = ({ value, index, children }) => {\r\n return Number(value) === Number(index) ? children : null;\r\n};\r\n\r\nexport const DocumentGridCRUD: FC<{\r\n moduleType: string;\r\n productType?: string;\r\n refID: string;\r\n serialNo?: string;\r\n onClose?: any;\r\n skipBankDetails?: boolean;\r\n readOnly?: boolean;\r\n}> = ({\r\n moduleType,\r\n productType,\r\n refID,\r\n serialNo,\r\n onClose,\r\n skipBankDetails = false,\r\n readOnly,\r\n}) => {\r\n const { addEntry } = useContext(ClearCacheContext);\r\n const [currentTab, setCurrentTab] = useState(0);\r\n const handleChangeTab = (_, currentTab) => {\r\n setCurrentTab(currentTab);\r\n };\r\n const classes = useStyles();\r\n useEffect(() => {\r\n /*eslint-disable react-hooks/exhaustive-deps*/\r\n addEntry([\r\n \"getDocumentCRUDTabsMetadata\",\r\n moduleType,\r\n productType ?? \"legal\",\r\n refID,\r\n ]);\r\n }, [addEntry, moduleType, refID]);\r\n const queryResult = useQuery(\r\n [\"getDocumentCRUDTabsMetadata\", moduleType, productType ?? \"legal\", refID],\r\n () =>\r\n API.getDocumentCRUDTabsMetadata({\r\n moduleType,\r\n productType,\r\n refID,\r\n })\r\n );\r\n let tabs: any[] = queryResult.data as any;\r\n if (queryResult.isSuccess) {\r\n if (!Array.isArray(tabs)) {\r\n tabs = [];\r\n } else {\r\n if (skipBankDetails) {\r\n tabs = tabs.filter((one) => one.label !== \"Bank\");\r\n }\r\n tabs = tabs.sort((a, b) =>\r\n a.sequence > b.sequence ? 1 : a.sequence < b.sequence ? -1 : 0\r\n );\r\n if (skipBankDetails) {\r\n tabs = tabs.map((tab, index) => {\r\n return { ...tab, sequence: index };\r\n });\r\n }\r\n }\r\n }\r\n const renderResult = queryResult.isLoading ? (\r\n <LoaderPaperComponent />\r\n ) : queryResult.isError ? (\r\n //@ts-ignore\r\n queryResult.error?.error_msg ?? \"unknown error occured\"\r\n ) : (\r\n <Fragment>\r\n <div style={{ display: \"flex\" }}>\r\n <Tabs\r\n value={currentTab}\r\n onChange={handleChangeTab}\r\n variant=\"scrollable\"\r\n >\r\n {tabs.map((one) => (\r\n <Tab label={one.label} id={`${one.sequence}`} key={one.sequence} />\r\n ))}\r\n </Tabs>\r\n {typeof onClose === \"function\" ? (\r\n <Fragment>\r\n <div style={{ flexGrow: 1 }} />\r\n <Button variant=\"text\" onClick={onClose}>\r\n Close\r\n </Button>\r\n </Fragment>\r\n ) : null}\r\n </div>\r\n <div className={classes.tabPanel}>\r\n {tabs.map((one) => {\r\n return (\r\n <TabPanel\r\n value={currentTab}\r\n index={`${one.sequence}`}\r\n key={one.sequence}\r\n >\r\n <DOCCRUDContextProvider\r\n key={one.docType.filter((one) => one?.primary === true)[0].type}\r\n {...DocAPICrudProviderGenerator(\r\n moduleType,\r\n productType,\r\n one.docType,\r\n refID,\r\n serialNo\r\n )}\r\n >\r\n <DocGrid\r\n disableActions={\r\n readOnly ? [\"Add\", \"Verify\", \"Delete\", \"Update\"] : []\r\n }\r\n />\r\n </DOCCRUDContextProvider>\r\n </TabPanel>\r\n );\r\n })}\r\n </div>\r\n </Fragment>\r\n );\r\n return renderResult;\r\n};\r\n","import { useContext, useEffect, useRef, useCallback } from \"react\";\r\nimport { useQuery } from \"react-query\";\r\nimport { ClearCacheContext } from \"cache\";\r\nimport { FormNew } from \"./formNew\";\r\nimport { CRUDContext } from \"./context\";\r\nimport { cacheWrapperKeyGen } from \"cache\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport HighlightOffOutlinedIcon from \"@mui/icons-material/HighlightOffOutlined\";\r\nimport Alert from \"@mui/lab/Alert\";\r\nimport { LoaderPaperComponent } from \"components/common/loaderPaper\";\r\n\r\nexport const FormNewExistsIfNotCreate = ({\r\n isDataChangedRef,\r\n successAction,\r\n readOnly,\r\n closeDialog,\r\n formStyle,\r\n}) => {\r\n const { addEntry } = useContext(ClearCacheContext);\r\n const { checkFormDataExist } = useContext(CRUDContext);\r\n const { insertFormData } = useContext(CRUDContext);\r\n const wrapperKey = useRef<any>(null);\r\n if (wrapperKey.current === null) {\r\n wrapperKey.current = cacheWrapperKeyGen(Object.values(insertFormData.args));\r\n }\r\n let result = useQuery([\"checkFormDataExist\", wrapperKey.current], () =>\r\n checkFormDataExist.fn(checkFormDataExist.args)()\r\n );\r\n useEffect(() => {\r\n addEntry([\"checkFormDataExist\", wrapperKey.current]);\r\n }, [addEntry]);\r\n const loading = result.isFetching || result.isLoading;\r\n const isError = result.isError;\r\n //const errorMsg = result.error;\r\n const dataExist =\r\n result.data?.exists === \"YES\"\r\n ? true\r\n : result.data?.exists === \"NO\"\r\n ? false\r\n : false;\r\n\r\n /*eslint-disable react-hooks/exhaustive-deps*/\r\n const successActionAlways = useCallback(() => {\r\n if (typeof successAction === \"function\") {\r\n successAction();\r\n result.refetch();\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (dataExist) {\r\n if (typeof successAction === \"function\") {\r\n successActionAlways();\r\n }\r\n }\r\n }, [dataExist, successActionAlways]);\r\n\r\n return loading ? (\r\n <>\r\n <LoaderPaperComponent />\r\n {typeof closeDialog === \"function\" ? (\r\n <div style={{ position: \"absolute\", right: 0, top: 0 }}>\r\n <IconButton onClick={closeDialog}>\r\n <HighlightOffOutlinedIcon />\r\n </IconButton>\r\n </div>\r\n ) : null}\r\n </>\r\n ) : isError ? (\r\n <>\r\n {/*@ts-ignore*/}\r\n <div>{result?.error?.error_msg ?? \"Unknown error occured\"} </div>\r\n {typeof closeDialog === \"function\" ? (\r\n <div style={{ position: \"absolute\", right: 0, top: 0 }}>\r\n <IconButton onClick={closeDialog}>\r\n <HighlightOffOutlinedIcon />\r\n </IconButton>\r\n </div>\r\n ) : null}\r\n </>\r\n ) : !dataExist ? (\r\n <CreateFormConfirmation\r\n successAction={successActionAlways}\r\n isDataChangedRef={isDataChangedRef}\r\n readOnly={readOnly}\r\n closeDialog={closeDialog}\r\n formStyle={formStyle}\r\n />\r\n ) : null;\r\n};\r\n\r\nexport const CreateFormConfirmation = ({\r\n successAction,\r\n isDataChangedRef,\r\n readOnly,\r\n closeDialog,\r\n formStyle,\r\n}) => {\r\n const cancleFormSubmit = useCallback(() => {\r\n if (typeof closeDialog === \"function\") {\r\n closeDialog();\r\n }\r\n }, []);\r\n // const [showAsk, setShowAsk] = useState(true);\r\n // const cancleFormSubmit = useCallback(() => {\r\n // setShowAsk(true);\r\n // if (typeof closeDialog === \"function\") {\r\n // closeDialog();\r\n // }\r\n // }, [setShowAsk]);\r\n // return showAsk ? (\r\n // <Fragment>\r\n // <Typography variant=\"h6\">No Data Found</Typography>\r\n // {!Boolean(readOnly) ? (\r\n // <Button onClick={() => setShowAsk(false)}>Click Here to Add</Button>\r\n // ) : null}\r\n // </Fragment>\r\n // ) : (\r\n\r\n return readOnly ? (\r\n <Alert severity=\"info\">No Details Found</Alert>\r\n ) : (\r\n <FormNew\r\n isDataChangedRef={isDataChangedRef}\r\n cancelAction={cancleFormSubmit}\r\n successAction={successAction}\r\n formStyle={formStyle}\r\n />\r\n );\r\n\r\n //);\r\n};\r\n","import { useState, FC } from \"react\";\r\nimport { FormViewEdit } from \"./formViewEdit\";\r\nimport { FormNewExistsIfNotCreate } from \"./formNewExistIfNotCreate\";\r\n\r\nexport const SimpleCRUD: FC<{\r\n isDataChangedRef: any;\r\n dataAlwaysExists: any;\r\n closeDialog?: any;\r\n readOnly?: boolean;\r\n disableCache?: boolean;\r\n formStyle?: any;\r\n}> = ({\r\n isDataChangedRef,\r\n closeDialog,\r\n dataAlwaysExists,\r\n readOnly,\r\n disableCache,\r\n formStyle,\r\n}) => {\r\n const [dataExist, setDataExist] = useState(Boolean(dataAlwaysExists));\r\n\r\n return dataExist ? (\r\n <FormViewEdit\r\n isDataChangedRef={isDataChangedRef}\r\n closeDialog={closeDialog}\r\n readOnly={readOnly}\r\n disableCache={disableCache}\r\n formStyle={formStyle}\r\n />\r\n ) : (\r\n <FormNewExistsIfNotCreate\r\n isDataChangedRef={isDataChangedRef}\r\n successAction={() => setDataExist(true)}\r\n readOnly={readOnly}\r\n closeDialog={closeDialog}\r\n formStyle={formStyle}\r\n />\r\n );\r\n};\r\n","import { makeStyles } from \"@mui/styles\";\r\n\r\nexport const useDialogStyles = makeStyles({\r\n topScrollPaper: {\r\n alignItems: \"flex-start\",\r\n },\r\n topPaperScrollBody: {\r\n verticalAlign: \"top\",\r\n },\r\n});\r\n","import { useContext, useRef, useState, Fragment, FC } from \"react\";\nimport Dialog, { DialogProps } from \"@mui/material/Dialog\";\nimport { ActionTypes } from \"components/dataTable\";\nimport { FormNew } from \"./formNew\";\nimport { FormViewEdit } from \"./formViewEdit\";\nimport { DeleteAction } from \"./delete\";\nimport { MyGridWrapper } from \"./gridWrapper\";\nimport { CRUDContext } from \"./context\";\nimport { DocumentGridCRUD } from \"../documents/documentsTab\";\nimport { SimpleCRUD } from \"./simpleCRUD\";\nimport { InvalidAction } from \"pages_audit/common/invalidAction\";\nimport { CRUDContextProvider } from \"./context\";\nimport { useDialogStyles } from \"../dialogStyles\";\nconst actions: ActionTypes[] = [\n {\n actionName: \"View\",\n actionLabel: \"View Details\",\n multiple: false,\n rowDoubleClick: true,\n },\n {\n actionName: \"Delete\",\n actionLabel: \"Delete\",\n multiple: true,\n rowDoubleClick: false,\n },\n {\n actionName: \"Add\",\n actionLabel: \"Add Detail\",\n multiple: undefined,\n alwaysAvailable: true,\n },\n];\n\nexport const GridCRUD: FC<{\n isDataChangedRef: any;\n showDocuments?: boolean;\n disableActions?: string | string[];\n setEditFormStateFromInitValues?: any;\n secondaryProduct?: string;\n secondaryProductDataExist?: boolean;\n secondaryProductDisableCache?: boolean;\n maxWidth?: DialogProps[\"maxWidth\"];\n dialogAlignTop?: boolean;\n formStyle?: any;\n readOnly?: any;\n detailsContextGenerator: Function;\n}> = ({\n isDataChangedRef,\n showDocuments,\n disableActions,\n setEditFormStateFromInitValues,\n secondaryProduct,\n secondaryProductDataExist,\n secondaryProductDisableCache,\n maxWidth = \"xl\",\n dialogAlignTop = false,\n formStyle,\n readOnly,\n detailsContextGenerator,\n}) => {\n let allActions = useRef<any>(null);\n if (allActions.current === null) {\n allActions.current = [...actions];\n if (Boolean(showDocuments)) {\n allActions.current.push({\n actionName: \"Document\",\n actionLabel: \"Document Details\",\n multiple: false,\n rowDoubleClick: false,\n });\n }\n if (Boolean(secondaryProduct)) {\n allActions.current.push({\n actionName: \"Detail\",\n actionLabel: \"Master\",\n multiple: undefined,\n alwaysAvailable: true,\n });\n }\n let disableActionsArray: string[];\n if (typeof disableActions === \"string\") {\n disableActionsArray = [disableActions];\n } else if (Array.isArray(disableActions)) {\n disableActionsArray = disableActions;\n } else {\n disableActionsArray = [];\n }\n if (Array.isArray(disableActionsArray)) {\n allActions.current = allActions.current.filter((one) => {\n return disableActionsArray?.indexOf(one.actionName) >= 0 ? false : true;\n });\n }\n }\n const [currentAction, setCurrentAction] = useState<any>(null);\n const gridRef = useRef<any>(null);\n const isMyDataChangedRef = useRef(false);\n const { context } = useContext(CRUDContext);\n const closeMyDialog = () => {\n setCurrentAction(null);\n if (isMyDataChangedRef.current === true) {\n isDataChangedRef.current = true;\n gridRef.current?.refetch?.();\n isMyDataChangedRef.current = false;\n }\n };\n const classes = useDialogStyles();\n const dialogClasses = {\n scrollPaper: classes.topScrollPaper,\n paperScrollBody: classes.topPaperScrollBody,\n };\n return (\n <Fragment>\n <MyGridWrapper\n ref={gridRef}\n key=\"grid\"\n actions={allActions.current}\n setAction={setCurrentAction}\n />\n <Dialog\n open={Boolean(currentAction)}\n maxWidth={maxWidth}\n PaperProps={\n currentAction?.name === \"Delete\"\n ? {}\n : {\n style: {\n width: \"100%\",\n height: dialogAlignTop ? undefined : \"100%\",\n },\n }\n }\n classes={dialogAlignTop ? dialogClasses : {}}\n >\n {(currentAction?.name ?? \"\") === \"Add\" ? (\n <FormNew\n successAction={closeMyDialog}\n cancelAction={closeMyDialog}\n isDataChangedRef={isMyDataChangedRef}\n formStyle={formStyle}\n />\n ) : (currentAction?.name ?? \"\") === \"View\" ? (\n <FormViewEdit\n isDataChangedRef={isMyDataChangedRef}\n closeDialog={closeMyDialog}\n serialNo={currentAction?.rows[0]?.id}\n setEditFormStateFromInitValues={setEditFormStateFromInitValues}\n formStyle={formStyle}\n readOnly={readOnly}\n />\n ) : (currentAction?.name ?? \"\") === \"Delete\" ? (\n <DeleteAction\n serialNo={currentAction?.rows.map((one) => one.id)}\n closeDialog={closeMyDialog}\n isDataChangedRef={isMyDataChangedRef}\n />\n ) : (currentAction?.name ?? \"\") === \"Document\" ? (\n <DocumentGridCRUD\n refID={context?.refID}\n productType={context?.productType}\n moduleType={context?.moduleType}\n serialNo={currentAction?.rows[0]?.id}\n onClose={closeMyDialog}\n //readOnly={readOnly}\n />\n ) : (currentAction?.name ?? \"\") === \"Detail\" ? (\n <CRUDContextProvider\n {...detailsContextGenerator(\n context?.moduleType,\n secondaryProduct,\n context?.refID,\n )}\n >\n <SimpleCRUD\n isDataChangedRef={isMyDataChangedRef}\n dataAlwaysExists={secondaryProductDataExist}\n closeDialog={closeMyDialog}\n readOnly={readOnly}\n disableCache={secondaryProductDisableCache}\n />\n </CRUDContextProvider>\n ) : (\n <InvalidAction closeDialog={closeMyDialog} />\n )}\n </Dialog>\n </Fragment>\n );\n};\n","import { createContext, FC, ReactNode } from \"react\";\ninterface CRUDFNType {\n fn: any;\n args: any;\n}\n\ninterface ServerGridProviderType {\n getGridMetaData: CRUDFNType;\n getGridData: CRUDFNType;\n children?: ReactNode;\n}\n\nexport const ServerGridContext = createContext<ServerGridProviderType>(\n {} as ServerGridProviderType,\n);\n\nexport const ServerGridContextProvider: FC<ServerGridProviderType> = ({\n children,\n getGridMetaData,\n getGridData,\n}) => {\n return (\n <ServerGridContext.Provider value={{ getGridMetaData, getGridData }}>\n {children}\n </ServerGridContext.Provider>\n );\n};\n\nexport const serverGridContextGenerator = (\n gridMetaData,\n gridData,\n reqPara,\n) => ({\n getGridData: { fn: gridData, args: { reqPara } },\n getGridMetaData: { fn: gridMetaData, args: { reqPara } },\n});\n","import { useCallback, useEffect, forwardRef, useContext } from \"react\";\nimport DataGrid from \"components/dataTable\";\nimport { queryClient } from \"cache\";\nimport { ActionTypes } from \"components/dataTable\";\nimport {\n ServerGridContext,\n ServerGridContextProvider,\n serverGridContextGenerator,\n} from \"./context\";\nimport { AuthStateType } from \"components/types\";\n\ninterface ServerGridType {\n dataGridKey: string;\n getAPIReqPara?: any;\n metaData?: any;\n getAPIFn?: any;\n actions?: ActionTypes[];\n setAction: any;\n defaultSortOrder?: any;\n defaultFilter?: any;\n dataTransformer?: any;\n autoRefreshInterval?: any;\n authState?: AuthStateType;\n}\n\nexport const ServerGrid = forwardRef<ServerGridType, any>(\n (\n {\n dataGridKey,\n getAPIReqPara,\n actions,\n setAction,\n defaultSortOrder,\n defaultFilter,\n dataTransformer,\n autoRefreshInterval,\n authState,\n },\n myRef,\n ) => {\n const { getGridData, getGridMetaData } = useContext(ServerGridContext);\n // getGridDataFn ~ API.getBankMasterGridDataForServer(reqPara)\n /* eslint-disable react-hooks/exhaustive-deps */\n const getGridDataFn = useCallback(getGridData.fn(getGridData.args), [\n getAPIReqPara,\n ]);\n // const result = useQuery([\"gridMetaData\", getAPIReqPara], () =>\n // getGridMetaData.fn(getGridMetaData.args)()\n // );\n useEffect(() => {\n return () => {\n queryClient.removeQueries([\"gridMetaData\", getAPIReqPara]);\n };\n }, [getAPIReqPara]);\n\n //const loading = result.isLoading || result.isFetching;\n //let isError = result.isError;\n\n return (\n <DataGrid\n //@ts-ignore\n ref={myRef}\n key={dataGridKey}\n metaData={getGridMetaData.fn}\n gridCode={getAPIReqPara}\n getGridData={getGridDataFn}\n actions={actions}\n setAction={setAction}\n defaultSortOrder={defaultSortOrder}\n defaultFilter={defaultFilter}\n dataTransformer={dataTransformer}\n autoRefreshInterval={autoRefreshInterval}\n authState={authState}\n />\n );\n },\n);\n\nexport const ServerGridWrapper = forwardRef<ServerGridType, any>(\n (\n {\n dataGridKey,\n metaData,\n getAPIFn = () => {},\n getAPIReqPara,\n actions,\n setAction,\n defaultFilter,\n defaultSortOrder,\n dataTransformer,\n autoRefreshInterval,\n authState,\n },\n ref,\n ) => {\n return (\n <ServerGridContextProvider\n {...serverGridContextGenerator(metaData, getAPIFn, getAPIReqPara)}\n >\n <ServerGrid\n dataGridKey={dataGridKey}\n getAPIReqPara={getAPIReqPara}\n actions={actions}\n setAction={setAction}\n defaultFilter={defaultFilter}\n defaultSortOrder={defaultSortOrder}\n dataTransformer={dataTransformer}\n ref={ref}\n autoRefreshInterval={autoRefreshInterval}\n authState\n />\n </ServerGridContextProvider>\n );\n },\n);\n","import { forwardRef } from \"react\";\r\nimport Slide from \"@mui/material/Slide\";\r\n\r\nexport const Transition = forwardRef(function Transition(props, ref) {\r\n //@ts-ignore\r\n return <Slide direction=\"up\" ref={ref} {...props} />;\r\n});\r\n","import { makeStyles } from \"@mui/styles\";\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n tabPanel: {\r\n border: \"1px solid #e8e8e8\",\r\n borderTop: \"0\",\r\n // padding: theme.spacing(2),\r\n backgroundColor: \"#fff\",\r\n boxShadow:\r\n \"0px 2px 1px -1px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 1px 3px 0px rgba(0,0,0,0.12)\",\r\n },\r\n}));\r\n","import Tab from \"@mui/material/Tab\";\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst StyledTab = withStyles((theme) => ({\r\n root: {\r\n textTransform: \"none\",\r\n minWidth: 72,\r\n marginRight: theme.spacing(4),\r\n opacity: 1,\r\n color: theme.palette.secondary.main,\r\n fontWeight: 600,\r\n fontFamily: [\r\n \"Montserrat\",\r\n \"Helvetica\",\r\n \"Arial\",\r\n \"Lucida\",\r\n \"sans-serif\",\r\n ].join(\",\"),\r\n \"&:hover\": {\r\n color: \"#0063a3\",\r\n opacity: 1,\r\n },\r\n \"&$selected\": {\r\n color: \"#fff\",\r\n fontWeight: \"600\",\r\n // background:\r\n // \"linear-gradient(-90deg, rgba(94,231,131,1) 0%, rgba(74,205,159,1) 35%, rgba(33,150,218,1) 100%)\",\r\n background: theme.palette.secondary.main,\r\n },\r\n \"&:focus\": {\r\n color: \"#fff\",\r\n },\r\n },\r\n selected: {},\r\n}))(Tab);\r\n\r\nexport default StyledTab;\r\n","import Tabs from \"@mui/material/Tabs\";\r\nimport { withStyles } from \"@mui/styles\";\r\n\r\nconst StyledTabs = withStyles((theme) => ({\r\n root: {\r\n border: \"2px solid #e8e8e8\",\r\n background: \"#fff\",\r\n boxShadow:\r\n \"0px 2px 1px -1px rgba(0,0,0,0.2), 0px 1px 1px 0px rgba(0,0,0,0.14), 0px 1px 3px 0px rgba(0,0,0,0.12)\",\r\n },\r\n indicator: {\r\n // background:\r\n // \"linear-gradient(-90deg, rgba(94,231,131,1) 0%, rgba(74,205,159,1) 35%, rgba(33,150,218,1) 100%)\",\r\n background: theme.palette.secondary.main,\r\n top: 0,\r\n },\r\n}))(Tabs);\r\n\r\nexport default StyledTabs;\r\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport { SnackbarProviderProps, SnackbarProvider } from \"notistack\";\n\ninterface SnackbarProviderContextType {\n snackbarProps: SnackbarProviderProps;\n}\n\nconst SnackbarProviderWrapperContext =\n createContext<SnackbarProviderContextType | null>(null);\n\ndeclare module \"notistack\" {\n interface VariantOverrides {\n exportReportSnackbar: true;\n }\n}\n\nexport const useSnackbarProviderWrapper = () => {\n const context = useContext(SnackbarProviderWrapperContext);\n if (!context) {\n throw new Error(\n \"useSnackbarProviderWrapper must be used within a SnackbarProviderWrapper\",\n );\n }\n return context.snackbarProps;\n};\n\ninterface SnackbarProviderWrapperProps extends SnackbarProviderProps {\n children: React.ReactNode;\n}\n\nexport const SnackbarProviderWrapper: React.FC<\n SnackbarProviderWrapperProps\n> = ({ children, ...props }) => {\n const contextValue = useMemo(() => ({ snackbarProps: props }), [props]);\n\n return (\n <SnackbarProviderWrapperContext.Provider value={contextValue}>\n <SnackbarProvider {...props}>{children}</SnackbarProvider>\n </SnackbarProviderWrapperContext.Provider>\n );\n};\n\n//////////////////////////////////////\n\n// import React, { createContext, useContext } from \"react\";\n// import { SnackbarProvider, SnackbarProviderProps } from \"notistack\";\n// import { SnackbarConfig, defaultSnackbarConfig } from \"./snackbarConfig\";\n\n// interface SnackbarContextType {\n// snackbarConfig: SnackbarConfig;\n// }\n\n// const SnackbarContext = createContext<SnackbarContextType>({\n// snackbarConfig: defaultSnackbarConfig,\n// });\n\n// export const useSnackbarContext = () => useContext(SnackbarContext);\n\n// interface SnackbarProviderWrapperProps extends SnackbarProviderProps {\n// snackbarConfig?: SnackbarConfig;\n// }\n\n// declare module \"notistack\" {\n// interface VariantOverrides {\n// exportReportSnackbar: true;\n// }\n// }\n\n// export const SnackbarProviderWrapper: React.FC<\n// SnackbarProviderWrapperProps\n// > = ({ snackbarConfig = defaultSnackbarConfig, children, ...other }) => {\n// const { maxSnack, autoHideDuration, exportReportSnackbar, ...rest } =\n// snackbarConfig;\n// return (\n// <SnackbarContext.Provider value={{ snackbarConfig }}>\n// <SnackbarProvider\n// maxSnack={maxSnack}\n// autoHideDuration={autoHideDuration}\n// Components={{ exportReportSnackbar: exportReportSnackbar }}\n// {...rest}\n// {...other}\n// >\n// {children}\n// </SnackbarProvider>\n// </SnackbarContext.Provider>\n// );\n// };\n","import { useRef, useState, forwardRef, useMemo } from \"react\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport { Transition } from \"pages_audit/common\";\r\nimport { FormComponentView } from \"components/formcomponent\";\r\nimport AppBar from \"@mui/material/AppBar\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport GridWrapper from \"components/dataTableStatic\";\r\nimport { GridMetaDataType } from \"components/dataTable/types\";\r\nimport Toolbar from \"@mui/material/Toolbar\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Button from \"@mui/material/Button\";\r\nimport { DetailsGridWithHeaderArguType } from \"./type\";\r\nimport { FilterFormMetaType } from \"components/formcomponent/filterform\";\r\nimport { Alert } from \"components/common/alert\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const useDialogStyles = makeStyles({\r\n topScrollPaper: {\r\n alignItems: \"center\",\r\n },\r\n topPaperScrollBody: {\r\n verticalAlign: \"top\",\r\n },\r\n title: {\r\n flex: \"1 1 100%\",\r\n color: \"var(--white)\",\r\n letterSpacing: \"1px\",\r\n fontSize: \"1.5rem\",\r\n },\r\n});\r\nexport const DetailsGridWithHeader = ({\r\n metadata,\r\n ClosedEventCall,\r\n data,\r\n HeaderMetaData,\r\n HeaderData,\r\n ClickEventManage,\r\n children,\r\n isLoading = false,\r\n isError = false,\r\n ErrorMessage = \"\",\r\n actions = [],\r\n setData = (data) => {},\r\n setCurrentAction = (data) => {},\r\n mode = \"view\",\r\n isEditableForm = false,\r\n refID = {},\r\n onSubmit = () => {},\r\n submitSecondAction = {},\r\n submitSecondButtonName = \"\",\r\n submitSecondButtonHide = true,\r\n submitSecondLoading = false,\r\n}: DetailsGridWithHeaderArguType) => {\r\n const classes = useDialogStyles();\r\n const myGridRef = useRef<any>(null);\r\n const { t } = useTranslation();\r\n const [serverError, setServerError] = useState(\"\");\r\n const handelCloseEvent = () => {\r\n //SetOpen(false);\r\n ClosedEventCall();\r\n };\r\n //console.log(\"children\", children, children === undefined);\r\n const metaData = useMemo(() => {\r\n let myColumns = metadata.columns;\r\n if (mode === \"view\") {\r\n myColumns = metadata.columns.filter((one) => one.accessor !== \"_hidden\");\r\n }\r\n return { ...metadata, columns: myColumns };\r\n }, [mode, metadata]);\r\n //console.log(mode, metaData);\r\n const handelActionEvent = async (data) => {\r\n await setCurrentAction(data);\r\n };\r\n const handleSubmit = async () => {\r\n let { hasError, data } = await myGridRef.current?.validate();\r\n if (hasError === true) {\r\n setData(data);\r\n } else {\r\n let result = myGridRef?.current?.cleanData?.();\r\n let finalResult = result.filter(\r\n (one) => !(Boolean(one?._hidden) && !Boolean(one?.lineNo))\r\n );\r\n let data = {\r\n ...refID,\r\n config: finalResult,\r\n };\r\n onSubmit({ data, mode, setServerError });\r\n }\r\n };\r\n return (\r\n <Dialog\r\n open={true}\r\n //@ts-ignore\r\n TransitionComponent={Transition}\r\n PaperProps={{\r\n style: {\r\n width: \"100%\",\r\n minHeight: \"20vh\",\r\n },\r\n }}\r\n maxWidth=\"lg\"\r\n classes={{\r\n scrollPaper: classes.topScrollPaper,\r\n paperScrollBody: classes.topPaperScrollBody,\r\n }}\r\n >\r\n <div style={{ padding: \"10px\" }}>\r\n {isError ? (\r\n <Alert\r\n severity=\"error\"\r\n errorMsg={ErrorMessage}\r\n errorDetail={\"\"}\r\n color=\"error\"\r\n />\r\n ) : Boolean(serverError) ? (\r\n <Alert errorMsg={serverError} errorDetail=\"\" severity=\"error\" />\r\n ) : null}\r\n\r\n {!Boolean(children) ? (\r\n <AppBar\r\n position=\"relative\"\r\n color=\"secondary\"\r\n style={{ marginBottom: \"10px\" }}\r\n >\r\n <Toolbar variant=\"dense\">\r\n <Typography\r\n className={classes.title}\r\n color=\"inherit\"\r\n variant={\"h6\"}\r\n component=\"div\"\r\n >\r\n {t(HeaderMetaData?.gridConfig?.title ?? \"\")}\r\n </Typography>\r\n <Button onClick={handelCloseEvent} color=\"primary\">\r\n {t(\"Close\")}\r\n </Button>\r\n </Toolbar>\r\n </AppBar>\r\n ) : typeof children === \"function\" ? (\r\n children({ handelCloseEvent, handleSubmit, classes })\r\n ) : (\r\n children\r\n )}\r\n <FormComponentView\r\n key={\"DetailsHeadersView\"}\r\n finalMetaData={HeaderMetaData as FilterFormMetaType}\r\n onAction={ClickEventManage}\r\n loading={isLoading}\r\n data={HeaderData ?? {}}\r\n submitSecondAction={submitSecondAction}\r\n submitSecondButtonName={submitSecondButtonName}\r\n submitSecondButtonHide={submitSecondButtonHide}\r\n submitSecondLoading={submitSecondLoading}\r\n ></FormComponentView>\r\n <GridWrapper\r\n key={\"customerDetailsGrid\"}\r\n finalMetaData={metaData as GridMetaDataType}\r\n data={data}\r\n setData={setData}\r\n loading={isEditableForm ? mode === \"view\" : isLoading}\r\n actions={actions}\r\n setAction={handelActionEvent}\r\n refetchData={null}\r\n ref={myGridRef}\r\n />\r\n </div>\r\n </Dialog>\r\n );\r\n};\r\n","import TableSortLabel from \"@mui/material/TableSortLabel\";\r\nimport { Fragment } from \"react\";\r\n\r\nexport const HeaderColumnCell = (props) => {\r\n //Column change order using drag and drop\r\n const { column } = props;\r\n\r\n return (\r\n <Fragment>\r\n <TableSortLabel\r\n active={column.isSorted}\r\n direction={column.isSortedDesc ? \"desc\" : \"asc\"}\r\n hideSortIcon={true}\r\n {...column.getSortByToggleProps([\r\n {\r\n style: {\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n display: \"flex\",\r\n color: \"#0063a3\",\r\n fontSize: \"1 rem\",\r\n fontWeight: \"600\",\r\n paddingRight:\r\n //@ts-ignore\r\n (column?.TableCellProps?.align ?? \"left\") === \"right\" &&\r\n column.canFilter\r\n ? \"15px\"\r\n : \"10px\",\r\n },\r\n },\r\n ])}\r\n >\r\n <span\r\n style={{\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n paddingRight: \"10px\",\r\n }}\r\n >\r\n {column.columnName}\r\n </span>\r\n </TableSortLabel>\r\n {column.canGroupBy ? (\r\n <span {...column.getGroupByToggleProps()}>\r\n {column.isGrouped ? \"🔴\" : \"➕\"}\r\n </span>\r\n ) : null}\r\n <div\r\n {...column.getResizerProps([\r\n {\r\n style: {\r\n //minHeight: \"34px\",\r\n opacity: 1,\r\n color: \"rgba(224, 224, 224, 1)\",\r\n right: \"0px\",\r\n display: \"flex\",\r\n zIndex: 100,\r\n position: \"absolute\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n },\r\n },\r\n ])}\r\n >\r\n <svg\r\n focusable=\"false\"\r\n viewBox=\"0 0 24 24\"\r\n aria-hidden=\"true\"\r\n data-testid=\"SeparatorIcon\"\r\n style={{\r\n color: \"inherit\",\r\n userSelect: \"none\",\r\n width: \"1em\",\r\n height: \"1em\",\r\n display: \"inline-block\",\r\n fill: \"currentColor\",\r\n flexShrink: 0,\r\n transition: \"fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\r\n fontSize: \"20px\",\r\n }}\r\n >\r\n <path d=\"M11 19V5h2v14z\"></path>\r\n </svg>\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\n","import TableCell from \"@mui/material/TableCell\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport ArrowRightSharpIcon from \"@mui/icons-material/ArrowRightSharp\";\r\nimport ArrowDropDownSharpIcon from \"@mui/icons-material/ArrowDropDownSharp\";\r\n\r\nexport const CellWrapper = ({ children, ...others }) => {\r\n const {\r\n value,\r\n cell,\r\n column: { color = \"initial\", TableCellProps },\r\n row,\r\n } = others;\r\n\r\n let myColor = typeof color === \"function\" ? color(value) : color;\r\n let style = {};\r\n if (row?.isGrouped && row?.isExpanded) {\r\n style = { ...style, fontWeight: 800 };\r\n }\r\n let result = children;\r\n if (cell?.isGrouped) {\r\n result = (\r\n <>\r\n <IconButton\r\n {...row.getToggleRowExpandedProps([{ style: { padding: 0 } }])}\r\n >\r\n {row.isExpanded ? (\r\n <ArrowDropDownSharpIcon />\r\n ) : (\r\n <ArrowRightSharpIcon />\r\n )}\r\n </IconButton>\r\n {children}\r\n <i>({row.subRows.length})</i>\r\n </>\r\n );\r\n } else if (cell?.isPlaceholder) {\r\n result = null;\r\n }\r\n\r\n return (\r\n <TableCell\r\n component=\"td\"\r\n variant=\"head\"\r\n {...cell?.getCellProps?.([\r\n { ...(TableCellProps ?? {}) },\r\n {\r\n style: {\r\n display: \"block\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n padding: \"0px 20px 0px 10px\",\r\n lineHeight: \"34px\",\r\n color: myColor,\r\n textAlign: cell?.column?.alignment ?? \"unset\",\r\n ...style,\r\n },\r\n },\r\n ])}\r\n >\r\n {result}\r\n </TableCell>\r\n );\r\n};\r\n","import { CellWrapper } from \"./cellWrapper\";\r\n\r\nexport const DefaultCell = (props) => {\r\n const { value } = props;\r\n\r\n return <CellWrapper {...props}>{value}</CellWrapper>;\r\n};\r\n\r\nexport const DefaultCellWithDefaultValue = (value: string) => (props) => {\r\n return <CellWrapper {...props}>{value}</CellWrapper>;\r\n};\r\n","const currencySymbol = {\r\n ALL: \"Lek\",\r\n AFN: \"؋\",\r\n ARS: \"$\",\r\n AWG: \"ƒ\",\r\n AUD: \"$\",\r\n AZN: \"₼\",\r\n BSD: \"$\",\r\n BBD: \"$\",\r\n BYN: \"Br\",\r\n BZD: \"BZ$\",\r\n BMD: \"$\",\r\n BOB: \"$b\",\r\n BAM: \"KM\",\r\n BWP: \"P\",\r\n BGN: \"лв\",\r\n BRL: \"R$\",\r\n BND: \"$\",\r\n KHR: \"៛\",\r\n BDT: \"৳\",\r\n CAD: \"$\",\r\n KYD: \"$\",\r\n CLP: \"$\",\r\n CNY: \"¥\",\r\n COP: \"$\",\r\n CRC: \"₡\",\r\n HRK: \"kn\",\r\n CUP: \"₱\",\r\n CZK: \"Kč\",\r\n DKK: \"kr\",\r\n DOP: \"RD$\",\r\n XCD: \"$\",\r\n EGP: \"£\",\r\n SVC: \"$\",\r\n EUR: \"€\",\r\n FKP: \"£\",\r\n GIP: \"£\",\r\n GTQ: \"Q\",\r\n GGP: \"£\",\r\n GYD: \"$\",\r\n HNL: \"L\",\r\n HKD: \"$\",\r\n HUF: \"Ft\",\r\n INR: \"₹\", ///////////////////////////////////////////////////////////////////\r\n IDR: \"Rp\",\r\n IRR: \"﷼\",\r\n IMP: \"£\",\r\n ILS: \"₪\",\r\n JMD: \"J$\",\r\n JPY: \"¥\",\r\n JEP: \"£\",\r\n KZT: \"лв\",\r\n KPW: \"₩\",\r\n KRW: \"₩\",\r\n KGS: \"лв\",\r\n LAK: \"₭\",\r\n LBP: \"£\",\r\n LRD: \"$\",\r\n MKD: \"ден\",\r\n MYR: \"RM\",\r\n MUR: \"₨\",\r\n MXN: \"$\",\r\n MNT: \"₮\",\r\n MZN: \"MT\",\r\n NAD: \"$\",\r\n ANG: \"ƒ\",\r\n NZD: \"$\",\r\n NIO: \"C$\",\r\n NGN: \"₦\",\r\n NOK: \"kr\",\r\n OMR: \"﷼\",\r\n PKR: \"₨\",\r\n PAB: \"B/.\",\r\n PYG: \"Gs\",\r\n PEN: \"S/.\",\r\n PHP: \"₱\",\r\n PLN: \"zł\",\r\n ZAR: \"R\",\r\n AED: \"د.إ\", // United Arab Emirates Dirham\r\n CHF: \"Fr.\", // Swiss Franc\r\n GBP: \"£\", //British Pound Sterling\r\n RUB: \"₽\", //Russian Ruble\r\n SEK: \"kr\", // Swedish Krona\r\n TRY: \"₺\", //Turkish Lira\r\n USD: \"$\", //United States Dollar\r\n VND: \"₫\", //Vietnamese Dong\r\n ZWL: \"Z$\", // Zimbabwean Dollar - obsolete\r\n BTN: \"Nu.\",\r\n BYR: \"Br\",\r\n CVE: \"€\",\r\n DJF: \"Fdj\",\r\n DZD: \"دج\",\r\n ERN: \"Nfk\",\r\n FJD: \"$\",\r\n GEL: \"₾\",\r\n GHS: \"¢\",\r\n ISK: \"kr\",\r\n KWD: \"د.ك\",\r\n LKR: \"₨\",\r\n LYD: \"ل.د\",\r\n MDL: \"L\",\r\n MVR: \"ރ\",\r\n MWK: \"MK\",\r\n NPR: \"₨\",\r\n RSD: \"din.\",\r\n SAR: \"ر.س\",\r\n SCR: \"₨\",\r\n SYP: \"£\",\r\n TND: \"د.ت\",\r\n TTD: \"TT$\",\r\n TWD: \"NT$\",\r\n UGX: \"Ush\",\r\n YER: \"﷼\",\r\n ZMW: \"K\",\r\n XOF: \"CFA\",\r\n XAF: \"FCFA\",\r\n TZS: \"TSh\",\r\n SZL: \"L\",\r\n STN: \"Db\",\r\n SSP: \"£\",\r\n SOS: \"Sh.So.\",\r\n SLL: \"Le\",\r\n ETB: \"ብር\",\r\n};\r\n\r\nexport default function getCurrencySymbol(currencyCode) {\r\n return currencySymbol[currencyCode] ?? \"৳\";\r\n}\r\n","import { createContext, useState, useContext } from \"react\";\nimport { SelectRenderOnly as Select } from \"components/common/select\";\n\nconst AmountContext = createContext<any>(null);\n\nexport const AmountProvider = ({ children }) => {\n const [divider, setDivider] = useState(1);\n\n return (\n <AmountContext.Provider value={{ divider, setDivider }}>\n {children}\n </AmountContext.Provider>\n );\n};\n\nexport const useAmountDivider = () => {\n const contextVal = useContext(AmountContext);\n if (!contextVal) {\n return null;\n }\n const { divider } = contextVal;\n return divider;\n};\n\nconst options = [\n { label: \"Default\", value: 1 },\n { label: \"Lakhs\", value: 100000 },\n { label: \"Crore\", value: 10000000 },\n];\n\nexport const AmountSelect = () => {\n const { setDivider, divider } = useContext(AmountContext);\n return (\n <Select\n label=\"Amount In\"\n size=\"small\"\n touched={true}\n error={\"\"}\n value={divider}\n handleChange={(e) => setDivider(e.target.value)}\n handleBlur={() => true}\n options={options}\n _optionsKey={\"amountIn\"}\n selectVariant=\"default\"\n style={{ width: \"120px\", margin: \"0px 16px\", color: \"white\" }}\n InputLabelProps={{ style: { color: \"white\" } }}\n />\n );\n};\n","import getCurrencySymbol from \"components/custom/getCurrencySymbol\";\nimport { useMemo } from \"react\";\nimport { useAmountDivider } from \"../amountContext\";\n\nfunction formatCurrency(\n amount,\n symbol,\n currencyFormat = \"en-IN\",\n decimalCount = 2,\n symbolPosi = \"start\",\n) {\n const formattedAmount = new Intl.NumberFormat(currencyFormat, {\n minimumFractionDigits: decimalCount,\n }).format(amount);\n return `${symbol} ${formattedAmount}`;\n}\n\nexport const FooterCell = ({\n rows,\n column: {\n id: columnName,\n isNumberTotal = false,\n isDisplayTotal = false,\n currencyRefColumn,\n isCurrencyCode,\n },\n}) => {\n const total = useMemo(\n () =>\n rows.reduce((sum, row) => {\n const num =\n row.values?.[columnName] === \"null\" ? 0 : row.values?.[columnName];\n const totalSum = Number(num) + sum;\n return totalSum;\n }, 0),\n [rows, columnName],\n );\n\n let finaleSymbol = getCurrencySymbol(\"BDT\");\n\n if (Boolean(currencyRefColumn)) {\n const currencyCode = rows?.original?.[currencyRefColumn];\n if (isCurrencyCode) {\n if (Boolean(currencyCode)) {\n finaleSymbol = currencyCode;\n }\n } else {\n if (Boolean(currencyCode)) {\n finaleSymbol = getCurrencySymbol(currencyCode);\n }\n }\n }\n\n const divider = useAmountDivider();\n let result = \" \";\n if (total !== null && total !== \"\" && !isNaN(Number(total))) {\n if (isDisplayTotal) {\n result = `${formatCurrency(total.toFixed(2) / divider, finaleSymbol)}`;\n } else if (isNumberTotal) {\n result = total;\n } else {\n result = \"\";\n }\n }\n\n return result;\n\n // return `${isNaN(total) || !Boolean(isDisplayTotal) ? \"\" : result } `;\n};\n\nexport const FooterCell1 = ({\n rows,\n column: {\n id: columnName,\n isDisplayValueTotal = false,\n currencyRefColumn,\n isCurrencyCode,\n DisplayValueLabel,\n },\n}) => {\n const count = useMemo(() => {\n const countMap = new Map();\n\n rows.forEach((row) => {\n const value = String(row.values?.[columnName]);\n if (value !== undefined) {\n const currentCount = countMap.get(value) || 0;\n countMap.set(value, currentCount + 1);\n }\n });\n return countMap;\n }, [rows, columnName]);\n\n if (isDisplayValueTotal) {\n const countElementsTotal = Array.from(count).map(([value, count]) => (\n <div key={value}>{`${value}: ${count}`}</div>\n ));\n\n if (typeof DisplayValueLabel === \"string\") {\n return countElementsTotal;\n } else if (\n typeof DisplayValueLabel === \"object\" &&\n DisplayValueLabel !== null\n ) {\n const countElementsLabel = Array.from(count).map(([value, count]) => (\n <div key={value}>{`${DisplayValueLabel[value]} : ${count}`}</div>\n ));\n return countElementsLabel;\n }\n return countElementsTotal;\n }\n};\n","import TextField from \"@mui/material/TextField\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const DefaultColumnFilter = ({\n column: { filterValue, preFilteredRows, setFilter },\n}) => {\n const count = preFilteredRows.length;\n const { t } = useTranslation();\n return (\n <TextField\n value={filterValue || \"\"}\n onChange={(e) => {\n if (e.target.value.length <= 100) {\n setFilter(e.target.value || undefined); // Set undefined to remove the filter entirely\n }\n }}\n fullWidth\n size=\"small\"\n variant=\"outlined\"\n // placeholder={`Search ${count} records...`}\n placeholder={`${t(\"Searched\")} ${count} ${t(\"records\")}`}\n />\n );\n};\n","import { CellWrapper } from \"./cellWrapper\";\r\n\r\nconst SequenceCellRenderer = (props) => {\r\n const { row } = props;\r\n let rowNum = `${Number(row.index) + 1}`;\r\n return <CellWrapper {...props}>{rowNum}</CellWrapper>;\r\n};\r\n\r\nconst SequenceHeaderRenderer = (props) => {\r\n return <div>#</div>;\r\n};\r\n\r\nexport const useSequenceColumn = (showSerialNoColumn) => (hooks) => {\r\n if (showSerialNoColumn) {\r\n hooks.visibleColumns.push((columns) => [\r\n {\r\n id: \"sequence\",\r\n Header: SequenceHeaderRenderer,\r\n Cell: SequenceCellRenderer,\r\n width: 5,\r\n maxWidth: 5,\r\n minWidth: 5,\r\n },\r\n ...columns,\r\n ]);\r\n }\r\n};\r\n","import { useState } from \"react\";\r\n\r\nimport { useAsyncDebounce } from \"react-table\";\r\nimport { SearchBar } from \"components/derived\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const GlobalFilter = ({\r\n preGlobalFilteredRows,\r\n globalFilter,\r\n setGlobalFilter,\r\n}) => {\r\n const count = preGlobalFilteredRows.length;\r\n const [, setValue] = useState(globalFilter);\r\n const { t } = useTranslation();\r\n const onChange = useAsyncDebounce(\r\n (value) => setGlobalFilter(value || undefined),\r\n 200\r\n );\r\n\r\n return (\r\n <SearchBar\r\n type=\"text\"\r\n onChange={(e) => {\r\n setValue(e.target.value);\r\n onChange(e.target.value);\r\n }}\r\n // placeholder={`search in ${count} records`}\r\n placeholder={`${t(\"profile.Searchin\")} ${count} ${t(\"profile.screens\")}`}\r\n />\r\n );\r\n};\r\n","import Toolbar from \"@mui/material/Toolbar\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\nimport Chip from \"@mui/material/Chip\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { format } from \"date-fns\";\r\nimport { isValidDate } from \"components/utils/utilFunctions/function\";\r\nimport { useTranslation } from \"react-i18next\";\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n root: {\r\n display: \"flex\",\r\n justifyContent: \"left\",\r\n flexWrap: \"wrap\",\r\n listStyle: \"none\",\r\n paddingLeft: theme.spacing(2),\r\n paddingRight: theme.spacing(2),\r\n margin: 0,\r\n overflowX: \"auto\",\r\n },\r\n chip: {\r\n margin: theme.spacing(0.5),\r\n },\r\n}));\r\n\r\nexport const TableFilterStatusBar = ({ dense, filters, setAllFilters }) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n // const handleDelete = (id) => {\r\n // let newFilter = filters.filter((one) => one.id !== id);\r\n // setAllFilters(newFilter);\r\n // };\r\n if (Array.isArray(filters) && filters.length <= 0) {\r\n return null;\r\n }\r\n return (\r\n <Toolbar\r\n component=\"ul\"\r\n className={classes.root}\r\n variant={dense ? \"dense\" : \"regular\"}\r\n >\r\n <li>\r\n <Typography variant=\"h6\">{t(\"RetrievalParameters\")} : </Typography>\r\n </li>\r\n\r\n {filters.map((one: any) => {\r\n return (\r\n <>\r\n {Boolean(one?.value?.value) ? (\r\n <li key={one?.id}>\r\n <Chip\r\n label={computeFilterLabel(\r\n one?.value?.condition,\r\n t(one?.value?.columnName),\r\n one?.value?.value,\r\n t(one?.value?.label),\r\n one?.value?.displayValue\r\n )}\r\n // onDelete={() => handleDelete(one?.id)}\r\n className={classes.chip}\r\n variant=\"outlined\"\r\n />\r\n </li>\r\n ) : null}\r\n </>\r\n );\r\n })}\r\n </Toolbar>\r\n );\r\n};\r\n\r\nconst computeFilterLabel = (\r\n condition,\r\n columnName,\r\n value,\r\n label,\r\n displayValue\r\n) => {\r\n let columnLabel = Boolean(label) ? label : columnName;\r\n switch (condition) {\r\n case \"equal\":\r\n return `${columnLabel} = ${isDateThenFormat(displayValue ?? value)}`;\r\n case \"between\":\r\n return `${columnLabel} between ${isDateThenFormat(\r\n value[0]\r\n )} and ${isDateThenFormat(value[1])}`;\r\n case \"in\":\r\n return `${columnLabel} in ${isLabelThenDisplay(value, label)}`;\r\n case \"contains\":\r\n return `${columnLabel} like ${value}`;\r\n case \"endsWith\":\r\n return `${columnLabel} ends with ${value}`;\r\n case \"startsWith\":\r\n return `${columnLabel} starts with ${value}`;\r\n default:\r\n return `${columnLabel} : ${value}`;\r\n }\r\n};\r\n\r\nconst isDateThenFormat = (value) => {\r\n let myDate;\r\n if (isValidDate(value)) {\r\n myDate = format(new Date(value), \"dd/MM/yyyy\");\r\n }\r\n //@ts-ignore\r\n if (!isNaN(myDate)) {\r\n return myDate;\r\n } else {\r\n return value;\r\n }\r\n};\r\n\r\nconst isLabelThenDisplay = (value, label) => {\r\n if (\r\n Array.isArray(label) &&\r\n Array.isArray(value) &&\r\n value.length === label.length\r\n ) {\r\n return JSON.stringify(label).replaceAll(/\"/g, \" \");\r\n } else {\r\n return JSON.stringify(value).replaceAll(/\"/g, \" \");\r\n }\r\n};\r\n","import { useRef, useCallback, useState, useEffect, createElement } from \"react\";\r\nimport Button from \"@mui/material/Button\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const filterReducer = (state: any = [], action: any = {}) => {\r\n switch (action.type) {\r\n case \"setValue\": {\r\n const { id, ...others } = action.payload;\r\n let index = state.findIndex((one) => one.id === id);\r\n if (index >= 0) {\r\n state[index].value = others;\r\n return [...state];\r\n }\r\n return [...state, { id, value: others }];\r\n }\r\n case \"removeValue\": {\r\n const { id } = action.payload;\r\n /* eslint-disable eqeqeq */\r\n let result = state.filter((one) => one.id != id);\r\n return result;\r\n }\r\n case \"resetAll\": {\r\n return [];\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\nexport const useFilterState = (reducer) => {\r\n const filterState = useRef<object>([]);\r\n /* eslint-disable react-hooks/exhaustive-deps */\r\n const dispatch = useCallback((action) => {\r\n let newState = reducer(filterState.current, action);\r\n filterState.current = newState;\r\n }, []);\r\n\r\n return {\r\n dispatch,\r\n filterState,\r\n };\r\n};\r\n\r\nexport const FilterComponent = ({\r\n setQueryFilters,\r\n filterMeta,\r\n filterData,\r\n retrievalType,\r\n isOpenRetrievalDefault,\r\n setShowFilters,\r\n setAllFilters,\r\n retrievalComponent,\r\n}) => {\r\n const [open, setOpen] = useState(isOpenRetrievalDefault);\r\n const refFilteredData = useRef<any>(filterData);\r\n // const classes = useStyles();\r\n const { t } = useTranslation();\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n const handleOpen = () => {\r\n setOpen(true);\r\n setShowFilters(false);\r\n setAllFilters([]);\r\n };\r\n\r\n useEffect(() => {\r\n const handleKeyDown = (event) => {\r\n if (event.ctrlKey && (event.key === \"R\" || event.key === \"r\")) {\r\n event.preventDefault();\r\n setOpen(true);\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", handleKeyDown);\r\n }, []);\r\n\r\n const retrievalParaValues = (retrievalValues, orgData) => {\r\n setQueryFilters(retrievalValues);\r\n setOpen(false);\r\n if (orgData) {\r\n refFilteredData.current = orgData;\r\n }\r\n };\r\n\r\n const setRetrievalData = (data) => {\r\n setQueryFilters([data]);\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterDateFns}>\r\n <>\r\n {Boolean(retrievalType) && typeof retrievalComponent === \"function\" ? (\r\n <>\r\n {(retrievalType === \"CUSTOM\" && filterMeta?.fields?.length > 0) ||\r\n retrievalType !== \"CUSTOM\" ? (\r\n <Button onClick={handleOpen} color=\"primary\">\r\n {t(\"RetrieveData\")}\r\n </Button>\r\n ) : null}\r\n </>\r\n ) : (\r\n <></>\r\n )}\r\n {open &&\r\n retrievalType &&\r\n retrievalComponent &&\r\n typeof retrievalComponent === \"function\"\r\n ? createElement(retrievalComponent, {\r\n classes: {},\r\n open,\r\n handleClose,\r\n loginState: {},\r\n defaultData: refFilteredData.current,\r\n retrievalParaValues,\r\n retrievalType,\r\n metaData: filterMeta,\r\n })\r\n : null}\r\n </>\r\n </LocalizationProvider>\r\n );\r\n};\r\n","//@ts-nocheck\nexport const exportToPdf = ({\n title,\n columns,\n rows,\n columnsSelected,\n data,\n auth,\n retrievalParams,\n filters,\n globalFilter,\n columnLabel,\n banklogo,\n pageNumber,\n totalPageCount,\n}) => {\n const pdfStyle = {\n DEFAULT: \"#000\",\n THEME: \"#800000\",\n SMALL_TEXT: 7,\n MEDIUM_TEXT: 18,\n DEFAULT_TEXT: 16,\n HEADING_TEXT: 14,\n };\n let startY = 5;\n // eslint-disable-next-line no-undef\n const doc: any = new jspdf.jsPDF({\n orientation: data.orientation,\n unit: \"mm\",\n format: data.page_size,\n });\n\n // get page width and height\n const pageWidth = doc.internal.pageSize.width;\n const pageHeight = doc.internal.pageSize.height;\n\n // get filter date [from/to]\n const { fromDt, toDt } = getRetrievalParaDate(retrievalParams);\n\n // footer\n function footer() {\n doc.setFontSize(pdfStyle.SMALL_TEXT);\n doc.setTextColor(150);\n doc.setFont(undefined, \"normal\");\n doc.text(`Generated by- ${auth?.user?.id}`, 10, pageHeight - 10);\n }\n\n // reset\n function reset(color = pdfStyle.DEFAULT) {\n doc.setFontSize(pdfStyle.DEFAULT_TEXT);\n doc.setTextColor(color);\n doc.setFont(undefined, \"normal\");\n }\n\n // set report title\n let fileTitle = getTitleFilters(\n retrievalParams,\n filters,\n globalFilter,\n columnLabel,\n );\n\n // columns\n columns = columns.filter((column: { id: number }) =>\n columnsSelected.includes(column.id),\n );\n\n const filteredRows = getDynamicRow(rows, columns);\n\n if (data.show_header) {\n doc.addImage(banklogo, \"JPG\", 10, startY, 40, 24);\n\n doc.setFontSize(pdfStyle.HEADING_TEXT);\n doc.setTextColor(pdfStyle.THEME);\n\n const companyName = auth?.companyName ?? \"\";\n // const titleAlignCenter = pageWidth / 2 - doc.getTextWidth(companyName) / 2;\n // doc.text(companyName, titleAlignCenter, startY + 14);\n\n const titleX = pageWidth / 2;\n const titleY = startY + 10;\n const splitTitle = doc.splitTextToSize(companyName, 60);\n doc.text(splitTitle, titleX, titleY, { align: \"center\" });\n\n /* branch code */\n // doc.setFontSize(9)\n // const branch = `Branch: ${auth?.user?.branchCode}- ${auth?.user?.branch}`\n // const subHeaderAlignCenter = (pageWidth / 2) - doc.getTextWidth(branch) / 2\n // doc.text(branch, subHeaderAlignCenter, startY + 20)\n\n startY += 20;\n reset();\n }\n\n // startY += 10\n // doc.text(title, 10, startY);\n doc.setFontSize(pdfStyle.SMALL_TEXT);\n doc.setTextColor(150);\n // eslint-disable-next-line no-undef\n doc.text(\n `printed on: ${dateFns.format(Date.now(), \"DD/MM/YYYY HH:mm:ss\")}`,\n pageWidth - 42,\n 10,\n );\n if (typeof pageNumber === \"number\") {\n doc.text(\n `page: ${pageNumber + 1} of ${totalPageCount}`,\n pageWidth - 42,\n 13,\n );\n }\n\n doc.setFontSize(8);\n doc.setTextColor(pdfStyle.DEFAULT);\n const fullTitle = `${title} ${fileTitle}`;\n if (fullTitle.length > pageWidth - 80) {\n const splitTitle = doc.splitTextToSize(fullTitle, pageWidth - 30);\n doc.text(splitTitle, 15, startY + 12);\n } else {\n const titleAlignCenter = pageWidth / 2 - doc.getTextWidth(fullTitle) / 2;\n doc.text(fullTitle, titleAlignCenter, startY + 12);\n }\n\n const tableHeaders = columns.map((d: { cname: any }) => d.cname);\n const tableData = filteredRows.map((item) => Object.values(item));\n\n // table start\n if (fullTitle.length > pageWidth) startY += 25;\n else startY += 20;\n doc.autoTable({\n head: [tableHeaders],\n headStyles: { fillColor: pdfStyle.THEME },\n body: tableData,\n styles: { fontSize: 6 },\n startY,\n // detect new page\n didDrawPage: function () {\n footer();\n },\n });\n\n const pdfData = doc.output(\"datauristring\");\n\n return {\n downloadTitle: `${title} ${fromDt}-${toDt}-${data.orientation}.pdf`,\n blob: pdfData,\n };\n};\n","//@ts-nocheck\r\nexport const exportToExcel = ({\r\n title,\r\n columns,\r\n rows,\r\n columnsSelected,\r\n data,\r\n auth,\r\n retrievalParams,\r\n filters,\r\n globalFilter,\r\n columnLabel,\r\n pageNumber,\r\n totalPageCount,\r\n}) => {\r\n const theme = {\r\n bg: \"800000\",\r\n white: \"ffffff\",\r\n };\r\n\r\n // filter columns based on selected column names\r\n columns = columns.filter((column: { id: number }) =>\r\n columnsSelected.includes(column.id),\r\n );\r\n\r\n // get filter date [from/to]\r\n const { fromDt, toDt } = getRetrievalParaDate(retrievalParams);\r\n\r\n return XlsxPopulate.fromBlankAsync().then((workbook) => {\r\n const sheet = workbook.sheet(0);\r\n\r\n let cellIndex = 1;\r\n let one = 1;\r\n // Add merged header row if checkbox is checked\r\n if (data.show_header) {\r\n // set header cells dynamic\r\n sheet.row(1).height(30);\r\n // freeze row (columns, rows)\r\n sheet.freezePanes(0, 3);\r\n sheet.range(cellIndex, one, cellIndex, columns.length).merged(true); // Merge the first 3 cells of the first row\r\n const headerCell = sheet.cell(\"A1\");\r\n headerCell.value(auth?.companyName).style({\r\n bold: true,\r\n fontSize: 18,\r\n horizontalAlignment: \"center\",\r\n verticalAlignment: \"center\",\r\n fill: theme.bg,\r\n fontColor: theme.white,\r\n });\r\n\r\n cellIndex += 1;\r\n }\r\n\r\n // get all applied filters/params for title\r\n let fileTitle = getTitleFilters(\r\n retrievalParams,\r\n filters,\r\n globalFilter,\r\n columnLabel,\r\n );\r\n // title name row\r\n sheet\r\n .range(cellIndex, one, cellIndex, columns.length)\r\n .merged(true)\r\n .style({ border: true }); // Merge cells\r\n const titleNameCell = sheet.cell(`A${cellIndex}`);\r\n titleNameCell.value(`${title}`).style({\r\n bold: true,\r\n fontSize: 12,\r\n horizontalAlignment: \"center\",\r\n fontColor: theme.bg,\r\n });\r\n\r\n // title filters row\r\n // range(startRowNumber, startColumnNumber, endRowNumber, endColumnNumber)\r\n sheet\r\n .range(cellIndex + 1, one, cellIndex + 1, columns.length)\r\n .merged(true)\r\n .style({ border: true, wrapText: true }); // Merge cells\r\n const titleFilterCell = sheet.cell(`A${cellIndex + 1}`);\r\n titleFilterCell.value(`${fileTitle}`).style({\r\n bold: true,\r\n fontSize: 12,\r\n horizontalAlignment: \"center\",\r\n fontColor: theme.bg,\r\n });\r\n cellIndex += 2;\r\n\r\n // Add column headers\r\n const headers = columns.map((d: { cname: any }) => d.cname);\r\n headers.forEach((header: any, index: number) => {\r\n sheet\r\n .cell(cellIndex, index + 1)\r\n .value(header)\r\n .style({ bold: true, border: true });\r\n });\r\n\r\n // get dynamic row w.r.t column selected\r\n const filteredRows = getDynamicRow(rows, columns);\r\n\r\n filteredRows.forEach((rowData, rowIndex) => {\r\n Object.values(rowData).forEach((value, columnIndex) => {\r\n sheet\r\n .cell(rowIndex + cellIndex + 1, columnIndex + 1)\r\n .value(value)\r\n .style({ border: true });\r\n });\r\n });\r\n\r\n cellIndex += filteredRows.length + 3;\r\n\r\n // get generated details\r\n let two = 2;\r\n sheet\r\n .cell(cellIndex, one)\r\n .value(\"Generated by\")\r\n .style({ bold: true, border: true });\r\n sheet.cell(cellIndex, two).value(auth?.user?.id).style({ border: true });\r\n\r\n // for pagination report to show current page number\r\n if (typeof pageNumber === \"number\") {\r\n cellIndex += 1;\r\n\r\n sheet\r\n .cell(cellIndex, one)\r\n .value(\"Page\")\r\n .style({ bold: true, border: true });\r\n sheet\r\n .cell(cellIndex, two)\r\n .value(`${pageNumber + 1} of ${totalPageCount}`)\r\n .style({ border: true });\r\n }\r\n\r\n cellIndex += 1;\r\n\r\n sheet\r\n .cell(cellIndex, one)\r\n .value(\"Printed on\")\r\n .style({ bold: true, border: true });\r\n sheet\r\n .cell(cellIndex, two)\r\n .value(dateFns.format(new Date(), \"DD/MM/YYYY HH:mm:ss\"))\r\n .style({ border: true });\r\n\r\n // set column width dynamically\r\n if (data.export_type === \"EXCEL\") {\r\n const columnKeys = Object.keys(filteredRows[0]);\r\n const maxLengths = columnKeys.map((_, colIndex) => {\r\n let maxLength = 8;\r\n\r\n for (let i = 0; i < filteredRows.length; i++) {\r\n const row = filteredRows[i];\r\n const cellValue = (row[columnKeys[colIndex]] || \"\").toString().trim();\r\n if (cellValue.length > maxLength) {\r\n maxLength = cellValue.length;\r\n }\r\n }\r\n\r\n return maxLength;\r\n });\r\n\r\n // Set the column widths\r\n const widthExtendBy = 4;\r\n columnKeys.forEach((_, colIndex) => {\r\n sheet\r\n .column(colIndex + one)\r\n .width(maxLengths[colIndex] + widthExtendBy);\r\n });\r\n }\r\n\r\n return workbook.outputAsync().then((blob) => {\r\n return { downloadTitle: `${title} ${fromDt}-${toDt}.xlsx`, blob };\r\n });\r\n });\r\n};\r\n","//@ts-nocheck\nexport const exportToCsv = ({\n title,\n columns,\n rows,\n columnsSelected,\n data,\n auth,\n retrievalParams,\n filters,\n globalFilter,\n columnLabel,\n}) => {\n let output = \"\";\n // filter columns based on selected column names\n columns = columns.filter((column: { id: number }) =>\n columnsSelected.includes(column.id),\n );\n\n // get filter date [from/to]\n const { fromDt, toDt } = getRetrievalParaDate(retrievalParams);\n\n // get all applied filters/params for title\n let fileTitle = getTitleFilters(\n retrievalParams,\n filters,\n globalFilter,\n columnLabel,\n );\n\n const headers = columns.map((d: { cname: any }) => d.cname);\n\n // get dynamic row w.r.t column selected\n const filteredRows = getDynamicRow(rows, columns);\n\n const csvTitle = Papa.unparse([[`${title} ${fileTitle}`]]);\n const csvHeader = Papa.unparse([headers]);\n const csvData = Papa.unparse(filteredRows, { header: false });\n\n // output += `${title} ${fileTitle}\\r\\n`;\n\n output += csvTitle + \"\\r\\n\" + csvHeader + \"\\r\\n\" + csvData;\n\n const csvBlob = new Blob([output], { type: \"text/csv\" });\n\n return { downloadTitle: `${title} ${fromDt}-${toDt}.csv`, blob: csvBlob };\n};\n","//@ts-nocheck\nexport const exportToText = ({\n title,\n columns,\n rows,\n columnsSelected,\n data,\n auth,\n retrievalParams,\n filters,\n globalFilter,\n columnLabel,\n}) => {\n // filter columns based on selected column names\n columns = columns.filter((column: { id: number }) =>\n columnsSelected.includes(column.id),\n );\n\n // get filter date [from/to]\n const { fromDt, toDt } = getRetrievalParaDate(retrievalParams);\n\n const headers = columns.map((d: { cname: any }) => d.cname);\n const filteredRows = getDynamicRow(rows, columns);\n\n let textString = \"\";\n\n headers.forEach((header: string) => {\n textString += `${header}\\t`;\n });\n textString += `\\n`;\n\n filteredRows.forEach((json) => {\n const rows = Object.values(json);\n rows.forEach((data) => {\n textString += `${data}\\t`;\n });\n textString += `\\n`;\n });\n\n const blob = new Blob([textString], { type: \"text/plain\" });\n return { downloadTitle: `${title} ${fromDt}-${toDt}.txt`, blob };\n};\n","//@ts-nocheck\nexport const exportToHtml = ({\n title,\n columns,\n rows,\n columnsSelected,\n data,\n auth,\n retrievalParams,\n filters,\n globalFilter,\n columnLabel,\n}) => {\n // filter columns based on selected column names\n columns = columns.filter((column: { id: number }) =>\n columnsSelected.includes(column.id),\n );\n\n // get filter date [from/to]\n const { fromDt, toDt } = getRetrievalParaDate(retrievalParams);\n\n let fileTitle: string = getTitleFilters(\n retrievalParams,\n filters,\n globalFilter,\n columnLabel,\n );\n\n const headers = columns.map((d: { cname: any }) => d.cname);\n const filteredRows = getDynamicRow(rows, columns);\n\n let html = `\n <header>\n ${data.show_header ? `<h1>${auth?.companyName}</h1>` : \"\"}\n <p class=\"report-title\">${title} ${fileTitle}</p>\n </header>\n <table><thead><tr>`;\n\n headers.forEach((header: string) => {\n html += `<th>${header}</th>`;\n });\n\n html += `</tr></thead><tbody>`;\n\n filteredRows.forEach((json) => {\n const rows = Object.values(json);\n html += `<tr>`;\n rows.forEach((data) => {\n if (typeof data === \"undefined\") {\n data = \"\";\n }\n html += `<td>${data}</td>`;\n });\n html += `</tr>`;\n });\n\n html += `</tbody></table></div>`;\n\n html =\n `\n <style>\n body {\n font-family: sans-serif;\n overflow-x: auto\n }\n header {\n text-align: center\n }\n h1 {\n color: #800000;\n }\n .report-title {\n max-width: 100%;\n word-wrap: break-word;\n }\n table {\n border-collapse: collapse;\n width: 100%;\n }\n th, td {\n white-space: nowrap;\n padding: 8px;\n text-align: left;\n border: 1px solid #ddd;\n }\n th {\n background-color: #800000;\n color: #fff;\n }\n tr:nth-child(even) {\n background-color: #f1f1f1\n }\n </style>\n ` + html;\n\n const blob = new Blob([html], { type: \"text/html\" });\n\n return { downloadTitle: `${title} ${fromDt}-${toDt}.html`, blob };\n};\n","//@ts-nocheck\nexport const exportToXml = ({\n title,\n columns,\n rows,\n columnsSelected,\n data,\n auth,\n retrievalParams,\n filters,\n globalFilter,\n columnLabel,\n}) => {\n // filter columns based on selected column names\n columns = columns.filter((column: { id: number }) =>\n columnsSelected.includes(column.id),\n );\n\n // get filter date [from/to]\n const { fromDt, toDt } = getRetrievalParaDate(retrievalParams);\n\n const filteredRows = getDynamicRow(rows, columns);\n\n // const xmlString = js2xmlparser(\n // \"XmlData_root\",\n // { XmlData_row: filteredRows },\n // {\n // declaration: { encoding: \"UTF-8\" },\n // }\n // );\n\n const xmlString = jstoxml.toXML(\n { XmlData_root: filteredRows.map((d) => ({ XmlData_row: d })) },\n {\n header: true,\n },\n );\n\n const blob = new Blob([xmlString], { type: \"application/xml\" });\n\n return { downloadTitle: `${title} ${fromDt}-${toDt}.xml`, blob };\n};\n","import { WORKER_STATUS, useWorker } from \"@koale/useworker\";\r\nimport {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { exportToPdf } from \"../exportFunctions/pdfexport\";\r\nimport { exportToExcel } from \"../exportFunctions/excelexport\";\r\nimport { exportToCsv } from \"../exportFunctions/csvexport\";\r\nimport { exportToText } from \"../exportFunctions/textexport\";\r\nimport { exportToHtml } from \"../exportFunctions/htmlexport\";\r\nimport { exportToXml } from \"../exportFunctions/xmlexport\";\r\n\r\ntype StatusType = {\r\n excelStatus: string;\r\n pdfStatus: string;\r\n csvStatus: string;\r\n xmlStatus: string;\r\n htmlStatus: string;\r\n textStatus: string;\r\n};\r\n\r\ninterface WorkerContextType {\r\n status: StatusType;\r\n workerQueue: any;\r\n pdfExporter: Function;\r\n excelExporter: Function;\r\n csvExporter: Function;\r\n textExporter: Function;\r\n htmlExporter: Function;\r\n xmlExporter: Function;\r\n setWorkerQueue: Function;\r\n markComplete: Function;\r\n downloadProgress: any;\r\n setDownloadProgress: Function;\r\n}\r\n\r\nexport const WorkerContext = createContext<WorkerContextType | any>({\r\n status: {\r\n excelStatus: \"\",\r\n pdfStatus: \"\",\r\n csvStatus: \"\",\r\n xmlStatus: \"\",\r\n htmlStatus: \"\",\r\n textStatus: \"\",\r\n },\r\n workerQueue: [],\r\n setWorkerQueue: () => {},\r\n pdfExporter: () => {},\r\n excelExporter: () => {},\r\n csvExporter: () => {},\r\n textExporter: () => {},\r\n htmlExporter: () => {},\r\n xmlExporter: () => {},\r\n markComplete: () => {},\r\n downloadProgress: {},\r\n setDownloadProgress: () => {},\r\n});\r\n\r\nexport const WorkerContextProvider = ({ children }) => {\r\n const [workerQueue, setWorkerQueue] = useState<any>([]);\r\n const [downloadProgress, setDownloadProgress] = useState<any>({\r\n pdf: false,\r\n excel: false,\r\n csv: false,\r\n text: false,\r\n xml: false,\r\n html: false,\r\n });\r\n const statusRef = useRef<any>();\r\n\r\n const markComplete = useCallback((id, type = \"\") => {\r\n setWorkerQueue((oldData) => {\r\n return oldData.map((item) => {\r\n if (item.id === id) {\r\n return {\r\n ...item,\r\n isCompleted: !downloadProgress[type] ? true : false,\r\n };\r\n // return { ...item, isCompleted: true };\r\n }\r\n return item;\r\n });\r\n });\r\n setTimeout(() => {\r\n setWorkerQueue((oldData) => {\r\n return oldData.filter((item) => {\r\n return item?.id !== id;\r\n });\r\n });\r\n }, 5000);\r\n }, []);\r\n\r\n // for pdf file\r\n const [pdfExporter, { status: pdfStatus, kill }] = useWorker(exportToPdf, {\r\n remoteDependencies: [\r\n \"https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js\",\r\n \"https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.js\",\r\n \"https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.7.0/jspdf.plugin.autotable.min.js\",\r\n `${new URL(window.location.href).origin}/exportUtility.js`,\r\n ],\r\n });\r\n\r\n // for excel file\r\n const [excelExporter, { status: excelStatus }] = useWorker(exportToExcel, {\r\n remoteDependencies: [\r\n \"https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js\",\r\n \"https://cdnjs.cloudflare.com/ajax/libs/xlsx-populate/1.21.0/xlsx-populate.min.js\",\r\n `${new URL(window.location.href).origin}/exportUtility.js`,\r\n ],\r\n });\r\n\r\n // for csv file\r\n const [csvExporter, { status: csvStatus }] = useWorker(exportToCsv, {\r\n remoteDependencies: [\r\n \"https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js\",\r\n \"https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.4.1/papaparse.min.js\",\r\n `${new URL(window.location.href).origin}/exportUtility.js`,\r\n ],\r\n });\r\n\r\n // for text file\r\n const [textExporter, { status: textStatus }] = useWorker(exportToText, {\r\n remoteDependencies: [\r\n \"https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js\",\r\n `${new URL(window.location.href).origin}/exportUtility.js`,\r\n ],\r\n });\r\n\r\n //for html file\r\n const [htmlExporter, { status: htmlStatus }] = useWorker(exportToHtml, {\r\n remoteDependencies: [\r\n \"https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js\",\r\n `${new URL(window.location.href).origin}/exportUtility.js`,\r\n ],\r\n });\r\n\r\n // for xml file\r\n const [xmlExporter, { status: xmlStatus }] = useWorker(exportToXml, {\r\n remoteDependencies: [\r\n \"https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js\",\r\n \"https://cdn.jsdelivr.net/npm/jstoxml@3.2.8/dist/jstoxml.min.js\",\r\n `${new URL(window.location.href).origin}/exportUtility.js`,\r\n ],\r\n });\r\n\r\n statusRef.current = {\r\n pdfStatus,\r\n excelStatus,\r\n csvStatus,\r\n textStatus,\r\n htmlStatus,\r\n xmlStatus,\r\n };\r\n\r\n useEffect(() => {\r\n const handleUnload = (e: BeforeUnloadEvent) => {\r\n if (\r\n statusRef.current?.excelStatus === WORKER_STATUS.RUNNING ||\r\n statusRef.current?.pdfStatus === WORKER_STATUS.RUNNING ||\r\n statusRef.current?.csvStatus === WORKER_STATUS.RUNNING ||\r\n statusRef.current?.textStatus === WORKER_STATUS.RUNNING ||\r\n statusRef.current?.htmlStatus === WORKER_STATUS.RUNNING ||\r\n statusRef.current?.xmlStatus === WORKER_STATUS.RUNNING\r\n ) {\r\n e.preventDefault();\r\n const confirmMsg = \"Export is still running\";\r\n e.returnValue = confirmMsg;\r\n return confirmMsg;\r\n }\r\n };\r\n\r\n window.addEventListener(\"beforeunload\", handleUnload);\r\n\r\n return () => {\r\n window.removeEventListener(\"beforeunload\", handleUnload);\r\n };\r\n }, []);\r\n\r\n return (\r\n <WorkerContext.Provider\r\n value={{\r\n workerQueue,\r\n setWorkerQueue,\r\n setDownloadProgress,\r\n downloadProgress,\r\n pdfExporter,\r\n excelExporter,\r\n csvExporter,\r\n textExporter,\r\n htmlExporter,\r\n xmlExporter,\r\n markComplete,\r\n kill,\r\n status: {\r\n pdfStatus,\r\n excelStatus,\r\n csvStatus,\r\n textStatus,\r\n htmlStatus,\r\n xmlStatus,\r\n },\r\n }}\r\n >\r\n {children}\r\n </WorkerContext.Provider>\r\n );\r\n};\r\n\r\nexport const useWorkerContext = () => {\r\n return useContext(WorkerContext);\r\n};\r\n\r\nexport const EXPORT_WORKER_STATUS = {\r\n PENDING: WORKER_STATUS.PENDING,\r\n SUCCESS: WORKER_STATUS.SUCCESS,\r\n RUNNING: WORKER_STATUS.RUNNING,\r\n ERROR: WORKER_STATUS.ERROR,\r\n TIMEOUT_EXPIRED: WORKER_STATUS.TIMEOUT_EXPIRED,\r\n};\r\n","import { CellWrapper } from \"./cellWrapper\";\r\nimport { format as formatter } from \"date-fns\";\r\n\r\nexport const DateTimeCell = (props) => {\r\n const {\r\n value,\r\n column: { format = \"dd/MM/yyyy HH:mm:ss\" },\r\n } = props;\r\n let result = \"00/00/0000 00:00:00\";\r\n let date = new Date(value);\r\n //@ts-ignore\r\n if (!isNaN(date)) {\r\n result = formatter(new Date(value), format);\r\n }\r\n\r\n return <CellWrapper {...props}>{result}</CellWrapper>;\r\n};\r\n","import { CellWrapper } from \"./cellWrapper\";\r\nimport { format as formatter } from \"date-fns\";\r\n\r\nexport const DateCell = (props) => {\r\n const {\r\n value,\r\n column: { format = \"dd/MM/yyyy\" },\r\n } = props;\r\n let result = \"00/00/0000\";\r\n let date = new Date(value);\r\n //@ts-ignore\r\n if (!isNaN(date)) {\r\n result = formatter(new Date(value), format);\r\n }\r\n\r\n return <CellWrapper {...props}>{result}</CellWrapper>;\r\n};\r\n","import { MetaDataType } from \"components/dynamicForm\";\n\nexport const exportReportFormMetaData: MetaDataType = {\n form: {\n name: \"exportReportForm\",\n label: \"ExportReportform\",\n resetFieldOnUnmount: false,\n validationRun: \"onBlur\",\n submitAction: \"home\",\n render: {\n ordering: \"auto\",\n renderType: \"simple\",\n gridConfig: {\n item: {\n xs: 12,\n sm: 4,\n md: 4,\n },\n container: {\n direction: \"row\",\n spacing: 1,\n },\n },\n },\n componentProps: {\n textField: {\n fullWidth: true,\n },\n select: {\n fullWidth: true,\n },\n datePicker: {\n fullWidth: true,\n },\n numberFormat: {\n fullWidth: true,\n },\n inputMask: {\n fullWidth: true,\n },\n datetimePicker: {\n fullWidth: true,\n },\n },\n },\n fields: [\n {\n render: {\n componentType: \"select\",\n },\n name: \"export_type\",\n label: \"Selectfiletype\",\n required: true,\n defaultValue: \"EXCEL\",\n defaultOptionLabel: \"Select file tye\",\n options: [\n { label: \"EXCEL (.xlsx)\", value: \"EXCEL\" },\n { label: \"CSV (.csv)\", value: \"CSV\" },\n { label: \"PDF (.pdf)\", value: \"PDF\" },\n { label: \"PLAIN TEXT (.txt)\", value: \"TEXT\" },\n { label: \"XML (.xml)\", value: \"XML\" },\n { label: \"HTML (.html)\", value: \"HTML\" },\n ],\n schemaValidation: {\n type: \"string\",\n rules: [{ name: \"required\", params: [\"ThisFieldisrequired\"] }],\n },\n GridProps: {\n xs: 6,\n md: 3,\n sm: 3,\n },\n // __EDIT__: { isReadOnly: true },\n // __NEW__: { isReadOnly: false, isFieldFocused: true },\n },\n {\n render: {\n componentType: \"select\",\n },\n name: \"page_size\",\n label: \"Selectpagesize\",\n defaultValue: \"a4\",\n defaultOptionLabel: \"Select page size\",\n dependentFields: [\"export_type\"],\n shouldExclude: (_, dependentFieldsValues, __) => {\n if (dependentFieldsValues?.export_type?.value === \"PDF\") {\n return false;\n }\n return true;\n },\n options: [\n { label: \"A3\", value: \"a3\" },\n { label: \"A4\", value: \"a4\" },\n { label: \"A5\", value: \"a5\" },\n { label: \"A6\", value: \"a6\" },\n { label: \"Letter\", value: \"letter\" },\n { label: \"Legal\", value: \"legal\" },\n ],\n GridProps: {\n xs: 6,\n md: 3,\n sm: 3,\n },\n },\n {\n render: {\n componentType: \"select\",\n },\n name: \"orientation\",\n label: \"Selectorientation\",\n defaultValue: \"portrait\",\n defaultOptionLabel: \"Select orientation\",\n dependentFields: [\"export_type\"],\n shouldExclude: (_, dependentFieldsValues, __) => {\n if (dependentFieldsValues?.export_type?.value === \"PDF\") {\n return false;\n }\n return true;\n },\n options: [\n { label: \"Portrait\", value: \"portrait\" },\n { label: \"Landscape\", value: \"landscape\" },\n ],\n GridProps: {\n xs: 6,\n md: 3,\n sm: 3,\n },\n },\n {\n render: {\n componentType: \"checkbox\",\n },\n name: \"show_header\",\n label: \"ShowHeader\",\n defaultValue: true,\n GridProps: { xs: 6, md: 3, sm: 3 },\n fullWidth: true,\n dependentFields: [\"export_type\"],\n shouldExclude: (_, dependentFieldsValues, __) => {\n if (\n dependentFieldsValues?.export_type?.value !== \"XML\" &&\n dependentFieldsValues?.export_type?.value !== \"TEXT\" &&\n dependentFieldsValues?.export_type?.value !== \"CSV\"\n ) {\n return false;\n }\n return true;\n },\n },\n ],\n};\n","import { Dialog, DialogActions, Typography } from \"@mui/material\";\r\nimport { makeStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\nimport { GradientButton } from \"components/styledComponent/button\";\r\nimport { Transition } from \"pages_audit/common/transition\";\r\nimport { FC, useCallback, useMemo, useRef, useState } from \"react\";\r\nimport FormWrapper from \"components/dynamicForm\";\r\nimport { DataGrid } from \"@mui/x-data-grid\";\r\nimport { useSnackbar } from \"notistack\";\r\nimport { DateTimeCell } from \"components/report/components/dateTimeCell\";\r\nimport { DateCell } from \"components/report/components/dateCell\";\r\nimport { WORKER_STATUS } from \"@koale/useworker\";\r\nimport axios from \"axios\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { AuthStateType } from \"components/types\";\r\nimport { cloneDeep } from \"lodash\";\r\nimport { ButtonRowCell } from \"components/tableCellComponents/ButtonRowCell\";\r\nimport { useWorkerContext } from \"./context/exportWorkerContext\";\r\nimport { exportReportFormMetaData } from \"./exportFunctions/metaData\";\r\n\r\n// classes\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n dataGrid: {\r\n fontWeight: 500,\r\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", \"sans-serif\" !important',\r\n fontSize: \"0.9rem\",\r\n letterSpacing: \"0.01071em\",\r\n\r\n \"& .MuiDataGrid-columnHeaderTitle\": {\r\n color: \"var(--theme-color1)\",\r\n fontWeight: 700,\r\n },\r\n\r\n \"& .Mui-checked\": {\r\n color: \"var(--theme-color1)\",\r\n },\r\n \"& .MuiCheckbox-indeterminate\": {\r\n color: theme.palette.text.secondary,\r\n },\r\n },\r\n}));\r\n\r\nexport type TReportProps = {\r\n globalFilter?: string;\r\n filters?: any[];\r\n queryFilters?: any[];\r\n onClose: Function;\r\n rows: any;\r\n columns: any;\r\n title: string;\r\n pageNumber?: number;\r\n totalPageCount?: number;\r\n authState?: AuthStateType;\r\n};\r\n\r\nexport const ReportExportScreen: FC<TReportProps> = ({\r\n globalFilter = \"\",\r\n filters = [],\r\n queryFilters = [],\r\n onClose,\r\n rows,\r\n columns,\r\n title,\r\n pageNumber,\r\n totalPageCount,\r\n authState,\r\n}) => {\r\n const {\r\n pdfExporter,\r\n excelExporter,\r\n csvExporter,\r\n textExporter,\r\n htmlExporter,\r\n xmlExporter,\r\n setWorkerQueue,\r\n setDownloadProgress,\r\n status,\r\n markComplete,\r\n } = useWorkerContext();\r\n\r\n // storing status in ref to access real time status in submit function\r\n const statusRef = useRef<any>(null);\r\n statusRef.current = status;\r\n const { t } = useTranslation();\r\n const refSelectedRows = useRef<any>([]);\r\n const classes = useStyles();\r\n const refData = useRef<any>(null);\r\n const { enqueueSnackbar } = useSnackbar();\r\n // filter columns where cell type is button\r\n columns = useMemo(\r\n () =>\r\n columns.filter((column) => {\r\n return (\r\n column?.Cell?.name !== \"ButtonRowCell\" &&\r\n column?.Cell !== ButtonRowCell &&\r\n column.isHiddenColumn !== true\r\n );\r\n }),\r\n [],\r\n );\r\n\r\n // get {accessor: columnName} objects for filter displayname\r\n const columnLabel = useMemo(() => {\r\n return columns.reduce((accu, item) => {\r\n return { ...accu, [item?.accessor]: item?.columnName };\r\n }, {});\r\n }, []);\r\n\r\n // get all columns name\r\n const columnData = useMemo(\r\n () =>\r\n columns.map((column, index) => {\r\n return {\r\n id: index + 1,\r\n cname: column.columnName,\r\n [column.accessor]: column.accessor,\r\n cellType:\r\n column?.Cell === DateTimeCell\r\n ? \"DateTimeCell\"\r\n : column?.Cell === DateCell\r\n ? \"DateCell\"\r\n : \"\",\r\n format: column?.format ?? \"\",\r\n };\r\n }),\r\n [],\r\n );\r\n\r\n // state to track user selected column to export\r\n const [selectionModel, setSelectionModel] = useState<any>(() =>\r\n columnData.map((c: { id: number }) => c.id),\r\n );\r\n refSelectedRows.current = selectionModel;\r\n\r\n // get all rows data\r\n const rowData = useMemo(\r\n () => rows.map((row: Array<object>) => row?.values),\r\n [],\r\n );\r\n\r\n const addInQueue = useCallback((title = \"report\") => {\r\n const id = new Date().getTime();\r\n const newRow = {\r\n id,\r\n title,\r\n isCompleted: false,\r\n };\r\n\r\n setWorkerQueue((prev) => [newRow, ...prev]);\r\n return id;\r\n }, []);\r\n\r\n const getUrlfromBlob = async (blobString: string, fileType: string) => {\r\n const response = await axios({\r\n url: blobString,\r\n method: \"GET\",\r\n responseType: \"blob\",\r\n onDownloadProgress: (progressEvent: any) => {\r\n let percentCompleted = Math.round(\r\n (progressEvent.loaded * 100) / progressEvent.total,\r\n );\r\n setDownloadProgress((prev) => ({\r\n ...prev,\r\n [fileType]: percentCompleted !== 100 ? true : false,\r\n }));\r\n },\r\n });\r\n return response;\r\n };\r\n //updFilters for pagination report filters columnName update\r\n const updFilters = filters.map((obj) => {\r\n const newObj = cloneDeep(obj);\r\n if (newObj?.value?.columnName)\r\n newObj.value.columnName = t(newObj.value.columnName);\r\n return newObj;\r\n });\r\n // submit function\r\n const onSubmitHandler = (data, displayData, endSubmit, setFieldError) => {\r\n endSubmit(true);\r\n\r\n // error handling\r\n if (rowData.length === 0) {\r\n enqueueSnackbar(t(\"Nodatafoundtoexports\"), { variant: \"error\" });\r\n return;\r\n }\r\n if (refSelectedRows.current.length === 0) {\r\n enqueueSnackbar(t(\"Pleaseselectatleastonecolumn\"), {\r\n variant: \"error\",\r\n });\r\n return;\r\n }\r\n\r\n // options to pass in exporting functions\r\n const exportOptions = {\r\n columns: columnData,\r\n rows: rowData,\r\n title,\r\n columnsSelected: refSelectedRows.current,\r\n data,\r\n auth: authState,\r\n retrievalParams: queryFilters.map((obj) => {\r\n return {\r\n ...obj,\r\n value: {\r\n ...obj.value,\r\n columnName: t(obj?.value?.columnName ?? \"\"),\r\n label: t(obj?.value?.label ?? \"\"),\r\n },\r\n };\r\n }),\r\n filters: updFilters,\r\n globalFilter,\r\n columnLabel,\r\n pageNumber,\r\n totalPageCount,\r\n };\r\n\r\n switch (data.export_type) {\r\n case \"EXCEL\":\r\n if (statusRef.current.excelStatus === WORKER_STATUS.RUNNING) {\r\n console.log(\"excel in operation\");\r\n return;\r\n }\r\n let exportExcelId = addInQueue(`${title} - Excel`);\r\n excelExporter(exportOptions).then(async (result: any) => {\r\n const blobString = URL.createObjectURL(result.blob);\r\n const response: any = await getUrlfromBlob(blobString, \"excel\");\r\n const url = URL.createObjectURL(\r\n new Blob([response.data], { type: \"application/octet-stream\" }),\r\n );\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = result.downloadTitle;\r\n a.click();\r\n\r\n URL.revokeObjectURL(url);\r\n markComplete(exportExcelId, \"excel\");\r\n });\r\n break;\r\n case \"CSV\":\r\n if (statusRef.current.csvStatus === WORKER_STATUS.RUNNING) {\r\n console.log(\"csv in operation\");\r\n return;\r\n }\r\n let exportCSVId = addInQueue(`${title} - Csv`);\r\n csvExporter(exportOptions).then(async (result: any) => {\r\n const blobString = URL.createObjectURL(result.blob);\r\n const response: any = await getUrlfromBlob(blobString, \"csv\");\r\n const url = URL.createObjectURL(new Blob([response.data]));\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = result.downloadTitle;\r\n a.click();\r\n\r\n URL.revokeObjectURL(url);\r\n markComplete(exportCSVId, \"csv\");\r\n });\r\n break;\r\n case \"PDF\":\r\n if (statusRef.current.pdfStatus === WORKER_STATUS.RUNNING) {\r\n console.log(\"pdf in operation\");\r\n return;\r\n }\r\n let exportPDFId = addInQueue(`${title} - Pdf`);\r\n pdfExporter({\r\n ...exportOptions,\r\n banklogo: `${new URL(window.location.href).origin}/bank-logo.jpg`,\r\n }).then(async (result) => {\r\n const response: any = await getUrlfromBlob(result.blob, \"pdf\");\r\n const url = URL.createObjectURL(new Blob([response.data]));\r\n\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = result.downloadTitle;\r\n document.body.appendChild(a);\r\n a.click();\r\n\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n markComplete(exportPDFId, \"pdf\");\r\n });\r\n break;\r\n case \"TEXT\":\r\n if (statusRef.current.textStatus === WORKER_STATUS.RUNNING) {\r\n console.log(\"text in operation\");\r\n return;\r\n }\r\n let exportTextId = addInQueue(`${title} - Text`);\r\n textExporter(exportOptions).then(async (result: any) => {\r\n const blobString = URL.createObjectURL(result.blob);\r\n const response: any = await getUrlfromBlob(blobString, \"text\");\r\n const url = URL.createObjectURL(new Blob([response.data]));\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = result.downloadTitle;\r\n a.click();\r\n\r\n URL.revokeObjectURL(url);\r\n markComplete(exportTextId, \"text\");\r\n });\r\n break;\r\n case \"XML\":\r\n if (statusRef.current.xmlStatus === WORKER_STATUS.RUNNING) {\r\n console.log(\"xml in operation\");\r\n return;\r\n }\r\n let exportXMLId = addInQueue(`${title} - Xml`);\r\n xmlExporter(exportOptions).then(async (result: any) => {\r\n const blobString = URL.createObjectURL(result.blob);\r\n const response: any = await getUrlfromBlob(blobString, \"xml\");\r\n const url = URL.createObjectURL(new Blob([response.data]));\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = result.downloadTitle;\r\n a.click();\r\n\r\n URL.revokeObjectURL(url);\r\n markComplete(exportXMLId, \"xml\");\r\n });\r\n break;\r\n case \"HTML\":\r\n if (statusRef.current.htmlStatus === WORKER_STATUS.RUNNING) {\r\n console.log(\"html in operation\");\r\n return;\r\n }\r\n let exportHTMLId = addInQueue(`${title} - Html`);\r\n htmlExporter(exportOptions).then(async (result: any) => {\r\n const blobString = URL.createObjectURL(result.blob);\r\n const response: any = await getUrlfromBlob(blobString, \"html\");\r\n const url = URL.createObjectURL(new Blob([response.data]));\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = result.downloadTitle;\r\n a.click();\r\n\r\n URL.revokeObjectURL(url);\r\n markComplete(exportHTMLId, \"html\");\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n // call export and show custom notification popup\r\n enqueueSnackbar(t(\"ReportExportStatus\"), {\r\n variant: \"exportReportSnackbar\",\r\n preventDuplicate: true,\r\n persist: true,\r\n anchorOrigin: { horizontal: \"right\", vertical: \"bottom\" },\r\n });\r\n onClose();\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={true}\r\n //@ts-ignore\r\n TransitionComponent={Transition}\r\n PaperProps={{\r\n style: {\r\n width: \"65%\",\r\n },\r\n }}\r\n maxWidth=\"lg\"\r\n >\r\n <FormWrapper\r\n key={\"ExportReportForm\"}\r\n metaData={exportReportFormMetaData}\r\n // initialValues={(rows?.[0]?.data ?? {}) as InitialValuesType}\r\n onSubmitHandler={onSubmitHandler}\r\n //@ts-ignore\r\n displayMode={null}\r\n formStyle={{\r\n background: \"white\",\r\n }}\r\n ref={refData}\r\n />\r\n {/* typography to display total data length to be exported */}\r\n <Typography\r\n style={{ paddingLeft: \".75rem\" }}\r\n variant=\"caption\"\r\n display=\"block\"\r\n gutterBottom\r\n >\r\n {rowData.length === 0\r\n ? `${t(\"Nodatafoundtoexport\")}`\r\n : `${rowData.length} ${t(\"rowswillbeexported\")}`}\r\n </Typography>\r\n\r\n <div style={{ height: \"50vh\", width: \"100%\" }}>\r\n <DataGrid\r\n className={classes.dataGrid}\r\n rows={columnData}\r\n rowHeight={36}\r\n columnHeaderHeight={40}\r\n columns={[\r\n { field: \"id\", headerName: String(t(\"SrNo\")), width: 100 },\r\n {\r\n field: \"cname\",\r\n headerName: String(t(\"ColumnstoExport\")),\r\n width: 300,\r\n },\r\n ]}\r\n paginationModel={{ page: 0, pageSize: 50 }}\r\n checkboxSelection\r\n disableRowSelectionOnClick\r\n disableColumnMenu={true}\r\n rowSelectionModel={selectionModel}\r\n onRowSelectionModelChange={setSelectionModel}\r\n hideFooter={true}\r\n style={{ fontWeight: 500 }}\r\n />\r\n </div>\r\n\r\n <DialogActions style={{ display: \"flex\", justifyContent: \"center\" }}>\r\n <GradientButton\r\n onClick={(e) => {\r\n refData.current?.handleSubmit(e);\r\n }}\r\n >\r\n {t(\"Export\")}\r\n </GradientButton>\r\n\r\n <GradientButton onClick={() => onClose()}>{t(\"Close\")}</GradientButton>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n","import { useRef, useCallback, useState, createElement } from \"react\";\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\nimport { AdapterDateFns } from \"@mui/x-date-pickers/AdapterDateFns\";\nimport {\n CardContent,\n Drawer,\n Grid,\n Typography,\n Button,\n AppBar,\n Toolbar,\n} from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const filterReducer = (state: any = [], action: any = {}) => {\n switch (action.type) {\n case \"setValue\": {\n const { id, ...others } = action.payload;\n let index = state.findIndex((one) => one.id === id);\n if (index >= 0) {\n state[index].value = others;\n return [...state];\n }\n return [...state, { id, value: others }];\n }\n case \"removeValue\": {\n const { id } = action.payload;\n /* eslint-disable eqeqeq */\n let result = state.filter((one) => one.id != id);\n return result;\n }\n case \"resetAll\": {\n return [];\n }\n default: {\n return state;\n }\n }\n};\n\nexport const useFilterState = (reducer) => {\n const filterState = useRef<object>([]);\n /* eslint-disable react-hooks/exhaustive-deps */\n const dispatch = useCallback((action) => {\n let newState = reducer(filterState.current, action);\n filterState.current = newState;\n }, []);\n\n return {\n dispatch,\n filterState,\n };\n};\n\nexport const DrawerFilterComponent = ({\n setQueryFilters,\n filterMeta,\n filterData,\n retrievalWindowOpen = false,\n}) => {\n const { t } = useTranslation();\n const [open, setOpen] = useState(retrievalWindowOpen);\n const { filterState, dispatch } = useFilterState(filterReducer);\n const handleClose = () => {\n setOpen(false);\n };\n\n const handleOpen = () => {\n setOpen(true);\n };\n\n const handleFilterChange = () => {\n setQueryFilters(filterState.current);\n setOpen(false);\n };\n\n const handleClearFilter = () => {\n setQueryFilters([]);\n setOpen(false);\n };\n\n let filterColumns: any = [];\n if (Array.isArray(filterMeta)) {\n filterColumns = filterMeta.filter(\n (one) => typeof one.Filter === \"function\",\n );\n filterColumns = filterColumns.map((one) => {\n const { Filter, accessor, ...others } = one;\n return (\n //@ts-ignore\n createElement(Filter, {\n key: accessor,\n filterValue: filterData.filter((one) => one.id === accessor)?.[0]\n ?.value,\n id: accessor,\n dispatch,\n ...others,\n })\n );\n });\n }\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <Button onClick={handleOpen} color=\"primary\">\n Retrieve Data\n </Button>\n <Drawer\n anchor=\"right\"\n id={\"columnVisibility\"}\n open={open}\n onClose={handleClose}\n PaperProps={{\n style: { width: \"520px\" },\n }}\n >\n <AppBar position=\"relative\" color=\"secondary\">\n <Toolbar variant=\"dense\">\n <Typography variant=\"h6\">{t(\"Filter\")}</Typography>\n <div style={{ flexGrow: 1 }} />\n <Button onClick={handleFilterChange} color=\"primary\">\n {t(\"Apply\")}\n </Button>\n <Button onClick={handleClearFilter} color=\"primary\">\n {t(\"Clear\")}\n </Button>\n <Button onClick={handleClose} color=\"primary\">\n {t(\"Close\")}\n </Button>\n </Toolbar>\n </AppBar>\n <CardContent>\n <Grid container spacing={2}>\n {filterColumns}\n </Grid>\n </CardContent>\n </Drawer>\n </LocalizationProvider>\n );\n};\n","import { Fragment, useState, useMemo, useCallback, FC } from \"react\";\nimport {\n useTable,\n useBlockLayout,\n useResizeColumns,\n useFilters,\n useGroupBy,\n useSortBy,\n useExpanded,\n useGlobalFilter,\n} from \"react-table\";\nimport Paper from \"@mui/material/Paper\";\nimport TableContainer from \"@mui/material/TableContainer\";\nimport Table from \"@mui/material/Table\";\nimport TableHead from \"@mui/material/TableHead\";\nimport TableRow from \"@mui/material/TableRow\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableBody from \"@mui/material/TableBody\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Button from \"@mui/material/Button\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport Typography from \"@mui/material/Typography\";\nimport Switch from \"@mui/material/Switch\";\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\nimport LinearProgress from \"@mui/material/LinearProgress\";\nimport GetAppIcon from \"@mui/icons-material/GetApp\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { FixedSizeList } from \"react-window\";\nimport { useSequenceColumn } from \"./components/useSequence\";\nimport { GlobalFilter } from \"./filter/globalFilter\";\nimport { TableFilterStatusBar, FilterComponent } from \"./filterComponent\";\nimport { AmountSelect } from \"./amountContext\";\nimport { Tooltip } from \"components/styledComponent/tooltip\";\nimport { ReportExportScreen } from \"components/utils/reportExport/\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport { useTranslation } from \"react-i18next\";\nimport { TablePagination } from \"@mui/material\";\nimport { TablePaginationActions } from \"components/dataTable/tablePaginationToolbar\";\nimport { AuthStateType } from \"components/types\";\nimport { RetrievalParametersProps } from \"./types\";\nimport { DrawerFilterComponent } from \"./filterComponent/drawerFilterComponent\";\n\ninterface GridTableType {\n columns: any;\n defaultColumn: any;\n data: any;\n maxHeight: number;\n initialState?: any;\n filterTypes?: any;\n title?: any;\n options?: any;\n loading: boolean;\n hideFooter?: boolean;\n showSerialNoColumn?: boolean;\n onClose?: any;\n setQueryFilters?: any;\n filterMeta?: any;\n queryFilters?: any;\n hideAmountIn?: boolean;\n retrievalType?: string;\n onButtonActionHandel?: any;\n isOpenRetrievalDefault?: boolean;\n printReferense?: any;\n hideHeader?: boolean;\n hideShowFiltersSwitch?: boolean;\n hideStatusBar?: boolean;\n refetchData?: any;\n pageSizes?: Array<any>;\n totalRecords?: number;\n defaultPageSize?: any;\n defaultSortOrder?: any;\n defaultHiddenColumns?: any;\n enablePagination?: boolean;\n authState?: AuthStateType;\n retrievalComponent?: RetrievalParametersProps;\n openDrawerFilter?: boolean;\n}\n\nconst defaultMaxHeight = 300;\nconst defaultMaxHeightFilter = 450;\n\nconst RenderFilters = ({ headerGroup }) => {\n return (\n <TableHead component=\"div\">\n <TableRow {...headerGroup.getHeaderGroupProps()} component=\"div\">\n {headerGroup.headers.map((column) => {\n return (\n <TableCell {...column.getHeaderProps()} component=\"div\">\n {column.canFilter ? column.render(\"Filter\") : \"\"}\n </TableCell>\n );\n })}\n </TableRow>\n </TableHead>\n );\n};\n\nconst RenderFooter = ({ footerGroup }) => {\n return (\n <TableRow {...footerGroup.getFooterGroupProps()} component=\"div\">\n {footerGroup.headers.map((column) => {\n return (\n <TableCell\n {...column.getFooterProps([\n {\n style: {\n textAlign: column?.alignment ?? \"unset\",\n display: \"block\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n padding: \"0px 20px 0px 10px\",\n lineHeight: \"34px\",\n // backgroundColor: \"rgb(239, 224, 224)\",\n backgroundColor: \"var(--theme-color5)\",\n // color: myColor,\n },\n },\n ])}\n component=\"div\"\n >\n {column.render(\"Footer\")}\n </TableCell>\n );\n })}\n </TableRow>\n );\n};\n\nconst RenderFooter1 = ({ footerGroup }) => {\n return (\n <div style={{ backgroundColor: \"var(--theme-color5)\" }}>\n <TableRow {...footerGroup.getFooterGroupProps()}>\n <div>\n {footerGroup.headers.map((column) => {\n return (\n <span\n key={column.id}\n style={{\n textAlign: column?.alignment ?? \"unset\",\n display: \"flex\",\n gap: \"3rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n lineHeight: \"34px\",\n marginLeft: \"10px\",\n }}\n >\n {column.render(\"Footer1\")}\n </span>\n );\n })}\n </div>\n </TableRow>\n </div>\n );\n};\n\nexport const GridTable: FC<GridTableType> = ({\n columns,\n defaultColumn,\n data,\n maxHeight = defaultMaxHeight,\n initialState = {},\n filterTypes,\n title,\n options,\n loading = false,\n hideFooter = false,\n showSerialNoColumn = false,\n onClose = null,\n setQueryFilters,\n filterMeta,\n queryFilters,\n hideAmountIn,\n retrievalType,\n onButtonActionHandel,\n isOpenRetrievalDefault,\n hideHeader = false,\n hideShowFiltersSwitch,\n hideStatusBar,\n refetchData,\n pageSizes = [20, 30, 40],\n totalRecords: controlledTotalRecords = 0,\n defaultPageSize = 20,\n defaultSortOrder = [],\n defaultHiddenColumns = [],\n enablePagination = false,\n authState,\n retrievalComponent,\n openDrawerFilter,\n}) => {\n const [showFilters, setShowFilters] = useState(false);\n const [isOpenExport, setOpenExport] = useState(false);\n const { t } = useTranslation();\n const handleFilterChange = useCallback(() => {\n setShowFilters((old) => !old);\n if (!showFilters) setAllFilters([]);\n }, [setShowFilters]);\n const tableProps = useTable(\n {\n columns,\n data,\n defaultColumn,\n filterTypes,\n // initialState,\n onButtonActionHandel,\n autoResetGlobalFilter: false,\n autoResetFilters: false,\n autoResetGroupBy: false,\n autoResetExpanded: false,\n autoResetSortBy: false,\n initialState: {\n pageIndex: 0,\n pageSize: defaultPageSize,\n hiddenColumns: defaultHiddenColumns,\n sortBy: defaultSortOrder,\n //filters: defaultFilter,\n ...initialState,\n },\n ...options,\n },\n useGlobalFilter,\n useFilters,\n useGroupBy,\n useSortBy,\n useExpanded,\n useResizeColumns,\n useBlockLayout,\n useSequenceColumn(showSerialNoColumn),\n onButtonActionHandel,\n );\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n footerGroups,\n rows,\n prepareRow,\n totalColumnsWidth,\n toggleAllRowsExpanded,\n isAllRowsExpanded,\n setAllFilters,\n setGlobalFilter,\n preGlobalFilteredRows,\n gotoPage,\n setPageSize,\n state: { filters, globalFilter, pageIndex, pageSize, sortBy },\n } = tableProps;\n\n const RenderRows = useCallback(\n (props) => {\n let { index, style } = props;\n const row = rows[index];\n prepareRow(row);\n if (row?.isGrouped && row?.isExpanded) {\n style = {\n ...style,\n backgroundColor: \"rgba(0, 0, 0, 0.04)\",\n };\n }\n return (\n <TableRow {...row.getRowProps({ style })} component=\"div\">\n {row.cells.map((cell, index) => {\n return cell.isAggregated\n ? cell.render(\"Aggregated\")\n : cell.render(\"Cell\", { index: index });\n })}\n </TableRow>\n );\n },\n [prepareRow, rows],\n );\n\n const rowCount = useMemo(() => {\n return rows.reduce((cnt, item) => {\n if (!(item?.original?._hidden ?? false)) {\n ++cnt;\n }\n return cnt;\n }, 0);\n }, [rows]);\n\n const handleChangePage = (_, newPage) => {\n gotoPage(newPage);\n };\n const handleChangeRowsPerPage = (event) => {\n setPageSize(Number(event.target.value));\n };\n\n return (\n <Fragment>\n <Paper\n style={{\n width: \"100%\",\n overflow: \"hidden\",\n marginBottom: \"8px\",\n display: hideHeader ? \"none\" : \"inherit\",\n }}\n className=\"not-printed\"\n >\n <Toolbar\n variant=\"dense\"\n style={{\n backgroundColor: \"var(--theme-color1)\",\n }}\n >\n <Typography variant=\"h5\" color=\"primary\">\n {title.trim()}\n </Typography>\n <div style={{ flexGrow: 1 }} />\n {openDrawerFilter ? (\n <DrawerFilterComponent\n setQueryFilters={setQueryFilters}\n filterMeta={filterMeta}\n filterData={queryFilters}\n retrievalWindowOpen={isOpenRetrievalDefault}\n />\n ) : (\n <FilterComponent\n setQueryFilters={setQueryFilters}\n filterMeta={filterMeta}\n filterData={queryFilters}\n retrievalType={retrievalType}\n isOpenRetrievalDefault={isOpenRetrievalDefault}\n setShowFilters={setShowFilters}\n setAllFilters={setAllFilters}\n retrievalComponent={retrievalComponent}\n />\n )}\n {showFilters && filters.length > 0 && (\n <Button\n onClick={() => setAllFilters([])}\n style={{ marginRight: \"8px\", color: \"white\" }}\n >\n {t(\"ClearFilter\")}\n </Button>\n )}\n {typeof refetchData === \"function\" ? (\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n //@ts-ignore\n onClick={() => refetchData()}\n color=\"primary\"\n >\n <RefreshIcon />\n </IconButton>\n ) : null}\n <GlobalFilter\n preGlobalFilteredRows={preGlobalFilteredRows}\n setGlobalFilter={setGlobalFilter}\n globalFilter={globalFilter}\n />\n {!Boolean(hideAmountIn) ? <AmountSelect /> : null}\n {rows?.length > 0 ? (\n <>\n {!Boolean(hideShowFiltersSwitch) ? (\n <FormControlLabel\n control={\n <Switch\n checked={showFilters}\n onChange={handleFilterChange}\n name=\"filters\"\n size=\"small\"\n color=\"primary\"\n />\n }\n style={{ color: \"var(--white)\" }}\n label={t(\"showFilters\")}\n />\n ) : null}\n {headerGroups.some((header) =>\n header.headers.some((column) => column.isGrouped === true),\n ) ? (\n <FormControlLabel\n control={\n <Switch\n onChange={() => toggleAllRowsExpanded(!isAllRowsExpanded)}\n checked={isAllRowsExpanded}\n name=\"filters\"\n size=\"small\"\n color=\"primary\"\n />\n }\n style={{ color: \"var(--white)\" }}\n label={t(\"ExpandRows\")}\n />\n ) : (\n <FormControlLabel\n control={\n <Tooltip title={t(\"Showexportoptions\")} arrow={true}>\n <Button\n onClick={() => {\n setOpenExport(true);\n }}\n style={{ marginTop: \"0px\", color: \"white\" }}\n >\n {t(\"Export\")} <GetAppIcon />\n </Button>\n {/* <IconButton\n onClick={() => {\n createNewWorkbook({\n data: data,\n title: title.substring(0, title.lastIndexOf(\" \", 30)),\n });\n }}\n size=\"small\"\n color=\"primary\"\n >\n <GetAppIcon />\n </IconButton> */}\n </Tooltip>\n }\n style={{ color: \"var(--white)\" }}\n label=\"\"\n // label=\"Download\" //Commented By Raju Unjiya on 09/06/2023\n />\n )}\n </>\n ) : null}\n {typeof onClose === \"function\" ? (\n <Tooltip title={t(\"Close\")} arrow={true}>\n <IconButton onClick={onClose} size=\"small\">\n <CloseIcon style={{ color: \"var(--white)\" }} />\n </IconButton>\n </Tooltip>\n ) : null}\n </Toolbar>\n {!hideStatusBar ? (\n <TableFilterStatusBar\n dense={true}\n setAllFilters={setQueryFilters}\n filters={queryFilters}\n />\n ) : null}\n </Paper>\n {loading && <LinearProgress color=\"secondary\" />}\n <Paper\n style={{\n width: \"100%\",\n overflow: \"hidden\",\n }}\n tabIndex={0}\n >\n <TableContainer>\n <Table {...getTableProps()} size=\"small\" component=\"div\">\n <TableHead component=\"div\">\n {headerGroups.map((headerGroup) => (\n <TableRow\n {...headerGroup.getHeaderGroupProps()}\n component=\"div\"\n >\n {headerGroup.headers.map((column) => {\n return (\n <TableCell\n {...column.getHeaderProps([\n {\n style: {\n display: \"flex\",\n padding: \"0px 10px\",\n },\n },\n ])}\n component=\"div\"\n align={column.alignment}\n >\n {column.render(\"Header\")}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableHead>\n {showFilters ? (\n <RenderFilters\n headerGroup={headerGroups[headerGroups.length - 1]}\n />\n ) : null}\n <TableBody {...getTableBodyProps({})} component=\"div\">\n <FixedSizeList\n height={showFilters ? defaultMaxHeightFilter : maxHeight}\n itemCount={rows.length}\n itemSize={35}\n width={totalColumnsWidth + 10}\n overscanCount={10}\n >\n {RenderRows}\n </FixedSizeList>\n </TableBody>\n {rows.length <= 0 && loading === false ? (\n <div\n style={{\n // height: \"auto\",\n // display: \"flex\",\n // margin: \"-250px\",\n justifyContent: \"center\",\n fontStyle: \"italic\",\n color: \"rgba(133, 130, 130, 0.8)\",\n margin: \"-241px 0px 0px 575px\",\n }}\n >\n {t(\"Nodatafound\")}\n </div>\n ) : null}\n\n {hideFooter ? null : (\n <TableHead\n component=\"div\"\n style={{\n boxShadow:\n \"0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)\",\n }}\n >\n <RenderFooter footerGroup={footerGroups[0]} />\n <RenderFooter1 footerGroup={footerGroups[0]} />\n </TableHead>\n )}\n </Table>\n </TableContainer>\n {hideFooter ? null : enablePagination ? (\n <TablePagination\n sx={{\n display: \"flex\",\n \"& .MuiToolbar-root\": { display: \"flex\", alignItems: \"baseline\" },\n }}\n variant=\"body\"\n component=\"div\"\n rowsPerPageOptions={pageSizes}\n colSpan={3}\n count={controlledTotalRecords}\n rowsPerPage={Number(pageSize)}\n page={Number(pageIndex)}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n ActionsComponent={TablePaginationActions}\n />\n ) : (\n <TableCell\n style={{\n display: \"flex\",\n color: \"var(--theme-color1)\",\n fontWeight: \"bold\",\n padding: \"10px\",\n }}\n >\n {t(\"TotalNoofRecords\")}: {rowCount}\n </TableCell>\n )}\n </Paper>\n {isOpenExport ? (\n <ReportExportScreen\n globalFilter={globalFilter}\n filters={filters}\n queryFilters={queryFilters}\n title={title.trim()}\n rows={rows}\n columns={columns}\n onClose={() => {\n setOpenExport(false);\n }}\n authState={authState}\n />\n ) : null}\n </Fragment>\n );\n};\n","import { matchSorter } from \"match-sorter\";\r\n\r\nexport const fuzzyTextFilterFn = (rows, id, filterValue) =>\r\n matchSorter(rows, filterValue, { keys: [(row: any) => row.values[id]] });\r\n\r\n// Let the table remove the filter if the string is empty\r\nfuzzyTextFilterFn.autoRemove = (val) => !val;\r\n\r\nexport const customText = (rows, id, filterValue) => {\r\n return rows.filter((row) => {\r\n const rowValue = row.values[id];\r\n return rowValue !== undefined\r\n ? String(rowValue)\r\n .toLowerCase()\r\n .startsWith(String(filterValue).toLowerCase())\r\n : true;\r\n });\r\n};\r\n\r\nexport const filterGreaterThan = (rows, id, filterValue) => {\r\n return rows.filter((row) => {\r\n const rowValue = row.values[id];\r\n return rowValue >= filterValue;\r\n });\r\n};\r\n\r\nfilterGreaterThan.autoRemove = (val) => typeof val !== \"number\";\r\n\r\nexport const customInclude = (rows, ids, filterValue) => {\r\n let result = rows.filter((row) => {\r\n return ids.some((id) => {\r\n const rowValue = row.values[id];\r\n return (\r\n rowValue &&\r\n rowValue.length &&\r\n filterValue.some((val) => rowValue.includes(val))\r\n );\r\n });\r\n });\r\n return result;\r\n};\r\n\r\ncustomInclude.autoRemove = (val) => !val || !val.length;\r\n","import { useState } from \"react\";\nimport { TextField } from \"components/styledComponent/textfield\";\nimport { SelectRenderOnly } from \"components/common/select/render\";\nimport Grid from \"@mui/material/Grid\";\nimport { useTranslation } from \"react-i18next\";\n\nconst options = [\n { label: \"starts with\", value: \"startsWith\" },\n { label: \"ends with\", value: \"endsWith\" },\n { label: \"equal\", value: \"equal\" },\n { label: \"contains\", value: \"contains\" },\n];\n\nexport const ValueFilter = ({\n filterValue,\n id,\n columnName,\n gridProps,\n dispatch,\n}) => {\n const { t } = useTranslation();\n const [text, setText] = useState(filterValue?.value ?? \"\");\n const [condition, setCondition] = useState(filterValue?.condition ?? \"equal\");\n const handleBlur = () => {\n if (Boolean(text)) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: condition,\n value: text,\n id,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n\n return (\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\n <TextField\n label={t(columnName)}\n InputLabelProps={{ shrink: true }}\n onChange={(e) => setText(e.target.value.trimStart())}\n onBlur={handleBlur}\n fullWidth\n value={text}\n InputProps={{\n endAdornment: (\n <SelectRenderOnly\n size=\"small\"\n style={{ width: \"50%\" }}\n touched={true}\n error={\"\"}\n multiple={false}\n handleChange={(e) => {\n setCondition(e.target.value);\n }}\n handleBlur={handleBlur}\n options={options}\n disableCaching={false}\n value={condition}\n selectVariant=\"andornment\"\n />\n ),\n }}\n />\n </Grid>\n );\n};\n","import { useState, useRef } from \"react\";\nimport { SelectWithoutOptions } from \"components/common/select/render2\";\nimport Grid from \"@mui/material/Grid\";\nimport { useOptionsFetcherSimpleWithRemoveCache } from \"components/common/utils\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const OptionsFilter = ({\n filterValue,\n id,\n columnName,\n filterProps,\n gridProps,\n dispatch,\n}) => {\n const { t } = useTranslation();\n const [value, setValue] = useState(filterValue?.value ?? []);\n const optionLabels = useRef<any>(null);\n\n const [myOptions, setMyOptions] = useState([]);\n\n const { loadingOptions } = useOptionsFetcherSimpleWithRemoveCache(\n filterProps?.options ?? [],\n setMyOptions,\n filterProps?._optionsKey ?? \"\",\n false,\n {},\n false,\n undefined,\n );\n const handleChange = (e, labels) => {\n setValue(e.target.value);\n optionLabels.current = labels;\n };\n const handleBlur = (e) => {\n if (Array.isArray(value) && value.length > 0) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"in\",\n value: value,\n label: optionLabels.current,\n id,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n\n return (\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\n <SelectWithoutOptions\n label={t(columnName)}\n showCheckbox={true}\n value={value}\n size=\"small\"\n fullWidth\n touched={true}\n error={\"\"}\n multiple={true}\n handleChange={handleChange}\n handleBlur={handleBlur}\n options={myOptions}\n loadingOptions={loadingOptions}\n selectVariant=\"regular\"\n />\n </Grid>\n );\n};\n","import { useState, useEffect } from \"react\";\nimport FormControl from \"@mui/material/FormControl\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport Grid from \"@mui/material/Grid\";\nimport { InputLabel } from \"components/styledComponent/inputLabel\";\nimport MyNumberFormat from \"components/derived/numberFormat/numberFormat\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const AmountRange = ({\n filterValue,\n id,\n columnName,\n gridProps,\n dispatch,\n}) => {\n const { t } = useTranslation();\n const [minValue, setMinValue] = useState(\n Array.isArray(filterValue?.value) ? filterValue?.value[0] : null,\n );\n const [maxValue, setMaxValue] = useState(\n Array.isArray(filterValue?.value) ? filterValue?.value[1] : null,\n );\n const [error, setError] = useState(\"\");\n useEffect(() => {\n if (Number(minValue) > Number(maxValue) && maxValue?.length > 0) {\n setError(\"From Amount should be less To Amount\");\n } else {\n setError(\"\");\n }\n }, [minValue, maxValue]);\n\n const handleBlur = (e) => {\n if (e.currentTarget.contains(e.relatedTarget)) {\n return;\n }\n if (\n !isNaN(Number(minValue)) &&\n !isNaN(Number(maxValue)) &&\n minValue?.length &&\n maxValue?.length &&\n Number(minValue) <= Number(maxValue)\n ) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"between\",\n value: [minValue, maxValue],\n id,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n return (\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\n <FormControl\n fullWidth={true}\n error={Boolean(error)}\n tabIndex={1}\n onBlur={handleBlur}\n sx={{\n \"& label.Mui-focused\": {\n color: \"var(--theme-color1)\",\n },\n }}\n >\n <InputLabel shrink={true} sx={{ fontSize: \"0.875rem !important\" }}>\n {t(columnName)}\n </InputLabel>\n <div\n style={{\n display: \"flex\",\n width: \"100%\",\n justifyContent: \"space-between\",\n }}\n >\n <MyNumberFormat\n FormatProps={{\n thousandSeparator: true,\n prefix: \"\",\n thousandsGroupStyle: \"lakh\",\n allowNegative: false,\n allowLeadingZeros: false,\n decimalScale: 2,\n fixedDecimalScale: true,\n placeholder: \"From amount\",\n isAllowed: (values) => {\n if (values?.value?.length > 15) {\n return false;\n }\n return true;\n },\n value: minValue,\n onValueChange: (value) => {\n if (!isNaN(Number(value.value))) {\n setMinValue(String(value.value));\n }\n },\n }}\n enableGrid={false}\n fieldKey=\"FromAmount\"\n name=\"from-amount\"\n StartAdornment=\"৳\"\n className=\"textInputFromRight\"\n maxLength={15}\n showMaxLength={false}\n style={{ width: \"48%\" }}\n />\n\n <MyNumberFormat\n FormatProps={{\n thousandSeparator: true,\n prefix: \"\",\n thousandsGroupStyle: \"lakh\",\n allowNegative: false,\n allowLeadingZeros: false,\n decimalScale: 2,\n fixedDecimalScale: true,\n placeholder: \"To amount\",\n isAllowed: (values) => {\n if (values?.value?.length > 15) {\n return false;\n }\n return true;\n },\n value: maxValue,\n onValueChange: (value) => {\n if (!isNaN(Number(value.value))) {\n setMaxValue(String(value.value));\n }\n },\n }}\n enableGrid={false}\n fieldKey=\"ToAmount\"\n name=\"to-amount\"\n StartAdornment=\"৳\"\n className=\"textInputFromRight\"\n maxLength={15}\n showMaxLength={false}\n style={{ width: \"48%\" }}\n />\n </div>\n {Boolean(error) ? <FormHelperText>{error}</FormHelperText> : null}\n </FormControl>\n </Grid>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { SelectRenderOnly } from \"components/common/select/render\";\nimport { KeyboardDatePicker } from \"components/styledComponent/datetime\";\nimport Grid from \"@mui/material/Grid\";\nimport dateFormat from \"date-fns/format\";\nimport subDays from \"date-fns/subDays\";\nimport { TextField } from \"components/styledComponent\";\nimport { isValid } from \"date-fns\";\nimport { greaterThanInclusiveDate } from \"registry/rulesEngine\";\nimport { isValidDate } from \"components/utils/utilFunctions/function\";\nimport { useTranslation } from \"react-i18next\";\n\nconst options = [\n { label: \"All\", value: \"all\" },\n { label: \"Today\", value: \"today\" },\n { label: \"Last Week\", value: \"lastWeek\" },\n { label: \"Last Month\", value: \"lastMonth\" },\n { label: \"Custom\", value: \"custom\" },\n];\n\nexport const DateRange = ({\n filterValue,\n id,\n columnName,\n gridProps,\n dispatch,\n}) => {\n const { t } = useTranslation();\n const [fromErr, setFromErr] = useState({ isError: false, error: \"\" });\n const [toErr, setToErr] = useState({ isError: false, error: \"\" });\n const fromDateRef = useRef<Date | null>(null);\n const toDateRef = useRef<Date | null>(null);\n const [minValue, setMinValue] = useState<any>(\n Array.isArray(filterValue?.value)\n ? new Date(filterValue?.value[0]) ?? null\n : new Date(filterValue?.value) ?? null,\n );\n const [maxValue, setMaxValue] = useState<any>(\n Array.isArray(filterValue?.value)\n ? new Date(filterValue?.value[1]) ?? null\n : null,\n );\n\n const [option, setOption] = useState(filterValue?.option ?? \"all\");\n const handleOptionChange = (e, values) => {\n let today = new Date();\n if (e.target.value === \"today\") {\n setMinValue(today);\n } else if (e.target.value === \"lastWeek\") {\n setMaxValue(today);\n setMinValue(subDays(today, 7));\n } else if (e.target.value === \"lastMonth\") {\n setMaxValue(today);\n setMinValue(subDays(today, 30));\n } else if (e.target.value === \"all\" || e.target.value === \"custom\") {\n setMinValue(null);\n setMaxValue(null);\n }\n setOption(e.target.value);\n };\n\n const onFromDateChange = (date) => {\n if (isValidDate(date)) {\n setMinValue(date);\n fromDateRef.current = date;\n if (date > new Date()) {\n setFromErr({\n isError: true,\n error: t(\"Futuredatesarenotallowed\"),\n });\n return;\n }\n if (!greaterThanInclusiveDate(maxValue, date)) {\n setFromErr({\n isError: true,\n error: t(\"FromDateshouldbelessthanorequaltoToDate\"),\n });\n } else {\n if (fromDateRef.current !== null) {\n setFromErr({\n isError: false,\n error: \"\",\n });\n }\n if (toDateRef.current !== null) {\n setToErr({\n isError: false,\n error: \"\",\n });\n }\n }\n } else if (!date) {\n setFromErr({\n isError: true,\n error: t(\"ThisFieldisrequired\"),\n });\n fromDateRef.current = null;\n return;\n } else if (!isValid(date)) {\n setFromErr({\n isError: true,\n error: t(\"Mustbeavaliddate\"),\n });\n fromDateRef.current = null;\n return;\n }\n };\n\n const onToDateChange = (date) => {\n if (isValidDate(date)) {\n setMaxValue(date);\n toDateRef.current = date;\n if (!greaterThanInclusiveDate(date, minValue)) {\n setToErr({\n isError: true,\n error: t(\"ToDateshouldbegreaterthanorequaltoFromDate\"),\n });\n } else {\n if (toDateRef.current !== null) {\n setToErr({\n isError: false,\n error: \"\",\n });\n }\n if (fromDateRef.current !== null) {\n setFromErr({\n isError: false,\n error: \"\",\n });\n }\n }\n } else if (!date) {\n setToErr({\n isError: true,\n error: t(\"ThisFieldisrequired\"),\n });\n toDateRef.current = null;\n return;\n } else if (!isValid(date)) {\n setToErr({\n isError: true,\n error: t(\"Mustbeavaliddate\"),\n });\n toDateRef.current = null;\n return;\n }\n };\n\n const handleBlur = (e) => {\n let myMinValue = dateFormat(new Date(), \"iii LLL dd yyyy HH:mm:ss xxxx\");\n let myMaxValue = dateFormat(new Date(), \"iii LLL dd yyyy HH:mm:ss xxxx\");\n //@ts-ignore\n if (minValue instanceof Date && !isNaN(minValue)) {\n myMinValue = dateFormat(minValue, \"iii LLL dd yyyy HH:mm:ss xxxx\");\n }\n //@ts-ignore\n if (maxValue instanceof Date && !isNaN(maxValue)) {\n myMaxValue = dateFormat(maxValue, \"iii LLL dd yyyy HH:mm:ss xxxx\");\n }\n\n if (option === \"today\") {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"equal\",\n value: myMinValue,\n id,\n option,\n columnName,\n },\n });\n } else if (\n (option === \"lastWeek\" ||\n option === \"lastMonth\" ||\n option === \"custom\") &&\n minValue instanceof Date &&\n maxValue instanceof Date &&\n //@ts-ignore\n !isNaN(minValue) &&\n //@ts-ignore\n !isNaN(maxValue) &&\n minValue <= maxValue\n ) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"between\",\n value: [myMinValue, myMaxValue],\n id,\n option,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n const propsToPassForSelect =\n option === \"custom\" ? { style: { width: \"40%\" } } : { fullWidth: true };\n\n useEffect(() => {\n if (!minValue) setMinValue(new Date());\n if (!maxValue) setMaxValue(new Date());\n }, [minValue, maxValue]);\n\n return (\n <Grid\n item\n xs={12}\n {...gridProps}\n sm={option === \"custom\" ? 12 : 6}\n md={option === \"custom\" ? 12 : 6}\n >\n <div\n style={{ width: \"100%\", display: \"flex\" }}\n tabIndex={1}\n onBlur={handleBlur}\n >\n <SelectRenderOnly\n label={t(columnName)}\n value={option}\n size=\"small\"\n touched={true}\n error={\"\"}\n handleChange={handleOptionChange}\n handleBlur={() => true}\n options={options}\n _optionsKey={\"dateRangePicker\"}\n optionsProps={{}}\n disableCaching={false}\n selectVariant=\"regular\"\n {...propsToPassForSelect}\n />\n {option === \"custom\" ? (\n <>\n <span\n style={{ width: \"1%\", textAlign: \"center\", marginTop: \"32px\" }}\n ></span>\n <KeyboardDatePicker\n format=\"dd/MM/yyyy\"\n label={t(\"FromDate\")}\n maxDate={new Date()}\n onChange={onFromDateChange}\n value={minValue ?? new Date()}\n sx={{ width: \"30%\" }}\n slots={{\n textField: TextField,\n }}\n slotProps={{\n textField: {\n placeholder: \"Start Date\",\n \"aria-label\": \"Select Date\",\n InputLabelProps: { shrink: true },\n error: fromErr.isError,\n helperText: fromErr.error,\n },\n actionBar: {\n actions: [\"today\", \"cancel\"],\n },\n }}\n />\n <span\n style={{ width: \"1%\", textAlign: \"center\", marginTop: \"32px\" }}\n ></span>\n <KeyboardDatePicker\n format=\"dd/MM/yyyy\"\n label={t(\"ToDate\")}\n // minDate={minValue}\n onChange={onToDateChange}\n value={maxValue ?? new Date()}\n sx={{ width: \"30%\" }}\n slots={{\n textField: TextField,\n }}\n slotProps={{\n textField: {\n placeholder: \"End Date\",\n \"aria-label\": \"Select Date\",\n InputLabelProps: { shrink: true },\n error: toErr.isError,\n helperText: toErr.error,\n },\n actionBar: {\n actions: [\"today\", \"cancel\"],\n },\n }}\n />\n </>\n ) : null}\n </div>\n </Grid>\n );\n};\n","import { useState, useEffect } from \"react\";\nimport FormControl from \"@mui/material/FormControl\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport Grid from \"@mui/material/Grid\";\nimport { InputLabel } from \"components/styledComponent/inputLabel\";\nimport { NumericFormat } from \"react-number-format\";\nimport { TextField } from \"components/styledComponent\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const NumberRange = ({\n filterValue,\n id,\n columnName,\n gridProps,\n dispatch,\n}) => {\n const { t } = useTranslation();\n const [minValue, setMinValue] = useState(\n Array.isArray(filterValue?.value) ? filterValue?.value[0] : null,\n );\n const [maxValue, setMaxValue] = useState(\n Array.isArray(filterValue?.value) ? filterValue?.value[1] : null,\n );\n const [error, setError] = useState(\"\");\n useEffect(() => {\n if (Number(minValue) > Number(maxValue) && maxValue?.length > 0) {\n setError(\"Min value is greater than max\");\n } else {\n setError(\"\");\n }\n }, [minValue, maxValue]);\n\n const handleBlur = (e) => {\n if (e.currentTarget.contains(e.relatedTarget)) {\n return;\n }\n if (\n !isNaN(Number(minValue)) &&\n !isNaN(Number(maxValue)) &&\n minValue?.length &&\n maxValue?.length &&\n Number(minValue) <= Number(maxValue)\n ) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"between\",\n value: [minValue, maxValue],\n id,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n return (\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\n <FormControl\n fullWidth={true}\n error={Boolean(error)}\n tabIndex={1}\n onBlur={handleBlur}\n sx={{\n \"& label.Mui-focused\": {\n color: \"var(--theme-color1)\",\n },\n }}\n >\n <InputLabel shrink={true} sx={{ fontSize: \"0.875rem !important\" }}>\n {t(columnName)}\n </InputLabel>\n <div\n style={{\n display: \"flex\",\n width: \"100%\",\n justifyContent: \"space-between\",\n }}\n >\n <NumericFormat\n thousandSeparator\n thousandsGroupStyle=\"lakh\"\n allowNegative={false}\n allowLeadingZeros={false}\n decimalScale={2}\n fixedDecimalScale\n value={minValue}\n customInput={TextField}\n placeholder=\"Min\"\n onValueChange={(value) => {\n if (!isNaN(Number(value.value))) {\n setMinValue(String(value.value));\n }\n }}\n style={{ width: \"48%\" }}\n />\n <NumericFormat\n thousandSeparator\n thousandsGroupStyle=\"lakh\"\n allowNegative={false}\n allowLeadingZeros={false}\n decimalScale={2}\n fixedDecimalScale\n value={maxValue}\n customInput={TextField}\n placeholder=\"Max\"\n onValueChange={(value) => {\n if (!isNaN(Number(value.value))) {\n setMaxValue(String(value.value));\n }\n }}\n style={{ width: \"48%\" }}\n />\n </div>\n {Boolean(error) ? <FormHelperText>{error}</FormHelperText> : null}\n </FormControl>\n </Grid>\n );\n};\n","import { useState, useEffect } from \"react\";\nimport FormControl from \"@mui/material/FormControl\";\nimport FormHelperText from \"@mui/material/FormHelperText\";\nimport Grid from \"@mui/material/Grid\";\nimport { InputLabel } from \"components/styledComponent/inputLabel\";\nimport { Input } from \"components/styledComponent/input\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const ValueRange = ({\n filterValue,\n id,\n columnName,\n gridProps,\n dispatch,\n}) => {\n const { t } = useTranslation();\n const [minValue, setMinValue] = useState(\n Array.isArray(filterValue?.value) ? filterValue?.value[0] : null,\n );\n const [maxValue, setMaxValue] = useState(\n Array.isArray(filterValue?.value) ? filterValue?.value[1] : null,\n );\n const [error, setError] = useState(\"\");\n useEffect(() => {\n if (Number(minValue) > Number(maxValue) && maxValue?.length > 0) {\n setError(\"Min value is greater than max\");\n } else {\n setError(\"\");\n }\n }, [minValue, maxValue]);\n\n const handleBlur = (e) => {\n if (e.currentTarget.contains(e.relatedTarget)) {\n return;\n }\n if (\n !isNaN(Number(minValue)) &&\n !isNaN(Number(maxValue)) &&\n minValue?.length &&\n maxValue?.length &&\n Number(minValue) <= Number(maxValue)\n ) {\n dispatch({\n type: \"setValue\",\n payload: {\n condition: \"between\",\n value: [minValue, maxValue],\n id,\n columnName,\n },\n });\n } else {\n dispatch({\n type: \"removeValue\",\n payload: {\n id,\n },\n });\n }\n };\n console.log(\"value range\", columnName);\n return (\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\n <FormControl\n fullWidth={true}\n error={Boolean(error)}\n tabIndex={1}\n onBlur={handleBlur}\n sx={{\n \"& label.Mui-focused\": {\n color: \"var(--theme-color1)\",\n },\n }}\n >\n <InputLabel shrink={true} sx={{ fontSize: \"0.875rem !important\" }}>\n {t(columnName)}\n </InputLabel>\n <div\n style={{\n display: \"flex\",\n width: \"100%\",\n justifyContent: \"space-between\",\n }}\n >\n <Input\n style={{ width: \"45%\" }}\n placeholder=\"min\"\n value={minValue}\n onChange={(e) => {\n if (!isNaN(Number(e.target.value))) {\n setMinValue(e.target.value.trim());\n }\n }}\n />\n <Input\n style={{ width: \"45%\" }}\n placeholder=\"max\"\n value={maxValue}\n onChange={(e) => {\n if (!isNaN(Number(e.target.value))) {\n setMaxValue(e.target.value.trim());\n }\n }}\n />\n </div>\n {Boolean(error) ? <FormHelperText>{error}</FormHelperText> : null}\n </FormControl>\n </Grid>\n );\n};\n","import { AmountRange } from \"./amountRange\";\nimport { DateRange } from \"./dateRange\";\nimport { NumberRange } from \"./numberRange\";\nimport { ValueRange } from \"./valueRange\";\nimport Grid from \"@mui/material/Grid\";\n\nexport const RangeFilter = (props) => {\n const { filterProps } = props;\n if (filterProps?.type === \"date\") {\n return <DateRange {...props} />;\n } else if (filterProps?.type === \"value\") {\n return <ValueRange {...props} />;\n } else if (filterProps?.type === \"number\") {\n return <NumberRange {...props} />;\n } else if (filterProps?.type === \"amount\") {\n return <AmountRange {...props} />;\n } else {\n return (\n <Grid item md={6} sm={6} xs={12}>\n Range Component Type not set\n </Grid>\n );\n }\n};\n","import { useState, useRef, useCallback } from \"react\";\r\nimport { ChipTextField } from \"components/styledComponent/textfield\";\r\nimport Chip from \"@mui/material/Chip\";\r\nimport Grid from \"@mui/material/Grid\";\r\n\r\nconst getChipProps = (index) => ({\r\n \"data-tag-index\": index,\r\n tabIndex: -1,\r\n key: index,\r\n});\r\n\r\nexport const MultiValueFilter = ({\r\n filterValue,\r\n id,\r\n columnName,\r\n gridProps,\r\n dispatch,\r\n}) => {\r\n const [text, setText] = useState(\"\");\r\n const [chips, setChips] = useState<any>(filterValue?.value ?? []);\r\n const [focusedTag, setFocusedTag] = useState(-1);\r\n const anchorElRef = useRef<any>(null);\r\n const inputRef = useRef<any>(null);\r\n\r\n const handleFocusTag = (event, direction) => {\r\n let nextTag = focusedTag;\r\n if (focusedTag === -1) {\r\n if (text === \"\" && direction === \"previous\") {\r\n nextTag = chips.length - 1;\r\n }\r\n } else {\r\n nextTag += direction === \"next\" ? 1 : -1;\r\n if (nextTag < 0) {\r\n nextTag = 0;\r\n }\r\n if (nextTag === chips.length) {\r\n nextTag = -1;\r\n }\r\n }\r\n setFocusedTag(nextTag);\r\n focusTag(nextTag);\r\n };\r\n\r\n const focusTag = useCallback((tagToFocus) => {\r\n if (tagToFocus === -1) {\r\n inputRef.current.focus();\r\n } else {\r\n anchorElRef.current\r\n .querySelector(`[data-tag-index=\"${tagToFocus}\"]`)\r\n .focus();\r\n }\r\n }, []);\r\n\r\n let startAdornment: any = null;\r\n if (Array.isArray(chips) && chips.length > 0) {\r\n startAdornment = chips.map((one, index) => {\r\n return (\r\n <Chip\r\n label={one}\r\n size=\"small\"\r\n onDelete={() =>\r\n setChips([\r\n ...chips.slice(index, index + 1),\r\n ...chips.slice(index + 1),\r\n ])\r\n }\r\n style={{ margin: \"4px 2px\" }}\r\n {...getChipProps(index)}\r\n />\r\n );\r\n });\r\n }\r\n const handleBlur = () => {\r\n if (Array.isArray(chips) && chips.length > 0) {\r\n dispatch({\r\n type: \"setValue\",\r\n payload: {\r\n condition: \"in\",\r\n value: chips,\r\n id,\r\n columnName,\r\n },\r\n });\r\n } else {\r\n dispatch({\r\n type: \"removeValue\",\r\n payload: {\r\n id,\r\n },\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\r\n <ChipTextField\r\n inputRef={inputRef}\r\n label={columnName}\r\n InputLabelProps={{ shrink: true }}\r\n onChange={(e) => setText(e.target.value)}\r\n onBlur={handleBlur}\r\n fullWidth\r\n value={text}\r\n InputProps={{\r\n startAdornment: startAdornment,\r\n ref: anchorElRef,\r\n }}\r\n onKeyDown={(event) => {\r\n if (\r\n focusedTag !== -1 &&\r\n [\"ArrowLeft\", \"ArrowRight\"].indexOf(event.key) === -1\r\n ) {\r\n setFocusedTag(-1);\r\n focusTag(-1);\r\n }\r\n if (event.which !== 299) {\r\n switch (event.key) {\r\n case \"Enter\": {\r\n if (Boolean(text)) {\r\n setChips((all) => [...all, text]);\r\n setText(\"\");\r\n }\r\n break;\r\n }\r\n case \"Backspace\": {\r\n if (text === \"\" && chips.length > 0) {\r\n const indexToRemove =\r\n focusedTag === -1 ? chips.length - 1 : focusedTag;\r\n const newChips = chips.slice();\r\n newChips.splice(indexToRemove, 1);\r\n setChips(newChips);\r\n }\r\n break;\r\n }\r\n case \"ArrowLeft\": {\r\n handleFocusTag(event, \"previous\");\r\n break;\r\n }\r\n case \"ArrowRight\": {\r\n handleFocusTag(event, \"next\");\r\n break;\r\n }\r\n }\r\n }\r\n }}\r\n />\r\n </Grid>\r\n );\r\n};\r\n\r\n/*\r\n\r\n*/\r\n","import { useState } from \"react\";\r\nimport { KeyboardDatePicker } from \"components/styledComponent/datetime\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { TextField } from \"components/styledComponent/textfield\";\r\n\r\nexport const ValueDateFilter = ({\r\n filterValue,\r\n id,\r\n columnName,\r\n gridProps,\r\n dispatch,\r\n}) => {\r\n const [value, setValue] = useState(filterValue?.value ?? \"\");\r\n\r\n const handleChange = (value) => {\r\n setValue(value);\r\n if (!isNaN(value)) {\r\n dispatch({\r\n type: \"setValue\",\r\n payload: {\r\n condition: \"equal\",\r\n value: value,\r\n id,\r\n columnName,\r\n },\r\n });\r\n } else {\r\n dispatch({\r\n type: \"removeValue\",\r\n payload: {\r\n id,\r\n },\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <Grid item xs={12} sm={6} md={6} {...gridProps}>\r\n <KeyboardDatePicker\r\n label={columnName}\r\n value={value === \"\" ? null : new Date(value)} //make sure to pass null when input is empty string\r\n onChange={handleChange}\r\n sx={{ width: \"100%\" }}\r\n slots={{\r\n textField: TextField,\r\n }}\r\n slotProps={{\r\n textField: {\r\n variant: \"standard\",\r\n InputLabelProps: {\r\n shrink: true,\r\n },\r\n },\r\n actionBar: {\r\n actions: [\"today\", \"cancel\"],\r\n },\r\n }}\r\n />\r\n </Grid>\r\n );\r\n};\r\n","import { FilterColumnType } from \"./types\";\r\nimport {\r\n ValueFilter,\r\n ValueDateFilter,\r\n OptionsFilter,\r\n RangeFilter,\r\n MultiValueFilter,\r\n} from \"./filters2\";\r\nimport { singletonFunctionRegisrationFactory } from \"components/utils\";\r\n\r\nconst optionsMethodNotFound = (fieldKey) => () => {\r\n console.log(`no method found for options at ${fieldKey}`);\r\n return [{ label: \"Oops error occured\", value: \"\" }];\r\n};\r\n\r\nexport const attachFilterComponentToMetaData = (\r\n filters: FilterColumnType[]\r\n) => {\r\n if (Array.isArray(filters)) {\r\n return filters.map((filter) => {\r\n const { filterComponentType, filterProps, ...others } = filter;\r\n switch (filterComponentType) {\r\n case \"valueDateFilter\": {\r\n return {\r\n ...others,\r\n Filter: ValueDateFilter,\r\n filterProps,\r\n };\r\n }\r\n case \"valueFilter\": {\r\n return {\r\n ...others,\r\n Filter: ValueFilter,\r\n filterProps,\r\n };\r\n }\r\n case \"multiValueFilter\": {\r\n return {\r\n ...others,\r\n Filter: MultiValueFilter,\r\n filterProps,\r\n };\r\n }\r\n case \"optionsFilter\": {\r\n //@ts-ignore\r\n const { options, ...filterOthers } = filterProps;\r\n if (typeof options === \"string\") {\r\n const myOptions = singletonFunctionRegisrationFactory.getFn(\r\n options ?? \"NOT_EXIST_OPTIONS_FN\",\r\n optionsMethodNotFound\r\n );\r\n return {\r\n ...others,\r\n Filter: OptionsFilter,\r\n filterProps: {\r\n options: myOptions,\r\n _optionsKey: options,\r\n ...filterOthers,\r\n },\r\n };\r\n } else {\r\n return {\r\n ...others,\r\n Filter: OptionsFilter,\r\n filterProps,\r\n };\r\n }\r\n }\r\n case \"rangeFilter\":\r\n return {\r\n ...others,\r\n Filter: RangeFilter,\r\n filterProps,\r\n };\r\n default:\r\n return {\r\n ...others,\r\n };\r\n }\r\n });\r\n }\r\n return [];\r\n};\r\n\r\nexport const formatSortBy = (sortBy = []) => {\r\n const formatted = sortBy.map((one: any, index) => ({\r\n ACCESSOR: one.id ?? \"\",\r\n VALUE: one?.desc ? \"desc\" : \"asc\",\r\n // seq: index + 1,\r\n }));\r\n return formatted;\r\n};\r\n\r\nexport const formatFilterBy = (filterBy = []) => {\r\n if (!Array.isArray(filterBy)) {\r\n filterBy = [filterBy];\r\n }\r\n const formatted = filterBy.map((one: any, index) => ({\r\n ACCESSOR: one.id,\r\n CONDITION: one.value.condition,\r\n VALUE: one.value.value,\r\n // ...one.value,\r\n }));\r\n return formatted;\r\n};\r\n\r\nexport const extractHiddenColumns = (columns) => {\r\n if (Array.isArray(columns)) {\r\n return columns.reduce<string[]>((accumulator, column) => {\r\n if (column.isHiddenColumn === true) {\r\n accumulator.push(column.accessor);\r\n }\r\n return accumulator;\r\n }, []);\r\n }\r\n return [];\r\n};\r\n","import { FC, useMemo, Fragment, useState, useCallback } from \"react\";\r\nimport { HeaderColumnCell } from \"./components/headerCell\";\r\nimport { DefaultCell } from \"./components/defaultCell\";\r\nimport { FooterCell, FooterCell1 } from \"./components/footerCell\";\r\nimport { DefaultColumnFilter } from \"./filter/defaultColumnFilter\";\r\nimport { GridTable } from \"./gridTable\";\r\nimport {\r\n fuzzyTextFilterFn,\r\n customText,\r\n filterGreaterThan,\r\n customInclude,\r\n} from \"./filters\";\r\nimport { useQuery } from \"react-query\";\r\nimport { Alert } from \"components/common/alert\";\r\nimport { attachFilterComponentToMetaData, extractHiddenColumns } from \"./utils\";\r\nimport { AmountProvider } from \"./amountContext\";\r\nimport { useTranslation } from \"react-i18next\";\r\nexport const ReportGrid: FC<any> = ({\r\n metaData: finalMetaData,\r\n maxHeight,\r\n initialState,\r\n title,\r\n options,\r\n hideFooter,\r\n showSerialNoColumn = false,\r\n onClose = null,\r\n reportName,\r\n dataFetcher = () => {\r\n return [];\r\n },\r\n dataTransformer = (data) => data,\r\n autoFetch = true,\r\n hideAmountIn = false,\r\n reportID,\r\n retrievalType,\r\n onClickActionEvent = () => {},\r\n otherAPIRequestPara = {},\r\n hideHeader = false,\r\n hideShowFiltersSwitch = false,\r\n defaultFilter = [],\r\n hideStatusBar = false,\r\n authState,\r\n retrievalComponent,\r\n openDrawerFilter = false,\r\n}) => {\r\n /* eslint-disable react-hooks/exhaustive-deps */\r\n\r\n const { t } = useTranslation();\r\n\r\n // added to hide selected columns from metadata\r\n const hiddenColumns = extractHiddenColumns(finalMetaData.columns);\r\n const metaData = useMemo(() => {\r\n return { ...finalMetaData, hiddenColumns };\r\n }, [hiddenColumns]);\r\n\r\n const translatedColumns = useMemo(() => {\r\n if (Array.isArray(metaData.columns)) {\r\n return metaData.columns.map((item) => {\r\n return { ...item, columnName: t(item.columnName) };\r\n });\r\n }\r\n }, [t]);\r\n const memoizedColumns = useMemo(() => {\r\n return [\r\n {\r\n columnName: t(\"SrNo\"),\r\n accessor: \"SRNO\",\r\n width: 100,\r\n type: \"default\",\r\n },\r\n ...translatedColumns,\r\n ];\r\n }, [t]);\r\n\r\n const memoizedFilters = useMemo(\r\n () =>\r\n openDrawerFilter\r\n ? attachFilterComponentToMetaData(metaData.filters)\r\n : metaData.filters,\r\n [],\r\n );\r\n const [autoFetcher, setAutoFetcher] = useState(autoFetch);\r\n const [queryFilters, setQueryFilters] = useState<any>([...defaultFilter]);\r\n\r\n const setQueryFilterWrapper = useCallback(\r\n (args) => {\r\n setQueryFilters(args);\r\n setAutoFetcher(true);\r\n },\r\n [setAutoFetcher, setQueryFilters],\r\n );\r\n\r\n const defaultColumn = useMemo(\r\n () => ({\r\n Header: HeaderColumnCell,\r\n Cell: DefaultCell,\r\n Footer: FooterCell,\r\n Footer1: FooterCell1,\r\n Filter: DefaultColumnFilter,\r\n Aggregated: DefaultCell,\r\n }),\r\n [],\r\n );\r\n\r\n const filterTypes = useMemo(\r\n () => ({\r\n fuzzyText: fuzzyTextFilterFn,\r\n customText: customText,\r\n filterGreaterThan: filterGreaterThan,\r\n customInclude: customInclude,\r\n }),\r\n [],\r\n );\r\n\r\n const { data, isFetching, isLoading, isError, error, refetch } = useQuery<\r\n any,\r\n any,\r\n any\r\n >(\r\n [dataFetcher, reportID, queryFilters, otherAPIRequestPara],\r\n () => dataFetcher(reportID, queryFilters, otherAPIRequestPara),\r\n {\r\n cacheTime: 0,\r\n enabled: autoFetcher,\r\n },\r\n );\r\n\r\n let rows = [];\r\n if (data) {\r\n rows = data.map((row, index) => ({ SRNO: index + 1, ...row }));\r\n }\r\n\r\n const onButtonActionHandel = useCallback(\r\n (index, id) => {\r\n // console.log(\">>onButtonActionHandel\");\r\n if (!isFetching && !isLoading && !isError && autoFetcher) {\r\n onClickActionEvent(index, id, data[index], queryFilters);\r\n }\r\n },\r\n [data],\r\n );\r\n\r\n return (\r\n <Fragment>\r\n {isError && (\r\n <Alert\r\n severity=\"error\"\r\n errorMsg={error?.error_msg ?? \"Unknown Error occured\"}\r\n errorDetail={error?.error_detail}\r\n />\r\n )}\r\n <AmountProvider>\r\n <GridTable\r\n columns={memoizedColumns}\r\n defaultColumn={defaultColumn}\r\n defaultHiddenColumns={metaData.hiddenColumns}\r\n data={rows}\r\n // data={dataTransformer(data) ?? []}\r\n maxHeight={maxHeight ?? 450}\r\n initialState={initialState}\r\n filterTypes={filterTypes}\r\n title={title + \" \"}\r\n options={options}\r\n loading={isFetching || isLoading}\r\n hideFooter={hideFooter}\r\n showSerialNoColumn={showSerialNoColumn}\r\n onClose={onClose}\r\n setQueryFilters={setQueryFilterWrapper}\r\n filterMeta={memoizedFilters}\r\n queryFilters={queryFilters}\r\n hideStatusBar={hideStatusBar}\r\n hideAmountIn={hideAmountIn}\r\n retrievalType={retrievalType}\r\n onButtonActionHandel={onButtonActionHandel}\r\n isOpenRetrievalDefault={!autoFetch}\r\n hideHeader={hideHeader}\r\n hideShowFiltersSwitch={hideShowFiltersSwitch}\r\n refetchData={() => refetch()}\r\n authState={authState}\r\n retrievalComponent={retrievalComponent}\r\n openDrawerFilter={openDrawerFilter}\r\n />\r\n </AmountProvider>\r\n </Fragment>\r\n );\r\n};\r\n","import { useMemo } from \"react\";\r\nimport TextField from \"@mui/material/TextField\";\r\n\r\nexport const NumberRangeColumnFilter = ({\r\n column: { filterValue = [], preFilteredRows, setFilter, id },\r\n}) => {\r\n const [min, max] = useMemo(() => {\r\n let min = preFilteredRows.length ? preFilteredRows[0].values[id] : 0;\r\n let max = preFilteredRows.length ? preFilteredRows[0].values[id] : 0;\r\n preFilteredRows.forEach((row) => {\r\n min = Math.min(row.values[id], min);\r\n max = Math.max(row.values[id], max);\r\n });\r\n return [min, max];\r\n }, [id, preFilteredRows]);\r\n\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"baseline\",\r\n }}\r\n >\r\n <TextField\r\n value={filterValue[0] || \"\"}\r\n type=\"number\"\r\n onChange={(e) => {\r\n const val = e.target.value;\r\n setFilter((old = []) => [\r\n val ? parseInt(val, 10) : undefined,\r\n old[1],\r\n ]);\r\n }}\r\n placeholder={`Min (${min})`}\r\n fullWidth\r\n size=\"small\"\r\n variant=\"outlined\"\r\n />\r\n <span>to</span>\r\n <TextField\r\n value={filterValue[1] || \"\"}\r\n type=\"number\"\r\n onChange={(e) => {\r\n const val = e.target.value;\r\n setFilter((old = []) => [\r\n old[0],\r\n val ? parseInt(val, 10) : undefined,\r\n ]);\r\n }}\r\n placeholder={`Max (${max})`}\r\n fullWidth\r\n size=\"small\"\r\n variant=\"outlined\"\r\n />\r\n </div>\r\n );\r\n};\r\n","import { useMemo } from \"react\";\nimport TextField from \"@mui/material/TextField\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport { useTranslation } from \"react-i18next\";\nexport const SelectColumnFilter = ({\n column: { filterValue, setFilter, preFilteredRows, id, multiple },\n}) => {\n // Calculate the options for filtering\n // using the preFilteredRows\n const { t } = useTranslation();\n const options = useMemo(() => {\n const options = new Set();\n preFilteredRows.forEach((row) => {\n options.add(row.values[id]);\n });\n return [...options.values()];\n }, [id, preFilteredRows]);\n\n if (multiple && !Array.isArray(filterValue)) {\n filterValue = [filterValue];\n }\n return (\n <TextField\n value={filterValue ?? \"\"}\n onChange={(e) => {\n setFilter(e.target.value || undefined);\n }}\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n select={true}\n SelectProps={{\n multiple: multiple,\n }}\n >\n <MenuItem key=\"default\" value=\"\">\n {t(\"All\")}\n </MenuItem>\n {options.map((option: any, i) => (\n <MenuItem key={i} value={option}>\n {option}\n </MenuItem>\n ))}\n </TextField>\n );\n};\n","import { useMemo } from \"react\";\r\nimport Slider from \"@mui/material/Slider\";\r\n\r\nexport const SliderColumnFilter = ({\r\n column: { filterValue, setFilter, preFilteredRows, id },\r\n}) => {\r\n // Calculate the min and max\r\n // using the preFilteredRows\r\n\r\n const [min, max] = useMemo(() => {\r\n let min = preFilteredRows.length ? preFilteredRows[0].values[id] : 0;\r\n let max = preFilteredRows.length ? preFilteredRows[0].values[id] : 0;\r\n preFilteredRows.forEach((row) => {\r\n min = Math.min(row.values[id], min);\r\n max = Math.max(row.values[id], max);\r\n });\r\n return [min, max];\r\n }, [id, preFilteredRows]);\r\n\r\n return (\r\n <Slider\r\n min={min}\r\n max={max}\r\n value={filterValue || min}\r\n onChange={(e, value) => {\r\n //@ts-ignore\r\n setFilter(parseInt(value));\r\n }}\r\n />\r\n );\r\n};\r\n","import { CellWrapper } from \"./cellWrapper\";\nimport { useAmountDivider } from \"../amountContext\";\nimport getCurrencySymbol from \"components/custom/getCurrencySymbol\";\nfunction formatCurrency(\n amount,\n symbol,\n currencyFormat = \"en-IN\",\n decimalCount = 2,\n symbolPosi = \"start\",\n) {\n const formattedAmount = new Intl.NumberFormat(currencyFormat, {\n minimumFractionDigits: decimalCount,\n }).format(amount);\n return `${symbol} ${formattedAmount}`;\n}\n\nexport const NumberCell = (props) => {\n const {\n value,\n column: { isVisibleCurrSymbol = true },\n } = props;\n\n let finaleSymbol = getCurrencySymbol(\"BDT\");\n\n if (Boolean(props?.column?.currencyRefColumn)) {\n const currencyCode =\n props?.row?.original?.[props?.column?.currencyRefColumn];\n if (props?.column?.isCurrencyCode) {\n if (Boolean(currencyCode)) {\n finaleSymbol = currencyCode;\n }\n } else {\n if (Boolean(currencyCode)) {\n finaleSymbol = getCurrencySymbol(currencyCode);\n }\n }\n }\n const divider = useAmountDivider() ?? 1;\n let result = `${formatCurrency(\n 0 / divider,\n isVisibleCurrSymbol ? finaleSymbol : \"\",\n )}`;\n if (value !== null && value !== \"\" && !isNaN(Number(value))) {\n result = `${formatCurrency(\n value / divider,\n isVisibleCurrSymbol ? finaleSymbol : \"\",\n )}`;\n }\n\n return <CellWrapper {...props}>{result}</CellWrapper>;\n};\n\nexport const NumberCell2 = (props) => {\n const { value } = props;\n let result = \"-\";\n if (value !== null && value !== \"\" && !isNaN(Number(value))) {\n result = `${value}`;\n }\n return <CellWrapper {...props}>{result}</CellWrapper>;\n};\n","import { useMemo } from \"react\";\r\n\r\nlet currencyFormatter = new Intl.NumberFormat(\"en-IN\", {\r\n minimumFractionDigits: 2,\r\n style: \"currency\",\r\n currency: \"INR\",\r\n});\r\n\r\nexport const FooterCellWithNumber = (props) => {\r\n const {\r\n rows,\r\n column: { id: columnName },\r\n } = props;\r\n const total = useMemo(\r\n () =>\r\n rows.reduce((sum, row) => Number(row.values?.[columnName] ?? 0) + sum, 0),\r\n [rows, columnName]\r\n );\r\n\r\n return `${isNaN(total) ? \"\" : currencyFormatter.format(total)}`;\r\n};\r\n","import { Fragment, useState, useMemo, FC, useEffect, useCallback } from \"react\";\nimport {\n useTable,\n useBlockLayout,\n useResizeColumns,\n useFilters,\n useGroupBy,\n useSortBy,\n usePagination,\n useAsyncDebounce,\n} from \"react-table\";\nimport Paper from \"@mui/material/Paper\";\nimport TableContainer from \"@mui/material/TableContainer\";\nimport Table from \"@mui/material/Table\";\nimport TableHead from \"@mui/material/TableHead\";\nimport TableRow from \"@mui/material/TableRow\";\nimport TableCell from \"@mui/material/TableCell\";\nimport TableBody from \"@mui/material/TableBody\";\nimport IconButton from \"@mui/material/IconButton\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport Typography from \"@mui/material/Typography\";\nimport LinearProgress from \"@mui/material/LinearProgress\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport GetAppIcon from \"@mui/icons-material/GetApp\";\nimport { useSequenceColumn } from \"../components/useSequence\";\nimport { TableFilterStatusBar } from \"../filterComponent\";\nimport { FixedSizeList } from \"react-window\";\nimport { AmountSelect } from \"../amountContext\";\nimport { Tooltip } from \"components/styledComponent/tooltip\";\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\nimport { Button, FormControlLabel, TablePagination } from \"@mui/material\";\nimport { Theme } from \"@mui/material/styles\";\nimport { TablePaginationActionsWithInput } from \"components/dataTable/tablePaginationToolbar\";\nimport { TableFilterComponent } from \"components/dataTable/tableFilterComponent\";\nimport { makeStyles } from \"@mui/styles\";\nimport { TableFilterStatusBar as TableFilterStatusBarDataTable } from \"components/dataTable/tableFilterStatusBar\";\nimport { useTranslation } from \"react-i18next\";\nimport { ReportExportScreen } from \"components/utils/reportExport/\";\nimport { AuthStateType } from \"components/types\";\n\nconst useStyles = makeStyles((theme: Theme) => ({\n root: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n background: \"var(--theme-color1)\",\n },\n title: {\n flex: \"1 1 100%\",\n color: \"var(--white)\",\n letterSpacing: \"1px\",\n fontSize: \"2rem\",\n },\n}));\n\ninterface GridTableType {\n columns: any;\n defaultColumn: any;\n data: any;\n maxHeight: number;\n // initialState?: any;\n filterTypes?: any;\n title?: any;\n // options?: any;\n loading: boolean;\n isError: boolean;\n hideFooter?: boolean;\n showSerialNoColumn?: boolean;\n onClose?: any;\n setQueryFilters?: any;\n filterMeta?: any;\n queryFilters?: any;\n hideAmountIn?: boolean;\n // retrievalType?: string;\n onButtonActionHandel?: any;\n isOpenRetrievalDefault?: boolean;\n printReferense?: any;\n hideHeader?: boolean;\n hideShowFiltersSwitch?: boolean;\n hideStatusBar?: boolean;\n refetchData?: any;\n onFetchData: any;\n pageSizes?: Array<any>;\n pageCount: number;\n totalRecords?: number;\n defaultPageSize?: any;\n defaultSortOrder?: any;\n defaultHiddenColumns?: any;\n enablePagination?: boolean;\n authState?: AuthStateType;\n}\n\nconst defaultMaxHeight = 300;\nconst defaultMaxHeightFilter = 450;\n\nconst RenderFooter = ({ footerGroup }) => {\n return (\n <TableRow {...footerGroup.getFooterGroupProps()} component=\"div\">\n {footerGroup.headers.map((column) => {\n return (\n <TableCell\n {...column.getFooterProps([\n {\n style: {\n textAlign: column?.alignment ?? \"unset\",\n display: \"block\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n padding: \"0px 20px 0px 10px\",\n lineHeight: \"34px\",\n // backgroundColor: \"rgb(239, 224, 224)\",\n backgroundColor: \"var(--theme-color5)\",\n // color: myColor,\n },\n },\n ])}\n component=\"div\"\n >\n {column.render(\"Footer\")}\n </TableCell>\n );\n })}\n </TableRow>\n );\n};\n\nexport const GridTable: FC<GridTableType> = ({\n columns,\n defaultColumn,\n data,\n maxHeight = defaultMaxHeight,\n // initialState = {},\n filterTypes,\n title,\n // options,\n loading = false,\n isError = false,\n hideFooter = false,\n showSerialNoColumn = false,\n onClose = null,\n setQueryFilters,\n filterMeta,\n queryFilters,\n hideAmountIn,\n // retrievalType,\n onButtonActionHandel,\n isOpenRetrievalDefault,\n hideHeader = false,\n hideShowFiltersSwitch,\n hideStatusBar,\n refetchData,\n pageSizes = [20, 30, 40],\n pageCount: controlledPageCount,\n totalRecords: controlledTotalRecords,\n onFetchData,\n defaultPageSize = 20,\n defaultSortOrder = [],\n defaultHiddenColumns = [],\n enablePagination = true,\n authState,\n}) => {\n const classes = useStyles();\n const [isOpenExport, setOpenExport] = useState(false);\n const { t } = useTranslation();\n // const [filters, setAllFilters] = useState([])\n\n const tableProps = useTable(\n {\n columns,\n data,\n defaultColumn,\n filterTypes,\n // initialState,\n onButtonActionHandel,\n autoResetGlobalFilter: false,\n autoResetFilters: false,\n autoResetSortBy: false,\n initialState: {\n pageIndex: 0,\n pageSize: defaultPageSize,\n hiddenColumns: defaultHiddenColumns,\n sortBy: defaultSortOrder,\n //filters: defaultFilter,\n },\n // ...options,\n manualPagination: true,\n pageCount: controlledPageCount,\n autoResetPage: false,\n disableGroupBy: true,\n manualFilters: true,\n // manualSortBy: true\n },\n useFilters,\n useGroupBy,\n useSortBy,\n useResizeColumns,\n useBlockLayout,\n useSequenceColumn(showSerialNoColumn),\n onButtonActionHandel,\n usePagination,\n );\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n footerGroups,\n rows,\n page,\n prepareRow,\n pageCount,\n pageOptions,\n nextPage,\n previousPage,\n canNextPage,\n canPreviousPage,\n totalColumnsWidth,\n setAllFilters,\n gotoPage,\n setPageSize,\n setSortBy,\n state: { filters, pageIndex, pageSize, sortBy },\n } = tableProps;\n\n const Rows = useCallback(\n ({ index, style }) => {\n if (page.length === 0) return;\n\n const row = page[index];\n prepareRow(row);\n return (\n <TableRow {...row.getRowProps({ style })} id={row.id} tabIndex={0}>\n {row.cells.map((cell) => {\n const { key } = cell.getCellProps();\n return cell.render(\"Cell\", { key });\n })}\n </TableRow>\n );\n },\n [prepareRow, page],\n );\n\n // const RenderRows = useCallback(\n // (props) => {\n // let { index, style } = props;\n // const row = rows[index];\n // prepareRow(row);\n // if (row?.isGrouped && row?.isExpanded) {\n // style = {\n // ...style,\n // backgroundColor: \"rgba(0, 0, 0, 0.04)\",\n // };\n // }\n // return (\n // <TableRow {...row.getRowProps({ style })} component=\"div\">\n // {row.cells.map((cell, index) => {\n // return cell.isAggregated\n // ? cell.render(\"Aggregated\")\n // : cell.render(\"Cell\", { index: index });\n // })}\n // </TableRow>\n // );\n // },\n // [prepareRow, rows]\n // );\n const onFetchDataDebounced = useAsyncDebounce(onFetchData, 500);\n const rowCount = useMemo(() => {\n return rows.reduce((cnt, item) => {\n if (!(item?.original?._hidden ?? false)) {\n ++cnt;\n }\n return cnt;\n }, 0);\n }, [rows]);\n\n const handleChangePage = (_, newPage) => {\n gotoPage(newPage);\n };\n const handleChangeRowsPerPage = (event) => {\n setPageSize(Number(event.target.value));\n };\n\n useEffect(() => {\n onFetchDataDebounced({ pageIndex, pageSize, sortBy, filters });\n }, [onFetchDataDebounced, pageIndex, pageSize, sortBy, filters]);\n return (\n <Fragment>\n <Paper\n style={{\n width: \"100%\",\n overflow: \"hidden\",\n marginBottom: \"8px\",\n display: hideHeader ? \"none\" : \"inherit\",\n }}\n className=\"not-printed\"\n >\n <Toolbar\n variant=\"dense\"\n style={{\n backgroundColor: \"var(--theme-color1)\",\n }}\n >\n <Typography variant=\"h5\" color=\"primary\">\n {title.trim()}\n </Typography>\n <div style={{ flexGrow: 1 }} />\n {/* <FilterComponent\n setQueryFilters={setQueryFilters}\n filterMeta={filterMeta}\n filterData={queryFilters}\n retrievalType={retrievalType}\n isOpenRetrievalDefault={isOpenRetrievalDefault}\n setShowFilters={setShowFilters}\n setAllFilters={setAllFilters}\n /> */}\n\n {/* adding table filter component */}\n {filterMeta && filterMeta.length ? (\n <TableFilterComponent\n setAllFilters={setAllFilters}\n filters={filters}\n filterMeta={filterMeta}\n gotoPage={gotoPage}\n setSortBy={setSortBy}\n classes={classes}\n />\n ) : null}\n\n {/* {typeof refetchData === \"function\" ? ( */}\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n //@ts-ignore\n onClick={() =>\n onFetchDataDebounced({ pageIndex, pageSize, sortBy, filters })\n }\n color=\"primary\"\n >\n <RefreshIcon />\n </IconButton>\n {/* ) : null} */}\n\n {!Boolean(hideAmountIn) ? <AmountSelect /> : null}\n {!loading && !isError && page.length > 0 ? (\n <FormControlLabel\n control={\n <Tooltip title={t(\"Showexportoptions\")} arrow={true}>\n <Button\n onClick={() => {\n setOpenExport(true);\n }}\n style={{\n marginTop: \"7px\",\n marginLeft: \"10px\",\n color: \"white\",\n }}\n disabled={loading}\n >\n {t(\"Export\")} <GetAppIcon />\n </Button>\n </Tooltip>\n }\n style={{ color: \"var(--white)\" }}\n label=\"\"\n />\n ) : null}\n\n {typeof onClose === \"function\" ? (\n <Tooltip title={t(\"Close\")} arrow={true}>\n <IconButton onClick={onClose} size=\"small\">\n <CloseIcon style={{ color: \"var(--white)\" }} />\n </IconButton>\n </Tooltip>\n ) : null}\n </Toolbar>\n\n {!hideStatusBar ? (\n <TableFilterStatusBar\n dense={true}\n setAllFilters={setQueryFilters}\n filters={queryFilters}\n />\n ) : null}\n {/* adding filter status bar */}\n {filters.length ? (\n <TableFilterStatusBarDataTable\n dense={true}\n setAllFilters={setAllFilters}\n filters={filters}\n gotoPage={gotoPage}\n setSortBy={setSortBy}\n />\n ) : null}\n </Paper>\n {loading && <LinearProgress color=\"secondary\" />}\n <Paper\n style={{\n width: \"100%\",\n overflow: \"hidden\",\n }}\n tabIndex={0}\n >\n <TableContainer\n sx={{\n position: \"relative\",\n height: filters.length ? \"67vh\" : \"73.5vh\",\n }}\n >\n <Table {...getTableProps()} size=\"small\" component=\"table\">\n <TableHead component=\"thead\">\n {headerGroups.map((headerGroup) => (\n <TableRow {...headerGroup.getHeaderGroupProps()} component=\"tr\">\n {headerGroup.headers.map((column) => {\n return (\n <TableCell\n {...column.getHeaderProps([\n {\n style: {\n display: \"flex\",\n padding: \"0px 10px\",\n },\n },\n ])}\n component=\"th\"\n align={column.alignment}\n >\n {column.render(\"Header\")}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableHead>\n {!loading && !isError ? (\n <TableBody {...getTableBodyProps({})} component=\"tbody\">\n <FixedSizeList\n height={filters.length ? 460 : 500}\n itemCount={page.length}\n itemSize={35}\n width={totalColumnsWidth + 10}\n >\n {Rows}\n </FixedSizeList>\n </TableBody>\n ) : null}\n\n {isError ? (\n <div\n style={{\n position: \"fixed\",\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(50%, 100%)\",\n fontStyle: \"italic\",\n color: \"rgba(133, 130, 130, 0.8)\",\n }}\n >\n {t(\"Somethingwenttowrong\")}\n </div>\n ) : null}\n\n {rows.length <= 0 && loading === false ? (\n <div\n style={{\n position: \"fixed\",\n left: \"50%\",\n top: \"50%\",\n transform: \"translate(50%, 100%)\",\n fontStyle: \"italic\",\n color: \"rgba(133, 130, 130, 0.8)\",\n }}\n >\n {t(\"Nodatafound\")}\n </div>\n ) : null}\n {/* \n {hideFooter ? null : (\n <TableHead\n component=\"div\"\n style={{\n boxShadow:\n \"0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)\",\n }}\n >\n\n <RenderFooter footerGroup={footerGroups[0]} />\n </TableHead>\n )} */}\n </Table>\n </TableContainer>\n {hideFooter ? null : enablePagination ? (\n <TablePagination\n sx={{\n display: \"flex\",\n overflowY: \"hidden\",\n \"& .MuiToolbar-root\": {\n display: \"flex\",\n alignItems: \"baseline\",\n transform: \"translateY(5.5px)\",\n },\n }}\n variant=\"body\"\n component=\"div\"\n rowsPerPageOptions={pageSizes}\n colSpan={3}\n count={isError ? 0 : Number(controlledTotalRecords)}\n rowsPerPage={Number(pageSize)}\n page={isError ? 0 : Number(pageIndex)}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n /**\n * remove labelDisplayedRows to show record count like 1-25 of 100\n * and adjust marginLeft in TablePaginationActionsWithInput div element\n */\n // labelDisplayedRows={() => null}\n ActionsComponent={TablePaginationActionsWithInput}\n />\n ) : (\n <TableCell\n style={{\n display: \"flex\",\n color: \"var(--theme-color1)\",\n fontWeight: \"bold\",\n padding: \"10px\",\n }}\n >\n Total No. of Records: {rowCount}\n </TableCell>\n )}\n {isOpenExport ? (\n <ReportExportScreen\n filters={filters}\n title={title.trim()}\n rows={rows}\n columns={columns}\n pageNumber={pageIndex}\n totalPageCount={pageOptions.length}\n onClose={() => {\n setOpenExport(false);\n }}\n authState={authState}\n />\n ) : null}\n </Paper>\n </Fragment>\n );\n};\n","import { FC, useMemo, Fragment, useState, useCallback } from \"react\";\nimport { HeaderColumnCell } from \"../components/headerCell\";\nimport { DefaultCell } from \"../components/defaultCell\";\nimport { FooterCell } from \"../components/footerCell\";\nimport { DefaultColumnFilter } from \"../filter/defaultColumnFilter\";\nimport { GridTable } from \"./serverGridTable\";\nimport {\n fuzzyTextFilterFn,\n customText,\n filterGreaterThan,\n customInclude,\n} from \"../filters\";\nimport { Alert } from \"components/common/alert\";\nimport { attachFilterComponentToMetaData, formatFilterBy } from \"../utils\";\nimport { AmountProvider } from \"../amountContext\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const ReportGrid: FC<any> = ({\n metaData,\n maxHeight,\n initialState,\n title,\n // options,\n hideFooter,\n showSerialNoColumn = false,\n onClose = null,\n reportName,\n dataTransformer = (data) => data,\n autoFetch = true,\n hideAmountIn = false,\n retrievalType,\n onClickActionEvent = () => {},\n hideHeader = false,\n hideShowFiltersSwitch = false,\n defaultFilter = [],\n hideStatusBar = false,\n data,\n loading,\n isError,\n error,\n pageCount,\n totalRecords,\n pageSizes,\n defaultPageSize,\n onFetchData,\n authState,\n}) => {\n /* eslint-disable react-hooks/exhaustive-deps */\n const { t } = useTranslation();\n const translatedColumns = useMemo(() => {\n if (Array.isArray(metaData.columns)) {\n return metaData.columns.map((item) => {\n return { ...item, columnName: t(item.columnName) };\n });\n }\n }, [t]);\n const memoizedColumns = useMemo(() => {\n return [\n {\n columnName: t(\"SrNo\"),\n accessor: \"ROW_SR_CD_\",\n width: 100,\n type: \"default\",\n },\n ...translatedColumns,\n ];\n }, [t, translatedColumns]);\n\n // const translatedFilters = useMemo(() => {\n // if (Array.isArray(metaData.filters)) {\n // return metaData.filters.map((item) => {\n // return { ...item, columnName: t(item.columnName) };\n // });\n // }\n // return metaData.filters ?? [];\n // }, [t]);\n\n // console.log(\"translatedFilters\", translatedFilters)\n\n const memoizedFilters = useMemo(\n () => attachFilterComponentToMetaData(metaData.filters),\n [metaData.filters],\n );\n\n const [autoFetcher, setAutoFetcher] = useState(autoFetch);\n const [queryFilters, setQueryFilters] = useState<any>([...defaultFilter]);\n\n const setQueryFilterWrapper = useCallback(\n (args) => {\n setQueryFilters(args);\n setAutoFetcher(true);\n },\n [setAutoFetcher, setQueryFilters],\n );\n\n const defaultColumn = useMemo(\n () => ({\n Header: HeaderColumnCell,\n Cell: DefaultCell,\n Footer: FooterCell,\n Filter: DefaultColumnFilter,\n Aggregated: DefaultCell,\n }),\n [],\n );\n\n const filterTypes = useMemo(\n () => ({\n fuzzyText: fuzzyTextFilterFn,\n customText: customText,\n filterGreaterThan: filterGreaterThan,\n customInclude: customInclude,\n }),\n [],\n );\n\n // if srno not coming from api uncomment below code and in above memoizedColumns update accessor: \"SRNO\"\n // let rows = [];\n // if (data) {\n // rows = data.map((row, index) => ({ SRNO: index + 1, ...row }));\n // }\n\n const onButtonActionHandel = useCallback(\n (index, id) => {\n // console.log(\">>onButtonActionHandel\");\n if (!loading && !isError && autoFetcher) {\n onClickActionEvent(index, id, data[index]);\n }\n },\n [data],\n );\n\n return (\n <Fragment>\n {isError && (\n <Alert\n severity=\"error\"\n errorMsg={error?.error_msg ?? \"Unknown Error occured\"}\n errorDetail={error?.error_detail}\n />\n )}\n <AmountProvider>\n <GridTable\n columns={memoizedColumns}\n defaultColumn={defaultColumn}\n defaultHiddenColumns={metaData.hiddenColumns}\n // data={rows}\n data={dataTransformer(data) ?? []}\n maxHeight={maxHeight ?? 450}\n // initialState={initialState} // removing initialState for groupBy and others\n filterTypes={filterTypes}\n title={title + \" \"}\n // options={options} // disabling options like groupby and others for server side pagination\n loading={loading}\n isError={isError}\n hideFooter={\n typeof hideFooter === \"string\" && hideFooter === \"N\"\n ? false\n : Boolean(hideFooter)\n }\n showSerialNoColumn={showSerialNoColumn}\n onClose={onClose}\n setQueryFilters={setQueryFilterWrapper}\n // filterMeta={metaData.filters}\n filterMeta={memoizedFilters}\n queryFilters={queryFilters}\n hideStatusBar={hideStatusBar}\n hideAmountIn={hideAmountIn}\n // retrievalType={retrievalType}\n onButtonActionHandel={onButtonActionHandel}\n isOpenRetrievalDefault={!autoFetch}\n hideHeader={hideHeader}\n hideShowFiltersSwitch={hideShowFiltersSwitch}\n onFetchData={onFetchData}\n totalRecords={totalRecords}\n pageSizes={pageSizes}\n pageCount={pageCount}\n defaultPageSize={defaultPageSize}\n authState={authState}\n />\n </AmountProvider>\n </Fragment>\n );\n};\n","import React, { useCallback, useMemo, useRef, useState } from \"react\";\nimport { ReportGrid } from \"./serverGridParent\";\nimport { useMutation } from \"react-query\";\nimport { extractHiddenColumns, formatFilterBy, formatSortBy } from \"../utils\";\nimport { useTranslation } from \"react-i18next\";\nimport { AuthStateType } from \"components/types\";\n\ntype TReportWrapper = {\n reportID: string;\n reportName: string;\n metaData: any;\n getAPIFn: any;\n otherAPIRequestPara: any;\n maxHeight: number;\n onClickActionEvent: Function;\n authState?: AuthStateType;\n};\n\ntype TApiResponse = {\n data?: {\n REPORT_DATA: any;\n COUNT?: number;\n };\n};\n\nexport const ReportWrapper: React.FC<TReportWrapper> = ({\n reportID,\n reportName,\n metaData,\n getAPIFn,\n otherAPIRequestPara,\n maxHeight,\n onClickActionEvent,\n authState,\n}) => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const [error, setError] = useState(null);\n const [totalRecords, setTotalRecords] = useState(0);\n const [pageCount, setPageCount] = useState(0);\n const fetchOptions = useRef<any>(null);\n\n const mutation: any = useMutation<TApiResponse, any>(getAPIFn, {\n onError: (error: any) => {\n setError(error);\n },\n onSuccess: (result) => {\n setData(result?.[0].REPORT_DATA);\n setPageCount(\n Math.ceil(\n Number(result?.[0].COUNT ?? 1) /\n Number(fetchOptions.current?.pageSize ?? 20),\n ),\n );\n setTotalRecords(Number(result?.[0].COUNT ?? 1));\n },\n });\n\n const fetchData = useCallback(\n ({ pageSize, pageIndex, filters, sortBy }) => {\n const startRow = Number(pageSize) * Number(pageIndex) + 1;\n const endRow = Number(startRow) + Number(pageSize) - 1;\n let childFilter = formatFilterBy(filters);\n let childSortBy = formatSortBy(sortBy);\n\n const requestPara = {\n reportID,\n APIRequestPara: {\n FROM_ROW: startRow,\n TO_ROW: endRow,\n FILTER_CONDITIONS: childFilter,\n ORDERBY_COLUMNS: childSortBy,\n IS_PAGE: true,\n ...otherAPIRequestPara,\n },\n };\n fetchOptions.current = { pageSize };\n mutation.mutate(requestPara);\n },\n [setTotalRecords, setData],\n );\n\n // added to hide selected columns from metadata\n const hiddenColumns = extractHiddenColumns(metaData.columns);\n const transformedMetadataWithHiddenColumns = useMemo(() => {\n return { ...metaData, hiddenColumns };\n }, [hiddenColumns]);\n\n return (\n <ReportGrid\n metaData={transformedMetadataWithHiddenColumns}\n maxHeight={maxHeight}\n reportName={reportName}\n title={t(metaData.title)}\n hideFooter={metaData.hideFooter}\n hideAmountIn={metaData.hideAmountIn}\n // removing retrievalType for server side pagination\n // retrievalType={metaData.retrievalType}\n onClickActionEvent={onClickActionEvent}\n // removing option for groupBy for server side pagination\n // initialState={{\n // groupBy: metaData?.groupBy ?? [],\n // }}\n // options={{\n // disableGroupBy: metaData.disableGroupBy,\n // }}\n // autoFetch={metaData?.autoFetch ?? true}\n autoFetch={true} // setting autoFetch true since we are not using retrieval box for server side pagination\n data={data}\n loading={mutation.isLoading}\n isError={mutation.isError}\n error={error}\n pageCount={pageCount}\n totalRecords={totalRecords}\n pageSizes={\n metaData?.pageSize ?? [\n 25, 50, 100, 250, 500, 2500, 5000, 10000, 50000, 100000,\n ]\n }\n // pageSizes={metaData?.pageSize ?? [15, 25, 50]}\n defaultPageSize={metaData.defaultPageSize ?? 25}\n onFetchData={fetchData}\n authState={authState}\n />\n );\n};\n\n// export default ReportWrapper;\n","import { useTheme } from \"@mui/material\";\r\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\r\nimport {\r\n cloneElement,\r\n createContext,\r\n forwardRef,\r\n useContext,\r\n useEffect,\r\n useRef,\r\n Children,\r\n ReactNode,\r\n} from \"react\";\r\nimport { VariableSizeList } from \"react-window\";\r\n\r\nconst LISTBOX_PADDING = 8;\r\n\r\nconst renderRow = (props) => {\r\n const { data, index, style } = props;\r\n return cloneElement(data[index], {\r\n style: {\r\n ...style,\r\n top: style.top + LISTBOX_PADDING,\r\n },\r\n });\r\n};\r\n\r\nconst OuterElementContext = createContext({});\r\n\r\nconst OuterElementType = forwardRef<HTMLDivElement>((props, ref) => {\r\n const outerProps = useContext(OuterElementContext);\r\n return <div ref={ref} {...props} {...outerProps} />;\r\n});\r\n\r\nconst useResetCache = (data) => {\r\n const ref = useRef<VariableSizeList>(null);\r\n useEffect(() => {\r\n if (ref.current !== null) {\r\n ref.current.resetAfterIndex(0, true);\r\n }\r\n }, [data]);\r\n return ref;\r\n};\r\n\r\ninterface ListBoxComponentTypes {\r\n children?: ReactNode;\r\n}\r\n\r\nexport const ListBoxComponent = forwardRef<\r\n HTMLDivElement,\r\n ListBoxComponentTypes\r\n>((props, ref) => {\r\n const { children, ...other } = props;\r\n const itemData = Children.toArray(children);\r\n const theme = useTheme();\r\n const smUp = useMediaQuery(theme.breakpoints.up(\"sm\"), { noSsr: true });\r\n const itemCount = itemData.length;\r\n const itemSize = smUp ? 36 : 48;\r\n\r\n const getChildSize = () => {\r\n return itemSize;\r\n };\r\n const getHeight = () => {\r\n if (itemCount > 8) {\r\n return 8 * itemSize;\r\n }\r\n return itemData.map(getChildSize).reduce((a, b) => a + b, 0);\r\n };\r\n const gridRef = useResetCache(itemCount);\r\n return (\r\n <div ref={ref}>\r\n <OuterElementContext.Provider value={other}>\r\n <VariableSizeList\r\n itemData={itemData}\r\n height={getHeight() + 2 * LISTBOX_PADDING}\r\n width=\"100%\"\r\n ref={gridRef}\r\n outerElementType={OuterElementType}\r\n innerElementType=\"ul\"\r\n itemSize={getChildSize}\r\n overscan={5}\r\n itemCount={itemCount}\r\n >\r\n {renderRow}\r\n </VariableSizeList>\r\n </OuterElementContext.Provider>\r\n </div>\r\n );\r\n});\r\n","import { FC, useEffect, useRef, useCallback } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport TextareaAutosize, {\r\n TextareaAutosizeProps,\r\n} from \"@mui/material/TextareaAutosize\";\r\n\r\nimport InputAdornment from \"@mui/material/InputAdornment\";\r\nimport FormControl from \"@mui/material/FormControl\";\r\nimport InputLabel from \"@mui/material/InputLabel\";\r\nimport FormHelperText from \"@mui/material/FormHelperText\";\r\n\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport CircularProgress, {\r\n CircularProgressProps,\r\n} from \"@mui/material/CircularProgress\";\r\nimport { Merge } from \"../types\";\r\n\r\ninterface MyGridExtendedProps {\r\n maxLength?: number;\r\n GridProps?: GridProps;\r\n StartAdornment?: string;\r\n EndAdornment?: string;\r\n CircularProgressProps?: CircularProgressProps;\r\n enableGrid: boolean;\r\n label: string;\r\n}\r\n\r\ntype MyTextareaAutosizeAllProps = Merge<\r\n TextareaAutosizeProps,\r\n MyGridExtendedProps\r\n>;\r\n\r\nexport type MyTextareaAutosizeFieldProps = UseFieldHookProps &\r\n MyTextareaAutosizeAllProps;\r\n\r\nconst MyTextareaAutosize: FC<MyTextareaAutosizeFieldProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n postValidationSetCrossFieldValues,\r\n runValidationOnDependentFieldsChange,\r\n runPostValidationHookAlways,\r\n shouldExclude,\r\n isReadOnly,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n GridProps,\r\n CircularProgressProps,\r\n enableGrid,\r\n StartAdornment,\r\n EndAdornment,\r\n //@ts-ignore\r\n isFieldFocused,\r\n maxLength = -1,\r\n label,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n ...others\r\n}) => {\r\n const {\r\n value,\r\n error,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n validationRunning,\r\n fieldKey,\r\n name,\r\n excluded,\r\n readOnly,\r\n incomingMessage,\r\n whenToRunValidation,\r\n runValidation,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n\r\n const customHandleChange = useCallback(\r\n (e) => {\r\n handleChange(e, e.target?.formattedValue ?? undefined);\r\n },\r\n [handleChange]\r\n );\r\n\r\n const focusRef = useRef();\r\n useEffect(() => {\r\n if (isFieldFocused) {\r\n //@ts-ignore\r\n setTimeout(() => {\r\n //@ts-ignore\r\n focusRef?.current?.focus?.();\r\n }, 1);\r\n }\r\n }, [isFieldFocused]);\r\n\r\n useEffect(() => {\r\n if (incomingMessage !== null && typeof incomingMessage === \"object\") {\r\n const { value } = incomingMessage;\r\n if (value !== \"DEFAULT_VALUE\") {\r\n handleChange(value);\r\n }\r\n if (whenToRunValidation === \"onBlur\") {\r\n runValidation({ value: value }, true);\r\n }\r\n }\r\n }, [incomingMessage, handleChange, runValidation, whenToRunValidation]);\r\n\r\n if (excluded) {\r\n return null;\r\n }\r\n let myError = error;\r\n\r\n let myTouch = touched;\r\n\r\n const isError = myTouch && Boolean(myError);\r\n\r\n const result = (\r\n <FormControl disabled={isSubmitting}>\r\n <InputLabel>{label}</InputLabel>\r\n <TextareaAutosize\r\n {...others}\r\n key={fieldKey}\r\n id={fieldKey}\r\n name={name}\r\n value={value}\r\n //@ts-ignore\r\n InputProps={{\r\n endAdornment: validationRunning ? (\r\n <InputAdornment position=\"end\">\r\n <CircularProgress\r\n color=\"primary\"\r\n variant=\"indeterminate\"\r\n {...CircularProgressProps}\r\n />\r\n </InputAdornment>\r\n ) : Boolean(EndAdornment) ? (\r\n EndAdornment\r\n ) : null,\r\n startAdornment: Boolean(StartAdornment) ? (\r\n <InputAdornment position=\"start\">{StartAdornment}</InputAdornment>\r\n ) : null,\r\n }}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n inputRef={focusRef}\r\n onChange={(e) => {\r\n if (maxLength === -1) {\r\n customHandleChange(e);\r\n } else if (e.target.value.length <= maxLength) {\r\n customHandleChange(e);\r\n }\r\n }}\r\n inputProps={{\r\n readOnly: readOnly,\r\n tabIndex: readOnly ? -1 : undefined,\r\n }}\r\n onBlur={handleBlur}\r\n disabled={isSubmitting}\r\n />\r\n <FormHelperText>{isError ? error : \"\"}</FormHelperText>\r\n </FormControl>\r\n );\r\n if (Boolean(enableGrid)) {\r\n return <Grid {...GridProps}>{result}</Grid>;\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MyTextareaAutosize;\r\n","import { FC, useEffect } from \"react\";\r\nimport {\r\n useField,\r\n UseFieldHookProps,\r\n transformDependentFieldsState,\r\n} from \"packages/form\";\r\nimport { GridProps } from \"@mui/material/Grid\";\r\n\r\ninterface MyGridExtendedProps {\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n setValueOnDependentFieldsChange?: any;\r\n}\r\n\r\nexport type MyHiddenFieldProps = UseFieldHookProps & MyGridExtendedProps;\r\n\r\nconst MyHiddenField: FC<MyHiddenFieldProps> = ({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n setValueOnDependentFieldsChange,\r\n dependentFields,\r\n}) => {\r\n const { handleBlur, handleChange, dependentValues, incomingMessage } =\r\n useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n });\r\n //set touch property to true of the field\r\n useEffect(() => {\r\n handleBlur();\r\n }, [handleBlur]);\r\n\r\n useEffect(() => {\r\n if (typeof setValueOnDependentFieldsChange === \"function\") {\r\n let result = setValueOnDependentFieldsChange(\r\n transformDependentFieldsState(dependentValues)\r\n );\r\n if (result !== undefined || result !== null) {\r\n handleChange(result);\r\n }\r\n }\r\n }, [dependentValues, handleChange, setValueOnDependentFieldsChange]);\r\n\r\n useEffect(() => {\r\n if (incomingMessage !== null && typeof incomingMessage === \"object\") {\r\n const { value } = incomingMessage;\r\n if (Boolean(value) || value === \"\") {\r\n handleChange(value);\r\n }\r\n }\r\n }, [incomingMessage, handleChange]);\r\n\r\n return null;\r\n};\r\n\r\nexport default MyHiddenField;\r\n","// import { makeStyles, Theme, createStyles } from \"@material-ui/core/styles\";\r\nimport { makeStyles, createStyles } from \"@mui/styles\";\r\nimport { Theme } from \"@mui/material/styles\";\r\n\r\nexport const useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n cardHeader: {\r\n padding: theme.spacing(1, 2),\r\n },\r\n list: {\r\n width: 200,\r\n height: 230,\r\n backgroundColor: theme.palette.background.paper,\r\n overflow: \"auto\",\r\n },\r\n button: {\r\n margin: theme.spacing(0.5, 0),\r\n },\r\n })\r\n);\r\n","import { useState, FC, Fragment, useEffect } from \"react\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport List from \"@mui/material/List\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardHeader from \"@mui/material/CardHeader\";\r\nimport ListItem from \"@mui/material/ListItem\";\r\nimport ListItemText from \"@mui/material/ListItemText\";\r\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Divider from \"@mui/material/Divider\";\r\nimport FormHelperText from \"@mui/material/FormHelperText\";\r\nimport { useStyles } from \"./style\";\r\nimport { OptionsProps } from \"../types\";\r\nimport { Typography } from \"@mui/material\";\r\n\r\nconst not = (a: OptionsProps[], b: OptionsProps[]) => {\r\n return a.filter(\r\n (one) => b.findIndex((current) => current?.value === one?.value) < 0\r\n );\r\n};\r\nconst not2 = (b: any[], a: OptionsProps[]) =>\r\n b.filter((one) => a.findIndex((current) => current?.value === one) < 0);\r\n\r\nconst not3 = (b: any[], a: any[]) =>\r\n b.filter((one) => a.findIndex((current) => current === one) < 0);\r\n\r\nconst union = (a: any[], b: OptionsProps[]) => {\r\n return [\r\n ...a,\r\n ...not3(\r\n b.map((one) => one?.value),\r\n a\r\n ),\r\n ];\r\n};\r\n\r\nconst intersection = (a: any[], b: OptionsProps[]) => {\r\n let result = a.filter(\r\n (value) => b.findIndex((one) => one?.value === value) !== -1\r\n );\r\n let result2 = b.filter((one) => result.indexOf(one?.value) >= 0);\r\n return result2;\r\n};\r\n\r\nexport interface TransferListProps {\r\n label?: string;\r\n name?: string;\r\n leftOptions: OptionsProps[];\r\n rightOptions: OptionsProps[];\r\n leftOptionsLabel: string;\r\n rightOptionsLabel: string;\r\n valueSide: \"left\" | \"right\";\r\n disabled?: boolean;\r\n readOnly?: boolean;\r\n error?: boolean;\r\n helperText?: string | null;\r\n handleChange?: any;\r\n handleBlur?: any;\r\n}\r\n\r\nexport const TransferList: FC<TransferListProps> = ({\r\n label = \"\",\r\n leftOptions,\r\n rightOptions,\r\n leftOptionsLabel,\r\n rightOptionsLabel,\r\n valueSide,\r\n disabled = false,\r\n error = false,\r\n readOnly = false,\r\n helperText = \"\",\r\n handleChange = () => {},\r\n handleBlur = () => {},\r\n}) => {\r\n const classes = useStyles();\r\n const [checked, setChecked] = useState<any[]>([]);\r\n const [left, setLeft] = useState<OptionsProps[]>(leftOptions ?? []);\r\n const [right, setRight] = useState<OptionsProps[]>(rightOptions ?? []);\r\n\r\n const leftChecked = intersection(checked, left);\r\n const rightChecked = intersection(checked, right);\r\n\r\n /*eslint-disable react-hooks/exhaustive-deps*/\r\n useEffect(() => {\r\n setLeft(leftOptions);\r\n setRight(rightOptions);\r\n if (valueSide === \"left\") {\r\n handleChange(leftOptions.map((one) => one.value));\r\n } else {\r\n handleChange(rightOptions.map((one) => one.value));\r\n }\r\n }, [leftOptions, rightOptions]);\r\n\r\n const handleToggle = (value: number) => () => {\r\n if (readOnly) {\r\n return;\r\n }\r\n const currentIndex = checked.indexOf(value);\r\n const newChecked = [...checked];\r\n\r\n if (currentIndex === -1) {\r\n newChecked.push(value);\r\n } else {\r\n newChecked.splice(currentIndex, 1);\r\n }\r\n\r\n setChecked(newChecked);\r\n };\r\n\r\n const numberOfChecked = (items: OptionsProps[]) =>\r\n intersection(checked, items).length;\r\n\r\n const handleToggleAll = (items: OptionsProps[]) => () => {\r\n if (readOnly) {\r\n return;\r\n }\r\n if (numberOfChecked(items) === items.length) {\r\n setChecked(not2(checked, items));\r\n } else {\r\n setChecked(union(checked, items));\r\n }\r\n };\r\n\r\n const handleCheckedRight = () => {\r\n if (readOnly) {\r\n return;\r\n }\r\n let rightResult = right.concat(leftChecked);\r\n let leftResult = not(left, leftChecked);\r\n setChecked(not2(checked, leftChecked));\r\n setLeft(leftResult);\r\n setRight(rightResult);\r\n if (valueSide === \"left\") {\r\n handleChange(leftResult.map((one) => one.value));\r\n } else {\r\n handleChange(rightResult.map((one) => one.value));\r\n }\r\n };\r\n\r\n const handleCheckedLeft = () => {\r\n if (readOnly) {\r\n return;\r\n }\r\n let leftResult = left.concat(rightChecked);\r\n let rightResult = not(right, rightChecked);\r\n setChecked(not2(checked, rightChecked));\r\n setLeft(leftResult);\r\n setRight(rightResult);\r\n if (valueSide === \"left\") {\r\n handleChange(leftResult.map((one) => one.value));\r\n } else {\r\n handleChange(rightResult.map((one) => one.value));\r\n }\r\n };\r\n\r\n const customList = (title: string, items: OptionsProps[], error: boolean) => {\r\n return (\r\n <Card style={error ? { borderBottom: \"2px solid #f44336\" } : undefined}>\r\n <CardHeader\r\n className={classes.cardHeader}\r\n avatar={\r\n <Checkbox\r\n onClick={handleToggleAll(items)}\r\n checked={\r\n numberOfChecked(items) === items.length && items.length !== 0\r\n }\r\n indeterminate={\r\n numberOfChecked(items) !== items.length &&\r\n numberOfChecked(items) !== 0\r\n }\r\n disabled={items.length === 0 || disabled}\r\n inputProps={{ \"aria-label\": \"all items selected\" }}\r\n />\r\n }\r\n title={title}\r\n subheader={`${numberOfChecked(items)}/${items.length} selected`}\r\n />\r\n <Divider />\r\n <List className={classes.list} dense component=\"div\" role=\"list\">\r\n {items.map((one) => {\r\n return (\r\n <ListItem\r\n key={one.value}\r\n role=\"listitem\"\r\n button\r\n onClick={handleToggle(one.value)}\r\n dense={true}\r\n style={{ padding: \"0px 16px\" }}\r\n disabled={disabled}\r\n >\r\n <ListItemIcon>\r\n <Checkbox\r\n style={{ padding: \"0px 8px\" }}\r\n checked={checked.indexOf(one.value) !== -1}\r\n tabIndex={-1}\r\n disableRipple\r\n disabled={disabled}\r\n />\r\n </ListItemIcon>\r\n <ListItemText id={one.value} primary={one.label} />\r\n </ListItem>\r\n );\r\n })}\r\n <ListItem />\r\n </List>\r\n </Card>\r\n );\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Typography variant=\"h6\">{label}</Typography>\r\n <Grid\r\n container\r\n spacing={2}\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n tabIndex={0}\r\n onBlur={(e) => {\r\n //@ts-ignore\r\n if (!e.currentTarget.contains(e.relatedTarget)) {\r\n handleBlur(e);\r\n }\r\n }}\r\n >\r\n <Grid item xs={5} md={5} sm={5}>\r\n {customList(leftOptionsLabel, left, error)}\r\n </Grid>\r\n <Grid item xs={2} md={2} sm={2}>\r\n <Grid container direction=\"column\" alignItems=\"center\">\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n className={classes.button}\r\n onClick={handleCheckedRight}\r\n disabled={leftChecked.length === 0 || disabled}\r\n aria-label=\"move selected right\"\r\n >\r\n &gt;\r\n </Button>\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n className={classes.button}\r\n onClick={handleCheckedLeft}\r\n disabled={rightChecked.length === 0 || disabled}\r\n aria-label=\"move selected left\"\r\n >\r\n &lt;\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={5} md={5} sm={5}>\r\n {customList(rightOptionsLabel, right, error)}\r\n </Grid>\r\n </Grid>\r\n <FormHelperText disabled={disabled} error={error}>\r\n {helperText}\r\n </FormHelperText>\r\n </Fragment>\r\n );\r\n};\r\n","import { FC, useState } from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport { OptionsProps, Merge, dependentOptionsFn } from \"../types\";\r\nimport { useOptionsFetcher } from \"../utils\";\r\nimport { TransferList, TransferListProps } from \"./transferList\";\r\n\r\ninterface extendedFieldProps extends UseFieldHookProps {\r\n leftOptions?: OptionsProps[] | dependentOptionsFn;\r\n rightOptions?: OptionsProps[] | dependentOptionsFn;\r\n _leftOptionsKey?: string;\r\n _rightOptionsKey?: string;\r\n disableCaching?: boolean;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n}\r\nexport type MyAllTransferListProps = Merge<\r\n TransferListProps,\r\n extendedFieldProps\r\n>;\r\n\r\nexport const MyTransferList: FC<MyAllTransferListProps> = ({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n label,\r\n validate,\r\n validationRun,\r\n shouldExclude,\r\n isReadOnly,\r\n postValidationSetCrossFieldValues,\r\n runPostValidationHookAlways,\r\n dependentFields,\r\n leftOptions,\r\n rightOptions,\r\n GridProps,\r\n enableGrid,\r\n //@ts-ignore\r\n isFieldFocused,\r\n runValidationOnDependentFieldsChange,\r\n _leftOptionsKey,\r\n _rightOptionsKey,\r\n disableCaching,\r\n leftOptionsLabel,\r\n rightOptionsLabel,\r\n valueSide,\r\n}) => {\r\n const {\r\n error,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n runValidation,\r\n isSubmitting,\r\n fieldKey,\r\n name,\r\n dependentValues,\r\n excluded,\r\n incomingMessage,\r\n whenToRunValidation,\r\n readOnly,\r\n formState,\r\n setIncomingMessage,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n });\r\n const [_optionsLeft, setLeftOptions] = useState<OptionsProps[]>([]);\r\n const [_optionsRight, setRightOptions] = useState<OptionsProps[]>([]);\r\n\r\n const { loadingOptions: leftLoadingOptions } = useOptionsFetcher(\r\n formState,\r\n leftOptions,\r\n setLeftOptions,\r\n handleChange,\r\n dependentValues,\r\n incomingMessage,\r\n runValidation,\r\n whenToRunValidation,\r\n _leftOptionsKey,\r\n disableCaching,\r\n setIncomingMessage,\r\n true,\r\n \"\",\r\n false\r\n );\r\n const { loadingOptions: rightLoadingOptions } = useOptionsFetcher(\r\n formState,\r\n rightOptions,\r\n setRightOptions,\r\n handleChange,\r\n dependentValues,\r\n incomingMessage,\r\n runValidation,\r\n whenToRunValidation,\r\n _rightOptionsKey,\r\n disableCaching,\r\n setIncomingMessage,\r\n true,\r\n \"\",\r\n false\r\n );\r\n\r\n //dont move it to top it can mess up with hooks calling mechanism, if there is another\r\n //hook added move this below all hook calls\r\n if (excluded) {\r\n return null;\r\n }\r\n const isError = touched && (error ?? \"\") !== \"\";\r\n\r\n const result =\r\n leftLoadingOptions || rightLoadingOptions ? (\r\n <span>loading...</span>\r\n ) : (\r\n <TransferList\r\n key={fieldKey}\r\n name={name}\r\n label={label}\r\n error={!isSubmitting && isError}\r\n helperText={!isSubmitting && isError ? error : null}\r\n handleChange={handleChange}\r\n handleBlur={handleBlur}\r\n disabled={isSubmitting}\r\n readOnly={readOnly}\r\n leftOptions={_optionsLeft}\r\n rightOptions={_optionsRight}\r\n leftOptionsLabel={leftOptionsLabel}\r\n rightOptionsLabel={rightOptionsLabel}\r\n valueSide={valueSide}\r\n />\r\n );\r\n if (Boolean(enableGrid)) {\r\n return <Grid {...GridProps}>{result}</Grid>;\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MyTransferList;\r\n","import {\r\n FC,\r\n useEffect,\r\n useRef,\r\n useCallback,\r\n useState,\r\n Fragment,\r\n createElement,\r\n} from \"react\";\r\nimport { useField, UseFieldHookProps } from \"packages/form\";\r\nimport { TextFieldProps } from \"@mui/material/TextField\";\r\nimport { TextField } from \"components/styledComponent\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport InputAdornment from \"@mui/material/InputAdornment\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport { Merge } from \"../types\";\r\nimport FormHelperText from \"@mui/material/FormHelperText\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\n\r\ninterface MyGridExtendedProps {\r\n maxLength?: number;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n setColor?: any;\r\n searchComponent?: React.Component;\r\n}\r\n\r\ntype MyTextFieldAllProps = Merge<TextFieldProps, MyGridExtendedProps>;\r\n\r\nexport type MySearchFieldProps = UseFieldHookProps & MyTextFieldAllProps;\r\n\r\nconst MySearchField: FC<MySearchFieldProps> = ({\r\n name: fieldName,\r\n validate,\r\n validationRun,\r\n postValidationSetCrossFieldValues,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n runPostValidationHookAlways,\r\n shouldExclude,\r\n isReadOnly,\r\n dependentFields,\r\n fieldKey: fieldID,\r\n GridProps,\r\n enableGrid,\r\n InputProps,\r\n inputProps,\r\n //@ts-ignore\r\n isFieldFocused,\r\n maxLength = -1,\r\n setColor,\r\n searchComponent = () => <span>No component found attached</span>,\r\n ...others\r\n}) => {\r\n const {\r\n value,\r\n error,\r\n touched,\r\n handleChange,\r\n handleBlur,\r\n isSubmitting,\r\n fieldKey,\r\n name,\r\n excluded,\r\n readOnly,\r\n incomingMessage,\r\n whenToRunValidation,\r\n runValidation,\r\n validationAPIResult,\r\n setIncomingMessage,\r\n } = useField({\r\n name: fieldName,\r\n fieldKey: fieldID,\r\n dependentFields,\r\n validate,\r\n validationRun,\r\n runPostValidationHookAlways,\r\n postValidationSetCrossFieldValues,\r\n isReadOnly,\r\n shouldExclude,\r\n runValidationOnDependentFieldsChange,\r\n skipValueUpdateFromCrossFieldWhenReadOnly,\r\n });\r\n\r\n const [openSearch, setOpenSearch] = useState<boolean>(false);\r\n\r\n const [currentColor, setCurrentColor] = useState<string>(\r\n typeof setColor === \"string\" ? setColor : \"\"\r\n );\r\n useEffect(() => {\r\n if (typeof setColor === \"function\") {\r\n let result = setColor(value);\r\n if (typeof result !== \"string\") {\r\n setCurrentColor(\"\");\r\n } else {\r\n setCurrentColor(result);\r\n }\r\n }\r\n }, [value, setColor]);\r\n\r\n const customHandleChange = useCallback(\r\n (e) => {\r\n handleChange(e, e.target?.formattedValue ?? undefined);\r\n },\r\n [handleChange]\r\n );\r\n\r\n /* eslint-disable react-hooks/exhaustive-deps */\r\n const onAcceptValue = useCallback(\r\n (value) => {\r\n if (typeof value === \"object\") {\r\n setIncomingMessage(value);\r\n } else {\r\n handleChange(value, value);\r\n }\r\n setOpenSearch(false);\r\n },\r\n [handleChange]\r\n );\r\n\r\n const focusRef = useRef();\r\n useEffect(() => {\r\n if (isFieldFocused) {\r\n //@ts-ignore\r\n setTimeout(() => {\r\n //@ts-ignore\r\n focusRef?.current?.focus?.();\r\n }, 1);\r\n }\r\n }, [isFieldFocused]);\r\n\r\n useEffect(() => {\r\n if (incomingMessage !== null && typeof incomingMessage === \"object\") {\r\n const { value } = incomingMessage;\r\n if (Boolean(value) || value === \"\") {\r\n handleChange(value);\r\n if (whenToRunValidation === \"onBlur\") {\r\n runValidation({ value: value }, true);\r\n }\r\n }\r\n }\r\n }, [incomingMessage, handleChange, runValidation, whenToRunValidation]);\r\n\r\n if (excluded) {\r\n return null;\r\n }\r\n /*fix for numberFormat*/\r\n if (InputProps?.inputProps) {\r\n InputProps.inputProps = {\r\n ...InputProps.inputProps,\r\n readOnly: readOnly,\r\n tabIndex: readOnly ? -1 : undefined,\r\n };\r\n }\r\n const isError = touched && Boolean(error);\r\n const result = (\r\n <Fragment>\r\n <TextField\r\n {...others}\r\n key={fieldKey}\r\n id={fieldKey}\r\n name={name}\r\n value={value}\r\n error={!isSubmitting && isError}\r\n helperText={\r\n <div style={{ display: \"flex\" }}>\r\n <FormHelperText>\r\n {!isSubmitting && isError\r\n ? error\r\n : Boolean(validationAPIResult)\r\n ? validationAPIResult\r\n : null}\r\n </FormHelperText>\r\n </div>\r\n }\r\n FormHelperTextProps={{\r\n //@ts-ignore\r\n component: \"div\",\r\n }}\r\n //@ts-ignore\r\n InputProps={{\r\n style:\r\n !isSubmitting && Boolean(currentColor)\r\n ? { color: currentColor, fontWeight: \"bold\" }\r\n : {},\r\n endAdornment: (\r\n <InputAdornment position=\"end\">\r\n <IconButton\r\n aria-label=\"toggle password visibility\"\r\n onClick={() => setOpenSearch(true)}\r\n >\r\n <SearchIcon />\r\n </IconButton>\r\n </InputAdornment>\r\n ),\r\n ...InputProps,\r\n }}\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n inputRef={focusRef}\r\n onChange={(e) => {\r\n if (maxLength === -1) {\r\n customHandleChange(e);\r\n } else if (e.target.value.length <= maxLength) {\r\n customHandleChange(e);\r\n }\r\n }}\r\n inputProps={{\r\n readOnly: readOnly,\r\n tabIndex: readOnly ? -1 : undefined,\r\n ...inputProps,\r\n }}\r\n onBlur={handleBlur}\r\n disabled={isSubmitting}\r\n />\r\n <Dialog\r\n open={openSearch}\r\n onClose={() => setOpenSearch(false)}\r\n maxWidth={\"md\"}\r\n >\r\n {createElement(\r\n searchComponent as any,\r\n {\r\n onAccept: onAcceptValue,\r\n value: value,\r\n },\r\n null\r\n )}\r\n </Dialog>\r\n </Fragment>\r\n );\r\n if (Boolean(enableGrid)) {\r\n return <Grid {...GridProps}>{result}</Grid>;\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MySearchField;\r\n\r\n/*\r\n{cloneElement(searchComponent as any, {\r\n onAccept: onAcceptValue,\r\n value: value,\r\n })}\r\n */\r\n","import { Fragment } from \"react\";\r\nimport { Merge } from \"../types\";\r\nimport { UseFieldHookProps } from \"packages/form\";\r\nimport { FormControlLabelProps } from \"@mui/material/FormControlLabel\";\r\nimport { FormControlProps } from \"@mui/material/FormControl\";\r\nimport { FormHelperTextProps } from \"@mui/material/FormHelperText\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\nimport { ButtonProps } from \"@mui/material/Button\";\r\nimport { GradientButton } from \"components/styledComponent/button\";\r\ninterface extendedFiledProps extends UseFieldHookProps {\r\n label: string;\r\n}\r\ninterface MyButtonExtendedProps {\r\n FormControlLabelProps?: FormControlLabelProps;\r\n FormControlProps?: FormControlProps;\r\n FormHelperTextProps?: FormHelperTextProps;\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n}\r\ntype MyButtonMixedProps = Merge<ButtonProps, extendedFiledProps>;\r\nexport type MyFormButtonAllProps = Merge<\r\n MyButtonMixedProps,\r\n MyButtonExtendedProps\r\n>;\r\nexport const FormButton = ({\r\n label,\r\n enableGrid,\r\n GridProps,\r\n fieldKey,\r\n onFormButtonClickHandel,\r\n ...others\r\n}) => {\r\n // console.log(others);\r\n const ClickEventCall = (e) => {\r\n if (typeof onFormButtonClickHandel === \"function\") {\r\n onFormButtonClickHandel(fieldKey);\r\n }\r\n };\r\n const result = (\r\n <Fragment>\r\n <GradientButton\r\n color=\"secondary\"\r\n onClick={ClickEventCall}\r\n style={{ width: \"100%\" }}\r\n >\r\n {label}\r\n </GradientButton>\r\n </Fragment>\r\n );\r\n if (Boolean(enableGrid)) {\r\n return (\r\n <Grid\r\n {...GridProps}\r\n key={fieldKey}\r\n container\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n {result}\r\n </Grid>\r\n );\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default FormButton;\r\n","import { FC } from \"react\";\r\nimport Grid, { GridProps } from \"@mui/material/Grid\";\r\n\r\ninterface MyGridExtendedProps {\r\n GridProps?: GridProps;\r\n enableGrid: boolean;\r\n defaultValue: any;\r\n name: string;\r\n label: string;\r\n}\r\n\r\nconst MyValueField: FC<MyGridExtendedProps> = (props) => {\r\n let { defaultValue, label, enableGrid, GridProps } = props;\r\n if (typeof defaultValue === \"object\") {\r\n if (Array.isArray(defaultValue)) {\r\n defaultValue = defaultValue.join(\",\");\r\n } else {\r\n defaultValue = defaultValue?.toDateString?.() ?? \"Invalid Value\";\r\n }\r\n }\r\n if (typeof defaultValue === \"boolean\") {\r\n defaultValue = defaultValue ? \"Yes\" : \"No\";\r\n }\r\n\r\n let result = (\r\n <div>\r\n <b>{label}</b>\r\n <br />\r\n {defaultValue}\r\n </div>\r\n );\r\n if (Boolean(enableGrid)) {\r\n return <Grid {...GridProps}>{result}</Grid>;\r\n } else {\r\n return result;\r\n }\r\n};\r\n\r\nexport default MyValueField;\r\n"],"names":["initializeFunctionRegistry","fns","Map","registerFn","fnName","fn","set","unregisterFn","has","delete","getFn","defaultValue","get","singletonFunctionRegisrationFactory","singletonFunctionRegisrationFactoryForTableCells","greaterThanString","factValue","jsonValue","Number","parseFloat","greaterThanInclusiveString","lessThanString","lessThanInclusiveString","geaterThanDate","isAfter","greaterThanInclusiveDate","isEqual","lessThanDate","isBefore","lessThanInclusiveDate","ruleEngine","rule","async","fieldData","dependentFields","success","failure","conditions","engine","Engine","addOperator","extendRule","event","type","addRule","result","run","currentField","stop","events","length","atomKeys","formAtom","formFieldAtom","formArrayFieldRowsAtom","formArrayFieldRegistryAtom","formFieldRegistryAtom","formFieldRegisterSelector","formFieldUnregisterSelector","formArrayFieldRegisterSelector","formArrayFieldUnregisterSelector","subscribeToFormFieldsSelector","isFormArrayFieldRegistered","formFieldsExcludedAtom","formFieldExcludeAddSelector","formFieldExcludeRemoveSelector","formFieldsErrorWatcherAtom","formFieldsErrorWatcherAddSelector","formFieldsErrorWatcherRemoveSelector","atomFamily","key","default","submitAttempt","isSubmitting","submitSuccessful","serverSentError","serverSentErrorDetail","fieldKey","name","value","displayValue","touched","error","validationRunning","validate","excluded","readOnly","incomingMessage","skipValueUpdateFromCrossFieldWhenReadOnly","optionData","selectorFamily","formName","fieldName","DefaultValue","fields","indexOf","newFields","_","index","slice","newValue","prev","reset","templateFieldRows","lastInsertIndex","resetFlag","dangerouslyAllowMutability","subscriptionFields","undefined","fieldValues","field","Boolean","fieldState","FormContext","createContext","validationRun","resetFieldOnUnmount","initialValues","formState","defaultArrayFieldValues","displayName","isString","obj","Object","prototype","toString","call","isObject","isInteger","String","Math","floor","getIn","def","p","path","toPath","setIn","res","clone","resVal","i","pathArray","currentPath","currentObj","Array","isArray","nextPath","validationConfig","abortEarly","strict","yupValidationHelper","schema","trim","e","yup","ValidationError","errors","message","yupReachAndValidate","fieldSchema","reach","useField","shouldExclude","isReadOnly","postValidationSetCrossFieldValues","runPostValidationHookAlways","runValidationOnDependentFieldsChange","runExternalFunction","onFormDataChange","formContext","useContext","useRecoilValue","fieldKeyRef","useRef","dependentFieldsRef","current","transformDependentFields","setFieldData","useRecoilState","t","useTranslation","useEffect","currVal","fieldDataRef","registerField","useSetRecoilState","unregisterField","currentfield","defaultValueForArrayField","replace","isValidationFnRef","extractedFieldName","wrappedValidation","schemaValidation","validationFn","postValidationSetCrossFieldValuesFn","shouldRunAlways","wrapperFunctionAlways","dependentFieldsState","crossFieldMessages","errorMsg","apiResult","errorMsgObj","wrapperFunction","wrapValidationMethod","validationSchema","addRemoveExcludedFields","useRecoilCallback","flag","addRemoveFieldsFromErrorWatcher","dependentFieldsStateRef","handleValidation","lastShouldExcludePromise","lastIsReadOnlyPromise","currentShouldExcludePromise","Promise","resolve","transformDependentFieldsState","then","old","currentIsReadOnlyPromise","passCrossFieldMessage","snapshot","fieldsObj","getFieldKeyForArray","fieldsLoadable","getLoadable","state","contents","entries","whenToRunValidation","lastValidationPromise","lastValidationValue","useCallback","data","alwaysRun","touchAndValidate","currentPromise","finalResult","validationAPIResult","catch","err","Error","error_msg","setTouched","setIncomingMessage","setDisplayValue","setValue","val","setValueAsCB","setErrorAsCB","runValidation","mergeObj","handleChange","eventOrTextValue","displayVal","Date","checked","options","multiple","target","parsed","test","isNaN","getValueForCheckbox","from","filter","el","selected","map","getSelectedValues","handleBlur","handleOptionValueExtraData","dependentValues","currentValue","valueProp","currentArrayOfValues","isValueInArray","concat","split","fieldKeys","prevKey","join","one","keys","reduce","accum","useForm","onSubmit","removeFormInstance","loadableFields","loadableArrayFields","arrayFields","arrayField","setInitValues","initValues","trimFormNameFromFieldName","startSubmit","endSubmit","messageDetail","setFieldErrors","fieldsErrorObj","handleClear","preventDefault","handleReset","handleClearPartial","getDependentValues","loadable","handleResetPartial","newInitialValues","loadableFieldState","readOnlyFieldState","customValidator","newFieldState","handleSubmitPartial","hasError","_handleSubmit","handleSubmit","actionFlag","isValidate","fieldsAggrigator","push","resultValueObj","resultDisplayValueObj","fieldValue","formatDate","getFieldData","useFieldArray","arrayFieldName","template","getFixedRowsCount","templateFieldNamesRef","fieldRows","setFieldRows","fieldRowsRef","registerArrayField","unregisterArrayField","RemoveFieldsFromErrorWatcher","isFieldRegistered","loader","clearArrayFieldRows","allKeysToRemove","cells","j","currentFieldKey","newAllFields","getValue","clearFieldArray","currentRowCount","diff","rowBuf","_insert","newRows","lastIndex","indexToRemoveFrom","currentTemplateRows","removeRows","oldValues","getAllRowsValues","allKeysToGetValuesFrom","resultValues","itr","fieldLoadable","rowBuffer","lastInsertId","insertIndex","newRow","fieldIndexKey","beginningRows","endingRows","currentIndex","oneRow","remove","deleteRow","oneField","values","setDefaultValue","defaultArrayValue","buffer","renderRows","renderFn","row","idx","rowIndex","removeFn","totalRows","insert","unshift","pop","swap","indexA","indexB","fieldRowsCopy","rowA","rowB","tempName","rowBCopy","move","to","small","big","middleRows","movingRow","shiftingRows","fieldRow","getAllRowsValuesFn","templateFieldNames","TimeTravelObserver","snapshots","render","useState","useRecoilTransactionObserver_UNSTABLE","getID","gotoSnapshot","useGotoRecoilSnapshot","_jsx","style","display","children","onClick","_Fragment","overflow","width","defaultBooleanFunction","JSONWalkerFinalPath","interestedValues","accumulator","lastKey","patters","currentPattern","RegExp","found","defaultFn","patternMatch","retVal","JSONWalker","skipWalkingForKeys","forEach","attachMethodsToMetaData","metaData","registrationFnInstance","interestedFields","accumKeys","newMetaData","pathSplit","CheckObjectAllKeyisEmpty","allKeys","returnvalue","item","UpdateRequestDataVisibleColumn","visiblecolumn","returnData","cloneDeep","AddIDinResponseData","responsedata","id","groupBy","xs","rv","x","DefaultErrorObject","error_details","severity","error_detail","CreateLanguageRequestData","reqData","languageData","_hidden","TRN_TYPE","DISPLAY_MSG","_isTouchedCol","_oldData","StringtoUnicode","DISPLAY_MSG_BN","CreateDetailsRequestData","_isNewRowdata","_isDeleteRowdata","_isUpdatedRowdata","_isNewRow","other","isUpdated","updatedItem","_OldValueData","updatedKeysArr","keyitem","_UPDATEDCOLUMNS","_OLDROWVALUE","isNewRow","isDeleteRow","isUpdatedRow","ObjectMappingKeys","returnObj","str","array","temp","charCodeAt","toUpperCase","GetMaxCdForDetails","maxCd","base64toBlob","b64Data","contentType","sliceSize","byteCharacters","atob","byteArrays","offset","byteNumbers","byteArray","Uint8Array","Blob","convertBlobToBase64","blob","blobToBase64","reject","reader","FileReader","readAsDataURL","onload","onerror","GetAllChieldMenuData","isCheckUserCode","newNavItems","newItem","newChildren","system_code","href","transformDetailsData","newData","oldData","allKey","isValidDate","format","dat","dt","getKey","areObjectsEqual","obj1","obj2","every","getChangedColumns","getParsedDate","dateString","isStringRequired","requiredFormat","formats","parsedDate","parse","getTime","newitem","itemdata","keyValue","funcRet","pwd","theBlob","fileName","b","lastModifiedDate","d","d2","performance","now","c","r","random","token","token_type","metadata","colomnList","outData","includes","label","toNumber","size","input1","input2","keysToCompare","output","idMapInput1","idMapInput2","item2","item1","changedColumns","updateObj","base64Data","compressedStr","uint8array1","restored","pako","inflate","JSON","extractMetaData","mode","deriveData","form","deriveFormData","extractGridMetaData","columns","__VIEW__","__EDIT__","__NEW__","others","newFormObj","merge","fieldObj","componentType","newField","_fields","_column","console","log","newFieldObj","ExportExcelFileFromData","title","excelData","utils","json_to_sheet","wb","book_new","Props","Title","Author","CreatedDate","SheetNames","Sheets","writeFile","ExportCSVFileFromData","bookType","GradientButton","withStyles","root","background","border","color","fontWeight","minWidth","letterSpacing","boxShadow","textTransform","Button","MyAlert","errorDetail","showMore","setShowMore","_jsxs","Alert","action","more","Dialog","open","fullWidth","onKeyUp","DialogTitle","DialogContent","DialogContentText","DialogActions","styleInject","css","ref","insertAt","document","head","getElementsByTagName","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","LoadingTextAnimation","text","LoadingText","className","GridDataExport","closeDialog","gridData","isLoading","setLoading","setError","handleDialogClose","FileDownload","toLowerCase","setTimeout","maxWidth","disabled","ConvertExcelToJSONData","XLSX","read","raw","fileJsonData","JSONData","sheet_to_json","defval","json","cellValue","isValid","toLocaleDateString","attachAlignmentProps","column","alignment","TableCellProps","align","useStyles","makeStyles","borderLeft","borderRight","CellWrapper","showBorder","positionRelative","cell","isVisibleField","classes","myColor","isVisibleData","original","isGrouped","IconButton","getToggleRowExpandedProps","padding","isExpanded","ArrowDropDownSharpIcon","ArrowRightSharpIcon","subRows","isPlaceholder","TableCell","component","variant","getCellProps","textOverflow","whiteSpace","lineHeight","position","DefaultRowCellRenderer","props","showTooltip","transform","isAutoSequence","_displaySequence","acuu","Tooltip","attachCellComponentsToMetaData","Cell","StyledTextField","fontSize","marginTop","borderRadius","backgroundColor","marginRight","height","borderBottom","transition","maxHeight","minHeight","TextField","StyledTextField2","StyledTextField3","borderBottomLeftRadius","borderTopLeftRadius","ChipTextField","flexWrap","flexGrow","StyledCheckbox","alignSelf","Checkbox","queryClient","QueryClient","defaultOptions","queries","cacheTime","refetchOnWindowFocus","refetchOnMount","refetchOnReconnect","ClearCacheContext","addEntry","removeEntry","getEntries","ClearCacheProvider","entiresCache","findIndex","stringify","foundIndex","next","Provider","cacheWrapperKeyGen","sort","AuthContext","authState","access_token","isLoggedIn","role","roleName","userSubType","companyID","companyName","groupName","access","menulistdata","user","branch","branchCode","lastLogin","session_id","uniqueID","useOptionsFetcher","setOptions","handleChangeInterceptor","_optionsKey","disableCaching","skipDefaultOption","defaultOptionLabel","enableDefaultOption","loadingOptions","queryKey","otherFormState","formStateKeys","none","dependentKeys","computeDependentKey","queryOptions","useQuery","retry","enabled","isDefaultOption","uniqBy","_options","isError","newOptions","dataUpdatedAt","useOptionsFetcherSimple","optionsProps","useOptionsFetcherSimpleWithRemoveCache","getLabelFromValues","getString","acc","a","regex","getLT20","n","getGT20","numWords","input","num","numStr","n0","n1","n2","n3","n4","n5","substr","match","SelectRenderOnly","MenuItemProps","SelectProps","showCheckbox","InputProps","inputProps","CircularProgressProps","loading","selectVariant","defaultSpaceAdd","InputLabelProps","TextFieldToRender","TextField3","TextFieldForSelect","getLabelFromValuesForOptions","menuItems","menuItem","_createElement","MenuItem","select","helperText","onChange","onBlur","native","renderValue","shrink","endAdornment","InputAdornment","CircularProgress","sx","tabIndex","ValueFilter","filterValue","columnName","gridProps","dispatch","maxLength","showMaxLength","setText","condition","setCondition","payload","Grid","sm","md","FormHelperText","flex","textAlign","margin","SelectWithoutOptions","OptionsFilter","filterProps","optionLabels","myOptions","setMyOptions","labels","styles","StyledKeyboardDatePicker","DatePicker","StyledKeyboardTimePicker","TimePicker","StyledKeyboardDateTimePicker","DateTimePicker","DateRange","minValue","setMinValue","maxValue","setMaxValue","option","setOption","myMinValue","dateFormat","myMaxValue","today","subDays","KeyboardDatePicker","slots","textField","slotProps","placeholder","actionBar","actions","minDate","MyInputLabel","InputLabel","MyInput","multiline","underline","adornedStart","Input","ValueRange","FormControl","currentTarget","contains","relatedTarget","justifyContent","RangeFilter","getChipProps","MultiValueFilter","chips","setChips","focusedTag","setFocusedTag","anchorElRef","inputRef","handleFocusTag","direction","nextTag","focusTag","tagToFocus","focus","querySelector","startAdornment","Chip","onDelete","onKeyDown","which","all","indexToRemove","newChips","splice","optionsMethodNotFound","attachFilterComponentToMetaData","filters","filterComponentType","Filter","filterOthers","extractHiddenColumns","isVisible","accessor","sortColumnsBySequence","column1","column2","sequence","SplitActions","multipleActions","singleActions","doubleClickAction","rowDoubleClick","alwaysAvailableAction","alwaysAvailable","filterAction","selectedFlatRows","authDetails","singleAction","filterActionWhenNoDataFound","count","isNodataThenShow","CheckDataWithFilter","retvalue","startsWith","endsWith","CheckFilterValue","defaultFieldsToAttachMethods","parseYupSchemaAndAttachMethod","rules","validator","params","attachYupValidator","combineAndRunValidation","validation","DefaultHeaderColumnRenderer","visibleColumns","setColumnOrder","allowColumnReordering","isDragging","drag","useDrag","collect","monitor","end","didDrop","getDropResult","toIndex","fromIndex","canDrag","isOver","drop","useDrop","accept","canDrop","dragDropRef","TableSortLabel","active","isSorted","isSortedDesc","hideSortIcon","getSortByToggleProps","opacity","cursor","paddingRight","canGroupBy","getGroupByToggleProps","getResizerProps","right","zIndex","flexDirection","focusable","viewBox","userSelect","fill","flexShrink","MyTextField","fieldID","GridProps","enableGrid","enableNumWords","StartAdornment","EndAdornment","isFieldFocused","setValueOnDependentFieldsChange","setColor","currentColor","setCurrentColor","customHandleChange","formattedValue","focusRef","myError","numWordsVar","myTouch","amountArray","amountPart","abs","trimStart","FormHelperTextProps","PasswordField","allowToggleVisiblity","showPasswordTime","setShowPasswordTime","passwordVisibility","timerRef","forceUpdate","clearTimeout","Visibility","VisibilityOff","NumberFormatCustom","forwardRef","FormatProps","NumericFormat","getInputRef","onValueChange","valueIsNumericString","MyNumberFormat","inputComponent","InputMaskCustom","MaskProps","IMask","onAccept","mask","unmaskedValue","MyInputMaskCustom","theme","searchRoot","fontFamily","typography","spacing","marginLeft","marginBottom","palette","common","white","transitions","create","searchRoot2","alpha","searchError","search","pointerEvents","alignItems","inputRoot","inputInput","SearchBar","useTheme","desktop","useMediaQuery","breakpoints","up","useImperativeHandle","blur","handleFocus","autoFocus","disableUnderline","SearchIcon","SearchBar2","Fragment","GlobalFilter","preGlobalFilteredRows","globalFilter","setGlobalFilter","useAsyncDebounce","secondary","CheckboxCellRenderer","__isRowSelection","getToggleRowSelectedProps","CheckboxHeaderRenderer","getToggleAllRowsSelectedProps","paddingLeft","highlight","main","lighten","light","dark","TableActionToolbar","dense","setGridAction","selectedCount","selectedRows","Toolbar","clsx","Typography","RenderActions","setAction","buttonTextColor","tooltip","actionLabel","actionName","rows","ActionContextMenu","contextMenuRow","mouseX","mouseY","handleClose","allActions","Menu","onContextMenu","onClose","anchorReference","anchorPosition","top","left","AutoRefreshContext","resume","pause","attachFunction","cb","isEnabled","AutoRefreshProvider","timer","callbackRef","isEnabledRef","isTimerRunning","setInterval","clearInterval","useAutoRefreshControls","useAutoRefresh","callback","intervalInSeconds","progress","setProgress","setEnabled","interval","runner","min","parseInt","intervalElapsed","CircularProgressWithLabel","isPlaying","setIsPlaying","isMouseOver","setIsMouseOver","bottom","onMouseOver","onMouseOut","PauseIcon","PlayArrowIcon","filterReducer","TableFilterComponent","setAllFilters","filterMeta","setSortBy","gotoPage","setOpen","filterState","reducer","newState","useFilterState","filterColumns","LocalizationProvider","dateAdapter","AdapterDateFns","refreshiconhover","FilterListTwoToneIcon","Drawer","anchor","PaperProps","AppBar","CardContent","container","StyledMenuItem","thumb","valueLabel","track","rail","Slider","ColumnVisibility","defaultHiddenColumns","anchorEl","setAnchorEl","getToggleHiddenProps","isDisabled","isColumnHidingDisabled","isTableHidden","FormControlLabel","control","ViewColumnOutlinedIcon","Popover","anchorOrigin","vertical","horizontal","transformOrigin","Paper","ITEM_HEIGHT","MenuList","borderTopRightRadius","TableHeaderToolbar","disableGlobalFilter","refetchData","autoRefreshInterval","allowFilter","allowColumnHiding","newselectedRows","useMemo","RefreshIcon","StickyTableHead","TableHead","MyTableRow","outline","hover","TableRow","HeaderCellWrapper","stickyHeaderCell","sticky","totalLeft","getHeaderProps","TablePaginationActions","page","rowsPerPage","onPageChange","LastPageIcon","FirstPageIcon","KeyboardArrowRight","KeyboardArrowLeft","ceil","max","TablePaginationActionsWithInput","newPage","setNewPage","endPage","startPage","nextPage","ArrowForwardIcon","colorAdjust","LinearProgressBarSpacer","CustomBackdrop","Backdrop","listStyle","chip","TableFilterStatusBar","computeFilterLabel","newFilter","handleDelete","isDateThenFormat","isLabelThenDisplay","myDate","replaceAll","data2","DataGrid","getRowId","defaultColumn","disableSorting","defaultSortOrder","defaultGroupBy","updateGridData","hideFooter","hideHeader","disableGroupBy","disableLoader","containerHeight","pageSizes","defaultPageSize","enablePagination","allowRowSelection","hideNoDataFound","hiddenFlag","defaultFilter","isCusrsorFocused","onButtonActionHandel","retData","DataFilterComponents","getTableProps","getTableBodyProps","headerGroups","prepareRow","setPageSize","pageIndex","pageSize","availableColumns","useTable","initialState","hiddenColumns","sortBy","autoResetSortBy","disableSortBy","autoResetGlobalFilter","useGlobalFilter","useColumnOrder","useGroupBy","useSortBy","useExpanded","usePagination","useRowSelect","useResizeColumns","useBlockLayout","hooks","Header","useCheckboxColumn","tbodyRef","rowsToDisplay","rowCount","cnt","contextMenuPosition","setContextMenuPosition","setContextMenuRow","contextMenuSelectedRowId","setContextMenuSelectedRowId","LinearProgress","TableContainer","Table","headerGroup","getHeaderGroupProps","headers","TableBody","clientX","clientY","fontStyle","rightClickHandler","handleContextMenuOpen","thisRowDblClickHandler","handleRowDoubleClickAction","rowColorStyle","_rowColor","getRowProps","isSelected","onDoubleClick","isAggregated","TablePagination","rowsPerPageOptions","colSpan","onRowsPerPageChange","ActionsComponent","GridWrapper","GridWrapperStatic","finalMetaData","setData","onClickActionEvent","metaDataRef","transformMetaData","dataRef","mydefaultFilter","columnsValidator","columnsObj","gridConfig","defaultColumnConfig","rowIdColumn","myDefaultSortOrder","myDefaultGroupBy","columnID","displaySeqNumber","isChanged","isOldData","oldValue","_touched","_error","stripValidationFromData","ignoreTouch","validatedData","columnTouched","columnError","columnValue","columnValidator","validationResult","validateData","cleanData","refetch","gridLabel","freshMetaData","_attachMethodsToMetaData","attachYupSchemaValidator","attachcombinedValidationFns","splittedActions","fileColumns","fileNamedEditable","failedFilesMetaData","uploadWrapper","backgroundImage","UploadTarget","onDrop","existingFiles","fileUploadControl","NativeTypes","FILE","files","getItem","isActive","click","filesArray","hashCode","hash","computeFileFingerprint","file","lastModified","computeSize","sizeInBytes","sOutput","aMultiples","nMultiple","nApprox","toFixed","detectMimeType","fileBlob","onloadend","arr","subarray","fileType","header","hex","ext","mime","readAsArrayBuffer","isMimeTypeValid","whiteListExtension","isDuplicate","fileIDs","downloadFile","fileObj","url","URL","createObjectURL","download","getUTCMilliseconds","clickHandler","revokeObjectURL","removeEventListener","addEventListener","transformMetaDataByMutating","additionalColumns","editableFileName","extractColumnsFromAdditionalMetaData","validateFilesAndAddToList","customTransformFileObj","maxAllowedSize","allowedExtensions","newFiles","failedFiles","filesObj","existingFileIds","filteredNewFilesObj","failedReason","fileExt","transformFileObject","otherFieldsTemplate","mimeType","sizeStr","_mimeType","cleanFileObj","convertToJsonObject","fileArrayObj","FileObj","utilFunction.convertBlobToBase64","blobtype","convertToFormData","formData","FormData","append","transformedColumn","fileData","col","finalColumn","transformedGridData","curr","finalGridData","UNIQUE","generateMetada","ExcelViewer","setExcelData","setIsLoading","workbook","sheetName","sheet","parsedSheet","dateCell","readAsBinaryString","handleFileUpload","Close","CsvViewer","csvData","setCsvData","Papa","skipEmptyLines","complete","PDFViewer","urlObj","setUrlObj","toRemoveURL","GetAppRoundedIcon","src","ImageViewer","alt","NoPreview","FileUploadControl","onUpload","dataChangedRef","defaultFileData","onUpdateFileData","transformedFilesMetaData","additionalFieldsObj","setFiles","setFailedFailes","openDialog","setOpenDialog","uploadProgress","setUploadProgress","Infinity","gridRef","validateFilesAndAddToListCB","toDeleteObjs","uploadDocuments","cleanObj","formDataObj","base64Object","progressValue","status","Card","CardHeader","CardActions","endIcon","Collapse","in","any","FileViewerGrid","GridDataImport","setImportedData","isFileUploadopen","setFileUpload","FileData","setFileData","proccessFunc","ResultFunc","proccessLength","alldata","element","jsonData","dataJSON","endIndex","getJsonData","TRAN_CD","processData","renderStyle","Intl","NumberFormat","currency","currencyDisplay","ListBoxComponentVirtualized","lazy","virtualized","module","ListBoxComponent","getOptionLabel","freeSolo","MyAutocomplete","disableClearable","TextFieldProps","ChipProps","CreateFilterOptionsConfig","limitTags","required","enableVirtualized","disableAdornment","indexRef","optionsMapperRef","myGetOptionLabel","myGetOptionValue","getOptionValue","transformValues","setOptionsWrapper","clear","handleChangeCustom","handleKeyDown","Suspense","fallback","Autocomplete","autoHighlight","isOptionEqualToValue","ListboxComponent","PaperComponent","onHighlightChange","filterOptions","createFilterOptions","renderTags","getTagProps","renderInput","autoComplete","renderOption","inputValue","matches","labelJSX","part","AutoCompleteGrid","SelectForGrid","Select","IconComponent","HtmlTooltip","pxToRem","MyCheckbox","FormControlProps","FormControlLabelProps","handelChange","valueExists","myValue","FormLabelProps","FormGroupProps","checkboxes","checkbox","FormLabel","FormGroup","wrapperclass","verticalAlign","ButtonRowCell","buttonLabel","isVisibleInNew","is_Visible","date","isImageURL","ProfilePictureURL","setProfilePictureURL","utilFunction.base64toBlob","Avatar","initialValue","disableCachingOptions","prevRows","nextRows","externalTouched","externalError","loadingcoll","requestProps","dependentOptionField","loadingcall","isReadOnlyLocal","modifiedRequestProps","isPassword","isDisabledOnBlurEvent","isAutoFocus","isPasswordFieldRef","inputType","setInputType","loadingCall","setLoadingCall","refInput","onBlurEvent","onFocus","onMouseDown","isFirstTimeRef","ButtonGroup","todaysDate","dueDate","due_date","completionDate","completion_date","elapseTime","differenceInCalendarDays","msec","hh","mm","_accessor","MoreHorizIcon","derivedPercentage","fromPercentage","toPercentage","setValueFUNC","mindate","KeyboardDateTimePicker","dateObj","views","maxdate","disablePast","disableFuture","disableToday","currentDate","selectedDate","yesterday","setDate","getDate","maxDate","CheckboxGroup","index$l","SwitchGroup","index$h","Switch","index$f","Visaversa","index$a","index$p","index$k","Radio","index$i","index$g","Rating","index$e","Spacer","index$c","ToggleButtonGroup","index$d","index$n","index$o","InputMask","index$m","AutoComplete","index$b","ArrayField","index$j","ArrayField2","TextareaField","index$6","HiddenField","index$5","index$4","TransferList","index$3","SearchField","index$2","DataTable","index$9","FormButton","index$1","EmptyComponent","renderField","formRenderConfig","componentProps","onFormButtonClickHandel","Component","allProps","gridConfigOverrides","xl","lg","ValueField","ArrayFieldValue","ArrayFieldValues","renderFieldsByGroup","renderMethod","groupWiseRenderer","currentGroupName","groups","hasOwnProperty","group","currentGroup","fieldNames","ordering","temp1","temp2","constructInitialValue2","initialValuesObj","constructYupSchema","object","shape","schemaObject","parseSchema","of","transformNotFound","extendFieldTypes","extendedTypes","lanTranslate","edata","newMetaDataFields","extendedType","assign","MoveSequenceToRender","formMetaData","subTitle","tabsSubmitBtn","submit","backBtn","buttonProgress","buttonWrapper","stepper","stepperLabel","formControlLabelSpacer","isGroupExcluded","currentGroupFields","excludedFields","fullFieldName","isGroupHavingError","errorFields","find","isLastActiveStep","currentStep","fieldGroupsActiveStatus","finalStep","StepperWrapper","formDisplayLabel","hidden","defaultActiveStep","wrapperChild","parentClasses","activeStep","setActiveStep","fieldGroups","Container","paddingTop","Steps","FieldsRenderer","stepsRenderer","StepsController","defaultGroupName","errorWatcherFields","filteredFieldGroups","Stepper","alternativeLabel","Step","StepLabel","steps","cloneElement","hideMe","step","getPrevActiveStep","currentFieldsToValidate","nextStep","getNextActiveStep","SimpleForm","fieldsToRender","SimpleFormWrapper","formStyle","displayMode","hideDisplayModeInTitle","controlsAtBottom","containerstyle","SimpleFormTitle","BottomControl","disableGutters","TabsFormWrapper","TabsFormTitle","TabsRenderer","FieldsToRender","tabsRenderer","Tabs","scrollButtons","Tab","extendedMetaData","thousandSeparator","prefix","thousandsGroupStyle","allowNegative","allowLeadingZeros","decimalScale","isAllowed","floatValue","currencyWithoutWords","dob","sub","years","phoneNumber","isNumericString","panCard","prepare","panCardOptional","aadharCard","rateOfInt","suffix","fixedDecimalScale","allowEmptyFormatting","MonthlyEmiPayCurrency","pincode","futureDateNotAllowed","minAge","maxAge","rateOfIntWithoutValidation","rateOfIntUptoThreeDigits","squareFeetFormat","currencyWithLeadingZeros","pincodeNoValidation","amountField","accountNumber","loginID","Percentage","FormWrapper","onSubmitHandler","hideTitleBar","overflowY","overflowX","groupWiseFields","constructInitialValue","defaultArrayFieldInitValues","constructInitialValuesForArrayFields","yupValidationSchema","formCode","refID","ChildFormWrapper","formRenderType","renderType","submitFn","GridContext","GridProvider","gridCode","getGridData","getToggleAllPageRowsSelectedProps","fetchData","onFetchData","totalRecords","controlledTotalRecords","pageCount","controlledPageCount","allowKeyboardNavigation","tableState","manualPagination","autoResetPage","manualSortBy","manualFilters","autoResetFilters","useFilters","visible","onFetchDataDebounced","stopPropagation","currentRow","namedItem","rowToFocus","keyCode","previousElementSibling","offsetTop","offsetHeight","nextElementSibling","toggleRowSelected","GirdController","dataTransformer","context","enqueueSnackbar","useSnackbar","myDefaultFilter","setTotalRecords","setPageCount","fetchIdCounterRef","currentFetchId","startRow","endRow","childFilter","filterBy","ACCESSOR","formatFilterBy","VALUE","desc","formatSortBy","total_count","filterAlwaysVisible","finalData","LoaderPaperComponent","FullScreenLoader","StyledTooltip","arrow","boxSizing","PrintButton","content","buttonText","ReactToPrint","PrintContextConsumer","handlePrint","PrintIcon","wrapper","down","loginEmp","formWrap","otpformWrap","loginBtn","OTPTimer","primary","resendLink","logo","loginLeft","loginRight","loginImg","verifybutton","divflex","otpinputpadding","otpinputform","otpinputformauth","ibtnvisible","btnvisibleoff","resendOTPalign","resendbtnLink","textDecoration","dialogTitleClass","button","lang_svg","inititalState","userMessage","RemarksAPIWrapper","TitleText","onActionNo","onActionYes","isRequired","isEntertoSubmit","AcceptbuttonLabelText","CanceltbuttonLabelText","setInput","loginState","setLoginState","inputButtonRef","mt","onKeyPress","MessageBoxWrapper","isOpen","validMessage","loadingText","MessageBoxNavigateWrapper","useLocation","PopupRequestWrapper","MessageTitle","Message","onClickButton","buttonNames","icon","colorMap","INFO","SUCCESS","WARNING","ERROR","paddingBottom","gap","Box","InfoIcon","WarningIcon","CheckCircleIcon","ErrorIcon","buttonName","initialMessage","messageTitle","PopupContext","MessageBox","CloseMessageBox","PopupContextProvider","setMessage","callBack","usePopupContext","PopupMessageAPIWrapper","MySelect$1","otherAllData","getExtraOptionData","getSelectedOptionData","defaultValueIndex","extraOptionData","handleBlurInterceptor","filteredOptions","filtervalue","isAllSelected","isIndeterminate","selectAllMenu","indeterminate","ArrayField$1","renderParentFn","renderRowsFn","arrayRowContainer","shadows","arrayRowRemoveBtn","arrayRowCard","arrayRowCardContent","arrayRowCount","ArrayFieldRow","removeRowFn","arrayFieldIDName","fixedRows","isDialogOpen","setIsDialogOpen","setSuccess","dialogAccept","dialogReject","dialogOpen","gutterBottom","RemoveCircleOutlineIcon","addRowFn","currentFieldsMeta","showAddDialog","setShowAddDialog","dialogMsg","setDialogMsg","transformedMetaData","metaDataTransform","currentMetaToObj","addNewRow","allow","reason","currentFieldMetaData","clonedComponent","AddCircleOutlineIcon","oneRowDefaultValues","RowIndex","metaDataWithDefaultValuesForRow","oneColumnMeta","Columnindex","StyledRadioField","MyRadio$1","RadioGroupProps","radios","radio","RadioGroup","MySwitch$1","MyCheckboxGroup$1","switches","oneSwitch","MySlider$1","localValue","setLocalValue","setFocus","localValueHandler","sliderValue","customBlur","focusHandler","focused","onChangeCommitted","MyDatePicker$1","cancelLabel","disableElevation","okLabel","MyTimePicker$1","KeyboardTimePicker","MyDateTimePicker$1","MyRating$1","customChange","StyledToggleButtonGroup","grouped","borderColor","MyToggleButtonGroupProps$1","ToggleButtonProps","toggleButtons","ToggleButton","iconName","BusinessIcon","PersonIcon","Spacer$1","HiddenProps","Hidden","lastUpdatedTime","setLastUpdatedTime","initDoneRef","defaultValueRef","_internalValue","answers","PercentageFormatCustom","Visaversa$2","leftName","rightName","leftLabel","rightLabel","leftTransform","rightTransform","leftValue","rightValue","leftValueRef","rightValueRef","newDependentValues","leftResult","rightResult","DefaultFooterCell","footerRenderStyle","total","sum","renderResult","DefaultCell","RowContext","RowContextProvider","currentRowError","currentRowObj","initialData","rowValidator","setFormError","initialTouched","touchedObj","setIsError","setCurrentRow","touchAll","setCellValue","setCellTouched","executeValidation","TextFieldCell","clearFields","NaN","currentEditRow","currencyFormatter","DisplayCell","displayStyle","finalNode","NumberCell","CurrencyInput","SelectFieldCell","MySelectField","RenderValue","setChange","side","VisaversaCell","ViceVersaProps","leftAdornment","defaultTransform","dependentValue","dependentField","leftFormatProps","rightFormatProps","computedValue","setComputedValue","change","DateCell","DateInput","ActionControl","requestRowEdit","saveCurrentRow","cancelCurrentRowEdit","disableRipple","modifyMetaData","myColumns","attachOptions","attachCells","footer","Footer","attachFooter","attachActionToMetaData","HeaderColumnCell","defaultValidator","defaultNewRowObj","defaultRowDeleteFn","GridTable","rowIDColumn","newRowObj","dataIdColumn","deleteRowFn","disableFooter","touchAllDataRef","incrCounter","setCurrentEditRow","newRowAdded","setNewRowAdded","showDialog","setShowDialog","rowContainerRef","elem","scrollTo","behavior","scrollHeight","tableProps","footerGroups","rowProps","renderRow","footerGroup","getFooterGroupProps","getFooterProps","DeleteRows","deleteFn","closeWrapper","mutation","useMutation","deleteRowsFn","onSuccess","existingRecords","MAX_SAFE_INTEGER","mutate","defaultTransformer","GridParent","_columns","constructNewRowObj","rowIDRef","isDefaultRowIDSet","setIsDefaultRowIDSet","setValueAsCBWrapper","MyTypography$1","TypographyProps","FilterFormComponents","oldfielddata","initialDataValue","initialVisibleColumnData","submitButtonHide","submitButtonName","submitSecondButtonHide","submitSecondButtonName","submitSecondLoading","submitSecondAction","arg1","arg2","submitSecondValidtion","isDisplayOnly","onAction","onFieldAction","ErrorData","setErrorData","colomnValue","setColomnValue","setFields","initialVisibleColumn","setInitialVisibleColumn","dependField","dependData","dependFields","itemdepend","dependFieldFunc","dependFieldsonchange","extraData","ErrorMessage","returnvallue","itemfiels","newvalueData","__DATA","ValidateColumnValue","isValidForm","errorData","errorMessage","gridconfig","optiondata","externalFunctionCall","MyTypography","ele","mb","defaultfocus","numberRegEx","alphaNumericRegEx","entertoSubmit","isFetching","FormComponentView","HideHeader","string","submitAction","number","MasterDetailsForm","errorObj","handelActionEvent","onSubmitData","formNameMaster","isDetailHide","intialValueDetails","DETAILS_DATA","girdData","setGridData","myGridRef","myMasterRef","isDetailsHideRef","serverError","setServerError","masterMetadata","masterForm","detailsMetadata","detailsGrid","GetKeyName","intialValueMaster","intialNewRowData","accu","detailsMetadatarep","initValue","isValiate","dataold","srCount","utilFunction.GetMaxCdForDetails","myNewRowObj","AddNewRow","GetGirdData","updateValue","utilFunction.transformDetailsData","editModeValidateRow","CRUDContext","CRUDContextProvider","insertFormData","checkFormDataExist","deleteFormData","updateFormData","getFormData","getGridFormData","getFormMetaData","getGridFormMetaData","FormNew","isDataChangedRef","successAction","cancelAction","wrapperKey","args","insertFormDataFnWrapper","onError","dataUniqueKey","isSuccess","HighlightOffOutlinedIcon","displayData","setFieldError","FormViewEdit","defaultView","serialNo","setEditFormStateFromInitValues","disableCache","formMode","setFormMode","moveToViewMode","moveToEditMode","updateFormDataWrapperFn","refetchQueries","useQueries","queryFn","formEditData","editMetaData","viewMetaData","formStateFromInitValues","DeleteAction","DeleteFormDataFnWrapper","MyGridWrapper","trimEnd","tabsLegal","docType","categoryCD","tabsManagement","bankEdit","bankGrid","bankUpload","GSTEdit","GSTGrid","GSTUpload","GSTOtherUpload","GSTOtherEdit","ITREdit","ITRGrid","ITRUpload","ITROtherEdit","ITROtherUpload","KYCManagementEdit","KYCGrid","KYCManagementUpload","KYCLegalEdit","KYCLegalUpload","othersEdit","othersGrid","OthersUpload","moduleType","productType","docCategory","progressHandler","completeHandler","listDocuments","deleteDocuments","docUUID","updateDocuments","updateData","verifyDocuments","remarks","docStatus","generateDocumentDownloadURL","previewDocument","response","fetch","method","body","request_data","Headers","getDocumentMetaData","metaDataType","DOCCRUDContext","DOCCRUDContextProvider","updateDocument","getDocumentsGridData","getDocumentListingGridMetaData","getDocumentUploadAddtionalFieldsMetaData","getDocumentEditGridMetaData","DocAPICrudProviderGenerator","API.uploadDocuments","API.listDocuments","API.deleteDocuments","API.updateDocuments","API.verifyDocuments","API.getDocumentMetaData","API.generateDocumentDownloadURL","API.previewDocument","transformData","DeleteDocumentDataFnWrapper","VerifyDocumentAction","setRemarks","verifyMutation","ConfirmDocumentDataFnWrapper","rejectMutation","RejectDocumentDataFnWrapper","maxRows","UpdateDocumentData","primaryDocType","query","updateDocumentDataFnWrapper","UploadDocumentsApiWrapper","currentAction","currentDoc","Download","docData","maxDownloadLimit","PreviewWrapper","FileViewer","useBlobLoader","setBlob","fileTypeBlob","InvalidAction","exclude","DocumentGridCRUD","disableActions","disableActionsArray","newAddActions","setCurrentAction","closeMyDialog","removeQueries","exact","selectedAction","tabPanel","borderTop","TabPanel","skipBankDetails","currentTab","setCurrentTab","queryResult","API.getDocumentCRUDTabsMetadata","tabs","tab","DocGrid","FormNewExistsIfNotCreate","dataExist","exists","successActionAlways","CreateFormConfirmation","cancleFormSubmit","SimpleCRUD","dataAlwaysExists","setDataExist","useDialogStyles","topScrollPaper","topPaperScrollBody","GridCRUD","showDocuments","secondaryProduct","secondaryProductDataExist","secondaryProductDisableCache","dialogAlignTop","detailsContextGenerator","isMyDataChangedRef","dialogClasses","scrollPaper","paperScrollBody","ServerGridContext","ServerGridContextProvider","getGridMetaData","serverGridContextGenerator","gridMetaData","reqPara","ServerGrid","dataGridKey","getAPIReqPara","myRef","getGridDataFn","ServerGridWrapper","getAPIFn","Transition","Slide","StyledTab","StyledTabs","indicator","SnackbarProviderWrapperContext","useSnackbarProviderWrapper","snackbarProps","SnackbarProviderWrapper","contextValue","SnackbarProvider","DetailsGridWithHeader","ClosedEventCall","HeaderMetaData","HeaderData","ClickEventManage","isEditableForm","handelCloseEvent","TransitionComponent","lineNo","config","canFilter","currencySymbol","ALL","AFN","ARS","AWG","AUD","AZN","BSD","BBD","BYN","BZD","BMD","BOB","BAM","BWP","BGN","BRL","BND","KHR","BDT","CAD","KYD","CLP","CNY","COP","CRC","HRK","CUP","CZK","DKK","DOP","XCD","EGP","SVC","EUR","FKP","GIP","GTQ","GGP","GYD","HNL","HKD","HUF","INR","IDR","IRR","IMP","ILS","JMD","JPY","JEP","KZT","KPW","KRW","KGS","LAK","LBP","LRD","MKD","MYR","MUR","MXN","MNT","MZN","NAD","ANG","NZD","NIO","NGN","NOK","OMR","PKR","PAB","PYG","PEN","PHP","PLN","ZAR","AED","CHF","GBP","RUB","SEK","TRY","USD","VND","ZWL","BTN","BYR","CVE","DJF","DZD","ERN","FJD","GEL","GHS","ISK","KWD","LKR","LYD","MDL","MVR","MWK","NPR","RSD","SAR","SCR","SYP","TND","TTD","TWD","UGX","YER","ZMW","XOF","XAF","TZS","SZL","STN","SSP","SOS","SLL","ETB","getCurrencySymbol","currencyCode","AmountContext","AmountProvider","divider","setDivider","useAmountDivider","contextVal","AmountSelect","FooterCell","isNumberTotal","isDisplayTotal","currencyRefColumn","isCurrencyCode","finaleSymbol","amount","symbol","currencyFormat","decimalCount","symbolPosi","minimumFractionDigits","formatCurrency","FooterCell1","isDisplayValueTotal","DisplayValueLabel","countMap","currentCount","countElementsTotal","DefaultColumnFilter","preFilteredRows","setFilter","SequenceCellRenderer","rowNum","SequenceHeaderRenderer","useSequenceColumn","showSerialNoColumn","columnLabel","FilterComponent","setQueryFilters","filterData","retrievalType","isOpenRetrievalDefault","setShowFilters","retrievalComponent","refFilteredData","ctrlKey","defaultData","retrievalParaValues","retrievalValues","orgData","exportToPdf","columnsSelected","auth","retrievalParams","banklogo","pageNumber","totalPageCount","pdfStyle","startY","doc","jspdf","jsPDF","orientation","unit","page_size","pageWidth","internal","pageHeight","fromDt","toDt","getRetrievalParaDate","fileTitle","getTitleFilters","filteredRows","getDynamicRow","show_header","addImage","setFontSize","setTextColor","titleX","titleY","splitTitle","splitTextToSize","setFont","dateFns","fullTitle","titleAlignCenter","getTextWidth","tableHeaders","cname","tableData","autoTable","headStyles","fillColor","didDrawPage","pdfData","downloadTitle","exportToExcel","XlsxPopulate","fromBlankAsync","cellIndex","freezePanes","range","merged","bold","horizontalAlignment","verticalAlignment","fontColor","wrapText","rowData","columnIndex","export_type","columnKeys","maxLengths","colIndex","widthExtendBy","outputAsync","exportToCsv","unparse","exportToText","textString","exportToHtml","html","exportToXml","xmlString","jstoxml","toXML","XmlData_root","XmlData_row","WorkerContext","excelStatus","pdfStatus","csvStatus","xmlStatus","htmlStatus","textStatus","workerQueue","setWorkerQueue","pdfExporter","excelExporter","csvExporter","textExporter","htmlExporter","xmlExporter","markComplete","downloadProgress","setDownloadProgress","WorkerContextProvider","pdf","excel","csv","xml","statusRef","isCompleted","kill","useWorker","remoteDependencies","window","location","origin","handleUnload","WORKER_STATUS","RUNNING","confirmMsg","returnValue","useWorkerContext","EXPORT_WORKER_STATUS","PENDING","TIMEOUT_EXPIRED","DateTimeCell","formatter","exportReportFormMetaData","datePicker","numberFormat","inputMask","datetimePicker","dependentFieldsValues","__","dataGrid","ReportExportScreen","queryFilters","refSelectedRows","refData","isHiddenColumn","columnData","cellType","selectionModel","setSelectionModel","addInQueue","getUrlfromBlob","blobString","axios","responseType","onDownloadProgress","progressEvent","percentCompleted","round","loaded","updFilters","newObj","exportOptions","exportExcelId","exportCSVId","exportPDFId","removeChild","exportTextId","exportXMLId","exportHTMLId","preventDuplicate","persist","rowHeight","columnHeaderHeight","headerName","paginationModel","checkboxSelection","disableRowSelectionOnClick","disableColumnMenu","rowSelectionModel","onRowSelectionModelChange","DrawerFilterComponent","retrievalWindowOpen","RenderFilters","RenderFooter","RenderFooter1","filterTypes","hideAmountIn","hideShowFiltersSwitch","hideStatusBar","openDrawerFilter","showFilters","isOpenExport","setOpenExport","handleFilterChange","autoResetGroupBy","autoResetExpanded","totalColumnsWidth","toggleAllRowsExpanded","isAllRowsExpanded","RenderRows","some","GetAppIcon","CloseIcon","FixedSizeList","itemCount","itemSize","overscanCount","fuzzyTextFilterFn","matchSorter","autoRemove","customText","rowValue","filterGreaterThan","customInclude","ids","AmountRange","fromErr","setFromErr","toErr","setToErr","fromDateRef","toDateRef","propsToPassForSelect","NumberRange","customInput","ValueDateFilter","ReportGrid","reportName","dataFetcher","autoFetch","reportID","otherAPIRequestPara","translatedColumns","memoizedColumns","memoizedFilters","autoFetcher","setAutoFetcher","setQueryFilterWrapper","Footer1","Aggregated","fuzzyText","SRNO","Set","add","isVisibleCurrSymbol","pageOptions","previousPage","canNextPage","canPreviousPage","Rows","TableFilterStatusBarDataTable","ReportWrapper","fetchOptions","REPORT_DATA","COUNT","CONDITION","childSortBy","requestPara","APIRequestPara","FROM_ROW","TO_ROW","FILTER_CONDITIONS","ORDERBY_COLUMNS","IS_PAGE","transformedMetadataWithHiddenColumns","OuterElementContext","OuterElementType","outerProps","itemData","Children","toArray","smUp","noSsr","getChildSize","resetAfterIndex","useResetCache","VariableSizeList","outerElementType","innerElementType","overscan","MyTextareaAutosize$1","TextareaAutosize","MyHiddenField$1","createStyles","cardHeader","list","paper","not","not2","not3","intersection","leftOptions","rightOptions","leftOptionsLabel","rightOptionsLabel","valueSide","setChecked","setLeft","setRight","leftChecked","rightChecked","numberOfChecked","items","handleToggleAll","union","customList","avatar","subheader","Divider","List","ListItem","newChecked","ListItemIcon","ListItemText","MyTransferList$1","_leftOptionsKey","_rightOptionsKey","_optionsLeft","setLeftOptions","_optionsRight","setRightOptions","leftLoadingOptions","rightLoadingOptions","MySearchField$1","searchComponent","openSearch","setOpenSearch","onAcceptValue","MyValueField$1","toDateString"],"mappings":"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,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,MACLC,IAAK,IACLC,IAAK,KACLC,IAAK,KACLC,IAAK,IACLC,IAAK,KACLC,IAAK,KACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,KACLC,IAAK,KACLC,IAAK,MACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,MACLC,IAAK,KACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,IACLC,IAAK,MACLC,IAAK,KACLC,IAAK,MACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,MACLC,IAAK,MACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,MACLC,IAAK,KACLC,IAAK,IACLC,IAAK,MACLC,IAAK,KACLC,IAAK,MACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,MACLC,IAAK,IACLC,IAAK,MACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,OACLC,IAAK,MACLC,IAAK,IACLC,IAAK,IACLC,IAAK,MACLC,IAAK,MACLC,IAAK,MACLC,IAAK,MACLC,IAAK,IACLC,IAAK,IACLC,IAAK,MACLC,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","x_google_ignoreList":[17]}