@erpsquad/common 1.10.45 → 1.10.46

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 (161) hide show
  1. package/dist/chunks/{CssBaseline-DD305XvW.esm.js → CssBaseline-BE_MymKw.esm.js} +2 -2
  2. package/dist/chunks/{CssBaseline-DD305XvW.esm.js.map → CssBaseline-BE_MymKw.esm.js.map} +1 -1
  3. package/dist/chunks/{CssBaseline-BtFw_t3c.js → CssBaseline-FmVm1H4u.js} +2 -2
  4. package/dist/chunks/{CssBaseline-BtFw_t3c.js.map → CssBaseline-FmVm1H4u.js.map} +1 -1
  5. package/dist/chunks/{ERPUIProvider-BO9DfpEM.esm.js → ERPUIProvider-BWRPHdFg.esm.js} +9 -9
  6. package/dist/chunks/{ERPUIProvider-BO9DfpEM.esm.js.map → ERPUIProvider-BWRPHdFg.esm.js.map} +1 -1
  7. package/dist/chunks/{ERPUIProvider-DRBMMA2A.js → ERPUIProvider-Ci9MeAMt.js} +9 -9
  8. package/dist/chunks/{ERPUIProvider-DRBMMA2A.js.map → ERPUIProvider-Ci9MeAMt.js.map} +1 -1
  9. package/dist/chunks/{actionCreator-D7uVYQk5.js → actionCreator-BrkbDoSD.js} +2 -2
  10. package/dist/chunks/{actionCreator-D7uVYQk5.js.map → actionCreator-BrkbDoSD.js.map} +1 -1
  11. package/dist/chunks/{actionCreator-B95RsBM_.esm.js → actionCreator-DpYNRFa8.esm.js} +2 -2
  12. package/dist/chunks/{actionCreator-B95RsBM_.esm.js.map → actionCreator-DpYNRFa8.esm.js.map} +1 -1
  13. package/dist/chunks/{android-12-switch-cQW7NicJ.esm.js → android-12-switch-BfinmXsA.esm.js} +16 -16
  14. package/dist/chunks/{android-12-switch-cQW7NicJ.esm.js.map → android-12-switch-BfinmXsA.esm.js.map} +1 -1
  15. package/dist/chunks/{android-12-switch-ZtDpzRHx.js → android-12-switch-BqEDLbO8.js} +16 -16
  16. package/dist/chunks/{android-12-switch-ZtDpzRHx.js.map → android-12-switch-BqEDLbO8.js.map} +1 -1
  17. package/dist/chunks/{appbar-DgtcGDYS.esm.js → appbar-BSMZjpV0.esm.js} +8 -8
  18. package/dist/chunks/{appbar-DgtcGDYS.esm.js.map → appbar-BSMZjpV0.esm.js.map} +1 -1
  19. package/dist/chunks/{appbar-6ns8zbIa.js → appbar-xFkckGFf.js} +8 -8
  20. package/dist/chunks/{appbar-6ns8zbIa.js.map → appbar-xFkckGFf.js.map} +1 -1
  21. package/dist/chunks/{arrow-up-BDkqlEB_.esm.js → arrow-up-BedcrblB.esm.js} +2 -2
  22. package/dist/chunks/{arrow-up-BDkqlEB_.esm.js.map → arrow-up-BedcrblB.esm.js.map} +1 -1
  23. package/dist/chunks/{arrow-up-Dg35LjrD.js → arrow-up-BlxSDanH.js} +2 -2
  24. package/dist/chunks/{arrow-up-Dg35LjrD.js.map → arrow-up-BlxSDanH.js.map} +1 -1
  25. package/dist/chunks/{common-jPwuLblQ.esm.js → common-KSaUU42L.esm.js} +3 -5
  26. package/dist/chunks/{common-jPwuLblQ.esm.js.map → common-KSaUU42L.esm.js.map} +1 -1
  27. package/dist/chunks/{common-DKNNF5nL.js → common-mZRiR8Bu.js} +3 -5
  28. package/dist/chunks/{common-DKNNF5nL.js.map → common-mZRiR8Bu.js.map} +1 -1
  29. package/dist/chunks/{custom-editor-CqXTZfSQ.esm.js → custom-editor-BZSuqGTe.esm.js} +2 -2
  30. package/dist/chunks/{custom-editor-CqXTZfSQ.esm.js.map → custom-editor-BZSuqGTe.esm.js.map} +1 -1
  31. package/dist/chunks/{custom-editor-DLZXfaz-.js → custom-editor-MPffh-YA.js} +2 -2
  32. package/dist/chunks/{custom-editor-DLZXfaz-.js.map → custom-editor-MPffh-YA.js.map} +1 -1
  33. package/dist/chunks/{dashboard-Bya4KFzH.js → dashboard-DjSjDk1y.js} +2 -2
  34. package/dist/chunks/{dashboard-Bya4KFzH.js.map → dashboard-DjSjDk1y.js.map} +1 -1
  35. package/dist/chunks/{dashboard-DRNW-CTT.esm.js → dashboard-Dtei0Khz.esm.js} +2 -2
  36. package/dist/chunks/{dashboard-DRNW-CTT.esm.js.map → dashboard-Dtei0Khz.esm.js.map} +1 -1
  37. package/dist/chunks/{default-data-V8UszZI7.esm.js → default-data-96R_HsDl.esm.js} +17 -17
  38. package/dist/chunks/{default-data-V8UszZI7.esm.js.map → default-data-96R_HsDl.esm.js.map} +1 -1
  39. package/dist/chunks/{default-data-DVkaYnjj.js → default-data-C0z6QDJm.js} +17 -17
  40. package/dist/chunks/{default-data-DVkaYnjj.js.map → default-data-C0z6QDJm.js.map} +1 -1
  41. package/dist/chunks/{document-rki7DMqA.esm.js → document-BY4ol6iQ.esm.js} +2 -2
  42. package/dist/chunks/{document-rki7DMqA.esm.js.map → document-BY4ol6iQ.esm.js.map} +1 -1
  43. package/dist/chunks/{document-zJ0CptA2.js → document-DYtlibq0.js} +2 -2
  44. package/dist/chunks/{document-zJ0CptA2.js.map → document-DYtlibq0.js.map} +1 -1
  45. package/dist/chunks/{form-builder-conversion-DNRiFeQI.esm.js → form-builder-conversion-BRi2qp8w.esm.js} +2 -2
  46. package/dist/chunks/{form-builder-conversion-DNRiFeQI.esm.js.map → form-builder-conversion-BRi2qp8w.esm.js.map} +1 -1
  47. package/dist/chunks/{form-builder-conversion-CoTbUuLY.js → form-builder-conversion-DpySpPti.js} +2 -2
  48. package/dist/chunks/{form-builder-conversion-CoTbUuLY.js.map → form-builder-conversion-DpySpPti.js.map} +1 -1
  49. package/dist/chunks/{form-builder-deconversion-BNZtxVJq.esm.js → form-builder-deconversion-Baw1wL3s.esm.js} +4 -4
  50. package/dist/chunks/{form-builder-deconversion-BNZtxVJq.esm.js.map → form-builder-deconversion-Baw1wL3s.esm.js.map} +1 -1
  51. package/dist/chunks/{form-builder-deconversion-DfqaBgYE.js → form-builder-deconversion-C54MoBJ3.js} +4 -4
  52. package/dist/chunks/{form-builder-deconversion-DfqaBgYE.js.map → form-builder-deconversion-C54MoBJ3.js.map} +1 -1
  53. package/dist/chunks/{fullScreen-QlygOdmi.js → fullScreen-B_Geael8.js} +3 -3
  54. package/dist/chunks/{fullScreen-QlygOdmi.js.map → fullScreen-B_Geael8.js.map} +1 -1
  55. package/dist/chunks/{fullScreen-DmRL-kQw.esm.js → fullScreen-C__xZPZT.esm.js} +3 -3
  56. package/dist/chunks/{fullScreen-DmRL-kQw.esm.js.map → fullScreen-C__xZPZT.esm.js.map} +1 -1
  57. package/dist/chunks/{identifier-0SZUhw_A.esm.js → identifier-BB05HqNB.esm.js} +74 -67
  58. package/dist/chunks/{identifier-0SZUhw_A.esm.js.map → identifier-BB05HqNB.esm.js.map} +1 -1
  59. package/dist/chunks/{identifier-CaTy7Osd.js → identifier-BSjnVNXF.js} +74 -67
  60. package/dist/chunks/{identifier-CaTy7Osd.js.map → identifier-BSjnVNXF.js.map} +1 -1
  61. package/dist/chunks/{languageContext-B1keNi61.js → languageContext-CJJhc5zH.js} +3 -3
  62. package/dist/chunks/{languageContext-B1keNi61.js.map → languageContext-CJJhc5zH.js.map} +1 -1
  63. package/dist/chunks/{languageContext-DxlXP-e8.esm.js → languageContext-Ce2XfiCS.esm.js} +3 -3
  64. package/dist/chunks/{languageContext-DxlXP-e8.esm.js.map → languageContext-Ce2XfiCS.esm.js.map} +1 -1
  65. package/dist/chunks/{migration-utils-DGMdYs70.js → migration-utils-D7nOMiB2.js} +3 -3
  66. package/dist/chunks/{migration-utils-DGMdYs70.js.map → migration-utils-D7nOMiB2.js.map} +1 -1
  67. package/dist/chunks/{migration-utils-pxEWQdqc.esm.js → migration-utils-FtL5LhHH.esm.js} +3 -3
  68. package/dist/chunks/{migration-utils-pxEWQdqc.esm.js.map → migration-utils-FtL5LhHH.esm.js.map} +1 -1
  69. package/dist/chunks/{notification-_WEc_EZI.esm.js → notification-BIkuYKbC.esm.js} +2 -2
  70. package/dist/chunks/{notification-_WEc_EZI.esm.js.map → notification-BIkuYKbC.esm.js.map} +1 -1
  71. package/dist/chunks/{notification-vWmhkTRo.js → notification-Bq2o82vD.js} +2 -2
  72. package/dist/chunks/{notification-vWmhkTRo.js.map → notification-Bq2o82vD.js.map} +1 -1
  73. package/dist/chunks/{page-context-Bw5BePz5.esm.js → page-context-BqSErzQl.esm.js} +4 -4
  74. package/dist/chunks/{page-context-Bw5BePz5.esm.js.map → page-context-BqSErzQl.esm.js.map} +1 -1
  75. package/dist/chunks/{page-context-C3cz5ObT.js → page-context-D2UXRKyx.js} +4 -4
  76. package/dist/chunks/{page-context-C3cz5ObT.js.map → page-context-D2UXRKyx.js.map} +1 -1
  77. package/dist/chunks/{reducer-CwiprTvu.esm.js → reducer-ByNHeaYX.esm.js} +2 -2
  78. package/dist/chunks/{reducer-CwiprTvu.esm.js.map → reducer-ByNHeaYX.esm.js.map} +1 -1
  79. package/dist/chunks/{reducer-Dg88irMQ.js → reducer-avNgc-SK.js} +2 -2
  80. package/dist/chunks/{reducer-Dg88irMQ.js.map → reducer-avNgc-SK.js.map} +1 -1
  81. package/dist/chunks/{shareSlice-C-VMZadp.esm.js → shareSlice-BfiZhdXs.esm.js} +2 -2
  82. package/dist/chunks/{shareSlice-C-VMZadp.esm.js.map → shareSlice-BfiZhdXs.esm.js.map} +1 -1
  83. package/dist/chunks/{shareSlice-cDIBlXCI.js → shareSlice-aO_INfaN.js} +2 -2
  84. package/dist/chunks/{shareSlice-cDIBlXCI.js.map → shareSlice-aO_INfaN.js.map} +1 -1
  85. package/dist/chunks/{sidebar--uK32fMl.esm.js → sidebar-CRkbZ2CT.esm.js} +7 -7
  86. package/dist/chunks/{sidebar--uK32fMl.esm.js.map → sidebar-CRkbZ2CT.esm.js.map} +1 -1
  87. package/dist/chunks/{sidebar-C5Y48-pe.js → sidebar-Cz0RyL7a.js} +7 -7
  88. package/dist/chunks/{sidebar-C5Y48-pe.js.map → sidebar-Cz0RyL7a.js.map} +1 -1
  89. package/dist/chunks/{sidebarScreen-DzPGEcEd.esm.js → sidebarScreen-CD5QcF2c.esm.js} +5 -5
  90. package/dist/chunks/{sidebarScreen-DzPGEcEd.esm.js.map → sidebarScreen-CD5QcF2c.esm.js.map} +1 -1
  91. package/dist/chunks/{sidebarScreen-xxapW1VS.js → sidebarScreen-Daaf6HJ2.js} +5 -5
  92. package/dist/chunks/{sidebarScreen-xxapW1VS.js.map → sidebarScreen-Daaf6HJ2.js.map} +1 -1
  93. package/dist/chunks/{store-DrIxOn4Z.esm.js → store-Cih4OLuI.esm.js} +3 -3
  94. package/dist/chunks/{store-DrIxOn4Z.esm.js.map → store-Cih4OLuI.esm.js.map} +1 -1
  95. package/dist/chunks/{store-DPHbeB97.js → store-Vqut1O2z.js} +3 -3
  96. package/dist/chunks/{store-DPHbeB97.js.map → store-Vqut1O2z.js.map} +1 -1
  97. package/dist/chunks/{theme-impl-VqZAJjv7.js → theme-impl-B2IGIgWY.js} +3 -3
  98. package/dist/chunks/{theme-impl-VqZAJjv7.js.map → theme-impl-B2IGIgWY.js.map} +1 -1
  99. package/dist/chunks/{theme-impl-BPCaapgh.esm.js → theme-impl-DYj6u2Uj.esm.js} +3 -3
  100. package/dist/chunks/{theme-impl-BPCaapgh.esm.js.map → theme-impl-DYj6u2Uj.esm.js.map} +1 -1
  101. package/dist/chunks/{themeSelector-B1UMQOVw.js → themeSelector-BWS26_36.js} +2 -2
  102. package/dist/chunks/{themeSelector-B1UMQOVw.js.map → themeSelector-BWS26_36.js.map} +1 -1
  103. package/dist/chunks/{themeSelector-CRTwkja4.esm.js → themeSelector-Beuf11Zn.esm.js} +2 -2
  104. package/dist/chunks/{themeSelector-CRTwkja4.esm.js.map → themeSelector-Beuf11Zn.esm.js.map} +1 -1
  105. package/dist/chunks/{tick-wc8bi2Fu.esm.js → tick-CUJtwriw.esm.js} +2 -2
  106. package/dist/chunks/{tick-wc8bi2Fu.esm.js.map → tick-CUJtwriw.esm.js.map} +1 -1
  107. package/dist/chunks/{tick-wgixJNsN.js → tick-CVDvHe2s.js} +2 -2
  108. package/dist/chunks/{tick-wgixJNsN.js.map → tick-CVDvHe2s.js.map} +1 -1
  109. package/dist/chunks/{toggle-switch-DxtcAFXc.js → toggle-switch-B4pMpNzd.js} +2 -2
  110. package/dist/chunks/{toggle-switch-DxtcAFXc.js.map → toggle-switch-B4pMpNzd.js.map} +1 -1
  111. package/dist/chunks/{toggle-switch-BEmygLUi.esm.js → toggle-switch-C-D3Pb1x.esm.js} +2 -2
  112. package/dist/chunks/{toggle-switch-BEmygLUi.esm.js.map → toggle-switch-C-D3Pb1x.esm.js.map} +1 -1
  113. package/dist/chunks/{translations-DZ8xJh20.js → translations-CtAAqKt_.js} +2 -2
  114. package/dist/chunks/{translations-DZ8xJh20.js.map → translations-CtAAqKt_.js.map} +1 -1
  115. package/dist/chunks/{translations-CQWs1-rP.esm.js → translations-DVs6ljbG.esm.js} +2 -2
  116. package/dist/chunks/{translations-CQWs1-rP.esm.js.map → translations-DVs6ljbG.esm.js.map} +1 -1
  117. package/dist/chunks/{trash-q79H5Q4U.js → trash-BuynwhTG.js} +2 -2
  118. package/dist/chunks/{trash-q79H5Q4U.js.map → trash-BuynwhTG.js.map} +1 -1
  119. package/dist/chunks/{trash-UdiORwWn.esm.js → trash-ihDGOeyw.esm.js} +2 -2
  120. package/dist/chunks/{trash-UdiORwWn.esm.js.map → trash-ihDGOeyw.esm.js.map} +1 -1
  121. package/dist/chunks/{uom-field-wrapper-DazM6vWq.js → uom-field-wrapper-BVnBZ9TP.js} +19 -19
  122. package/dist/chunks/{uom-field-wrapper-DazM6vWq.js.map → uom-field-wrapper-BVnBZ9TP.js.map} +1 -1
  123. package/dist/chunks/{uom-field-wrapper-BnOcTtY6.esm.js → uom-field-wrapper-CacwGww9.esm.js} +19 -19
  124. package/dist/chunks/{uom-field-wrapper-BnOcTtY6.esm.js.map → uom-field-wrapper-CacwGww9.esm.js.map} +1 -1
  125. package/dist/chunks/{useAccountSetting-C-vbVYcu.esm.js → useAccountSetting-DIJxoz5K.esm.js} +3 -3
  126. package/dist/chunks/{useAccountSetting-C-vbVYcu.esm.js.map → useAccountSetting-DIJxoz5K.esm.js.map} +1 -1
  127. package/dist/chunks/{useAccountSetting-DLprQFgv.js → useAccountSetting-DTnGA_ej.js} +3 -3
  128. package/dist/chunks/{useAccountSetting-DLprQFgv.js.map → useAccountSetting-DTnGA_ej.js.map} +1 -1
  129. package/dist/chunks/{useAdditionalDiscountAutoCalc-DFJ5MUDu.js → useAdditionalDiscountAutoCalc-BnoUyFAt.js} +5 -5
  130. package/dist/chunks/{useAdditionalDiscountAutoCalc-DFJ5MUDu.js.map → useAdditionalDiscountAutoCalc-BnoUyFAt.js.map} +1 -1
  131. package/dist/chunks/{useAdditionalDiscountAutoCalc-BZjzj936.esm.js → useAdditionalDiscountAutoCalc-Cj2TFEUf.esm.js} +5 -5
  132. package/dist/chunks/{useAdditionalDiscountAutoCalc-BZjzj936.esm.js.map → useAdditionalDiscountAutoCalc-Cj2TFEUf.esm.js.map} +1 -1
  133. package/dist/chunks/{useAuth-DdrmIbws.js → useAuth-BfXZw2ZG.js} +4 -4
  134. package/dist/chunks/{useAuth-DdrmIbws.js.map → useAuth-BfXZw2ZG.js.map} +1 -1
  135. package/dist/chunks/{useAuth-C2QRC3wF.esm.js → useAuth-DI1ZdQmL.esm.js} +4 -4
  136. package/dist/chunks/{useAuth-C2QRC3wF.esm.js.map → useAuth-DI1ZdQmL.esm.js.map} +1 -1
  137. package/dist/chunks/{useLangauge-C3CeLP6M.js → useLangauge-DkFW3jmt.js} +2 -2
  138. package/dist/chunks/{useLangauge-C3CeLP6M.js.map → useLangauge-DkFW3jmt.js.map} +1 -1
  139. package/dist/chunks/{useLangauge-DGf95f3m.esm.js → useLangauge-HfM5K9im.esm.js} +2 -2
  140. package/dist/chunks/{useLangauge-DGf95f3m.esm.js.map → useLangauge-HfM5K9im.esm.js.map} +1 -1
  141. package/dist/components/index.esm.js +15 -15
  142. package/dist/components/index.js +15 -15
  143. package/dist/contexts/index.esm.js +3 -3
  144. package/dist/contexts/index.js +3 -3
  145. package/dist/hooks/index.esm.js +5 -5
  146. package/dist/hooks/index.js +5 -5
  147. package/dist/icons/index.esm.js +7 -7
  148. package/dist/icons/index.js +7 -7
  149. package/dist/index.esm.js +31 -31
  150. package/dist/index.js +31 -31
  151. package/dist/layout/index.esm.js +2 -2
  152. package/dist/layout/index.js +2 -2
  153. package/dist/redux/index.esm.js +4 -4
  154. package/dist/redux/index.js +4 -4
  155. package/dist/theme/index.esm.js +2 -2
  156. package/dist/theme/index.js +2 -2
  157. package/dist/utils/index.esm.js +7 -7
  158. package/dist/utils/index.js +6 -6
  159. package/dist/views/index.esm.js +9 -9
  160. package/dist/views/index.js +8 -8
  161. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useAdditionalDiscountAutoCalc-BZjzj936.esm.js","sources":["../../src/hooks/common.ts","../../src/hooks/use-material-calculations.ts","../../src/hooks/useCheckSkuAndName.tsx","../../src/hooks/useUniquenessCheck.tsx","../../src/hooks/useLanguageFallback.ts","../../src/hooks/useReduxIntegration.ts","../../src/hooks/useAdditionalDiscountAutoCalc.ts"],"sourcesContent":["import moment from \"moment\";\nimport { useAuth } from \"./useAuth\";\nimport _ from \"lodash\";\n// Note: These action creators should be provided by the consuming application\n// Creating stubs for build compatibility\nconst createStub = (name: string) => () => {\n console.warn(`${name} is not implemented. This function should be provided by the consuming application.`);\n return Promise.resolve([]);\n};\n\nconst getAgreement = createStub('getAgreement');\nconst getBins = createStub('getBins');\nconst getCategoryItems = createStub('getCategoryItems');\nconst getChartOfAccounts = createStub('getChartOfAccounts');\nconst getCompanies = createStub('getCompanies');\nconst getCurrency = createStub('getCurrency');\nconst getCustomerSegments = createStub('getCustomerSegments');\nconst getDepartments = createStub('getDepartments');\nconst getDiscountedItems = createStub('getDiscountedItems');\nconst getIncoTerms = createStub('getIncoTerms');\nconst getItems = createStub('getItems');\nconst getLocation = createStub('getLocation');\nconst getParties = createStub('getParties');\nconst getPartiesIndustry = createStub('getPartiesIndustry');\nconst getPaymentTerm = createStub('getPaymentTerm');\nconst getPurchaseInvoices = createStub('getPurchaseInvoices');\nconst getPurchaseOrderReceipts = createStub('getPurchaseOrderReceipts');\nconst getPurchaseRepresentatives = createStub('getPurchaseRepresentatives');\nconst getSalesPerason = createStub('getSalesPerason');\nconst getShippingRules = createStub('getShippingRules');\nconst getTaxTemplate = createStub('getTaxTemplate');\nconst getUoms = createStub('getUoms');\nimport { getCountries } from \"libphonenumber-js\";\nexport const formatNumber = (\n num: number,\n defaultCurrencySymbol: string = \"$\"\n): string => {\n if (num >= 1_000_000) {\n return `${defaultCurrencySymbol} ${(num / 1_000_000).toFixed(1)} M`;\n } else if (num >= 100_000) {\n return `${defaultCurrencySymbol} ${(num / 100_000).toFixed(1)} L`; // L for Lakhs\n } else if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1)} K`;\n } else {\n return `${defaultCurrencySymbol} ${num.toFixed(2)}`;\n }\n};\n\nexport function formateDate(date, format = \"DD-MM-YYYY\") {\n console.log(\"date\",date)\n if (!date) {\n return;\n }\n return moment(date).format(format);\n}\n\nexport function capitalizeWords(str) {\n return str\n ? str\n .split(\" \")\n .map(\n (word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n )\n .join(\" \")\n : \"\";\n}\n\nexport const defaultUserCurrency = () => {\n // eslint-disable-next-line\n const { user } = useAuth();\n return user?.currency_data?.symbol || \"\";\n};\nexport const valueWithCurrency = (value: any) => {\n // eslint-disable-next-line\n const { user } = useAuth();\n if (!value) {\n return;\n }\n return `${user?.currency_data?.symbol || \"\"} ${value}`;\n};\n\nexport const sortData = (data: any[], key: string, direction: string) => {\n const formatedData = _.orderBy(data, key, direction);\n return formatedData;\n};\nexport function recursiveSort(\n data: any[],\n nestedKeys: any[],\n header: string,\n direction: string\n) {\n console.log(data, nestedKeys, header, direction);\n if (!nestedKeys.length) return sortData(data, header, direction);\n const [currentKey, ...remainingKey] = nestedKeys;\n return data?.map((item) => {\n return {\n ...item,\n [currentKey]: recursiveSort(\n item[currentKey],\n remainingKey || [],\n header,\n direction\n ),\n };\n });\n}\n\nexport function formatTime(isoString: string, format: string = \"HH:mm:ss\") {\n if (!isoString) {\n return;\n }\n const date = new Date(isoString); // Parse the ISO string\n\n const padZero = (num: number) => (num < 10 ? \"0\" : \"\") + num;\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n\n if (format === \"HH:mm:ss\") {\n return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`;\n }\n\n if (format === \"HH:mm\") {\n return `${padZero(hours)}:${padZero(minutes)}`;\n }\n\n if (format === \"hh:mm A\") {\n const period = hours >= 12 ? \"PM\" : \"AM\";\n const twelveHour = hours % 12 || 12;\n return `${padZero(twelveHour)}:${padZero(minutes)} ${period}`;\n }\n\n return date.toTimeString().slice(0, 8); // Default: HH:mm:ss\n}\n\ntype Nullable<T> = {\n [P in keyof T]: T[P] extends object ? Nullable<T[P]> : T[P] | null;\n};\n\nexport function convertEmptyToNull<T extends Record<string, any>>(\n obj: T\n): Nullable<T> {\n return Object.entries(obj).reduce((acc, [key, value]) => {\n if (\n value === \"\" ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) && // Prevent arrays from being treated as objects\n Object.keys(value).length === 0)\n ) {\n acc[key as keyof T] = null;\n } else if (Array.isArray(value)) {\n acc[key as keyof T] = value.map((item) =>\n typeof item === \"object\" && item !== null\n ? convertEmptyToNull(item) // Recursively handle array elements\n : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n acc[key as keyof T] = convertEmptyToNull(value);\n } else {\n acc[key as keyof T] = value;\n }\n return acc;\n }, {} as Nullable<T>);\n}\n\nfunction checkPattern(i: any, pattern: any[]) {\n return pattern.some((obj) => i.includes(obj));\n}\n\nexport function removeExtraKeys(data: any, extraKeys = []) {\n const pattern = [\n \"_at\",\n \"_by\",\n \"_data\",\n \"created_user\",\n \"updated_user\",\n ...extraKeys,\n ];\n for (const i in data) {\n if (checkPattern(i, pattern)) {\n delete data[i];\n } else if (typeof data[i] === \"object\" && !Array.isArray(data[i])) {\n removeExtraKeys(data[i], [\"_at\", \"_by\", \"_data\"]);\n }\n }\n\n return data;\n}\n\nexport const apiType = {\n company: getCompanies,\n items: getItems,\n currency: getCurrency,\n salesperson: getSalesPerason,\n party: getParties,\n department: getDepartments,\n location: getLocation,\n uom: getUoms,\n discountedItems: getDiscountedItems,\n taxTemplate: getTaxTemplate,\n paymentTerm: getPaymentTerm,\n incoTerms: getIncoTerms,\n shippingRules:getShippingRules,\n bins:getBins,\n agreement: getAgreement,\n accounts: getChartOfAccounts,\n invoices: getPurchaseInvoices,\n purchaseOrderReceipts: getPurchaseOrderReceipts,\n representatives: getPurchaseRepresentatives,\n industry:getPartiesIndustry,\n categoryItems:getCategoryItems,\n customerSegment:getCustomerSegments,\n countries:getCountries,\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useMemo } from 'react';\n\n// ==================== CONSTANTS ====================\nconst MATERIAL_CONSTANTS = {\n STEEL_DENSITY: 7.85,\n LENGTH_CONVERSION_FACTOR: 1000,\n TUBE_CALCULATION_FACTOR: 0.024662,\n COIL_WEIGHTS: {\n GI: 2879.95,\n HR: 2356.59,\n },\n} as const;\n\n// ==================== TYPES ====================\ntype SteelType = keyof typeof MATERIAL_CONSTANTS.COIL_WEIGHTS;\ntype TubeType = 'Round' | 'Square' | 'Rectangle';\n\ninterface BaseFormValues {\n // Board calculation fields\n face_width?: string | number;\n bending?: string | number;\n height?: string | number;\n total_width?: string | number;\n boards_thickness?: string | number;\n boards_length?: string | number;\n \n // Steel calculation fields\n steel_length?: string | number;\n steel_width?: string | number;\n steel_thickness?: string | number;\n steel_type?: SteelType;\n \n // Tube calculation fields\n tube_type?: TubeType;\n tube_od?: string | number;\n shape_width?: string | number;\n shape_height?: string | number;\n material_thickness?: string | number;\n material_length?: string | number;\n}\n\ninterface MaterialCalculations {\n totalWidth: number;\n materialUnit: number;\n boardsWeight: number;\n steelWeight: number;\n materialWeight: number;\n}\n\ninterface CalculationResult<T = number> {\n value: T;\n isValid: boolean;\n error?: string;\n}\n\n// ==================== UTILITY FUNCTIONS ====================\n/**\n * Safely parses a value to number with comprehensive validation\n */\nconst safeParseNumber = (value: string | number | undefined | null): CalculationResult<number> => {\n if (value === undefined || value === null || value === '') {\n return { value: 0, isValid: false, error: 'Empty value' };\n }\n \n const parsed = typeof value === 'string' ? parseFloat(value.trim()) : Number(value);\n \n if (isNaN(parsed)) {\n return { value: 0, isValid: false, error: 'Invalid number format' };\n }\n \n if (!isFinite(parsed)) {\n return { value: 0, isValid: false, error: 'Number is not finite' };\n }\n \n return { value: parsed, isValid: true };\n};\n\n/**\n * Validates that all provided values are positive numbers\n */\nconst validatePositiveNumbers = (...values: (string | number | undefined)[]): boolean => {\n return values.every(value => {\n const result = safeParseNumber(value);\n return result.isValid && result.value > 0;\n });\n};\n\n/**\n * Creates a memoization key from form values to optimize re-calculations\n */\nconst createMemoKey = (formValues: BaseFormValues | undefined): string => {\n if (!formValues) return 'empty';\n \n // Only include relevant fields to avoid unnecessary recalculations\n const relevantFields = [\n 'face_width', 'bending', 'height', 'total_width', 'boards_thickness', 'boards_length',\n 'steel_length', 'steel_width', 'steel_thickness', 'steel_type',\n 'tube_type', 'tube_od', 'shape_width', 'shape_height', 'material_thickness', 'material_length'\n ];\n \n return relevantFields\n .map(field => `${field}:${formValues[field as keyof BaseFormValues] ?? ''}`)\n .join('|');\n};\n\n// ==================== CALCULATION FUNCTIONS ====================\n/**\n * Calculates the total width for boards costing\n * Formula: ((height + bending) * 2) + face_width\n */\nconst calculateBoardsTotalWidth = (formValues: BaseFormValues): CalculationResult<number> => {\n const { face_width, bending, height } = formValues;\n \n if (!validatePositiveNumbers(face_width, bending, height)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards total width calculation' };\n }\n \n const faceWidthResult = safeParseNumber(face_width);\n const bendingResult = safeParseNumber(bending);\n const heightResult = safeParseNumber(height);\n \n if (![faceWidthResult, bendingResult, heightResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const totalWidth = ((heightResult.value + bendingResult.value) * 2) + faceWidthResult.value;\n \n return { value: totalWidth, isValid: true };\n};\n\n/**\n * Calculates the weight of boards\n * Formula: (total_width * thickness * (length / 1000)) * 7.85\n */\nconst calculateBoardsWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { total_width, boards_thickness, boards_length } = formValues;\n \n if (!validatePositiveNumbers(total_width, boards_thickness, boards_length)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards weight calculation' };\n }\n \n const totalWidthResult = safeParseNumber(total_width);\n const thicknessResult = safeParseNumber(boards_thickness);\n const lengthResult = safeParseNumber(boards_length);\n \n if (![totalWidthResult, thicknessResult, lengthResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (totalWidthResult.value * thicknessResult.value * \n (lengthResult.value / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR)) * \n MATERIAL_CONSTANTS.STEEL_DENSITY;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates the weight of steel\n * Formula: (length * width * thickness * 7.85) / 1000\n */\nconst calculateSteelWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_length, steel_width, steel_thickness } = formValues;\n \n if (!validatePositiveNumbers(steel_length, steel_width, steel_thickness)) {\n return { value: 0, isValid: false, error: 'Invalid input values for steel weight calculation' };\n }\n \n const lengthResult = safeParseNumber(steel_length);\n const widthResult = safeParseNumber(steel_width);\n const thicknessResult = safeParseNumber(steel_thickness);\n \n if (![lengthResult, widthResult, thicknessResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (lengthResult.value * widthResult.value * thicknessResult.value * \n MATERIAL_CONSTANTS.STEEL_DENSITY) / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Gets the material unit weight based on steel type\n */\nconst calculateMaterialUnit = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_type } = formValues;\n \n if (!steel_type) {\n return { value: 0, isValid: false, error: 'Steel type not specified' };\n }\n \n if (!(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n return { value: 0, isValid: false, error: `Unsupported steel type: ${steel_type}` };\n }\n \n const weight = MATERIAL_CONSTANTS.COIL_WEIGHTS[steel_type];\n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates material weight based on tube type and dimensions\n * Supports Round, Square, and Rectangle tube types\n */\nconst calculateTubeMaterialWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { tube_type, tube_od, shape_width, shape_height, material_thickness, material_length } = formValues;\n \n if (!tube_type) {\n return { value: 0, isValid: false, error: 'Tube type not specified' };\n }\n \n const thicknessResult = safeParseNumber(material_thickness);\n const lengthResult = safeParseNumber(material_length);\n \n if (!thicknessResult.isValid || !lengthResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid thickness or length values' };\n }\n \n let weight = 0;\n \n switch (tube_type) {\n case 'Round': {\n const odResult = safeParseNumber(tube_od);\n if (!odResult.isValid || odResult.value <= thicknessResult.value) {\n return { value: 0, isValid: false, error: 'Invalid outer diameter for round tube' };\n }\n \n weight = (odResult.value - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR * lengthResult.value;\n break;\n }\n \n case 'Square':\n case 'Rectangle': {\n const widthResult = safeParseNumber(shape_width);\n const heightResult = safeParseNumber(shape_height);\n \n if (!widthResult.isValid || !heightResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid width or height for rectangular tube' };\n }\n \n const perimeter = 2 * (widthResult.value + heightResult.value);\n weight = (((perimeter / Math.PI) - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR) * lengthResult.value;\n break;\n }\n \n default:\n return { value: 0, isValid: false, error: `Unsupported tube type: ${tube_type}` };\n }\n \n return { value: Math.max(0, weight), isValid: true };\n};\n\n// ==================== MAIN HOOK ====================\n/**\n * Custom hook for optimized material calculations with comprehensive error handling\n * and performance optimization through memoization\n */\nexport const useMaterialCalculations = (formValues?: BaseFormValues): MaterialCalculations => {\n const calculations = useMemo(() => {\n if (!formValues) {\n return {\n totalWidth: 0,\n materialUnit: 0,\n boardsWeight: 0,\n steelWeight: 0,\n materialWeight: 0,\n };\n }\n \n // Calculate all values with error handling\n const totalWidthResult = calculateBoardsTotalWidth(formValues);\n const materialUnitResult = calculateMaterialUnit(formValues);\n const boardsWeightResult = calculateBoardsWeight(formValues);\n const steelWeightResult = calculateSteelWeight(formValues);\n const materialWeightResult = calculateTubeMaterialWeight(formValues);\n \n // Optional: Log errors in development\n if (process.env.NODE_ENV === 'development') {\n [totalWidthResult, materialUnitResult, boardsWeightResult, steelWeightResult, materialWeightResult]\n .filter(result => !result.isValid && result.error)\n .forEach(result => console.warn('Calculation warning:', result.error));\n }\n \n return {\n totalWidth: totalWidthResult.value,\n materialUnit: materialUnitResult.value,\n boardsWeight: boardsWeightResult.value,\n steelWeight: steelWeightResult.value,\n materialWeight: materialWeightResult.value,\n };\n }, [createMemoKey(formValues)]); // Optimized dependency to prevent unnecessary recalculations\n \n return calculations;\n};\n\n// ==================== ADDITIONAL UTILITIES ====================\n/**\n * Utility function to validate form values before calculations\n */\nexport const validateFormValues = (formValues: BaseFormValues): { isValid: boolean; errors: string[] } => {\n const errors: string[] = [];\n const { tube_type, steel_type } = formValues;\n \n // Validate steel type if provided\n if (steel_type && !(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n errors.push(`Invalid steel type: ${steel_type}`);\n }\n \n // Validate tube type if provided\n if (tube_type && !['Round', 'Square', 'Rectangle'].includes(tube_type)) {\n errors.push(`Invalid tube type: ${tube_type}`);\n }\n \n return { isValid: errors.length === 0, errors };\n};\n\n/**\n * Get available steel types for form validation\n */\nexport const getAvailableSteelTypes = (): SteelType[] => {\n return Object.keys(MATERIAL_CONSTANTS.COIL_WEIGHTS) as SteelType[];\n};\n\n/**\n * Get available tube types for form validation\n */\nexport const getAvailableTubeTypes = (): TubeType[] => {\n return ['Round', 'Square', 'Rectangle'];\n};\n\nexport default {\n useMaterialCalculations,\n validateFormValues,\n getAvailableSteelTypes,\n getAvailableTubeTypes,\n MATERIAL_CONSTANTS,\n};\nexport type {\n BaseFormValues,\n MaterialCalculations,\n SteelType,\n TubeType,\n CalculationResult,\n};","import { useCallback } from 'react';\nimport { checkSkuAndItemName } from '../utils/common';\n\nexport interface IUseNameSkuUniquenessCheckProps {\n fieldPrefix: string;\n formMethods: any;\n data?: any;\n}\n\nexport const useNameSkuUniquenessCheck = ({\n fieldPrefix,\n formMethods,\n data,\n}: IUseNameSkuUniquenessCheckProps) => {\n const { watch=()=>{}, setError=()=>{} } = formMethods||{};\n const formValues = watch(fieldPrefix);\n\n const namePrev = data?.name;\n const skuPrev= data?.sku\n const checkNameAndSkuUniqueness = useCallback(async () => {\n let isUnique=true; \n\n try {\n if(namePrev===formValues?.name && skuPrev===formValues?.sku) return true;\n const response = await checkSkuAndItemName({\n name: formValues?.name,\n sku: formValues?.sku,\n ...(data?.id && { id: data?.id }),\n });\n if (response.name) {\n setError(`${fieldPrefix}.name`, {\n message: 'Name already exists',\n type: 'manual',\n ref: `${fieldPrefix}.name`,\n });\n isUnique=false;\n }\n\n if (response.sku) {\n setError(`${fieldPrefix}.sku`, {\n message: 'SKU already exists',\n type: 'manual',\n ref: `${fieldPrefix}.sku`,\n });\n isUnique=false;\n }\n\n return isUnique;\n } catch (error) {\n console.error('Uniqueness check failed:', error);\n return isUnique;\n }\n //eslint-disable-next-line\n }, [formValues?.name, formValues?.sku, setError]);\n\n return { checkNameAndSkuUniqueness };\n};\n\nexport default useNameSkuUniquenessCheck;\n","import { useMemo } from 'react'\nimport { checkUniqueFields } from '../utils/common'\n\nexport default function useUniquenessCheck({ fieldPrefix, formMethods, data = {}, fields = [] }) {\n\tconst { watch = () => { }, setError = () => { }, formState = {} } = formMethods || {}\n\n\tconst formValues = watch(fieldPrefix)\n\n\t// Stable reference\n\tconst previous = useMemo(() => data || {}, [data])\n\n\tconst checkUniqueness = async () => {\n\t\tlet isUnique = true\n\n\t\ttry {\n\t\t\t// Skip check if no changes\n\t\t\tconst nothingChanged = fields.every((field) => previous[field] === formValues?.[field])\n\n\t\t\tif (nothingChanged) return true\n\n\t\t\t// Build payload\n\t\t\tconst payload = {}\n\t\t\tfields.forEach((field) => (payload[field] = formValues?.[field]))\n\n\t\t\tif (data?.id) payload.id = data.id\n\n\t\t\t// API call\n\t\t\tconst response = await checkUniqueFields(payload)\n\n\t\t\t// Loop through API response\n\t\t\tfor (const [field, exists] of Object.entries(response)) {\n\t\t\t\tif (exists) {\n\t\t\t\t\tconst errorPath = `${fieldPrefix}.${field}`\n\t\t\t\t\tsetError(errorPath, {\n\t\t\t\t\t\ttype: 'manual',\n\t\t\t\t\t\tmessage: `${field.replace(/_/g, ' ').toLowerCase()} already exists`,\n\t\t\t\t\t})\n\n\t\t\t\t\tisUnique = false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.log('Errors now:', formState.errors)\n\n\t\t\treturn isUnique\n\t\t} catch (error) {\n\t\t\tconsole.error('Uniqueness check failed:', error)\n\t\t\treturn isUnique\n\t\t}\n\t}\n\n\treturn { checkUniqueness }\n}\n","import { useState } from 'react';\nimport { DEFAULT_LANG } from '../constants/all-language';\n\ninterface ILanguage {\n label: string;\n code: string;\n direction: string;\n}\n\n// Configuration for fallback behavior\ninterface FallbackConfig {\n fallbackOrder?: string[];\n enableConsoleWarnings?: boolean;\n retryOnError?: boolean;\n maxRetries?: number;\n}\n\n// Updated fallback order with English first\nconst DEFAULT_FALLBACK_CONFIG: Required<FallbackConfig> = {\n fallbackOrder: ['en', 'en-US', DEFAULT_LANG], // English first\n enableConsoleWarnings: true,\n retryOnError: false,\n maxRetries: 3,\n};\n\nexport const useLanguageFallback = (config: FallbackConfig = {}) => {\n const finalConfig = { ...DEFAULT_FALLBACK_CONFIG, ...config };\n const [retryCount, setRetryCount] = useState(0);\n\n // Create English fallback language object\n const createEnglishFallback = (): ILanguage => ({\n code: 'en',\n label: 'English',\n direction: 'ltr'\n });\n\n // Find the best available language with fallback logic\n const findBestAvailableLanguage = (\n languages: ILanguage[], \n preferredCode?: string\n ): ILanguage | null => {\n if (!languages || languages.length === 0) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No languages available for fallback selection, using English');\n }\n return createEnglishFallback();\n }\n\n // First try the preferred language if provided\n if (preferredCode) {\n const preferred = languages.find(lang => lang.code === preferredCode);\n if (preferred) return preferred;\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Preferred language \"${preferredCode}\" not found, trying fallbacks`);\n }\n }\n\n // Try fallback languages in order (English first)\n for (const fallbackCode of finalConfig.fallbackOrder) {\n const fallback = languages.find(lang => lang.code === fallbackCode);\n if (fallback) {\n if (finalConfig.enableConsoleWarnings && preferredCode && preferredCode !== fallbackCode) {\n console.warn(`Using fallback language: \"${fallbackCode}\" instead of \"${preferredCode}\"`);\n }\n return fallback;\n }\n }\n\n // If no fallbacks found, return English or first available language\n const englishLang = languages.find(lang => lang.code === 'en');\n if (englishLang) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('Using English as ultimate fallback');\n }\n return englishLang;\n }\n\n // Last resort - return first available language\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No English fallback found, using first available language');\n }\n return languages[0] || createEnglishFallback();\n };\n\n // Create a fallback language object when API fails - always English\n const createEmergencyFallback = (): ILanguage => {\n return createEnglishFallback();\n };\n\n // Validate if a language code exists in the available languages\n const validateLanguageCode = (languages: ILanguage[], code: string): boolean => {\n return languages.some(lang => lang.code === code);\n };\n\n // Get saved language from localStorage with validation\n const getSavedLanguage = (languages: ILanguage[]): string | null => {\n const saved = localStorage.getItem('_language');\n if (!saved) return null;\n \n // Validate saved language exists in available languages\n if (validateLanguageCode(languages, saved)) {\n return saved;\n }\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Saved language \"${saved}\" is no longer available, will use English fallback`);\n }\n return null;\n };\n\n // Ensure English is always available in languages array\n const ensureEnglishAvailable = (languages: ILanguage[]): ILanguage[] => {\n const hasEnglish = languages.some(lang => lang.code === 'en');\n if (!hasEnglish) {\n return [createEnglishFallback(), ...languages];\n }\n return languages;\n };\n\n // Retry mechanism for failed language fetches\n const shouldRetry = (): boolean => {\n return finalConfig.retryOnError && retryCount < finalConfig.maxRetries;\n };\n\n const incrementRetry = () => {\n setRetryCount(prev => prev + 1);\n };\n\n const resetRetry = () => {\n setRetryCount(0);\n };\n\n return {\n findBestAvailableLanguage,\n createEmergencyFallback,\n createEnglishFallback,\n validateLanguageCode,\n getSavedLanguage,\n ensureEnglishAvailable,\n shouldRetry,\n incrementRetry,\n resetRetry,\n retryCount,\n config: finalConfig,\n };\n};\n\n// Additional utility hook for language state management\nexport const useLanguageState = () => {\n const [isInitialized, setIsInitialized] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const markInitialized = () => setIsInitialized(true);\n const setError = (error: string) => {\n setHasError(true);\n setErrorMessage(error);\n };\n const clearError = () => {\n setHasError(false);\n setErrorMessage(null);\n };\n\n return {\n isInitialized,\n hasError,\n errorMessage,\n markInitialized,\n setError,\n clearError,\n };\n};\n\nexport default {\n useLanguageFallback,\n useLanguageState,\n};\n\nexport type { ILanguage, FallbackConfig };\n\n","import { useERPUI } from '../components/providers/ERPUIProvider';\n\n/**\n * Hook to determine Redux integration status and provide conditional Redux usage\n */\nexport const useReduxIntegration = () => {\n const { useRedux, apiClient } = useERPUI();\n \n // Helper function to conditionally use Redux hooks\n const useConditionalRedux = <T>(\n reduxHook: () => T,\n fallbackValue: T\n ): T => {\n if (!useRedux) {\n return fallbackValue;\n }\n \n try {\n return reduxHook();\n } catch (error) {\n console.warn('Redux hook failed, falling back to default value:', error);\n return fallbackValue;\n }\n };\n \n // Helper function to conditionally dispatch Redux actions\n const conditionalDispatch = (action: any) => {\n if (!useRedux) {\n console.warn('Redux not enabled, cannot dispatch action:', action);\n return Promise.resolve();\n }\n \n try {\n const { useAppDispatch } = require('../redux/hooks');\n const dispatch = useAppDispatch();\n return dispatch(action);\n } catch (error) {\n console.error('Failed to dispatch Redux action:', error);\n return Promise.reject(error);\n }\n };\n \n return {\n useRedux,\n apiClient,\n useConditionalRedux,\n conditionalDispatch,\n };\n};","import { useEffect, useRef } from 'react';\n\nimport { calculateAdditionalDiscountCrossValue } from '../utils/calculation';\n\nfunction computeTotal(\n items: any[],\n discountOn: string | null | undefined,\n netAmountField = 'net_amount',\n grossAmountField = 'gross_amount'\n): number {\n const field = discountOn === 'Gross Amount' ? grossAmountField : netAmountField;\n return items.reduce((sum: number, item: any) => sum + Number(item[field] || 0), 0);\n}\n\nexport interface AdditionalDiscountAutoCalcConfig {\n items: any[];\n discountOn: string | null | undefined;\n percentage: number | string;\n amount: number | string;\n setValue: (name: string, value: any) => void;\n fieldConfig: {\n percentageField: string;\n amountField: string;\n };\n netAmountField?: string;\n grossAmountField?: string;\n\n /**\n * When true, auto-disabled logic is bypassed.\n * Caller explicitly controls field disabled states\n * via disablePercentageField / disableAmountField.\n * Auto sync (value calculation) still works regardless.\n */\n manualDisabled?: boolean;\n disablePercentageField?: boolean;\n disableAmountField?: boolean;\n}\n\nexport function useAdditionalDiscountAutoCalc(config: AdditionalDiscountAutoCalcConfig) {\n const lastChangedBy = useRef<'user' | 'auto'>('user');\n const lastUserEdited = useRef<'percentage' | 'amount' | null>(null);\n\n // Percentage → Amount\n useEffect(() => {\n if (lastChangedBy.current === 'auto') {\n lastChangedBy.current = 'user';\n return;\n }\n if (!config.discountOn) return;\n const pct = Number(config.percentage);\n const amt = Number(config.amount);\n const total = computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField);\n\n if (!pct && amt && lastUserEdited.current === 'percentage') {\n config.setValue(config.fieldConfig.amountField, 0);\n lastUserEdited.current = null;\n return;\n }\n if (!pct || !total) return;\n\n lastUserEdited.current = 'percentage';\n lastChangedBy.current = 'auto';\n config.setValue(config.fieldConfig.amountField,\n calculateAdditionalDiscountCrossValue(pct, 'percentage', total));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.percentage, config.discountOn]);\n\n // Amount → Percentage\n useEffect(() => {\n if (lastChangedBy.current === 'auto') {\n lastChangedBy.current = 'user';\n return;\n }\n if (!config.discountOn) return;\n const pct = Number(config.percentage);\n const amt = Number(config.amount);\n const total = computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField);\n\n if (!amt && pct && lastUserEdited.current === 'amount') {\n config.setValue(config.fieldConfig.percentageField, 0);\n lastUserEdited.current = null;\n return;\n }\n if (!amt || !total) return;\n\n lastUserEdited.current = 'amount';\n lastChangedBy.current = 'auto';\n config.setValue(config.fieldConfig.percentageField,\n calculateAdditionalDiscountCrossValue(amt, 'amount', total));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.amount, config.discountOn]);\n\n const autoPercentageDisabled = !config.discountOn || (\n Boolean(Number(config.amount)) && lastUserEdited.current !== 'percentage'\n );\n const autoAmountDisabled = !config.discountOn || (\n Boolean(Number(config.percentage)) && lastUserEdited.current !== 'amount'\n );\n\n const isPercentageDisabled = config.manualDisabled\n ? (config.disablePercentageField ?? false)\n : autoPercentageDisabled;\n const isAmountDisabled = config.manualDisabled\n ? (config.disableAmountField ?? false)\n : autoAmountDisabled;\n\n const totalAmount = config.discountOn\n ? computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField)\n : 0;\n const isAmountExceeded = !!(config.discountOn && totalAmount > 0 && Number(config.amount) > totalAmount);\n const isPercentageExceeded = Number(config.percentage) > 100;\n\n return { isPercentageDisabled, isAmountDisabled, isAmountExceeded, isPercentageExceeded };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAdditionalDiscountAutoCalc-Cj2TFEUf.esm.js","sources":["../../src/hooks/common.ts","../../src/hooks/use-material-calculations.ts","../../src/hooks/useCheckSkuAndName.tsx","../../src/hooks/useUniquenessCheck.tsx","../../src/hooks/useLanguageFallback.ts","../../src/hooks/useReduxIntegration.ts","../../src/hooks/useAdditionalDiscountAutoCalc.ts"],"sourcesContent":["import moment from \"moment\";\nimport { useAuth } from \"./useAuth\";\nimport _ from \"lodash\";\n// Note: These action creators should be provided by the consuming application\n// Creating stubs for build compatibility\nconst createStub = (name: string) => () => {\n console.warn(`${name} is not implemented. This function should be provided by the consuming application.`);\n return Promise.resolve([]);\n};\n\nconst getAgreement = createStub('getAgreement');\nconst getBins = createStub('getBins');\nconst getCategoryItems = createStub('getCategoryItems');\nconst getChartOfAccounts = createStub('getChartOfAccounts');\nconst getCompanies = createStub('getCompanies');\nconst getCurrency = createStub('getCurrency');\nconst getCustomerSegments = createStub('getCustomerSegments');\nconst getDepartments = createStub('getDepartments');\nconst getDiscountedItems = createStub('getDiscountedItems');\nconst getIncoTerms = createStub('getIncoTerms');\nconst getItems = createStub('getItems');\nconst getLocation = createStub('getLocation');\nconst getParties = createStub('getParties');\nconst getPartiesIndustry = createStub('getPartiesIndustry');\nconst getPaymentTerm = createStub('getPaymentTerm');\nconst getPurchaseInvoices = createStub('getPurchaseInvoices');\nconst getPurchaseOrderReceipts = createStub('getPurchaseOrderReceipts');\nconst getPurchaseRepresentatives = createStub('getPurchaseRepresentatives');\nconst getSalesPerason = createStub('getSalesPerason');\nconst getShippingRules = createStub('getShippingRules');\nconst getTaxTemplate = createStub('getTaxTemplate');\nconst getUoms = createStub('getUoms');\nimport { getCountries } from \"libphonenumber-js\";\nexport const formatNumber = (\n num: number,\n defaultCurrencySymbol: string = \"$\"\n): string => {\n if (num >= 1_000_000) {\n return `${defaultCurrencySymbol} ${(num / 1_000_000).toFixed(1)} M`;\n } else if (num >= 100_000) {\n return `${defaultCurrencySymbol} ${(num / 100_000).toFixed(1)} L`; // L for Lakhs\n } else if (num >= 1_000) {\n return `${(num / 1_000).toFixed(1)} K`;\n } else {\n return `${defaultCurrencySymbol} ${num.toFixed(2)}`;\n }\n};\n\nexport function formateDate(date, format = \"DD-MM-YYYY\") {\n console.log(\"date\",date)\n if (!date) {\n return;\n }\n return moment(date).format(format);\n}\n\nexport function capitalizeWords(str) {\n return str\n ? str\n .split(\" \")\n .map(\n (word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\n )\n .join(\" \")\n : \"\";\n}\n\nexport const defaultUserCurrency = () => {\n // eslint-disable-next-line\n const { user } = useAuth();\n return user?.currency_data?.symbol || \"\";\n};\nexport const valueWithCurrency = (value: any) => {\n // eslint-disable-next-line\n const { user } = useAuth();\n if (!value) {\n return;\n }\n return `${user?.currency_data?.symbol || \"\"} ${value}`;\n};\n\nexport const sortData = (data: any[], key: string, direction: string) => {\n const formatedData = _.orderBy(data, key, direction);\n return formatedData;\n};\nexport function recursiveSort(\n data: any[],\n nestedKeys: any[],\n header: string,\n direction: string\n) {\n console.log(data, nestedKeys, header, direction);\n if (!nestedKeys.length) return sortData(data, header, direction);\n const [currentKey, ...remainingKey] = nestedKeys;\n return data?.map((item) => {\n return {\n ...item,\n [currentKey]: recursiveSort(\n item[currentKey],\n remainingKey || [],\n header,\n direction\n ),\n };\n });\n}\n\nexport function formatTime(isoString: string, format: string = \"HH:mm:ss\") {\n if (!isoString) {\n return;\n }\n const date = new Date(isoString); // Parse the ISO string\n\n const padZero = (num: number) => (num < 10 ? \"0\" : \"\") + num;\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n\n if (format === \"HH:mm:ss\") {\n return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`;\n }\n\n if (format === \"HH:mm\") {\n return `${padZero(hours)}:${padZero(minutes)}`;\n }\n\n if (format === \"hh:mm A\") {\n const period = hours >= 12 ? \"PM\" : \"AM\";\n const twelveHour = hours % 12 || 12;\n return `${padZero(twelveHour)}:${padZero(minutes)} ${period}`;\n }\n\n return date.toTimeString().slice(0, 8); // Default: HH:mm:ss\n}\n\ntype Nullable<T> = {\n [P in keyof T]: T[P] extends object ? Nullable<T[P]> : T[P] | null;\n};\n\nexport function convertEmptyToNull<T extends Record<string, any>>(\n obj: T\n): Nullable<T> {\n return Object.entries(obj).reduce((acc, [key, value]) => {\n if (\n value === \"\" ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) && // Prevent arrays from being treated as objects\n Object.keys(value).length === 0)\n ) {\n acc[key as keyof T] = null;\n } else if (Array.isArray(value)) {\n acc[key as keyof T] = value.map((item) =>\n typeof item === \"object\" && item !== null\n ? convertEmptyToNull(item) // Recursively handle array elements\n : item\n );\n } else if (typeof value === \"object\" && value !== null) {\n acc[key as keyof T] = convertEmptyToNull(value);\n } else {\n acc[key as keyof T] = value;\n }\n return acc;\n }, {} as Nullable<T>);\n}\n\nfunction checkPattern(i: any, pattern: any[]) {\n return pattern.some((obj) => i.includes(obj));\n}\n\nexport function removeExtraKeys(data: any, extraKeys = []) {\n const pattern = [\n \"_at\",\n \"_by\",\n \"_data\",\n \"created_user\",\n \"updated_user\",\n ...extraKeys,\n ];\n for (const i in data) {\n if (checkPattern(i, pattern)) {\n delete data[i];\n } else if (typeof data[i] === \"object\" && !Array.isArray(data[i])) {\n removeExtraKeys(data[i], [\"_at\", \"_by\", \"_data\"]);\n }\n }\n\n return data;\n}\n\nexport const apiType = {\n company: getCompanies,\n items: getItems,\n currency: getCurrency,\n salesperson: getSalesPerason,\n party: getParties,\n department: getDepartments,\n location: getLocation,\n uom: getUoms,\n discountedItems: getDiscountedItems,\n taxTemplate: getTaxTemplate,\n paymentTerm: getPaymentTerm,\n incoTerms: getIncoTerms,\n shippingRules:getShippingRules,\n bins:getBins,\n agreement: getAgreement,\n accounts: getChartOfAccounts,\n invoices: getPurchaseInvoices,\n purchaseOrderReceipts: getPurchaseOrderReceipts,\n representatives: getPurchaseRepresentatives,\n industry:getPartiesIndustry,\n categoryItems:getCategoryItems,\n customerSegment:getCustomerSegments,\n countries:getCountries,\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useMemo } from 'react';\n\n// ==================== CONSTANTS ====================\nconst MATERIAL_CONSTANTS = {\n STEEL_DENSITY: 7.85,\n LENGTH_CONVERSION_FACTOR: 1000,\n TUBE_CALCULATION_FACTOR: 0.024662,\n COIL_WEIGHTS: {\n GI: 2879.95,\n HR: 2356.59,\n },\n} as const;\n\n// ==================== TYPES ====================\ntype SteelType = keyof typeof MATERIAL_CONSTANTS.COIL_WEIGHTS;\ntype TubeType = 'Round' | 'Square' | 'Rectangle';\n\ninterface BaseFormValues {\n // Board calculation fields\n face_width?: string | number;\n bending?: string | number;\n height?: string | number;\n total_width?: string | number;\n boards_thickness?: string | number;\n boards_length?: string | number;\n \n // Steel calculation fields\n steel_length?: string | number;\n steel_width?: string | number;\n steel_thickness?: string | number;\n steel_type?: SteelType;\n \n // Tube calculation fields\n tube_type?: TubeType;\n tube_od?: string | number;\n shape_width?: string | number;\n shape_height?: string | number;\n material_thickness?: string | number;\n material_length?: string | number;\n}\n\ninterface MaterialCalculations {\n totalWidth: number;\n materialUnit: number;\n boardsWeight: number;\n steelWeight: number;\n materialWeight: number;\n}\n\ninterface CalculationResult<T = number> {\n value: T;\n isValid: boolean;\n error?: string;\n}\n\n// ==================== UTILITY FUNCTIONS ====================\n/**\n * Safely parses a value to number with comprehensive validation\n */\nconst safeParseNumber = (value: string | number | undefined | null): CalculationResult<number> => {\n if (value === undefined || value === null || value === '') {\n return { value: 0, isValid: false, error: 'Empty value' };\n }\n \n const parsed = typeof value === 'string' ? parseFloat(value.trim()) : Number(value);\n \n if (isNaN(parsed)) {\n return { value: 0, isValid: false, error: 'Invalid number format' };\n }\n \n if (!isFinite(parsed)) {\n return { value: 0, isValid: false, error: 'Number is not finite' };\n }\n \n return { value: parsed, isValid: true };\n};\n\n/**\n * Validates that all provided values are positive numbers\n */\nconst validatePositiveNumbers = (...values: (string | number | undefined)[]): boolean => {\n return values.every(value => {\n const result = safeParseNumber(value);\n return result.isValid && result.value > 0;\n });\n};\n\n/**\n * Creates a memoization key from form values to optimize re-calculations\n */\nconst createMemoKey = (formValues: BaseFormValues | undefined): string => {\n if (!formValues) return 'empty';\n \n // Only include relevant fields to avoid unnecessary recalculations\n const relevantFields = [\n 'face_width', 'bending', 'height', 'total_width', 'boards_thickness', 'boards_length',\n 'steel_length', 'steel_width', 'steel_thickness', 'steel_type',\n 'tube_type', 'tube_od', 'shape_width', 'shape_height', 'material_thickness', 'material_length'\n ];\n \n return relevantFields\n .map(field => `${field}:${formValues[field as keyof BaseFormValues] ?? ''}`)\n .join('|');\n};\n\n// ==================== CALCULATION FUNCTIONS ====================\n/**\n * Calculates the total width for boards costing\n * Formula: ((height + bending) * 2) + face_width\n */\nconst calculateBoardsTotalWidth = (formValues: BaseFormValues): CalculationResult<number> => {\n const { face_width, bending, height } = formValues;\n \n if (!validatePositiveNumbers(face_width, bending, height)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards total width calculation' };\n }\n \n const faceWidthResult = safeParseNumber(face_width);\n const bendingResult = safeParseNumber(bending);\n const heightResult = safeParseNumber(height);\n \n if (![faceWidthResult, bendingResult, heightResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const totalWidth = ((heightResult.value + bendingResult.value) * 2) + faceWidthResult.value;\n \n return { value: totalWidth, isValid: true };\n};\n\n/**\n * Calculates the weight of boards\n * Formula: (total_width * thickness * (length / 1000)) * 7.85\n */\nconst calculateBoardsWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { total_width, boards_thickness, boards_length } = formValues;\n \n if (!validatePositiveNumbers(total_width, boards_thickness, boards_length)) {\n return { value: 0, isValid: false, error: 'Invalid input values for boards weight calculation' };\n }\n \n const totalWidthResult = safeParseNumber(total_width);\n const thicknessResult = safeParseNumber(boards_thickness);\n const lengthResult = safeParseNumber(boards_length);\n \n if (![totalWidthResult, thicknessResult, lengthResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (totalWidthResult.value * thicknessResult.value * \n (lengthResult.value / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR)) * \n MATERIAL_CONSTANTS.STEEL_DENSITY;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates the weight of steel\n * Formula: (length * width * thickness * 7.85) / 1000\n */\nconst calculateSteelWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_length, steel_width, steel_thickness } = formValues;\n \n if (!validatePositiveNumbers(steel_length, steel_width, steel_thickness)) {\n return { value: 0, isValid: false, error: 'Invalid input values for steel weight calculation' };\n }\n \n const lengthResult = safeParseNumber(steel_length);\n const widthResult = safeParseNumber(steel_width);\n const thicknessResult = safeParseNumber(steel_thickness);\n \n if (![lengthResult, widthResult, thicknessResult].every(r => r.isValid)) {\n return { value: 0, isValid: false, error: 'Failed to parse input values' };\n }\n \n const weight = (lengthResult.value * widthResult.value * thicknessResult.value * \n MATERIAL_CONSTANTS.STEEL_DENSITY) / MATERIAL_CONSTANTS.LENGTH_CONVERSION_FACTOR;\n \n return { value: weight, isValid: true };\n};\n\n/**\n * Gets the material unit weight based on steel type\n */\nconst calculateMaterialUnit = (formValues: BaseFormValues): CalculationResult<number> => {\n const { steel_type } = formValues;\n \n if (!steel_type) {\n return { value: 0, isValid: false, error: 'Steel type not specified' };\n }\n \n if (!(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n return { value: 0, isValid: false, error: `Unsupported steel type: ${steel_type}` };\n }\n \n const weight = MATERIAL_CONSTANTS.COIL_WEIGHTS[steel_type];\n return { value: weight, isValid: true };\n};\n\n/**\n * Calculates material weight based on tube type and dimensions\n * Supports Round, Square, and Rectangle tube types\n */\nconst calculateTubeMaterialWeight = (formValues: BaseFormValues): CalculationResult<number> => {\n const { tube_type, tube_od, shape_width, shape_height, material_thickness, material_length } = formValues;\n \n if (!tube_type) {\n return { value: 0, isValid: false, error: 'Tube type not specified' };\n }\n \n const thicknessResult = safeParseNumber(material_thickness);\n const lengthResult = safeParseNumber(material_length);\n \n if (!thicknessResult.isValid || !lengthResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid thickness or length values' };\n }\n \n let weight = 0;\n \n switch (tube_type) {\n case 'Round': {\n const odResult = safeParseNumber(tube_od);\n if (!odResult.isValid || odResult.value <= thicknessResult.value) {\n return { value: 0, isValid: false, error: 'Invalid outer diameter for round tube' };\n }\n \n weight = (odResult.value - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR * lengthResult.value;\n break;\n }\n \n case 'Square':\n case 'Rectangle': {\n const widthResult = safeParseNumber(shape_width);\n const heightResult = safeParseNumber(shape_height);\n \n if (!widthResult.isValid || !heightResult.isValid) {\n return { value: 0, isValid: false, error: 'Invalid width or height for rectangular tube' };\n }\n \n const perimeter = 2 * (widthResult.value + heightResult.value);\n weight = (((perimeter / Math.PI) - thicknessResult.value) * thicknessResult.value * \n MATERIAL_CONSTANTS.TUBE_CALCULATION_FACTOR) * lengthResult.value;\n break;\n }\n \n default:\n return { value: 0, isValid: false, error: `Unsupported tube type: ${tube_type}` };\n }\n \n return { value: Math.max(0, weight), isValid: true };\n};\n\n// ==================== MAIN HOOK ====================\n/**\n * Custom hook for optimized material calculations with comprehensive error handling\n * and performance optimization through memoization\n */\nexport const useMaterialCalculations = (formValues?: BaseFormValues): MaterialCalculations => {\n const calculations = useMemo(() => {\n if (!formValues) {\n return {\n totalWidth: 0,\n materialUnit: 0,\n boardsWeight: 0,\n steelWeight: 0,\n materialWeight: 0,\n };\n }\n \n // Calculate all values with error handling\n const totalWidthResult = calculateBoardsTotalWidth(formValues);\n const materialUnitResult = calculateMaterialUnit(formValues);\n const boardsWeightResult = calculateBoardsWeight(formValues);\n const steelWeightResult = calculateSteelWeight(formValues);\n const materialWeightResult = calculateTubeMaterialWeight(formValues);\n \n // Optional: Log errors in development\n if (process.env.NODE_ENV === 'development') {\n [totalWidthResult, materialUnitResult, boardsWeightResult, steelWeightResult, materialWeightResult]\n .filter(result => !result.isValid && result.error)\n .forEach(result => console.warn('Calculation warning:', result.error));\n }\n \n return {\n totalWidth: totalWidthResult.value,\n materialUnit: materialUnitResult.value,\n boardsWeight: boardsWeightResult.value,\n steelWeight: steelWeightResult.value,\n materialWeight: materialWeightResult.value,\n };\n }, [createMemoKey(formValues)]); // Optimized dependency to prevent unnecessary recalculations\n \n return calculations;\n};\n\n// ==================== ADDITIONAL UTILITIES ====================\n/**\n * Utility function to validate form values before calculations\n */\nexport const validateFormValues = (formValues: BaseFormValues): { isValid: boolean; errors: string[] } => {\n const errors: string[] = [];\n const { tube_type, steel_type } = formValues;\n \n // Validate steel type if provided\n if (steel_type && !(steel_type in MATERIAL_CONSTANTS.COIL_WEIGHTS)) {\n errors.push(`Invalid steel type: ${steel_type}`);\n }\n \n // Validate tube type if provided\n if (tube_type && !['Round', 'Square', 'Rectangle'].includes(tube_type)) {\n errors.push(`Invalid tube type: ${tube_type}`);\n }\n \n return { isValid: errors.length === 0, errors };\n};\n\n/**\n * Get available steel types for form validation\n */\nexport const getAvailableSteelTypes = (): SteelType[] => {\n return Object.keys(MATERIAL_CONSTANTS.COIL_WEIGHTS) as SteelType[];\n};\n\n/**\n * Get available tube types for form validation\n */\nexport const getAvailableTubeTypes = (): TubeType[] => {\n return ['Round', 'Square', 'Rectangle'];\n};\n\nexport default {\n useMaterialCalculations,\n validateFormValues,\n getAvailableSteelTypes,\n getAvailableTubeTypes,\n MATERIAL_CONSTANTS,\n};\nexport type {\n BaseFormValues,\n MaterialCalculations,\n SteelType,\n TubeType,\n CalculationResult,\n};","import { useCallback } from 'react';\nimport { checkSkuAndItemName } from '../utils/common';\n\nexport interface IUseNameSkuUniquenessCheckProps {\n fieldPrefix: string;\n formMethods: any;\n data?: any;\n}\n\nexport const useNameSkuUniquenessCheck = ({\n fieldPrefix,\n formMethods,\n data,\n}: IUseNameSkuUniquenessCheckProps) => {\n const { watch=()=>{}, setError=()=>{} } = formMethods||{};\n const formValues = watch(fieldPrefix);\n\n const namePrev = data?.name;\n const skuPrev= data?.sku\n const checkNameAndSkuUniqueness = useCallback(async () => {\n let isUnique=true; \n\n try {\n if(namePrev===formValues?.name && skuPrev===formValues?.sku) return true;\n const response = await checkSkuAndItemName({\n name: formValues?.name,\n sku: formValues?.sku,\n ...(data?.id && { id: data?.id }),\n });\n if (response.name) {\n setError(`${fieldPrefix}.name`, {\n message: 'Name already exists',\n type: 'manual',\n ref: `${fieldPrefix}.name`,\n });\n isUnique=false;\n }\n\n if (response.sku) {\n setError(`${fieldPrefix}.sku`, {\n message: 'SKU already exists',\n type: 'manual',\n ref: `${fieldPrefix}.sku`,\n });\n isUnique=false;\n }\n\n return isUnique;\n } catch (error) {\n console.error('Uniqueness check failed:', error);\n return isUnique;\n }\n //eslint-disable-next-line\n }, [formValues?.name, formValues?.sku, setError]);\n\n return { checkNameAndSkuUniqueness };\n};\n\nexport default useNameSkuUniquenessCheck;\n","import { useMemo } from 'react'\nimport { checkUniqueFields } from '../utils/common'\n\nexport default function useUniquenessCheck({ fieldPrefix, formMethods, data = {}, fields = [] }) {\n\tconst { watch = () => { }, setError = () => { }, formState = {} } = formMethods || {}\n\n\tconst formValues = watch(fieldPrefix)\n\n\t// Stable reference\n\tconst previous = useMemo(() => data || {}, [data])\n\n\tconst checkUniqueness = async () => {\n\t\tlet isUnique = true\n\n\t\ttry {\n\t\t\t// Skip check if no changes\n\t\t\tconst nothingChanged = fields.every((field) => previous[field] === formValues?.[field])\n\n\t\t\tif (nothingChanged) return true\n\n\t\t\t// Build payload\n\t\t\tconst payload = {}\n\t\t\tfields.forEach((field) => (payload[field] = formValues?.[field]))\n\n\t\t\tif (data?.id) payload.id = data.id\n\n\t\t\t// API call\n\t\t\tconst response = await checkUniqueFields(payload)\n\n\t\t\t// Loop through API response\n\t\t\tfor (const [field, exists] of Object.entries(response)) {\n\t\t\t\tif (exists) {\n\t\t\t\t\tconst errorPath = `${fieldPrefix}.${field}`\n\t\t\t\t\tsetError(errorPath, {\n\t\t\t\t\t\ttype: 'manual',\n\t\t\t\t\t\tmessage: `${field.replace(/_/g, ' ').toLowerCase()} already exists`,\n\t\t\t\t\t})\n\n\t\t\t\t\tisUnique = false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.log('Errors now:', formState.errors)\n\n\t\t\treturn isUnique\n\t\t} catch (error) {\n\t\t\tconsole.error('Uniqueness check failed:', error)\n\t\t\treturn isUnique\n\t\t}\n\t}\n\n\treturn { checkUniqueness }\n}\n","import { useState } from 'react';\nimport { DEFAULT_LANG } from '../constants/all-language';\n\ninterface ILanguage {\n label: string;\n code: string;\n direction: string;\n}\n\n// Configuration for fallback behavior\ninterface FallbackConfig {\n fallbackOrder?: string[];\n enableConsoleWarnings?: boolean;\n retryOnError?: boolean;\n maxRetries?: number;\n}\n\n// Updated fallback order with English first\nconst DEFAULT_FALLBACK_CONFIG: Required<FallbackConfig> = {\n fallbackOrder: ['en', 'en-US', DEFAULT_LANG], // English first\n enableConsoleWarnings: true,\n retryOnError: false,\n maxRetries: 3,\n};\n\nexport const useLanguageFallback = (config: FallbackConfig = {}) => {\n const finalConfig = { ...DEFAULT_FALLBACK_CONFIG, ...config };\n const [retryCount, setRetryCount] = useState(0);\n\n // Create English fallback language object\n const createEnglishFallback = (): ILanguage => ({\n code: 'en',\n label: 'English',\n direction: 'ltr'\n });\n\n // Find the best available language with fallback logic\n const findBestAvailableLanguage = (\n languages: ILanguage[], \n preferredCode?: string\n ): ILanguage | null => {\n if (!languages || languages.length === 0) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No languages available for fallback selection, using English');\n }\n return createEnglishFallback();\n }\n\n // First try the preferred language if provided\n if (preferredCode) {\n const preferred = languages.find(lang => lang.code === preferredCode);\n if (preferred) return preferred;\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Preferred language \"${preferredCode}\" not found, trying fallbacks`);\n }\n }\n\n // Try fallback languages in order (English first)\n for (const fallbackCode of finalConfig.fallbackOrder) {\n const fallback = languages.find(lang => lang.code === fallbackCode);\n if (fallback) {\n if (finalConfig.enableConsoleWarnings && preferredCode && preferredCode !== fallbackCode) {\n console.warn(`Using fallback language: \"${fallbackCode}\" instead of \"${preferredCode}\"`);\n }\n return fallback;\n }\n }\n\n // If no fallbacks found, return English or first available language\n const englishLang = languages.find(lang => lang.code === 'en');\n if (englishLang) {\n if (finalConfig.enableConsoleWarnings) {\n console.warn('Using English as ultimate fallback');\n }\n return englishLang;\n }\n\n // Last resort - return first available language\n if (finalConfig.enableConsoleWarnings) {\n console.warn('No English fallback found, using first available language');\n }\n return languages[0] || createEnglishFallback();\n };\n\n // Create a fallback language object when API fails - always English\n const createEmergencyFallback = (): ILanguage => {\n return createEnglishFallback();\n };\n\n // Validate if a language code exists in the available languages\n const validateLanguageCode = (languages: ILanguage[], code: string): boolean => {\n return languages.some(lang => lang.code === code);\n };\n\n // Get saved language from localStorage with validation\n const getSavedLanguage = (languages: ILanguage[]): string | null => {\n const saved = localStorage.getItem('_language');\n if (!saved) return null;\n \n // Validate saved language exists in available languages\n if (validateLanguageCode(languages, saved)) {\n return saved;\n }\n \n if (finalConfig.enableConsoleWarnings) {\n console.warn(`Saved language \"${saved}\" is no longer available, will use English fallback`);\n }\n return null;\n };\n\n // Ensure English is always available in languages array\n const ensureEnglishAvailable = (languages: ILanguage[]): ILanguage[] => {\n const hasEnglish = languages.some(lang => lang.code === 'en');\n if (!hasEnglish) {\n return [createEnglishFallback(), ...languages];\n }\n return languages;\n };\n\n // Retry mechanism for failed language fetches\n const shouldRetry = (): boolean => {\n return finalConfig.retryOnError && retryCount < finalConfig.maxRetries;\n };\n\n const incrementRetry = () => {\n setRetryCount(prev => prev + 1);\n };\n\n const resetRetry = () => {\n setRetryCount(0);\n };\n\n return {\n findBestAvailableLanguage,\n createEmergencyFallback,\n createEnglishFallback,\n validateLanguageCode,\n getSavedLanguage,\n ensureEnglishAvailable,\n shouldRetry,\n incrementRetry,\n resetRetry,\n retryCount,\n config: finalConfig,\n };\n};\n\n// Additional utility hook for language state management\nexport const useLanguageState = () => {\n const [isInitialized, setIsInitialized] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const markInitialized = () => setIsInitialized(true);\n const setError = (error: string) => {\n setHasError(true);\n setErrorMessage(error);\n };\n const clearError = () => {\n setHasError(false);\n setErrorMessage(null);\n };\n\n return {\n isInitialized,\n hasError,\n errorMessage,\n markInitialized,\n setError,\n clearError,\n };\n};\n\nexport default {\n useLanguageFallback,\n useLanguageState,\n};\n\nexport type { ILanguage, FallbackConfig };\n\n","import { useERPUI } from '../components/providers/ERPUIProvider';\n\n/**\n * Hook to determine Redux integration status and provide conditional Redux usage\n */\nexport const useReduxIntegration = () => {\n const { useRedux, apiClient } = useERPUI();\n \n // Helper function to conditionally use Redux hooks\n const useConditionalRedux = <T>(\n reduxHook: () => T,\n fallbackValue: T\n ): T => {\n if (!useRedux) {\n return fallbackValue;\n }\n \n try {\n return reduxHook();\n } catch (error) {\n console.warn('Redux hook failed, falling back to default value:', error);\n return fallbackValue;\n }\n };\n \n // Helper function to conditionally dispatch Redux actions\n const conditionalDispatch = (action: any) => {\n if (!useRedux) {\n console.warn('Redux not enabled, cannot dispatch action:', action);\n return Promise.resolve();\n }\n \n try {\n const { useAppDispatch } = require('../redux/hooks');\n const dispatch = useAppDispatch();\n return dispatch(action);\n } catch (error) {\n console.error('Failed to dispatch Redux action:', error);\n return Promise.reject(error);\n }\n };\n \n return {\n useRedux,\n apiClient,\n useConditionalRedux,\n conditionalDispatch,\n };\n};","import { useEffect, useRef } from 'react';\n\nimport { calculateAdditionalDiscountCrossValue } from '../utils/calculation';\n\nfunction computeTotal(\n items: any[],\n discountOn: string | null | undefined,\n netAmountField = 'net_amount',\n grossAmountField = 'gross_amount'\n): number {\n const field = discountOn === 'Gross Amount' ? grossAmountField : netAmountField;\n return items.reduce((sum: number, item: any) => sum + Number(item[field] || 0), 0);\n}\n\nexport interface AdditionalDiscountAutoCalcConfig {\n items: any[];\n discountOn: string | null | undefined;\n percentage: number | string;\n amount: number | string;\n setValue: (name: string, value: any) => void;\n fieldConfig: {\n percentageField: string;\n amountField: string;\n };\n netAmountField?: string;\n grossAmountField?: string;\n\n /**\n * When true, auto-disabled logic is bypassed.\n * Caller explicitly controls field disabled states\n * via disablePercentageField / disableAmountField.\n * Auto sync (value calculation) still works regardless.\n */\n manualDisabled?: boolean;\n disablePercentageField?: boolean;\n disableAmountField?: boolean;\n}\n\nexport function useAdditionalDiscountAutoCalc(config: AdditionalDiscountAutoCalcConfig) {\n const lastChangedBy = useRef<'user' | 'auto'>('user');\n const lastUserEdited = useRef<'percentage' | 'amount' | null>(null);\n\n // Percentage → Amount\n useEffect(() => {\n if (lastChangedBy.current === 'auto') {\n lastChangedBy.current = 'user';\n return;\n }\n if (!config.discountOn) return;\n const pct = Number(config.percentage);\n const amt = Number(config.amount);\n const total = computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField);\n\n if (!pct && amt && lastUserEdited.current === 'percentage') {\n config.setValue(config.fieldConfig.amountField, 0);\n lastUserEdited.current = null;\n return;\n }\n if (!pct || !total) return;\n\n lastUserEdited.current = 'percentage';\n lastChangedBy.current = 'auto';\n config.setValue(config.fieldConfig.amountField,\n calculateAdditionalDiscountCrossValue(pct, 'percentage', total));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.percentage, config.discountOn]);\n\n // Amount → Percentage\n useEffect(() => {\n if (lastChangedBy.current === 'auto') {\n lastChangedBy.current = 'user';\n return;\n }\n if (!config.discountOn) return;\n const pct = Number(config.percentage);\n const amt = Number(config.amount);\n const total = computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField);\n\n if (!amt && pct && lastUserEdited.current === 'amount') {\n config.setValue(config.fieldConfig.percentageField, 0);\n lastUserEdited.current = null;\n return;\n }\n if (!amt || !total) return;\n\n lastUserEdited.current = 'amount';\n lastChangedBy.current = 'auto';\n config.setValue(config.fieldConfig.percentageField,\n calculateAdditionalDiscountCrossValue(amt, 'amount', total));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config.amount, config.discountOn]);\n\n const autoPercentageDisabled = !config.discountOn || (\n Boolean(Number(config.amount)) && lastUserEdited.current !== 'percentage'\n );\n const autoAmountDisabled = !config.discountOn || (\n Boolean(Number(config.percentage)) && lastUserEdited.current !== 'amount'\n );\n\n const isPercentageDisabled = config.manualDisabled\n ? (config.disablePercentageField ?? false)\n : autoPercentageDisabled;\n const isAmountDisabled = config.manualDisabled\n ? (config.disableAmountField ?? false)\n : autoAmountDisabled;\n\n const totalAmount = config.discountOn\n ? computeTotal(config.items, config.discountOn, config.netAmountField, config.grossAmountField)\n : 0;\n const isAmountExceeded = !!(config.discountOn && totalAmount > 0 && Number(config.amount) > totalAmount);\n const isPercentageExceeded = Number(config.percentage) > 100;\n\n return { isPercentageDisabled, isAmountDisabled, isAmountExceeded, isPercentageExceeded };\n}\n"],"names":[],"mappings":"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"}
@@ -5,12 +5,12 @@ const api = require("./api-BygscvSz.js");
5
5
  const apiConfig = require("./api-config-DXwDMFn-.js");
6
6
  const reactRouterDom = require("react-router-dom");
7
7
  const pathname_rental = require("./pathname.rental-C9fm1WTq.js");
8
- const common = require("./common-DKNNF5nL.js");
8
+ const common = require("./common-mZRiR8Bu.js");
9
9
  const notistack = require("notistack");
10
10
  const socket_ioClient = require("socket.io-client");
11
11
  const material = require("@mui/material");
12
- const identifier = require("./identifier-CaTy7Osd.js");
13
- const notification = require("./notification-vWmhkTRo.js");
12
+ const identifier = require("./identifier-BSjnVNXF.js");
13
+ const notification = require("./notification-Bq2o82vD.js");
14
14
  const images = require("./images-CY-_BlWh.js");
15
15
  ;/* empty css */
16
16
  function _interopNamespaceDefault(e) {
@@ -854,4 +854,4 @@ exports.useForkRef = useForkRef;
854
854
  exports.useId = useId;
855
855
  exports.useIsFocusVisible = useIsFocusVisible;
856
856
  exports.useTimeout = useTimeout;
857
- //# sourceMappingURL=useAuth-DdrmIbws.js.map
857
+ //# sourceMappingURL=useAuth-BfXZw2ZG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAuth-DdrmIbws.js","sources":["../../src/utils/route-utils.ts","../../node_modules/@mui/utils/esm/createChainedFunction/createChainedFunction.js","../../node_modules/@mui/utils/esm/debounce/debounce.js","../../node_modules/@mui/utils/esm/deprecatedPropType/deprecatedPropType.js","../../node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js","../../node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../../node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js","../../node_modules/@mui/utils/esm/requirePropFactory/requirePropFactory.js","../../node_modules/@mui/utils/esm/setRef/setRef.js","../../node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../../node_modules/@mui/utils/esm/useId/useId.js","../../node_modules/@mui/utils/esm/unsupportedProp/unsupportedProp.js","../../node_modules/@mui/utils/esm/useControlled/useControlled.js","../../node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js","../../node_modules/@mui/utils/esm/useForkRef/useForkRef.js","../../node_modules/@mui/utils/esm/useLazyRef/useLazyRef.js","../../node_modules/@mui/utils/esm/useOnMount/useOnMount.js","../../node_modules/@mui/utils/esm/useTimeout/useTimeout.js","../../node_modules/@mui/utils/esm/useIsFocusVisible/useIsFocusVisible.js","../../node_modules/@mui/material/utils/index.js","../../node_modules/@mui/icons-material/utils/createSvgIcon.js","../../node_modules/@mui/icons-material/Close.js","../../src/components/typography/typography.tsx","../../src/components/custom-snackbar/custom-snackbar.tsx","../../src/contexts/AuthContext.tsx","../../src/hooks/useAuth.ts"],"sourcesContent":["\nexport const convertRoutesToUseIdParams = (routes: Record<string, string>): Record<string, string> => {\n const updatedRoutes: Record<string, string> = { ...routes };\n \n // Identify patterns for view/edit/detail routes\n Object.keys(updatedRoutes).forEach(key => {\n // Common patterns for detail views\n if (\n key.startsWith('VIEW_') || \n key.startsWith('EDIT_') || \n key.startsWith('DETAIL_') ||\n key.includes('_VIEW_') || \n key.includes('_EDIT_') || \n key.includes('_DETAIL_')\n ) {\n if (!updatedRoutes[key].includes(':')) {\n updatedRoutes[key] = `${updatedRoutes[key]}/:id`;\n }\n }\n });\n \n return updatedRoutes;\n};\n\n\nexport const generateRouteWithId = (basePath: string, id: string | number | Record<string, any>): string => {\n if(id && typeof id === 'object') {\n Object.entries(id).map(([key, value]) => {\n basePath = basePath.replace(`:${key}`, value?.toString());\n })\n } else if (basePath.includes(':id')) {\n return basePath.replace(':id', id?.toString());\n }\n \n // If the path doesn't have an :id parameter, append it\n return `${basePath}`;\n};\n\n\nexport const updatePathnameWithIdParams = <T extends Record<string, string>>(pathnameObject: T): T => {\n return convertRoutesToUseIdParams(pathnameObject) as T;\n}; \n\n// Added utility for navigating to views with id parameter\nexport const navigateToRouteWithId = (\n navigate: any,\n route: string, \n id: string | number,\n state?: any\n) => {\n const path = generateRouteWithId(route, id);\n navigate(path, { state });\n}; ","/**\n * Safe chained function.\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n */\nexport default function createChainedFunction(...funcs) {\n return funcs.reduce((acc, func) => {\n if (func == null) {\n return acc;\n }\n return function chainedFunction(...args) {\n acc.apply(this, args);\n func.apply(this, args);\n };\n }, () => {});\n}","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func, wait = 166) {\n let timeout;\n function debounced(...args) {\n const later = () => {\n // @ts-ignore\n func.apply(this, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n }\n debounced.clear = () => {\n clearTimeout(timeout);\n };\n return debounced;\n}","export default function deprecatedPropType(validator, reason) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n return (props, propName, componentName, location, propFullName) => {\n const componentNameSafe = componentName || '<<anonymous>>';\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The ${location} \\`${propFullNameSafe}\\` of ` + `\\`${componentNameSafe}\\` is deprecated. ${reason}`);\n }\n return null;\n };\n}","import * as React from 'react';\nexport default function isMuiElement(element, muiNames) {\n var _muiName, _element$type;\n return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf( // For server components `muiName` is avaialble in element.type._payload.value.muiName\n // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45\n // eslint-disable-next-line no-underscore-dangle\n (_muiName = element.type.muiName) != null ? _muiName : (_element$type = element.type) == null || (_element$type = _element$type._payload) == null || (_element$type = _element$type.value) == null ? void 0 : _element$type.muiName) !== -1;\n}","export default function ownerDocument(node) {\n return node && node.ownerDocument || document;\n}","import ownerDocument from '../ownerDocument';\nexport default function ownerWindow(node) {\n const doc = ownerDocument(node);\n return doc.defaultView || window;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function requirePropFactory(componentNameInError, Component) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n\n // eslint-disable-next-line react/forbid-foreign-prop-types\n const prevPropTypes = Component ? _extends({}, Component.propTypes) : null;\n const requireProp = requiredProp => (props, propName, componentName, location, propFullName, ...args) => {\n const propFullNameSafe = propFullName || propName;\n const defaultTypeChecker = prevPropTypes == null ? void 0 : prevPropTypes[propFullNameSafe];\n if (defaultTypeChecker) {\n const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);\n if (typeCheckerResult) {\n return typeCheckerResult;\n }\n }\n if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n return new Error(`The prop \\`${propFullNameSafe}\\` of ` + `\\`${componentNameInError}\\` can only be used together with the \\`${requiredProp}\\` prop.`);\n }\n return null;\n };\n return requireProp;\n}","/**\n * TODO v5: consider making it private\n *\n * passes {value} to {ref}\n *\n * WARNING: Be sure to only call this inside a callback that is passed as a ref.\n * Otherwise, make sure to cleanup the previous {ref} if it changes. See\n * https://github.com/mui/material-ui/issues/13539\n *\n * Useful if you want to expose the ref of an inner component to the public API\n * while still using it inside the component.\n * @param ref A ref callback or ref object. If anything falsy, this is a no-op.\n */\nexport default function setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}","'use client';\n\nimport * as React from 'react';\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nexport default useEnhancedEffect;","'use client';\n\nimport * as React from 'react';\nlet globalId = 0;\nfunction useGlobalId(idOverride) {\n const [defaultId, setDefaultId] = React.useState(idOverride);\n const id = idOverride || defaultId;\n React.useEffect(() => {\n if (defaultId == null) {\n // Fallback to this default id when possible.\n // Use the incrementing value for client-side rendering only.\n // We can't use it server-side.\n // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n globalId += 1;\n setDefaultId(`mui-${globalId}`);\n }\n }, [defaultId]);\n return id;\n}\n\n// downstream bundlers may remove unnecessary concatenation, but won't remove toString call -- Workaround for https://github.com/webpack/webpack/issues/14814\nconst maybeReactUseId = React['useId'.toString()];\n/**\n *\n * @example <div id={useId()} />\n * @param idOverride\n * @returns {string}\n */\nexport default function useId(idOverride) {\n if (maybeReactUseId !== undefined) {\n const reactId = maybeReactUseId();\n return idOverride != null ? idOverride : reactId;\n }\n // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n return useGlobalId(idOverride);\n}","export default function unsupportedProp(props, propName, componentName, location, propFullName) {\n if (process.env.NODE_ENV === 'production') {\n return null;\n }\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The prop \\`${propFullNameSafe}\\` is not supported. Please remove it.`);\n }\n return null;\n}","'use client';\n\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\nimport * as React from 'react';\nexport default function useControlled({\n controlled,\n default: defaultProp,\n name,\n state = 'value'\n}) {\n // isControlled is ignored in the hook dependency lists as it should never change.\n const {\n current: isControlled\n } = React.useRef(controlled !== undefined);\n const [valueState, setValue] = React.useState(defaultProp);\n const value = isControlled ? controlled : valueState;\n if (process.env.NODE_ENV !== 'production') {\n React.useEffect(() => {\n if (isControlled !== (controlled !== undefined)) {\n console.error([`MUI: A component is changing the ${isControlled ? '' : 'un'}controlled ${state} state of ${name} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${name} ` + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n }\n }, [state, name, controlled]);\n const {\n current: defaultValue\n } = React.useRef(defaultProp);\n React.useEffect(() => {\n if (!isControlled && !Object.is(defaultValue, defaultProp)) {\n console.error([`MUI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. ` + `To suppress this warning opt to use a controlled ${name}.`].join('\\n'));\n }\n }, [JSON.stringify(defaultProp)]);\n }\n const setValueIfUncontrolled = React.useCallback(newValue => {\n if (!isControlled) {\n setValue(newValue);\n }\n }, []);\n return [value, setValueIfUncontrolled];\n}","'use client';\n\nimport * as React from 'react';\nimport useEnhancedEffect from '../useEnhancedEffect';\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n const ref = React.useRef(fn);\n useEnhancedEffect(() => {\n ref.current = fn;\n });\n return React.useRef((...args) =>\n // @ts-expect-error hide `this`\n (0, ref.current)(...args)).current;\n}\nexport default useEventCallback;","'use client';\n\nimport * as React from 'react';\nimport setRef from '../setRef';\nexport default function useForkRef(...refs) {\n /**\n * This will create a new function if the refs passed to this hook change and are all defined.\n * This means react will call the old forkRef with `null` and the new forkRef\n * with the ref. Cleanup naturally emerges from this behavior.\n */\n return React.useMemo(() => {\n if (refs.every(ref => ref == null)) {\n return null;\n }\n return instance => {\n refs.forEach(ref => {\n setRef(ref, instance);\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}","'use client';\n\nimport * as React from 'react';\nconst UNINITIALIZED = {};\n\n/**\n * A React.useRef() that is initialized lazily with a function. Note that it accepts an optional\n * initialization argument, so the initialization function doesn't need to be an inline closure.\n *\n * @usage\n * const ref = useLazyRef(sortColumns, columns)\n */\nexport default function useLazyRef(init, initArg) {\n const ref = React.useRef(UNINITIALIZED);\n if (ref.current === UNINITIALIZED) {\n ref.current = init(initArg);\n }\n return ref;\n}","'use client';\n\nimport * as React from 'react';\nconst EMPTY = [];\n\n/**\n * A React.useEffect equivalent that runs once, when the component is mounted.\n */\nexport default function useOnMount(fn) {\n /* eslint-disable react-hooks/exhaustive-deps */\n React.useEffect(fn, EMPTY);\n /* eslint-enable react-hooks/exhaustive-deps */\n}","'use client';\n\nimport useLazyRef from '../useLazyRef/useLazyRef';\nimport useOnMount from '../useOnMount/useOnMount';\nexport class Timeout {\n constructor() {\n this.currentId = null;\n this.clear = () => {\n if (this.currentId !== null) {\n clearTimeout(this.currentId);\n this.currentId = null;\n }\n };\n this.disposeEffect = () => {\n return this.clear;\n };\n }\n static create() {\n return new Timeout();\n }\n /**\n * Executes `fn` after `delay`, clearing any previously scheduled call.\n */\n start(delay, fn) {\n this.clear();\n this.currentId = setTimeout(() => {\n this.currentId = null;\n fn();\n }, delay);\n }\n}\nexport default function useTimeout() {\n const timeout = useLazyRef(Timeout.create).current;\n useOnMount(timeout.disposeEffect);\n return timeout;\n}","'use client';\n\n// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\nimport * as React from 'react';\nimport { Timeout } from '../useTimeout/useTimeout';\nlet hadKeyboardEvent = true;\nlet hadFocusVisibleRecently = false;\nconst hadFocusVisibleRecentlyTimeout = new Timeout();\nconst inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n};\n\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @returns {boolean}\n */\nfunction focusTriggersKeyboardModality(node) {\n const {\n type,\n tagName\n } = node;\n if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {\n return true;\n }\n if (tagName === 'TEXTAREA' && !node.readOnly) {\n return true;\n }\n if (node.isContentEditable) {\n return true;\n }\n return false;\n}\n\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\nfunction handleKeyDown(event) {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return;\n }\n hadKeyboardEvent = true;\n}\n\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\nfunction handlePointerDown() {\n hadKeyboardEvent = false;\n}\nfunction handleVisibilityChange() {\n if (this.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n }\n}\nfunction prepare(doc) {\n doc.addEventListener('keydown', handleKeyDown, true);\n doc.addEventListener('mousedown', handlePointerDown, true);\n doc.addEventListener('pointerdown', handlePointerDown, true);\n doc.addEventListener('touchstart', handlePointerDown, true);\n doc.addEventListener('visibilitychange', handleVisibilityChange, true);\n}\nexport function teardown(doc) {\n doc.removeEventListener('keydown', handleKeyDown, true);\n doc.removeEventListener('mousedown', handlePointerDown, true);\n doc.removeEventListener('pointerdown', handlePointerDown, true);\n doc.removeEventListener('touchstart', handlePointerDown, true);\n doc.removeEventListener('visibilitychange', handleVisibilityChange, true);\n}\nfunction isFocusVisible(event) {\n const {\n target\n } = event;\n try {\n return target.matches(':focus-visible');\n } catch (error) {\n // Browsers not implementing :focus-visible will throw a SyntaxError.\n // We use our own heuristic for those browsers.\n // Rethrow might be better if it's not the expected error but do we really\n // want to crash if focus-visible malfunctioned?\n }\n\n // No need for validFocusTarget check. The user does that by attaching it to\n // focusable events only.\n return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\nexport default function useIsFocusVisible() {\n const ref = React.useCallback(node => {\n if (node != null) {\n prepare(node.ownerDocument);\n }\n }, []);\n const isFocusVisibleRef = React.useRef(false);\n\n /**\n * Should be called if a blur event is fired\n */\n function handleBlurVisible() {\n // checking against potential state variable does not suffice if we focus and blur synchronously.\n // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.\n // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.\n // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751\n // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).\n if (isFocusVisibleRef.current) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n hadFocusVisibleRecentlyTimeout.start(100, () => {\n hadFocusVisibleRecently = false;\n });\n isFocusVisibleRef.current = false;\n return true;\n }\n return false;\n }\n\n /**\n * Should be called if a blur event is fired\n */\n function handleFocusVisible(event) {\n if (isFocusVisible(event)) {\n isFocusVisibleRef.current = true;\n return true;\n }\n return false;\n }\n return {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref\n };\n}","'use client';\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/utils';\nexport { default as capitalize } from './capitalize';\nexport { default as createChainedFunction } from './createChainedFunction';\nexport { default as createSvgIcon } from './createSvgIcon';\nexport { default as debounce } from './debounce';\nexport { default as deprecatedPropType } from './deprecatedPropType';\nexport { default as isMuiElement } from './isMuiElement';\nexport { default as ownerDocument } from './ownerDocument';\nexport { default as ownerWindow } from './ownerWindow';\nexport { default as requirePropFactory } from './requirePropFactory';\nexport { default as setRef } from './setRef';\nexport { default as unstable_useEnhancedEffect } from './useEnhancedEffect';\nexport { default as unstable_useId } from './useId';\nexport { default as unsupportedProp } from './unsupportedProp';\nexport { default as useControlled } from './useControlled';\nexport { default as useEventCallback } from './useEventCallback';\nexport { default as useForkRef } from './useForkRef';\nexport { default as useIsFocusVisible } from './useIsFocusVisible';\n// TODO: remove this export once ClassNameGenerator is stable\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const unstable_ClassNameGenerator = {\n configure: generator => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(['MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.', '', \"You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead\", '', 'The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401', '', 'The updated documentation: https://mui.com/guides/classname-generator/'].join('\\n'));\n }\n ClassNameGenerator.configure(generator);\n }\n};","\"use strict\";\n'use client';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return _utils.createSvgIcon;\n }\n});\nvar _utils = require(\"@mui/material/utils\");","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Close');","import {\n Typography as MUITypography,\n TypographyProps,\n styled,\n} from \"@mui/material\";\n\nexport interface ITypography extends TypographyProps {\n type?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"s1\" | \"s2\" | \"s3\" | \"s4\" | \"s5\";\n weight?: \"normal\" | \"medium\" | \"bold\";\n}\n\nconst StyledTypography = styled(MUITypography)<ITypography>(\n ({ theme: { palette }, color }) => ({\n color: color || palette.theme?.primary[800],\n }),\n);\n\nexport function Typography(props: ITypography) {\n const {\n children,\n type = \"h5\",\n weight = \"normal\",\n className,\n ...rest\n } = props;\n\n return (\n <StyledTypography className={`${type} ${weight} ${className}`} {...rest}>\n {children}\n </StyledTypography>\n );\n}\n\nexport default Typography;\n","import React from 'react';\nimport { SnackbarContent, useSnackbar } from 'notistack';\nimport { Avatar, Box, IconButton } from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { useNavigate } from 'react-router-dom';\nimport { Notification } from '../icons';\nimport Typography from '../typography/typography';\nimport images from '../../assets/images';\nimport \"./custom-snackbar.scss\"\n\ninterface CustomSnackbarProps {\n message: string;\n variant?: 'default' | 'error' | 'success' | 'warning' | 'info';\n linkUrl?: string;\n snackbarKey: string | number;\n}\n\nconst mainModuleIcons = {\n rbac: images.user,\n document: images.document,\n 'accounts-and-finance': images.accounting,\n inventory: images.inventory,\n manufacturing: images.manufacturing,\n sales: images.crm,\n rental: images.rental,\n user: images.user,\n purchase: images.procurement,\n hrms: images.hrms\n}\nconst mainModuleBgColors = {\n rbac: '#F3E5F5',\n document: '#FFF8E1',\n 'accounts-and-finance': '#E8F5E8',\n inventory: '#E3F2FD',\n manufacturing: '#FFF3E0',\n sales: '#F3E5F5',\n rental: '#E8F5E8',\n user: '#F3E5F5',\n purchase: '#FCE4EC',\n hrms: '#fcfcfc'\n}\n\nconst CustomSnackbar = React.forwardRef<HTMLDivElement, CustomSnackbarProps>(\n ({ message, variant = 'default', linkUrl, snackbarKey, data }, ref) => {\n const { closeSnackbar } = useSnackbar();\n const navigate = useNavigate();\n\n const backgroundColorMap: Record<string, string> = {\n success: '#f0fdf4',\n error: '#fef2f2',\n warning: '#fff7ed',\n info: '#eff6ff',\n default: '#fff',\n };\n\n const textColorMap: Record<string, string> = {\n success: '#166534',\n error: '#991b1b',\n warning: '#92400e',\n info: '#1e40af',\n default: '#27272a',\n };\n\n const handleClick = () => {\n if (linkUrl) navigate(linkUrl);\n closeSnackbar(snackbarKey);\n };\n\n const handleCloseClick = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent triggering link\n closeSnackbar(snackbarKey);\n };\n\n return (\n <SnackbarContent\n ref={ref}\n style={{\n backgroundColor: backgroundColorMap[variant],\n color: textColorMap[variant],\n }}\n className='SnackBar'\n onClick={handleClick}\n >\n <Box display=\"flex\" alignItems=\"center\" p={2} position=\"relative\" gap={2} width='100%'>\n {mainModuleIcons?.[data.module] ?\n <Avatar sx={{ \n width: 45, \n height: 45, \n fontSize: '0.875rem',\n bgcolor: mainModuleBgColors[data.module] || 'primary.main',\n color: 'white',\n borderRadius: '8px',\n '& img': { \n width: '35px', \n height: '35px', \n objectFit: 'contain'\n }\n }} src={mainModuleIcons?.[data.module]} /> :\n <Notification\n style={{\n color: textColorMap[variant],\n marginTop: 2,\n }}\n />\n }\n <Box display=\"flex\" alignItems=\"center\" width='100%'>\n <Box flex=\"1\">\n <Typography type='h5' color={'inherit'} weight='bold'>\n New Notification\n </Typography>\n <Typography type='s3' mt={0.5} color={'inherit'}>\n {message}\n </Typography>\n </Box>\n\n <IconButton\n size=\"small\"\n onClick={handleCloseClick}\n // style={{\n // position: 'absolute',\n // top: 4,\n // right: 4,\n // color: textColorMap[variant],\n // }}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n </SnackbarContent>\n );\n }\n);\n\nexport { CustomSnackbar };\nexport default CustomSnackbar;\n","import React, { createContext, useEffect, useRef, useState } from 'react';\nimport {\n\tpostV1AuthChangePassword,\n\tpostV1AuthForgotPassword,\n\tpostV1AuthChangeUserPassword,\n\t// getV1UserId,\n\tpostV1AuthLogin,\n\tpostV1AuthResetPassword,\n\tsetBaseUrl,\n\tpostV1AuthChangeUserPasswordByAdmin\n} from '../api-client/api.rbac/api';\nimport { auth } from '../constants/auth';\nimport { useLocation, matchRoutes, useNavigate } from 'react-router-dom';\nimport { Pathname } from '../constants/pathnames/pathname'; // Removed - should be passed as props or configured by consuming app\nimport { getToken } from '../utils/common';\nimport { enqueueSnackbar } from 'notistack';\nimport { Socket, io } from 'socket.io-client';\nimport { generateRouteWithId } from '../utils/route-utils';\nimport { getApiConfig } from '../utils/api-config';\nimport {\n\tPathnameAccounting,\n\tPathnameGenerator\n} from '../constants/pathnames/pathname.accounting';\n\nimport {\n\tPathnameInventory,\n\tPathnameGenerator as PathnameGeneratorInventory\n} from '../constants/pathnames/pathname.inventory';\n\nimport {\n\tPathnameManufacturing,\n\tPathnameGenerator as PathnameGeneratorManufacuring\n} from '../constants/pathnames/pathname.manufacturing';\n\nimport {\n\tPathnamePurchase,\n\tPathnameGenerator as PathnameGeneratorPurchase\n} from '../constants/pathnames/pathname.procurement';\n\nimport {\n\tPathnameCrm,\n\tPathnameGenerator as PathnameGeneratorCrm\n} from '../constants/pathnames/pathname.crm';\n\nimport {\n\tPathnameRental,\n\tPathnameGenerator as PathnameGeneratorRental\n} from '../constants/pathnames/pathname.rental';\n\nimport { ROUTES as RENTALROUTES } from '../constants/pathnames/pathname.rental';\n\nimport CustomSnackbar from '../components/custom-snackbar/custom-snackbar.tsx';\nimport { RbacApi } from '@/api-client/index.ts';\nexport interface LoginFormValues {\n\temail: string;\n\tpassword: string;\n}\n\nexport interface resetFormValues {\n\temail: string;\n}\n\nexport interface resetPasswordValues {\n\ttoken: string;\n}\n\nexport interface changePasswordValues {\n\tpassword: string;\n}\n\nexport interface changeUserPasswordValues {\n\tpassword: string;\n}\n\ninterface ERPApiUser {\n\tid: string | number;\n\tfirst_name: string;\n\tlast_name: string;\n\tmiddle_name: string;\n\tcountry_code: string;\n\temail: string;\n\tcreated_by: any;\n\tupdated_by: any;\n\tcreated_at: string;\n\tupdated_at: string;\n\trole_id: string;\n\tdepartment_id: number;\n\tis_deleted: number;\n\tdeleted_at: string | null;\n\tdeleted_by: any;\n\ttoken: string;\n\tprofile_image: string;\n\tcompany_id: number | string;\n\tcurrency_data?: {\n\t\tid: number;\n\t\tsymbol: string;\n\t\tcurrency_name: string;\n\t\tnumber_format: string;\n\t\tposition: string | null;\n\t\tfraction_unit: string | null\n\t};\n\taccessCompanies?: any[]\n}\ninterface ERPUser extends Omit<ERPApiUser, 'token'> {\n\tfull_name: string;\n}\n\nexport interface DefaultProviderProps {\n\tuser: ERPUser | null;\n\tloading: boolean;\n\tauthToken: string;\n\tsetUser: React.Dispatch<React.SetStateAction<ERPUser | null>>;\n\tsetLoading: React.Dispatch<React.SetStateAction<boolean>>;\n\tlogin: (\n\t\tparams: LoginFormValues,\n\t\tcallback: (err: string) => void\n\t) => Promise<void>;\n\tlogout: () => Promise<void>;\n\tforgotPassword: (\n\t\tparams: resetFormValues,\n\t\tcallback: (err: string) => void\n\t) => Promise<void>;\n\tresetPassword: (\n\t\tparams: resetPasswordValues,\n\t\tcallback: (err: string) => void\n\t) => Promise<void>;\n\tchangePassword: (\n\t\tparams: changePasswordValues,\n\t\tcallback: (err: string) => void\n\t) => Promise<void>;\n\tchangeUserPassword: (\n\t\tparams: changeUserPasswordValues,\n\t\tcallback: (err: string) => void\n\t) => Promise<void>;\n}\n\nconst defaultProvider: DefaultProviderProps = {\n\tuser: null,\n\tloading: true,\n\tauthToken: '',\n\tsetUser: () => null,\n\tsetLoading: () => Boolean,\n\tlogin: () => Promise.resolve(),\n\tlogout: () => Promise.resolve(),\n\tforgotPassword: () => Promise.resolve(),\n\tresetPassword: () => Promise.resolve(),\n\tchangePassword: () => Promise.resolve(),\n\tchangeUserPassword: () => Promise.resolve()\n};\n\nconst AuthContext = createContext<DefaultProviderProps>(defaultProvider);\n\ninterface AuthProviderProps {\n\tchildren: React.ReactNode;\n\tpublicRoutes?: string[]; // Optional prop to allow customization of public routes\n}\n\n// Base URL will be set at runtime via ERPUIProvider\n\nconst AuthProvider: React.FC<AuthProviderProps> = ({ children, publicRoutes = [] }) => {\n\t// ** States\n\tconst [user, setUser] = useState(defaultProvider.user);\n\tconst [authToken, setAuthToken] = useState<string>('');\n\tconst [loading, setLoading] = useState(defaultProvider.loading);\n\tconst socketRef = useRef<Socket | null>(null);\n\n\t// ** Hooks\n\tconst navigate = useNavigate();\n\tconst location = useLocation();\n\tconst isJsonParse = (string?: string | null) => {\n\t\tif (!string) return false;\n\n\t\ttry {\n\t\t\treturn JSON.parse(string);\n\t\t} catch (error) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tconst getNotificationUrl = (data: any) => {\n\t\tconst { moduleName = '', moduleId = '', notificationData = {} } = data;\n\t\tconst key = moduleName.toLowerCase();\n\n\t\tconst routeMap: Record<string, () => string> = {\n\t\t\t'sales invoice': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_SALES_INVOICES), moduleId.toString()),\n\n\t\t\t'asset transfers': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_ASSET_TRANSFER), moduleId.toString()),\n\n\t\t\t'budgets': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_BUDGET), moduleId.toString()),\n\n\t\t\t'cash expense': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_CASH_EXPENSE), moduleId.toString()),\n\n\t\t\t'credit notes': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_CREDIT_NOTE), moduleId.toString()),\n\n\t\t\t'debit notes': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_DEBIT_NOTE), moduleId.toString()),\n\n\t\t\t'expense reimbursement': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_EXPENSE_REIMBURSEMENT), moduleId.toString()),\n\n\t\t\t'journal entries': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_JOURNAL_ENTRY), moduleId.toString()),\n\n\t\t\t'payment entries': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_PAYMENT_ENTRY), moduleId.toString()),\n\n\t\t\t'purchase invoice': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_PURCHASE_INVOICE), moduleId.toString()),\n\n\t\t\t'stock transfer': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorInventory(PathnameInventory.VIEW_STOCK_TRANSFER), moduleId.toString()),\n\n\t\t\t'bills of materials': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorManufacuring(PathnameManufacturing.VIEW_BILL_OF_MATERIAL), moduleId.toString()),\n\n\t\t\t'purchase agreement': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_AGREEMENT), moduleId.toString()),\n\n\t\t\t'purchase orders': () =>\n\t\t\t\tgenerateRouteWithId(notificationData?.data?.is_rental == 1 ? RENTALROUTES.VIEW : PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_ORDER), moduleId.toString()),\n\n\t\t\t'purchase request': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_ORDER), moduleId.toString()),\n\n\t\t\t'vra': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_VENDOR_RETURNS), moduleId.toString()),\n\n\t\t\t'sl customer returns': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorCrm(PathnameCrm.VIEW_CUSTOMER_RETURNS), moduleId.toString()),\n\n\t\t\t'sales order': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorCrm(PathnameCrm.VIEW_SALES_ORDER), moduleId.toString()),\n\n\t\t\t'rental order': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_RENTAL_ORDER), moduleId.toString()),\n\n\t\t\t'replacement order': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_RENTAL_ORDER), moduleId.toString()),\n\n\t\t\t'rental agreement': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_AGREEMENT), moduleId.toString()),\n\n\t\t\t'cross hire order': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_CROSS_HIRE_ORDER), moduleId.toString()),\n\n\t\t\t'cross hire request': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_CROSS_HIRE_REQUEST), moduleId.toString()),\n\t\t};\n\n\t\treturn routeMap[key]?.() || '/dashboard';\n\t};\n\n\tuseEffect(() => {\n\t\tsetLoading(true);\n\t\t// initAuth()\n\t\tconst storedToken = window.localStorage.getItem(auth.storageTokenKeyName);\n\t\tconst storedUser =\n\t\t\tisJsonParse(window.localStorage.getItem(auth.storageUserKeyName)) ?? null;\n\t\tconst allPublicRoutes = [Pathname.LOGIN, Pathname.FORGOT_PASSWORD, Pathname.RESET_PASSWORD, Pathname.CHANGE_PASSWORD, ...publicRoutes];\n\t\tconst currentPath = window.location.pathname;\n\t\tif (!storedToken && !storedUser) {\n\t\t\tconsole.log('allPublicRoutes..', allPublicRoutes, 'currentPath..', currentPath)\n\t\t\t// if (!allPublicRoutes.includes(currentPath)) {\n\t\t\tif (Boolean(!matchRoutes(allPublicRoutes.map((route) => ({ path: route })), location))) {\n\t\t\t\tnavigate(Pathname.LOGIN);\n\t\t\t}\n\t\t\tsetLoading(false);\n\t\t} else {\n\t\t\tsetUser(storedUser);\n\t\t\tsetAuthToken(storedToken || '');\n\t\t\tsetLoading(false);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!authToken) {\n\t\t\tif (socketRef.current) {\n\t\t\t\tsocketRef.current?.disconnect();\n\t\t\t\tsocketRef.current = null\n\t\t\t}\n\t\t\tconsole.warn(\"No auth token found, not connecting to socket.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = getApiConfig();\n\t\tconst socket = io(config.socketBaseUrl, {\n\t\t\ttransports: [\"websocket\"],\n\t\t\tauth: { token: authToken },\n\t\t\tpath: \"/socket.io/\",\n\n\t\t});\n\t\tsocketRef.current = socket;\n\n\t\tsocket.on(\"connect\", () => {\n\t\t\tconsole.log(\"Socket connected:\", socket.id);\n\t\t\tsocket.onAny((event, ...args) => {\n\t\t\t\tconsole.log(`Received event: ${event}`, args);\n\t\t\t});\n\t\t});\n\n\t\t// socket event handler\n\t\tsocket.on('notification', (data) => {\n\t\t\tconst { message, notificationData } = data || {};\n\t\t\tlet notificationContent: React.ReactNode = message;\n\t\t\tconst url = getNotificationUrl(data);\n\n\t\t\tif (notificationData) {\n\t\t\t\tconst { notification_type } = notificationData;\n\n\t\t\t\tswitch (notification_type) {\n\t\t\t\t\tcase 'addApprovers': {\n\n\t\t\t\t\t\tnotificationContent = message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'change_approval_status': {\n\t\t\t\t\t\tnotificationContent = message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tnotificationContent = message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tenqueueSnackbar(String(message), {\n\t\t\t\tvariant: 'default',\n\t\t\t\tanchorOrigin: { vertical: 'top', horizontal: 'center' },\n\t\t\t\tautoHideDuration: 5000,\n\t\t\t\tcontent: (key) => (\n\t\t\t\t\t<CustomSnackbar snackbarKey={key} message={notificationContent} data={notificationData} variant=\"default\" linkUrl={url} />\n\t\t\t\t),\n\t\t\t});\n\t\t});\n\n\n\t\tsocket.on(\"sales_invoice_viewed\", (data) => {\n\t\t\tconsole.log(\"Invoice viewed:\", data.invoiceId, \"by user:\", data.userId);\n\t\t});\n\n\t\tsocket.on(\"error\", (errMsg) => {\n\t\t\tenqueueSnackbar(`Socket error: ${errMsg}`, { variant: \"error\" });\n\t\t\tconsole.error(\"Socket error:\", errMsg);\n\t\t});\n\n\t\t// Clean up on unmount\n\t\treturn () => {\n\t\t\tif (socketRef.current) {\n\t\t\t\tsocketRef.current.disconnect();\n\t\t\t\tsocketRef.current = null\n\t\t\t}\n\t\t};\n\t}, [authToken]);\n\n\tconst fetchRolesByUserId = async (userId: number | string, token: string) => {\n\t\tconst response = await RbacApi.getV1RoleUserId({ id: userId, ...getToken(token) } as any);\n\t\tconst perm = response?.data?.role || [];\n\t\treturn JSON.stringify(perm);\n\t}\n\n\tconst handleLogin = async (\n\t\tparams: LoginFormValues,\n\t\tcallback: (err: string) => void,\n\t\tshoudRedirect: boolean = true,\n\t\tredirectPath: string = Pathname.DASHBOARD\n\t) => {\n\t\tsetLoading(true);\n\t\tconst storedToken = window.localStorage.getItem(auth.storageTokenKeyName);\n\t\tif (storedToken && user) {\n\t\t\treturn navigate(Pathname.DASHBOARD);\n\t\t}\n\n\t\ttry {\n\t\t\tconst loginUser = await postV1AuthLogin({ ...params, ...getToken() });\n\t\t\tif (loginUser.success) {\n\t\t\t\tconst data: ERPApiUser | null = loginUser?.data?.login || null;\n\t\t\t\tif (data) {\n\t\t\t\t\tconst userData: ERPUser = {\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\tfull_name: `${data.first_name} ${data.last_name}`\n\t\t\t\t\t};\n\t\t\t\t\tconst rolePermission = await fetchRolesByUserId(userData.id, data.token);\n\t\t\t\t\t\n\t\t\t\t\tglobalThis.localStorage.setItem(auth.storageTokenKeyName, data.token);\n\t\t\t\t\twindow.localStorage.setItem(auth.storageUserKeyName, JSON.stringify(userData));\n\t\t\t\t\twindow.localStorage.setItem(auth.storageRolePermissionKeyName, rolePermission);\n\t\t\t\t\twindow.dispatchEvent(new Event(\"role-permission-changed\"));\n\n\t\t\t\t\tsetUser(userData);\n\t\t\t\t\tsetAuthToken(data.token);\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tshoudRedirect && navigate(redirectPath);\n\t\t\t\t\t\tsetLoading(false);\n\t\t\t\t\t\tdelete data.token;\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t}\n\t\t\tsetLoading(false);\n\t\t\tcallback(message);\n\t\t}\n\t};\n\n\tconst handleLogout = async () => {\n\t\twindow.localStorage.removeItem(auth.storageTokenKeyName);\n\t\twindow.localStorage.removeItem(auth.storageUserKeyName);\n\t\twindow.localStorage.removeItem(auth.storageRolePermissionKeyName);\n\t\twindow.dispatchEvent(new Event(\"role-permission-changed\"));\n\t\tsetUser(null);\n\t\tsetAuthToken('');\n\t\tnavigate(Pathname.LOGIN);\n\t};\n\n\tconst handleForgotPassword = async (params: resetFormValues,\n\t\tcallback: (type: boolean, err: string) => void) => {\n\t\ttry {\n\t\t\tawait postV1AuthForgotPassword({ ...params, ...getToken() });\n\t\t\tcallback(true, \"Reset Link sent to your email\");\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t}\n\n\t\t\tcallback(false, message);\n\t\t}\n\t};\n\n\tconst handleResetPassword = async (params: resetPasswordValues,\n\t\tcallback: (err: string) => void) => {\n\t\ttry {\n\t\t\tconst response = await postV1AuthResetPassword({ ...params, ...getToken() });\n\t\t\tcallback(response);\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tconsole.log(\"Error \", error)\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t\tcallback(message);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst handleChangePassword = async (params: resetPasswordValues,\n\t\tcallback: (err: string) => void) => {\n\t\ttry {\n\t\t\tawait postV1AuthChangePassword({ ...params, ...getToken() });\n\t\t\tcallback(null);\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tconsole.log(\"Error \", error)\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t\tcallback(message);\n\t\t\t}\n\t\t}\n\t\tcallback(\"reset\");\n\t}\n\n\tconst handleChangeUserPassword = async (params: resetPasswordValues,\n\t\tcallback: (err: string, resType: boolean) => void) => {\n\t\ttry {\n\t\t\tawait postV1AuthChangeUserPassword({ ...params, ...getToken() });\n\t\t\tcallback('Password Changed Successfully', true);\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t\tcallback(message, false);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst handleChangeUserPasswordByAdmin = async (params: changePasswordValues,\n\t\tcallback: (err: string, resType: boolean) => void) => {\n\t\ttry {\n\t\t\tawait postV1AuthChangeUserPasswordByAdmin({ ...params, ...getToken() });\n\t\t\tcallback('Password Changed Successfully', true);\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t\tcallback(message, false);\n\t\t\t}\n\t\t}\n\t}\n\n\n\tconst values = {\n\t\tuser,\n\t\tauthToken,\n\t\tloading,\n\t\tsetUser,\n\t\tsetLoading,\n\t\tlogin: handleLogin,\n\t\tlogout: handleLogout,\n\t\tforgotPassword: handleForgotPassword,\n\t\tresetPassword: handleResetPassword,\n\t\tchangePassword: handleChangePassword,\n\t\tchangeUserPassword: handleChangeUserPassword,\n\t\tchangeUserPasswordByAdmin: handleChangeUserPasswordByAdmin\n\t};\n\n\treturn <AuthContext.Provider value={values}>{children}</AuthContext.Provider>;\n};\n\nexport { AuthContext, AuthProvider };\n","import { useContext } from \"react\";\nimport { AuthContext, DefaultProviderProps } from \"../contexts/AuthContext\";\n\nexport const useAuth = (): DefaultProviderProps => useContext(AuthContext);\n"],"names":["React","_extends","ClassNameGenerator","exports","require$$0","default_1","require$$1","require$$2","styled","MUITypography","jsx","images","useSnackbar","useNavigate","SnackbarContent","jsxs","Box","Avatar","Notification","IconButton","CloseIcon","createContext","useState","useRef","useLocation","PathnameGenerator","PathnameAccounting","PathnameGeneratorInventory","PathnameInventory","PathnameGeneratorManufacuring","PathnameManufacturing","PathnameGeneratorPurchase","PathnamePurchase","_a","RENTALROUTES","PathnameGeneratorCrm","PathnameCrm","PathnameGeneratorRental","PathnameRental","useEffect","auth","Pathname","matchRoutes","getApiConfig","io","enqueueSnackbar","RbacApi.getV1RoleUserId","getToken","postV1AuthLogin","postV1AuthForgotPassword","postV1AuthResetPassword","postV1AuthChangePassword","postV1AuthChangeUserPassword","postV1AuthChangeUserPasswordByAdmin","useContext"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]}
1
+ {"version":3,"file":"useAuth-BfXZw2ZG.js","sources":["../../src/utils/route-utils.ts","../../node_modules/@mui/utils/esm/createChainedFunction/createChainedFunction.js","../../node_modules/@mui/utils/esm/debounce/debounce.js","../../node_modules/@mui/utils/esm/deprecatedPropType/deprecatedPropType.js","../../node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js","../../node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../../node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js","../../node_modules/@mui/utils/esm/requirePropFactory/requirePropFactory.js","../../node_modules/@mui/utils/esm/setRef/setRef.js","../../node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../../node_modules/@mui/utils/esm/useId/useId.js","../../node_modules/@mui/utils/esm/unsupportedProp/unsupportedProp.js","../../node_modules/@mui/utils/esm/useControlled/useControlled.js","../../node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js","../../node_modules/@mui/utils/esm/useForkRef/useForkRef.js","../../node_modules/@mui/utils/esm/useLazyRef/useLazyRef.js","../../node_modules/@mui/utils/esm/useOnMount/useOnMount.js","../../node_modules/@mui/utils/esm/useTimeout/useTimeout.js","../../node_modules/@mui/utils/esm/useIsFocusVisible/useIsFocusVisible.js","../../node_modules/@mui/material/utils/index.js","../../node_modules/@mui/icons-material/utils/createSvgIcon.js","../../node_modules/@mui/icons-material/Close.js","../../src/components/typography/typography.tsx","../../src/components/custom-snackbar/custom-snackbar.tsx","../../src/contexts/AuthContext.tsx","../../src/hooks/useAuth.ts"],"sourcesContent":["\nexport const convertRoutesToUseIdParams = (routes: Record<string, string>): Record<string, string> => {\n const updatedRoutes: Record<string, string> = { ...routes };\n \n // Identify patterns for view/edit/detail routes\n Object.keys(updatedRoutes).forEach(key => {\n // Common patterns for detail views\n if (\n key.startsWith('VIEW_') || \n key.startsWith('EDIT_') || \n key.startsWith('DETAIL_') ||\n key.includes('_VIEW_') || \n key.includes('_EDIT_') || \n key.includes('_DETAIL_')\n ) {\n if (!updatedRoutes[key].includes(':')) {\n updatedRoutes[key] = `${updatedRoutes[key]}/:id`;\n }\n }\n });\n \n return updatedRoutes;\n};\n\n\nexport const generateRouteWithId = (basePath: string, id: string | number | Record<string, any>): string => {\n if(id && typeof id === 'object') {\n Object.entries(id).map(([key, value]) => {\n basePath = basePath.replace(`:${key}`, value?.toString());\n })\n } else if (basePath.includes(':id')) {\n return basePath.replace(':id', id?.toString());\n }\n \n // If the path doesn't have an :id parameter, append it\n return `${basePath}`;\n};\n\n\nexport const updatePathnameWithIdParams = <T extends Record<string, string>>(pathnameObject: T): T => {\n return convertRoutesToUseIdParams(pathnameObject) as T;\n}; \n\n// Added utility for navigating to views with id parameter\nexport const navigateToRouteWithId = (\n navigate: any,\n route: string, \n id: string | number,\n state?: any\n) => {\n const path = generateRouteWithId(route, id);\n navigate(path, { state });\n}; ","/**\n * Safe chained function.\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n */\nexport default function createChainedFunction(...funcs) {\n return funcs.reduce((acc, func) => {\n if (func == null) {\n return acc;\n }\n return function chainedFunction(...args) {\n acc.apply(this, args);\n func.apply(this, args);\n };\n }, () => {});\n}","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func, wait = 166) {\n let timeout;\n function debounced(...args) {\n const later = () => {\n // @ts-ignore\n func.apply(this, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n }\n debounced.clear = () => {\n clearTimeout(timeout);\n };\n return debounced;\n}","export default function deprecatedPropType(validator, reason) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n return (props, propName, componentName, location, propFullName) => {\n const componentNameSafe = componentName || '<<anonymous>>';\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The ${location} \\`${propFullNameSafe}\\` of ` + `\\`${componentNameSafe}\\` is deprecated. ${reason}`);\n }\n return null;\n };\n}","import * as React from 'react';\nexport default function isMuiElement(element, muiNames) {\n var _muiName, _element$type;\n return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf( // For server components `muiName` is avaialble in element.type._payload.value.muiName\n // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45\n // eslint-disable-next-line no-underscore-dangle\n (_muiName = element.type.muiName) != null ? _muiName : (_element$type = element.type) == null || (_element$type = _element$type._payload) == null || (_element$type = _element$type.value) == null ? void 0 : _element$type.muiName) !== -1;\n}","export default function ownerDocument(node) {\n return node && node.ownerDocument || document;\n}","import ownerDocument from '../ownerDocument';\nexport default function ownerWindow(node) {\n const doc = ownerDocument(node);\n return doc.defaultView || window;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nexport default function requirePropFactory(componentNameInError, Component) {\n if (process.env.NODE_ENV === 'production') {\n return () => null;\n }\n\n // eslint-disable-next-line react/forbid-foreign-prop-types\n const prevPropTypes = Component ? _extends({}, Component.propTypes) : null;\n const requireProp = requiredProp => (props, propName, componentName, location, propFullName, ...args) => {\n const propFullNameSafe = propFullName || propName;\n const defaultTypeChecker = prevPropTypes == null ? void 0 : prevPropTypes[propFullNameSafe];\n if (defaultTypeChecker) {\n const typeCheckerResult = defaultTypeChecker(props, propName, componentName, location, propFullName, ...args);\n if (typeCheckerResult) {\n return typeCheckerResult;\n }\n }\n if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n return new Error(`The prop \\`${propFullNameSafe}\\` of ` + `\\`${componentNameInError}\\` can only be used together with the \\`${requiredProp}\\` prop.`);\n }\n return null;\n };\n return requireProp;\n}","/**\n * TODO v5: consider making it private\n *\n * passes {value} to {ref}\n *\n * WARNING: Be sure to only call this inside a callback that is passed as a ref.\n * Otherwise, make sure to cleanup the previous {ref} if it changes. See\n * https://github.com/mui/material-ui/issues/13539\n *\n * Useful if you want to expose the ref of an inner component to the public API\n * while still using it inside the component.\n * @param ref A ref callback or ref object. If anything falsy, this is a no-op.\n */\nexport default function setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}","'use client';\n\nimport * as React from 'react';\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nexport default useEnhancedEffect;","'use client';\n\nimport * as React from 'react';\nlet globalId = 0;\nfunction useGlobalId(idOverride) {\n const [defaultId, setDefaultId] = React.useState(idOverride);\n const id = idOverride || defaultId;\n React.useEffect(() => {\n if (defaultId == null) {\n // Fallback to this default id when possible.\n // Use the incrementing value for client-side rendering only.\n // We can't use it server-side.\n // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n globalId += 1;\n setDefaultId(`mui-${globalId}`);\n }\n }, [defaultId]);\n return id;\n}\n\n// downstream bundlers may remove unnecessary concatenation, but won't remove toString call -- Workaround for https://github.com/webpack/webpack/issues/14814\nconst maybeReactUseId = React['useId'.toString()];\n/**\n *\n * @example <div id={useId()} />\n * @param idOverride\n * @returns {string}\n */\nexport default function useId(idOverride) {\n if (maybeReactUseId !== undefined) {\n const reactId = maybeReactUseId();\n return idOverride != null ? idOverride : reactId;\n }\n // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n return useGlobalId(idOverride);\n}","export default function unsupportedProp(props, propName, componentName, location, propFullName) {\n if (process.env.NODE_ENV === 'production') {\n return null;\n }\n const propFullNameSafe = propFullName || propName;\n if (typeof props[propName] !== 'undefined') {\n return new Error(`The prop \\`${propFullNameSafe}\\` is not supported. Please remove it.`);\n }\n return null;\n}","'use client';\n\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\nimport * as React from 'react';\nexport default function useControlled({\n controlled,\n default: defaultProp,\n name,\n state = 'value'\n}) {\n // isControlled is ignored in the hook dependency lists as it should never change.\n const {\n current: isControlled\n } = React.useRef(controlled !== undefined);\n const [valueState, setValue] = React.useState(defaultProp);\n const value = isControlled ? controlled : valueState;\n if (process.env.NODE_ENV !== 'production') {\n React.useEffect(() => {\n if (isControlled !== (controlled !== undefined)) {\n console.error([`MUI: A component is changing the ${isControlled ? '' : 'un'}controlled ${state} state of ${name} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${name} ` + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n }\n }, [state, name, controlled]);\n const {\n current: defaultValue\n } = React.useRef(defaultProp);\n React.useEffect(() => {\n if (!isControlled && !Object.is(defaultValue, defaultProp)) {\n console.error([`MUI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. ` + `To suppress this warning opt to use a controlled ${name}.`].join('\\n'));\n }\n }, [JSON.stringify(defaultProp)]);\n }\n const setValueIfUncontrolled = React.useCallback(newValue => {\n if (!isControlled) {\n setValue(newValue);\n }\n }, []);\n return [value, setValueIfUncontrolled];\n}","'use client';\n\nimport * as React from 'react';\nimport useEnhancedEffect from '../useEnhancedEffect';\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n const ref = React.useRef(fn);\n useEnhancedEffect(() => {\n ref.current = fn;\n });\n return React.useRef((...args) =>\n // @ts-expect-error hide `this`\n (0, ref.current)(...args)).current;\n}\nexport default useEventCallback;","'use client';\n\nimport * as React from 'react';\nimport setRef from '../setRef';\nexport default function useForkRef(...refs) {\n /**\n * This will create a new function if the refs passed to this hook change and are all defined.\n * This means react will call the old forkRef with `null` and the new forkRef\n * with the ref. Cleanup naturally emerges from this behavior.\n */\n return React.useMemo(() => {\n if (refs.every(ref => ref == null)) {\n return null;\n }\n return instance => {\n refs.forEach(ref => {\n setRef(ref, instance);\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}","'use client';\n\nimport * as React from 'react';\nconst UNINITIALIZED = {};\n\n/**\n * A React.useRef() that is initialized lazily with a function. Note that it accepts an optional\n * initialization argument, so the initialization function doesn't need to be an inline closure.\n *\n * @usage\n * const ref = useLazyRef(sortColumns, columns)\n */\nexport default function useLazyRef(init, initArg) {\n const ref = React.useRef(UNINITIALIZED);\n if (ref.current === UNINITIALIZED) {\n ref.current = init(initArg);\n }\n return ref;\n}","'use client';\n\nimport * as React from 'react';\nconst EMPTY = [];\n\n/**\n * A React.useEffect equivalent that runs once, when the component is mounted.\n */\nexport default function useOnMount(fn) {\n /* eslint-disable react-hooks/exhaustive-deps */\n React.useEffect(fn, EMPTY);\n /* eslint-enable react-hooks/exhaustive-deps */\n}","'use client';\n\nimport useLazyRef from '../useLazyRef/useLazyRef';\nimport useOnMount from '../useOnMount/useOnMount';\nexport class Timeout {\n constructor() {\n this.currentId = null;\n this.clear = () => {\n if (this.currentId !== null) {\n clearTimeout(this.currentId);\n this.currentId = null;\n }\n };\n this.disposeEffect = () => {\n return this.clear;\n };\n }\n static create() {\n return new Timeout();\n }\n /**\n * Executes `fn` after `delay`, clearing any previously scheduled call.\n */\n start(delay, fn) {\n this.clear();\n this.currentId = setTimeout(() => {\n this.currentId = null;\n fn();\n }, delay);\n }\n}\nexport default function useTimeout() {\n const timeout = useLazyRef(Timeout.create).current;\n useOnMount(timeout.disposeEffect);\n return timeout;\n}","'use client';\n\n// based on https://github.com/WICG/focus-visible/blob/v4.1.5/src/focus-visible.js\nimport * as React from 'react';\nimport { Timeout } from '../useTimeout/useTimeout';\nlet hadKeyboardEvent = true;\nlet hadFocusVisibleRecently = false;\nconst hadFocusVisibleRecentlyTimeout = new Timeout();\nconst inputTypesWhitelist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n};\n\n/**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} node\n * @returns {boolean}\n */\nfunction focusTriggersKeyboardModality(node) {\n const {\n type,\n tagName\n } = node;\n if (tagName === 'INPUT' && inputTypesWhitelist[type] && !node.readOnly) {\n return true;\n }\n if (tagName === 'TEXTAREA' && !node.readOnly) {\n return true;\n }\n if (node.isContentEditable) {\n return true;\n }\n return false;\n}\n\n/**\n * Keep track of our keyboard modality state with `hadKeyboardEvent`.\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * @param {KeyboardEvent} event\n */\nfunction handleKeyDown(event) {\n if (event.metaKey || event.altKey || event.ctrlKey) {\n return;\n }\n hadKeyboardEvent = true;\n}\n\n/**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n */\nfunction handlePointerDown() {\n hadKeyboardEvent = false;\n}\nfunction handleVisibilityChange() {\n if (this.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n }\n}\nfunction prepare(doc) {\n doc.addEventListener('keydown', handleKeyDown, true);\n doc.addEventListener('mousedown', handlePointerDown, true);\n doc.addEventListener('pointerdown', handlePointerDown, true);\n doc.addEventListener('touchstart', handlePointerDown, true);\n doc.addEventListener('visibilitychange', handleVisibilityChange, true);\n}\nexport function teardown(doc) {\n doc.removeEventListener('keydown', handleKeyDown, true);\n doc.removeEventListener('mousedown', handlePointerDown, true);\n doc.removeEventListener('pointerdown', handlePointerDown, true);\n doc.removeEventListener('touchstart', handlePointerDown, true);\n doc.removeEventListener('visibilitychange', handleVisibilityChange, true);\n}\nfunction isFocusVisible(event) {\n const {\n target\n } = event;\n try {\n return target.matches(':focus-visible');\n } catch (error) {\n // Browsers not implementing :focus-visible will throw a SyntaxError.\n // We use our own heuristic for those browsers.\n // Rethrow might be better if it's not the expected error but do we really\n // want to crash if focus-visible malfunctioned?\n }\n\n // No need for validFocusTarget check. The user does that by attaching it to\n // focusable events only.\n return hadKeyboardEvent || focusTriggersKeyboardModality(target);\n}\nexport default function useIsFocusVisible() {\n const ref = React.useCallback(node => {\n if (node != null) {\n prepare(node.ownerDocument);\n }\n }, []);\n const isFocusVisibleRef = React.useRef(false);\n\n /**\n * Should be called if a blur event is fired\n */\n function handleBlurVisible() {\n // checking against potential state variable does not suffice if we focus and blur synchronously.\n // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.\n // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.\n // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751\n // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).\n if (isFocusVisibleRef.current) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n hadFocusVisibleRecentlyTimeout.start(100, () => {\n hadFocusVisibleRecently = false;\n });\n isFocusVisibleRef.current = false;\n return true;\n }\n return false;\n }\n\n /**\n * Should be called if a blur event is fired\n */\n function handleFocusVisible(event) {\n if (isFocusVisible(event)) {\n isFocusVisibleRef.current = true;\n return true;\n }\n return false;\n }\n return {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref\n };\n}","'use client';\n\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/utils';\nexport { default as capitalize } from './capitalize';\nexport { default as createChainedFunction } from './createChainedFunction';\nexport { default as createSvgIcon } from './createSvgIcon';\nexport { default as debounce } from './debounce';\nexport { default as deprecatedPropType } from './deprecatedPropType';\nexport { default as isMuiElement } from './isMuiElement';\nexport { default as ownerDocument } from './ownerDocument';\nexport { default as ownerWindow } from './ownerWindow';\nexport { default as requirePropFactory } from './requirePropFactory';\nexport { default as setRef } from './setRef';\nexport { default as unstable_useEnhancedEffect } from './useEnhancedEffect';\nexport { default as unstable_useId } from './useId';\nexport { default as unsupportedProp } from './unsupportedProp';\nexport { default as useControlled } from './useControlled';\nexport { default as useEventCallback } from './useEventCallback';\nexport { default as useForkRef } from './useForkRef';\nexport { default as useIsFocusVisible } from './useIsFocusVisible';\n// TODO: remove this export once ClassNameGenerator is stable\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const unstable_ClassNameGenerator = {\n configure: generator => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(['MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.', '', \"You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead\", '', 'The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401', '', 'The updated documentation: https://mui.com/guides/classname-generator/'].join('\\n'));\n }\n ClassNameGenerator.configure(generator);\n }\n};","\"use strict\";\n'use client';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return _utils.createSvgIcon;\n }\n});\nvar _utils = require(\"@mui/material/utils\");","\"use strict\";\n\"use client\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _default = exports.default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n d: \"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n}), 'Close');","import {\n Typography as MUITypography,\n TypographyProps,\n styled,\n} from \"@mui/material\";\n\nexport interface ITypography extends TypographyProps {\n type?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"s1\" | \"s2\" | \"s3\" | \"s4\" | \"s5\";\n weight?: \"normal\" | \"medium\" | \"bold\";\n}\n\nconst StyledTypography = styled(MUITypography)<ITypography>(\n ({ theme: { palette }, color }) => ({\n color: color || palette.theme?.primary[800],\n }),\n);\n\nexport function Typography(props: ITypography) {\n const {\n children,\n type = \"h5\",\n weight = \"normal\",\n className,\n ...rest\n } = props;\n\n return (\n <StyledTypography className={`${type} ${weight} ${className}`} {...rest}>\n {children}\n </StyledTypography>\n );\n}\n\nexport default Typography;\n","import React from 'react';\nimport { SnackbarContent, useSnackbar } from 'notistack';\nimport { Avatar, Box, IconButton } from '@mui/material';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { useNavigate } from 'react-router-dom';\nimport { Notification } from '../icons';\nimport Typography from '../typography/typography';\nimport images from '../../assets/images';\nimport \"./custom-snackbar.scss\"\n\ninterface CustomSnackbarProps {\n message: string;\n variant?: 'default' | 'error' | 'success' | 'warning' | 'info';\n linkUrl?: string;\n snackbarKey: string | number;\n}\n\nconst mainModuleIcons = {\n rbac: images.user,\n document: images.document,\n 'accounts-and-finance': images.accounting,\n inventory: images.inventory,\n manufacturing: images.manufacturing,\n sales: images.crm,\n rental: images.rental,\n user: images.user,\n purchase: images.procurement,\n hrms: images.hrms\n}\nconst mainModuleBgColors = {\n rbac: '#F3E5F5',\n document: '#FFF8E1',\n 'accounts-and-finance': '#E8F5E8',\n inventory: '#E3F2FD',\n manufacturing: '#FFF3E0',\n sales: '#F3E5F5',\n rental: '#E8F5E8',\n user: '#F3E5F5',\n purchase: '#FCE4EC',\n hrms: '#fcfcfc'\n}\n\nconst CustomSnackbar = React.forwardRef<HTMLDivElement, CustomSnackbarProps>(\n ({ message, variant = 'default', linkUrl, snackbarKey, data }, ref) => {\n const { closeSnackbar } = useSnackbar();\n const navigate = useNavigate();\n\n const backgroundColorMap: Record<string, string> = {\n success: '#f0fdf4',\n error: '#fef2f2',\n warning: '#fff7ed',\n info: '#eff6ff',\n default: '#fff',\n };\n\n const textColorMap: Record<string, string> = {\n success: '#166534',\n error: '#991b1b',\n warning: '#92400e',\n info: '#1e40af',\n default: '#27272a',\n };\n\n const handleClick = () => {\n if (linkUrl) navigate(linkUrl);\n closeSnackbar(snackbarKey);\n };\n\n const handleCloseClick = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent triggering link\n closeSnackbar(snackbarKey);\n };\n\n return (\n <SnackbarContent\n ref={ref}\n style={{\n backgroundColor: backgroundColorMap[variant],\n color: textColorMap[variant],\n }}\n className='SnackBar'\n onClick={handleClick}\n >\n <Box display=\"flex\" alignItems=\"center\" p={2} position=\"relative\" gap={2} width='100%'>\n {mainModuleIcons?.[data.module] ?\n <Avatar sx={{ \n width: 45, \n height: 45, \n fontSize: '0.875rem',\n bgcolor: mainModuleBgColors[data.module] || 'primary.main',\n color: 'white',\n borderRadius: '8px',\n '& img': { \n width: '35px', \n height: '35px', \n objectFit: 'contain'\n }\n }} src={mainModuleIcons?.[data.module]} /> :\n <Notification\n style={{\n color: textColorMap[variant],\n marginTop: 2,\n }}\n />\n }\n <Box display=\"flex\" alignItems=\"center\" width='100%'>\n <Box flex=\"1\">\n <Typography type='h5' color={'inherit'} weight='bold'>\n New Notification\n </Typography>\n <Typography type='s3' mt={0.5} color={'inherit'}>\n {message}\n </Typography>\n </Box>\n\n <IconButton\n size=\"small\"\n onClick={handleCloseClick}\n // style={{\n // position: 'absolute',\n // top: 4,\n // right: 4,\n // color: textColorMap[variant],\n // }}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n </SnackbarContent>\n );\n }\n);\n\nexport { CustomSnackbar };\nexport default CustomSnackbar;\n","import React, { createContext, useEffect, useRef, useState } from 'react';\nimport {\n\tpostV1AuthChangePassword,\n\tpostV1AuthForgotPassword,\n\tpostV1AuthChangeUserPassword,\n\t// getV1UserId,\n\tpostV1AuthLogin,\n\tpostV1AuthResetPassword,\n\tsetBaseUrl,\n\tpostV1AuthChangeUserPasswordByAdmin\n} from '../api-client/api.rbac/api';\nimport { auth } from '../constants/auth';\nimport { useLocation, matchRoutes, useNavigate } from 'react-router-dom';\nimport { Pathname } from '../constants/pathnames/pathname'; // Removed - should be passed as props or configured by consuming app\nimport { getToken } from '../utils/common';\nimport { enqueueSnackbar } from 'notistack';\nimport { Socket, io } from 'socket.io-client';\nimport { generateRouteWithId } from '../utils/route-utils';\nimport { getApiConfig } from '../utils/api-config';\nimport {\n\tPathnameAccounting,\n\tPathnameGenerator\n} from '../constants/pathnames/pathname.accounting';\n\nimport {\n\tPathnameInventory,\n\tPathnameGenerator as PathnameGeneratorInventory\n} from '../constants/pathnames/pathname.inventory';\n\nimport {\n\tPathnameManufacturing,\n\tPathnameGenerator as PathnameGeneratorManufacuring\n} from '../constants/pathnames/pathname.manufacturing';\n\nimport {\n\tPathnamePurchase,\n\tPathnameGenerator as PathnameGeneratorPurchase\n} from '../constants/pathnames/pathname.procurement';\n\nimport {\n\tPathnameCrm,\n\tPathnameGenerator as PathnameGeneratorCrm\n} from '../constants/pathnames/pathname.crm';\n\nimport {\n\tPathnameRental,\n\tPathnameGenerator as PathnameGeneratorRental\n} from '../constants/pathnames/pathname.rental';\n\nimport { ROUTES as RENTALROUTES } from '../constants/pathnames/pathname.rental';\n\nimport CustomSnackbar from '../components/custom-snackbar/custom-snackbar.tsx';\nimport { RbacApi } from '@/api-client/index.ts';\nexport interface LoginFormValues {\n\temail: string;\n\tpassword: string;\n}\n\nexport interface resetFormValues {\n\temail: string;\n}\n\nexport interface resetPasswordValues {\n\ttoken: string;\n}\n\nexport interface changePasswordValues {\n\tpassword: string;\n}\n\nexport interface changeUserPasswordValues {\n\tpassword: string;\n}\n\ninterface ERPApiUser {\n\tid: string | number;\n\tfirst_name: string;\n\tlast_name: string;\n\tmiddle_name: string;\n\tcountry_code: string;\n\temail: string;\n\tcreated_by: any;\n\tupdated_by: any;\n\tcreated_at: string;\n\tupdated_at: string;\n\trole_id: string;\n\tdepartment_id: number;\n\tis_deleted: number;\n\tdeleted_at: string | null;\n\tdeleted_by: any;\n\ttoken: string;\n\tprofile_image: string;\n\tcompany_id: number | string;\n\tcurrency_data?: {\n\t\tid: number;\n\t\tsymbol: string;\n\t\tcurrency_name: string;\n\t\tnumber_format: string;\n\t\tposition: string | null;\n\t\tfraction_unit: string | null\n\t};\n\taccessCompanies?: any[]\n}\ninterface ERPUser extends Omit<ERPApiUser, 'token'> {\n\tfull_name: string;\n}\n\nexport interface DefaultProviderProps {\n\tuser: ERPUser | null;\n\tloading: boolean;\n\tauthToken: string;\n\tsetUser: React.Dispatch<React.SetStateAction<ERPUser | null>>;\n\tsetLoading: React.Dispatch<React.SetStateAction<boolean>>;\n\tlogin: (\n\t\tparams: LoginFormValues,\n\t\tcallback: (err: string) => void\n\t) => Promise<void>;\n\tlogout: () => Promise<void>;\n\tforgotPassword: (\n\t\tparams: resetFormValues,\n\t\tcallback: (err: string) => void\n\t) => Promise<void>;\n\tresetPassword: (\n\t\tparams: resetPasswordValues,\n\t\tcallback: (err: string) => void\n\t) => Promise<void>;\n\tchangePassword: (\n\t\tparams: changePasswordValues,\n\t\tcallback: (err: string) => void\n\t) => Promise<void>;\n\tchangeUserPassword: (\n\t\tparams: changeUserPasswordValues,\n\t\tcallback: (err: string) => void\n\t) => Promise<void>;\n}\n\nconst defaultProvider: DefaultProviderProps = {\n\tuser: null,\n\tloading: true,\n\tauthToken: '',\n\tsetUser: () => null,\n\tsetLoading: () => Boolean,\n\tlogin: () => Promise.resolve(),\n\tlogout: () => Promise.resolve(),\n\tforgotPassword: () => Promise.resolve(),\n\tresetPassword: () => Promise.resolve(),\n\tchangePassword: () => Promise.resolve(),\n\tchangeUserPassword: () => Promise.resolve()\n};\n\nconst AuthContext = createContext<DefaultProviderProps>(defaultProvider);\n\ninterface AuthProviderProps {\n\tchildren: React.ReactNode;\n\tpublicRoutes?: string[]; // Optional prop to allow customization of public routes\n}\n\n// Base URL will be set at runtime via ERPUIProvider\n\nconst AuthProvider: React.FC<AuthProviderProps> = ({ children, publicRoutes = [] }) => {\n\t// ** States\n\tconst [user, setUser] = useState(defaultProvider.user);\n\tconst [authToken, setAuthToken] = useState<string>('');\n\tconst [loading, setLoading] = useState(defaultProvider.loading);\n\tconst socketRef = useRef<Socket | null>(null);\n\n\t// ** Hooks\n\tconst navigate = useNavigate();\n\tconst location = useLocation();\n\tconst isJsonParse = (string?: string | null) => {\n\t\tif (!string) return false;\n\n\t\ttry {\n\t\t\treturn JSON.parse(string);\n\t\t} catch (error) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tconst getNotificationUrl = (data: any) => {\n\t\tconst { moduleName = '', moduleId = '', notificationData = {} } = data;\n\t\tconst key = moduleName.toLowerCase();\n\n\t\tconst routeMap: Record<string, () => string> = {\n\t\t\t'sales invoice': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_SALES_INVOICES), moduleId.toString()),\n\n\t\t\t'asset transfers': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_ASSET_TRANSFER), moduleId.toString()),\n\n\t\t\t'budgets': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_BUDGET), moduleId.toString()),\n\n\t\t\t'cash expense': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_CASH_EXPENSE), moduleId.toString()),\n\n\t\t\t'credit notes': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_CREDIT_NOTE), moduleId.toString()),\n\n\t\t\t'debit notes': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_DEBIT_NOTE), moduleId.toString()),\n\n\t\t\t'expense reimbursement': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_EXPENSE_REIMBURSEMENT), moduleId.toString()),\n\n\t\t\t'journal entries': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_JOURNAL_ENTRY), moduleId.toString()),\n\n\t\t\t'payment entries': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_PAYMENT_ENTRY), moduleId.toString()),\n\n\t\t\t'purchase invoice': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGenerator(PathnameAccounting.VIEW_PURCHASE_INVOICE), moduleId.toString()),\n\n\t\t\t'stock transfer': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorInventory(PathnameInventory.VIEW_STOCK_TRANSFER), moduleId.toString()),\n\n\t\t\t'bills of materials': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorManufacuring(PathnameManufacturing.VIEW_BILL_OF_MATERIAL), moduleId.toString()),\n\n\t\t\t'purchase agreement': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_AGREEMENT), moduleId.toString()),\n\n\t\t\t'purchase orders': () =>\n\t\t\t\tgenerateRouteWithId(notificationData?.data?.is_rental == 1 ? RENTALROUTES.VIEW : PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_ORDER), moduleId.toString()),\n\n\t\t\t'purchase request': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_PURCHASE_ORDER), moduleId.toString()),\n\n\t\t\t'vra': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorPurchase(PathnamePurchase.VIEW_VENDOR_RETURNS), moduleId.toString()),\n\n\t\t\t'sl customer returns': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorCrm(PathnameCrm.VIEW_CUSTOMER_RETURNS), moduleId.toString()),\n\n\t\t\t'sales order': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorCrm(PathnameCrm.VIEW_SALES_ORDER), moduleId.toString()),\n\n\t\t\t'rental order': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_RENTAL_ORDER), moduleId.toString()),\n\n\t\t\t'replacement order': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_RENTAL_ORDER), moduleId.toString()),\n\n\t\t\t'rental agreement': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_AGREEMENT), moduleId.toString()),\n\n\t\t\t'cross hire order': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_CROSS_HIRE_ORDER), moduleId.toString()),\n\n\t\t\t'cross hire request': () =>\n\t\t\t\tgenerateRouteWithId(PathnameGeneratorRental(PathnameRental.VIEW_CROSS_HIRE_REQUEST), moduleId.toString()),\n\t\t};\n\n\t\treturn routeMap[key]?.() || '/dashboard';\n\t};\n\n\tuseEffect(() => {\n\t\tsetLoading(true);\n\t\t// initAuth()\n\t\tconst storedToken = window.localStorage.getItem(auth.storageTokenKeyName);\n\t\tconst storedUser =\n\t\t\tisJsonParse(window.localStorage.getItem(auth.storageUserKeyName)) ?? null;\n\t\tconst allPublicRoutes = [Pathname.LOGIN, Pathname.FORGOT_PASSWORD, Pathname.RESET_PASSWORD, Pathname.CHANGE_PASSWORD, ...publicRoutes];\n\t\tconst currentPath = window.location.pathname;\n\t\tif (!storedToken && !storedUser) {\n\t\t\tconsole.log('allPublicRoutes..', allPublicRoutes, 'currentPath..', currentPath)\n\t\t\t// if (!allPublicRoutes.includes(currentPath)) {\n\t\t\tif (Boolean(!matchRoutes(allPublicRoutes.map((route) => ({ path: route })), location))) {\n\t\t\t\tnavigate(Pathname.LOGIN);\n\t\t\t}\n\t\t\tsetLoading(false);\n\t\t} else {\n\t\t\tsetUser(storedUser);\n\t\t\tsetAuthToken(storedToken || '');\n\t\t\tsetLoading(false);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!authToken) {\n\t\t\tif (socketRef.current) {\n\t\t\t\tsocketRef.current?.disconnect();\n\t\t\t\tsocketRef.current = null\n\t\t\t}\n\t\t\tconsole.warn(\"No auth token found, not connecting to socket.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = getApiConfig();\n\t\tconst socket = io(config.socketBaseUrl, {\n\t\t\ttransports: [\"websocket\"],\n\t\t\tauth: { token: authToken },\n\t\t\tpath: \"/socket.io/\",\n\n\t\t});\n\t\tsocketRef.current = socket;\n\n\t\tsocket.on(\"connect\", () => {\n\t\t\tconsole.log(\"Socket connected:\", socket.id);\n\t\t\tsocket.onAny((event, ...args) => {\n\t\t\t\tconsole.log(`Received event: ${event}`, args);\n\t\t\t});\n\t\t});\n\n\t\t// socket event handler\n\t\tsocket.on('notification', (data) => {\n\t\t\tconst { message, notificationData } = data || {};\n\t\t\tlet notificationContent: React.ReactNode = message;\n\t\t\tconst url = getNotificationUrl(data);\n\n\t\t\tif (notificationData) {\n\t\t\t\tconst { notification_type } = notificationData;\n\n\t\t\t\tswitch (notification_type) {\n\t\t\t\t\tcase 'addApprovers': {\n\n\t\t\t\t\t\tnotificationContent = message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'change_approval_status': {\n\t\t\t\t\t\tnotificationContent = message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tnotificationContent = message;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tenqueueSnackbar(String(message), {\n\t\t\t\tvariant: 'default',\n\t\t\t\tanchorOrigin: { vertical: 'top', horizontal: 'center' },\n\t\t\t\tautoHideDuration: 5000,\n\t\t\t\tcontent: (key) => (\n\t\t\t\t\t<CustomSnackbar snackbarKey={key} message={notificationContent} data={notificationData} variant=\"default\" linkUrl={url} />\n\t\t\t\t),\n\t\t\t});\n\t\t});\n\n\n\t\tsocket.on(\"sales_invoice_viewed\", (data) => {\n\t\t\tconsole.log(\"Invoice viewed:\", data.invoiceId, \"by user:\", data.userId);\n\t\t});\n\n\t\tsocket.on(\"error\", (errMsg) => {\n\t\t\tenqueueSnackbar(`Socket error: ${errMsg}`, { variant: \"error\" });\n\t\t\tconsole.error(\"Socket error:\", errMsg);\n\t\t});\n\n\t\t// Clean up on unmount\n\t\treturn () => {\n\t\t\tif (socketRef.current) {\n\t\t\t\tsocketRef.current.disconnect();\n\t\t\t\tsocketRef.current = null\n\t\t\t}\n\t\t};\n\t}, [authToken]);\n\n\tconst fetchRolesByUserId = async (userId: number | string, token: string) => {\n\t\tconst response = await RbacApi.getV1RoleUserId({ id: userId, ...getToken(token) } as any);\n\t\tconst perm = response?.data?.role || [];\n\t\treturn JSON.stringify(perm);\n\t}\n\n\tconst handleLogin = async (\n\t\tparams: LoginFormValues,\n\t\tcallback: (err: string) => void,\n\t\tshoudRedirect: boolean = true,\n\t\tredirectPath: string = Pathname.DASHBOARD\n\t) => {\n\t\tsetLoading(true);\n\t\tconst storedToken = window.localStorage.getItem(auth.storageTokenKeyName);\n\t\tif (storedToken && user) {\n\t\t\treturn navigate(Pathname.DASHBOARD);\n\t\t}\n\n\t\ttry {\n\t\t\tconst loginUser = await postV1AuthLogin({ ...params, ...getToken() });\n\t\t\tif (loginUser.success) {\n\t\t\t\tconst data: ERPApiUser | null = loginUser?.data?.login || null;\n\t\t\t\tif (data) {\n\t\t\t\t\tconst userData: ERPUser = {\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\tfull_name: `${data.first_name} ${data.last_name}`\n\t\t\t\t\t};\n\t\t\t\t\tconst rolePermission = await fetchRolesByUserId(userData.id, data.token);\n\t\t\t\t\t\n\t\t\t\t\tglobalThis.localStorage.setItem(auth.storageTokenKeyName, data.token);\n\t\t\t\t\twindow.localStorage.setItem(auth.storageUserKeyName, JSON.stringify(userData));\n\t\t\t\t\twindow.localStorage.setItem(auth.storageRolePermissionKeyName, rolePermission);\n\t\t\t\t\twindow.dispatchEvent(new Event(\"role-permission-changed\"));\n\n\t\t\t\t\tsetUser(userData);\n\t\t\t\t\tsetAuthToken(data.token);\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tshoudRedirect && navigate(redirectPath);\n\t\t\t\t\t\tsetLoading(false);\n\t\t\t\t\t\tdelete data.token;\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t}\n\t\t\tsetLoading(false);\n\t\t\tcallback(message);\n\t\t}\n\t};\n\n\tconst handleLogout = async () => {\n\t\twindow.localStorage.removeItem(auth.storageTokenKeyName);\n\t\twindow.localStorage.removeItem(auth.storageUserKeyName);\n\t\twindow.localStorage.removeItem(auth.storageRolePermissionKeyName);\n\t\twindow.dispatchEvent(new Event(\"role-permission-changed\"));\n\t\tsetUser(null);\n\t\tsetAuthToken('');\n\t\tnavigate(Pathname.LOGIN);\n\t};\n\n\tconst handleForgotPassword = async (params: resetFormValues,\n\t\tcallback: (type: boolean, err: string) => void) => {\n\t\ttry {\n\t\t\tawait postV1AuthForgotPassword({ ...params, ...getToken() });\n\t\t\tcallback(true, \"Reset Link sent to your email\");\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t}\n\n\t\t\tcallback(false, message);\n\t\t}\n\t};\n\n\tconst handleResetPassword = async (params: resetPasswordValues,\n\t\tcallback: (err: string) => void) => {\n\t\ttry {\n\t\t\tconst response = await postV1AuthResetPassword({ ...params, ...getToken() });\n\t\t\tcallback(response);\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tconsole.log(\"Error \", error)\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t\tcallback(message);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst handleChangePassword = async (params: resetPasswordValues,\n\t\tcallback: (err: string) => void) => {\n\t\ttry {\n\t\t\tawait postV1AuthChangePassword({ ...params, ...getToken() });\n\t\t\tcallback(null);\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tconsole.log(\"Error \", error)\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t\tcallback(message);\n\t\t\t}\n\t\t}\n\t\tcallback(\"reset\");\n\t}\n\n\tconst handleChangeUserPassword = async (params: resetPasswordValues,\n\t\tcallback: (err: string, resType: boolean) => void) => {\n\t\ttry {\n\t\t\tawait postV1AuthChangeUserPassword({ ...params, ...getToken() });\n\t\t\tcallback('Password Changed Successfully', true);\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t\tcallback(message, false);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst handleChangeUserPasswordByAdmin = async (params: changePasswordValues,\n\t\tcallback: (err: string, resType: boolean) => void) => {\n\t\ttry {\n\t\t\tawait postV1AuthChangeUserPasswordByAdmin({ ...params, ...getToken() });\n\t\t\tcallback('Password Changed Successfully', true);\n\t\t} catch (error) {\n\t\t\tlet message: string = 'Something went wrong';\n\t\t\tif (error instanceof Error) {\n\t\t\t\tmessage = isJsonParse(error.message).message || error.message;\n\t\t\t\tcallback(message, false);\n\t\t\t}\n\t\t}\n\t}\n\n\n\tconst values = {\n\t\tuser,\n\t\tauthToken,\n\t\tloading,\n\t\tsetUser,\n\t\tsetLoading,\n\t\tlogin: handleLogin,\n\t\tlogout: handleLogout,\n\t\tforgotPassword: handleForgotPassword,\n\t\tresetPassword: handleResetPassword,\n\t\tchangePassword: handleChangePassword,\n\t\tchangeUserPassword: handleChangeUserPassword,\n\t\tchangeUserPasswordByAdmin: handleChangeUserPasswordByAdmin\n\t};\n\n\treturn <AuthContext.Provider value={values}>{children}</AuthContext.Provider>;\n};\n\nexport { AuthContext, AuthProvider };\n","import { useContext } from \"react\";\nimport { AuthContext, DefaultProviderProps } from \"../contexts/AuthContext\";\n\nexport const useAuth = (): DefaultProviderProps => useContext(AuthContext);\n"],"names":["React","_extends","ClassNameGenerator","exports","require$$0","default_1","require$$1","require$$2","styled","MUITypography","jsx","images","useSnackbar","useNavigate","SnackbarContent","jsxs","Box","Avatar","Notification","IconButton","CloseIcon","createContext","useState","useRef","useLocation","PathnameGenerator","PathnameAccounting","PathnameGeneratorInventory","PathnameInventory","PathnameGeneratorManufacuring","PathnameManufacturing","PathnameGeneratorPurchase","PathnamePurchase","_a","RENTALROUTES","PathnameGeneratorCrm","PathnameCrm","PathnameGeneratorRental","PathnameRental","useEffect","auth","Pathname","matchRoutes","getApiConfig","io","enqueueSnackbar","RbacApi.getV1RoleUserId","getToken","postV1AuthLogin","postV1AuthForgotPassword","postV1AuthResetPassword","postV1AuthChangePassword","postV1AuthChangeUserPassword","postV1AuthChangeUserPasswordByAdmin","useContext"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]}