@erpsquad/common 1.11.2-deep-imports → 1.11.3-deep-imports

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 (438) hide show
  1. package/dist/chunks/{DynamicDependentField-Cc3WD--P.esm.js → DynamicDependentField-Bx-tnYfX.esm.js} +2 -2
  2. package/dist/chunks/{DynamicDependentField-Cc3WD--P.esm.js.map → DynamicDependentField-Bx-tnYfX.esm.js.map} +1 -1
  3. package/dist/chunks/{DynamicDependentField-D4Dfx8id.js → DynamicDependentField-CHHi9988.js} +2 -2
  4. package/dist/chunks/{DynamicDependentField-D4Dfx8id.js.map → DynamicDependentField-CHHi9988.js.map} +1 -1
  5. package/dist/chunks/{FORMS-BvvLxTZ4.js → FORMS-B_9QsQ0j.js} +5 -5
  6. package/dist/chunks/{FORMS-BvvLxTZ4.js.map → FORMS-B_9QsQ0j.js.map} +1 -1
  7. package/dist/chunks/{FORMS-CTCStVJN.esm.js → FORMS-BgGb794W.esm.js} +5 -5
  8. package/dist/chunks/{FORMS-CTCStVJN.esm.js.map → FORMS-BgGb794W.esm.js.map} +1 -1
  9. package/dist/chunks/{FlexibleReduxExample-2rKuFI8o.js → FlexibleReduxExample-C2xFVH1K.js} +3 -3
  10. package/dist/chunks/{FlexibleReduxExample-2rKuFI8o.js.map → FlexibleReduxExample-C2xFVH1K.js.map} +1 -1
  11. package/dist/chunks/{FlexibleReduxExample-CDqcmsA4.esm.js → FlexibleReduxExample-DBkCdTko.esm.js} +3 -3
  12. package/dist/chunks/{FlexibleReduxExample-CDqcmsA4.esm.js.map → FlexibleReduxExample-DBkCdTko.esm.js.map} +1 -1
  13. package/dist/chunks/{SectionFlowEditor-C4bbp-Cn.esm.js → SectionFlowEditor-Cc-bLWNv.esm.js} +2 -2
  14. package/dist/chunks/{SectionFlowEditor-C4bbp-Cn.esm.js.map → SectionFlowEditor-Cc-bLWNv.esm.js.map} +1 -1
  15. package/dist/chunks/{SectionFlowEditor-Dh8ceJze.js → SectionFlowEditor-CzY7K0Sp.js} +2 -2
  16. package/dist/chunks/{SectionFlowEditor-Dh8ceJze.js.map → SectionFlowEditor-CzY7K0Sp.js.map} +1 -1
  17. package/dist/chunks/{action-bar-DaUwKb13.js → action-bar-AO3ogsEJ.js} +3 -3
  18. package/dist/chunks/{action-bar-DaUwKb13.js.map → action-bar-AO3ogsEJ.js.map} +1 -1
  19. package/dist/chunks/{action-bar-BY6HTsH2.esm.js → action-bar-D9G1pWQA.esm.js} +3 -3
  20. package/dist/chunks/{action-bar-BY6HTsH2.esm.js.map → action-bar-D9G1pWQA.esm.js.map} +1 -1
  21. package/dist/chunks/{add-template-B0PAUiax.js → add-template-BYbCd2mX.js} +2 -2
  22. package/dist/chunks/{add-template-B0PAUiax.js.map → add-template-BYbCd2mX.js.map} +1 -1
  23. package/dist/chunks/{add-template-BWls0SOb.esm.js → add-template-CNMsNlOE.esm.js} +2 -2
  24. package/dist/chunks/{add-template-BWls0SOb.esm.js.map → add-template-CNMsNlOE.esm.js.map} +1 -1
  25. package/dist/chunks/address-modal-C2lTkPmZ.js +474 -0
  26. package/dist/chunks/address-modal-C2lTkPmZ.js.map +1 -0
  27. package/dist/chunks/address-modal-L4miNwUA.esm.js +458 -0
  28. package/dist/chunks/address-modal-L4miNwUA.esm.js.map +1 -0
  29. package/dist/chunks/{app-switcher-F7UhmVBm.esm.js → app-switcher-B6eapuGG.esm.js} +2 -2
  30. package/dist/chunks/{app-switcher-F7UhmVBm.esm.js.map → app-switcher-B6eapuGG.esm.js.map} +1 -1
  31. package/dist/chunks/{app-switcher-Ol-sBcXl.js → app-switcher-VhH9z0Rd.js} +2 -2
  32. package/dist/chunks/{app-switcher-Ol-sBcXl.js.map → app-switcher-VhH9z0Rd.js.map} +1 -1
  33. package/dist/chunks/{appbar-BAZAd73h.esm.js → appbar-CY2Wpab_.esm.js} +2 -2
  34. package/dist/chunks/{appbar-BAZAd73h.esm.js.map → appbar-CY2Wpab_.esm.js.map} +1 -1
  35. package/dist/chunks/{appbar-VQp_geDl.js → appbar-DVpk2bps.js} +2 -2
  36. package/dist/chunks/{appbar-VQp_geDl.js.map → appbar-DVpk2bps.js.map} +1 -1
  37. package/dist/chunks/{common-g5N2WoQA.esm.js → common-Cl5oGXmX.esm.js} +2 -2
  38. package/dist/chunks/{common-g5N2WoQA.esm.js.map → common-Cl5oGXmX.esm.js.map} +1 -1
  39. package/dist/chunks/{common-CkhFhOOP.js → common-PH2uWkqL.js} +2 -2
  40. package/dist/chunks/{common-CkhFhOOP.js.map → common-PH2uWkqL.js.map} +1 -1
  41. package/dist/chunks/{constants-Dki2UCE9.esm.js → constants-BrmMAwu2.esm.js} +2 -2
  42. package/dist/chunks/{constants-Dki2UCE9.esm.js.map → constants-BrmMAwu2.esm.js.map} +1 -1
  43. package/dist/chunks/{constants-D3qt-quA.js → constants-D_xuLHSu.js} +2 -2
  44. package/dist/chunks/{constants-D3qt-quA.js.map → constants-D_xuLHSu.js.map} +1 -1
  45. package/dist/chunks/contact-modal-B9EFkKl7.esm.js +169 -0
  46. package/dist/chunks/contact-modal-B9EFkKl7.esm.js.map +1 -0
  47. package/dist/chunks/contact-modal-CtDHatP8.js +185 -0
  48. package/dist/chunks/contact-modal-CtDHatP8.js.map +1 -0
  49. package/dist/chunks/{custom-form-_Clxyhfz.esm.js → custom-form-CLd49vU-.esm.js} +4 -4
  50. package/dist/chunks/{custom-form-_Clxyhfz.esm.js.map → custom-form-CLd49vU-.esm.js.map} +1 -1
  51. package/dist/chunks/{custom-form-BB-f9Fs8.js → custom-form-m9A3Olue.js} +4 -4
  52. package/dist/chunks/{custom-form-BB-f9Fs8.js.map → custom-form-m9A3Olue.js.map} +1 -1
  53. package/dist/chunks/{dashboard-e2lYhtve.js → dashboard-DnpUq58v.js} +3 -3
  54. package/dist/chunks/{dashboard-e2lYhtve.js.map → dashboard-DnpUq58v.js.map} +1 -1
  55. package/dist/chunks/{dashboard-KnePj9KD.esm.js → dashboard-x2S3X5mh.esm.js} +3 -3
  56. package/dist/chunks/{dashboard-KnePj9KD.esm.js.map → dashboard-x2S3X5mh.esm.js.map} +1 -1
  57. package/dist/chunks/{filter-DoDYKJjL.js → filter-DhTLwUi-.js} +3 -3
  58. package/dist/chunks/{filter-DoDYKJjL.js.map → filter-DhTLwUi-.js.map} +1 -1
  59. package/dist/chunks/{filter-BmRcoCOB.esm.js → filter-ptl_zLXe.esm.js} +3 -3
  60. package/dist/chunks/{filter-BmRcoCOB.esm.js.map → filter-ptl_zLXe.esm.js.map} +1 -1
  61. package/dist/chunks/{footer-DnIO-vaU.js → footer-D7PnNU8i.js} +2 -2
  62. package/dist/chunks/{footer-DnIO-vaU.js.map → footer-D7PnNU8i.js.map} +1 -1
  63. package/dist/chunks/{footer-CNvyE8xQ.esm.js → footer-oWkachwS.esm.js} +2 -2
  64. package/dist/chunks/{footer-CNvyE8xQ.esm.js.map → footer-oWkachwS.esm.js.map} +1 -1
  65. package/dist/chunks/{form-fields-DROCpLni.js → form-fields-BfWZvK5C.js} +2 -2
  66. package/dist/chunks/{form-fields-DROCpLni.js.map → form-fields-BfWZvK5C.js.map} +1 -1
  67. package/dist/chunks/{form-fields-BSPN_tba.esm.js → form-fields-jW_6I9Vk.esm.js} +2 -2
  68. package/dist/chunks/{form-fields-BSPN_tba.esm.js.map → form-fields-jW_6I9Vk.esm.js.map} +1 -1
  69. package/dist/chunks/{form-parser-DpUg5QOl.esm.js → form-parser-BDl3zuDd.esm.js} +2 -2
  70. package/dist/chunks/{form-parser-DpUg5QOl.esm.js.map → form-parser-BDl3zuDd.esm.js.map} +1 -1
  71. package/dist/chunks/{form-parser-DcORQtaK.js → form-parser-IA8Ka8QP.js} +2 -2
  72. package/dist/chunks/{form-parser-DcORQtaK.js.map → form-parser-IA8Ka8QP.js.map} +1 -1
  73. package/dist/chunks/{form-section-WxSMde7C.esm.js → form-section-BQLgCjBr.esm.js} +31 -24
  74. package/dist/chunks/form-section-BQLgCjBr.esm.js.map +1 -0
  75. package/dist/chunks/{form-section-DSLo1--E.js → form-section-Bszp1QAG.js} +31 -24
  76. package/dist/chunks/form-section-Bszp1QAG.js.map +1 -0
  77. package/dist/chunks/{fullScreen-Dv3VVtOg.esm.js → fullScreen-BqPmeTrX.esm.js} +2 -2
  78. package/dist/chunks/{fullScreen-Dv3VVtOg.esm.js.map → fullScreen-BqPmeTrX.esm.js.map} +1 -1
  79. package/dist/chunks/{fullScreen-D84sOyGA.js → fullScreen-D3JWsH_j.js} +2 -2
  80. package/dist/chunks/{fullScreen-D84sOyGA.js.map → fullScreen-D3JWsH_j.js.map} +1 -1
  81. package/dist/chunks/{global-search-B6gfx4ib.esm.js → global-search-CAMKXHHU.esm.js} +2 -2
  82. package/dist/chunks/{global-search-B6gfx4ib.esm.js.map → global-search-CAMKXHHU.esm.js.map} +1 -1
  83. package/dist/chunks/{global-search-Dyk8tVTt.js → global-search-qGudhYXt.js} +2 -2
  84. package/dist/chunks/{global-search-Dyk8tVTt.js.map → global-search-qGudhYXt.js.map} +1 -1
  85. package/dist/chunks/{header-DKNOkwDc.esm.js → header-De8-VJ15.esm.js} +8 -7
  86. package/dist/chunks/header-De8-VJ15.esm.js.map +1 -0
  87. package/dist/chunks/{header-CssVAc7L.js → header-Uhsp2YLe.js} +8 -7
  88. package/dist/chunks/header-Uhsp2YLe.js.map +1 -0
  89. package/dist/chunks/{header-enhanced-CTWeMXmz.js → header-enhanced-DrNWfa82.js} +3 -3
  90. package/dist/chunks/{header-enhanced-CTWeMXmz.js.map → header-enhanced-DrNWfa82.js.map} +1 -1
  91. package/dist/chunks/{header-enhanced-DvQomhLR.esm.js → header-enhanced-YIZWG48T.esm.js} +3 -3
  92. package/dist/chunks/{header-enhanced-DvQomhLR.esm.js.map → header-enhanced-YIZWG48T.esm.js.map} +1 -1
  93. package/dist/chunks/{inline-edit-fields-C0FWzjx_.esm.js → inline-edit-fields-C2_j9edw.esm.js} +2 -2
  94. package/dist/chunks/{inline-edit-fields-C0FWzjx_.esm.js.map → inline-edit-fields-C2_j9edw.esm.js.map} +1 -1
  95. package/dist/chunks/{inline-edit-fields-DZfwK49b.js → inline-edit-fields-DybzzU0L.js} +2 -2
  96. package/dist/chunks/{inline-edit-fields-DZfwK49b.js.map → inline-edit-fields-DybzzU0L.js.map} +1 -1
  97. package/dist/chunks/{inventory-reports-title-bar-BK9W0YnT.esm.js → inventory-reports-title-bar-BFjNMhJz.esm.js} +2 -2
  98. package/dist/chunks/{inventory-reports-title-bar-BK9W0YnT.esm.js.map → inventory-reports-title-bar-BFjNMhJz.esm.js.map} +1 -1
  99. package/dist/chunks/{inventory-reports-title-bar-zBrNxrZi.js → inventory-reports-title-bar-fc4R7WNV.js} +2 -2
  100. package/dist/chunks/{inventory-reports-title-bar-zBrNxrZi.js.map → inventory-reports-title-bar-fc4R7WNV.js.map} +1 -1
  101. package/dist/chunks/{item-response-details-B9Iall_k.esm.js → item-response-details-D6yEtoFS.esm.js} +2 -2
  102. package/dist/chunks/{item-response-details-B9Iall_k.esm.js.map → item-response-details-D6yEtoFS.esm.js.map} +1 -1
  103. package/dist/chunks/{item-response-details-rLku4v7_.js → item-response-details-FB4sjoFT.js} +2 -2
  104. package/dist/chunks/{item-response-details-rLku4v7_.js.map → item-response-details-FB4sjoFT.js.map} +1 -1
  105. package/dist/chunks/{listing-DdCMqvH4.js → listing-77tmtJXT.js} +4 -4
  106. package/dist/chunks/{listing-DdCMqvH4.js.map → listing-77tmtJXT.js.map} +1 -1
  107. package/dist/chunks/{listing-DG-8ayrU.esm.js → listing-9Z6nKHoe.esm.js} +4 -4
  108. package/dist/chunks/{listing-DG-8ayrU.esm.js.map → listing-9Z6nKHoe.esm.js.map} +1 -1
  109. package/dist/chunks/{location-select-DL3wixS9.js → location-select-B9fEEVWD.js} +2 -2
  110. package/dist/chunks/{location-select-DL3wixS9.js.map → location-select-B9fEEVWD.js.map} +1 -1
  111. package/dist/chunks/{location-select-CZ6hDLZI.esm.js → location-select-SqAumWtT.esm.js} +2 -2
  112. package/dist/chunks/{location-select-CZ6hDLZI.esm.js.map → location-select-SqAumWtT.esm.js.map} +1 -1
  113. package/dist/chunks/{material-editable-table-DKb_dErg.esm.js → material-editable-table-DSWxFpW7.esm.js} +3 -3
  114. package/dist/chunks/{material-editable-table-DKb_dErg.esm.js.map → material-editable-table-DSWxFpW7.esm.js.map} +1 -1
  115. package/dist/chunks/{material-editable-table-sy9Nnllr.js → material-editable-table-Xo1_Mlvp.js} +3 -3
  116. package/dist/chunks/{material-editable-table-sy9Nnllr.js.map → material-editable-table-Xo1_Mlvp.js.map} +1 -1
  117. package/dist/chunks/{modules-CxiCcj8n.js → modules-DTRr7zwt.js} +4 -4
  118. package/dist/chunks/modules-DTRr7zwt.js.map +1 -0
  119. package/dist/chunks/{modules-CgsS9dWK.esm.js → modules-enwLrpfQ.esm.js} +4 -4
  120. package/dist/chunks/modules-enwLrpfQ.esm.js.map +1 -0
  121. package/dist/chunks/{notification-menu-CoU3VVK7.js → notification-menu-B65oc4a2.js} +2 -2
  122. package/dist/chunks/{notification-menu-CoU3VVK7.js.map → notification-menu-B65oc4a2.js.map} +1 -1
  123. package/dist/chunks/{notification-menu-CI9iAgGy.esm.js → notification-menu-yVpLV6cG.esm.js} +2 -2
  124. package/dist/chunks/{notification-menu-CI9iAgGy.esm.js.map → notification-menu-yVpLV6cG.esm.js.map} +1 -1
  125. package/dist/chunks/{page-action-BwP3VyI_.js → page-action-BCWrlVAR.js} +2 -2
  126. package/dist/chunks/{page-action-BwP3VyI_.js.map → page-action-BCWrlVAR.js.map} +1 -1
  127. package/dist/chunks/{page-action-ChWyZAHu.esm.js → page-action-DMqA598K.esm.js} +2 -2
  128. package/dist/chunks/{page-action-ChWyZAHu.esm.js.map → page-action-DMqA598K.esm.js.map} +1 -1
  129. package/dist/chunks/{page-navigator-DWkH1lx9.esm.js → page-navigator-Cp5I2X2d.esm.js} +2 -2
  130. package/dist/chunks/{page-navigator-DWkH1lx9.esm.js.map → page-navigator-Cp5I2X2d.esm.js.map} +1 -1
  131. package/dist/chunks/{page-navigator-DDcOorjQ.js → page-navigator-CuKgJI15.js} +2 -2
  132. package/dist/chunks/{page-navigator-DDcOorjQ.js.map → page-navigator-CuKgJI15.js.map} +1 -1
  133. package/dist/chunks/{page-view-DhLoi1ao.esm.js → page-view-BNKfZEaB.esm.js} +3 -3
  134. package/dist/chunks/{page-view-DhLoi1ao.esm.js.map → page-view-BNKfZEaB.esm.js.map} +1 -1
  135. package/dist/chunks/{page-view-O3wGu1me.js → page-view-CFe30dN3.js} +3 -3
  136. package/dist/chunks/{page-view-O3wGu1me.js.map → page-view-CFe30dN3.js.map} +1 -1
  137. package/dist/chunks/{pathname.rental-BJsG2Jd4.esm.js → pathname.rental-CqHO_l_D.esm.js} +104 -92
  138. package/dist/chunks/pathname.rental-CqHO_l_D.esm.js.map +1 -0
  139. package/dist/chunks/{pathname.rental-BZDbH5Sm.js → pathname.rental-CwK6JuID.js} +15 -3
  140. package/dist/chunks/pathname.rental-CwK6JuID.js.map +1 -0
  141. package/dist/chunks/{reports-title-bar-k5RStfkC.esm.js → reports-title-bar-9j2_c42J.esm.js} +2 -2
  142. package/dist/chunks/{reports-title-bar-k5RStfkC.esm.js.map → reports-title-bar-9j2_c42J.esm.js.map} +1 -1
  143. package/dist/chunks/{reports-title-bar-nlIfe3im.js → reports-title-bar-D4SrselQ.js} +2 -2
  144. package/dist/chunks/{reports-title-bar-nlIfe3im.js.map → reports-title-bar-D4SrselQ.js.map} +1 -1
  145. package/dist/chunks/{route-page-map-DvI_JHLU.js → route-page-map-BFFGJ7_O.js} +102 -80
  146. package/dist/chunks/route-page-map-BFFGJ7_O.js.map +1 -0
  147. package/dist/chunks/{route-page-map-CEwJJyNC.esm.js → route-page-map-BIDt7Zn8.esm.js} +102 -80
  148. package/dist/chunks/route-page-map-BIDt7Zn8.esm.js.map +1 -0
  149. package/dist/chunks/{routes-bJIQdY4S.js → routes-DENpZGKH.js} +18 -6
  150. package/dist/chunks/routes-DENpZGKH.js.map +1 -0
  151. package/dist/chunks/{routes-DySgJSqS.esm.js → routes-ahwrp9iN.esm.js} +18 -6
  152. package/dist/chunks/routes-ahwrp9iN.esm.js.map +1 -0
  153. package/dist/chunks/{schedule-report-BurL8qZz.esm.js → schedule-report-BK3Cfq0g.esm.js} +4 -4
  154. package/dist/chunks/{schedule-report-BurL8qZz.esm.js.map → schedule-report-BK3Cfq0g.esm.js.map} +1 -1
  155. package/dist/chunks/{schedule-report-BZRAmY9Q.js → schedule-report-DMHXoSx1.js} +4 -4
  156. package/dist/chunks/{schedule-report-BZRAmY9Q.js.map → schedule-report-DMHXoSx1.js.map} +1 -1
  157. package/dist/chunks/{schedule-report-modal-BudLmMPJ.esm.js → schedule-report-modal-BKyrJmpE.esm.js} +2 -2
  158. package/dist/chunks/{schedule-report-modal-BudLmMPJ.esm.js.map → schedule-report-modal-BKyrJmpE.esm.js.map} +1 -1
  159. package/dist/chunks/{schedule-report-modal-Cl4OwBrT.js → schedule-report-modal-CKrc1kU1.js} +2 -2
  160. package/dist/chunks/{schedule-report-modal-Cl4OwBrT.js.map → schedule-report-modal-CKrc1kU1.js.map} +1 -1
  161. package/dist/chunks/{searchable-select-DR-q54Zn.esm.js → searchable-select-DAxe2dX5.esm.js} +29 -26
  162. package/dist/chunks/searchable-select-DAxe2dX5.esm.js.map +1 -0
  163. package/dist/chunks/{searchable-select--dhEG2CL.js → searchable-select-yROdMxY5.js} +29 -26
  164. package/dist/chunks/searchable-select-yROdMxY5.js.map +1 -0
  165. package/dist/chunks/{share-modal-BG3i3kA7.js → share-modal-BqoBPnFF.js} +2 -2
  166. package/dist/chunks/{share-modal-BG3i3kA7.js.map → share-modal-BqoBPnFF.js.map} +1 -1
  167. package/dist/chunks/{share-modal-DIFuo01h.esm.js → share-modal-Dc8H5EC_.esm.js} +2 -2
  168. package/dist/chunks/{share-modal-DIFuo01h.esm.js.map → share-modal-Dc8H5EC_.esm.js.map} +1 -1
  169. package/dist/chunks/{share-modal-enhanced-D2dMDnYj.js → share-modal-enhanced-ChDKNe5b.js} +2 -2
  170. package/dist/chunks/{share-modal-enhanced-D2dMDnYj.js.map → share-modal-enhanced-ChDKNe5b.js.map} +1 -1
  171. package/dist/chunks/{share-modal-enhanced-B9RdKJpc.esm.js → share-modal-enhanced-DDcZXJfH.esm.js} +2 -2
  172. package/dist/chunks/{share-modal-enhanced-B9RdKJpc.esm.js.map → share-modal-enhanced-DDcZXJfH.esm.js.map} +1 -1
  173. package/dist/chunks/{sidebarScreen-BcWviaOz.esm.js → sidebarScreen-B2kh1I2z.esm.js} +2 -2
  174. package/dist/chunks/{sidebarScreen-BcWviaOz.esm.js.map → sidebarScreen-B2kh1I2z.esm.js.map} +1 -1
  175. package/dist/chunks/{sidebarScreen-D8sStXT_.js → sidebarScreen-DzHm9-jo.js} +2 -2
  176. package/dist/chunks/{sidebarScreen-D8sStXT_.js.map → sidebarScreen-DzHm9-jo.js.map} +1 -1
  177. package/dist/chunks/{table-gZGVhEco.js → table-AbpP7OIT.js} +10 -8
  178. package/dist/chunks/table-AbpP7OIT.js.map +1 -0
  179. package/dist/chunks/{table-DLWWu4pl.esm.js → table-D3tyH9I6.esm.js} +11 -9
  180. package/dist/chunks/table-D3tyH9I6.esm.js.map +1 -0
  181. package/dist/chunks/{template-editor-router-3uBGl6CU.esm.js → template-editor-router-CWHdYauB.esm.js} +2 -2
  182. package/dist/chunks/{template-editor-router-3uBGl6CU.esm.js.map → template-editor-router-CWHdYauB.esm.js.map} +1 -1
  183. package/dist/chunks/{template-editor-router-CLZsqcyd.js → template-editor-router-Cojk1ErQ.js} +2 -2
  184. package/dist/chunks/{template-editor-router-CLZsqcyd.js.map → template-editor-router-Cojk1ErQ.js.map} +1 -1
  185. package/dist/chunks/{templates-DLYZIPyw.esm.js → templates-BRf6IDb5.esm.js} +4 -4
  186. package/dist/chunks/{templates-DLYZIPyw.esm.js.map → templates-BRf6IDb5.esm.js.map} +1 -1
  187. package/dist/chunks/{templates-DUBZDB0p.js → templates-c7qXkJDA.js} +4 -4
  188. package/dist/chunks/{templates-DUBZDB0p.js.map → templates-c7qXkJDA.js.map} +1 -1
  189. package/dist/chunks/{uom-field-wrapper-BbY8P-tY.esm.js → uom-field-wrapper-8BLMZK1U.esm.js} +2 -2
  190. package/dist/chunks/{uom-field-wrapper-BbY8P-tY.esm.js.map → uom-field-wrapper-8BLMZK1U.esm.js.map} +1 -1
  191. package/dist/chunks/{uom-field-wrapper-046Urose.js → uom-field-wrapper-DJIGenNe.js} +2 -2
  192. package/dist/chunks/{uom-field-wrapper-046Urose.js.map → uom-field-wrapper-DJIGenNe.js.map} +1 -1
  193. package/dist/chunks/{use-translations-C0inIl3N.js → use-translations-CUG3OpLf.js} +2 -2
  194. package/dist/chunks/{use-translations-C0inIl3N.js.map → use-translations-CUG3OpLf.js.map} +1 -1
  195. package/dist/chunks/{use-translations-DM1EocaI.esm.js → use-translations-Gnp2IAjX.esm.js} +2 -2
  196. package/dist/chunks/{use-translations-DM1EocaI.esm.js.map → use-translations-Gnp2IAjX.esm.js.map} +1 -1
  197. package/dist/chunks/useAddressContact-Bgvi0Erw.js +356 -0
  198. package/dist/chunks/useAddressContact-Bgvi0Erw.js.map +1 -0
  199. package/dist/chunks/useAddressContact-DgfgeANL.esm.js +357 -0
  200. package/dist/chunks/useAddressContact-DgfgeANL.esm.js.map +1 -0
  201. package/dist/chunks/{value-editor-CQ67snkp.esm.js → value-editor-CttAqoIq.esm.js} +2 -2
  202. package/dist/chunks/{value-editor-CQ67snkp.esm.js.map → value-editor-CttAqoIq.esm.js.map} +1 -1
  203. package/dist/chunks/{value-editor-BxWSi3KC.js → value-editor-DQHcGE47.js} +2 -2
  204. package/dist/chunks/{value-editor-BxWSi3KC.js.map → value-editor-DQHcGE47.js.map} +1 -1
  205. package/dist/components/action-bar/action-bar/index.esm.js +1 -1
  206. package/dist/components/action-bar/action-bar/index.js +1 -1
  207. package/dist/components/action-bar/index.esm.js +1 -1
  208. package/dist/components/action-bar/index.js +1 -1
  209. package/dist/components/address-modal/index.esm.js +5 -0
  210. package/dist/components/address-modal/index.esm.js.map +1 -0
  211. package/dist/components/address-modal/index.js +5 -0
  212. package/dist/components/address-modal/index.js.map +1 -0
  213. package/dist/components/address-modal.d.ts +3 -0
  214. package/dist/components/appbar/appbar/index.esm.js +1 -1
  215. package/dist/components/appbar/appbar/index.js +1 -1
  216. package/dist/components/appbar/index.esm.js +1 -1
  217. package/dist/components/appbar/index.js +1 -1
  218. package/dist/components/contact-modal/index.esm.js +5 -0
  219. package/dist/components/contact-modal/index.esm.js.map +1 -0
  220. package/dist/components/contact-modal/index.js +5 -0
  221. package/dist/components/contact-modal/index.js.map +1 -0
  222. package/dist/components/contact-modal.d.ts +3 -0
  223. package/dist/components/custom-forms/FORMS/index.esm.js +1 -1
  224. package/dist/components/custom-forms/FORMS/index.js +1 -1
  225. package/dist/components/department-add-modal/index.esm.js +1 -1
  226. package/dist/components/department-add-modal/index.js +1 -1
  227. package/dist/components/designation-add-modal/index.esm.js +1 -1
  228. package/dist/components/designation-add-modal/index.js +1 -1
  229. package/dist/components/examples/FlexibleReduxExample/index.esm.js +1 -1
  230. package/dist/components/examples/FlexibleReduxExample/index.js +1 -1
  231. package/dist/components/examples/index.esm.js +1 -1
  232. package/dist/components/examples/index.js +1 -1
  233. package/dist/components/filter/components/index.esm.js +1 -1
  234. package/dist/components/filter/components/index.js +1 -1
  235. package/dist/components/filter/components/value-editor/index.esm.js +1 -1
  236. package/dist/components/filter/components/value-editor/index.js +1 -1
  237. package/dist/components/filter/filter/index.esm.js +1 -1
  238. package/dist/components/filter/filter/index.js +1 -1
  239. package/dist/components/filter/index.esm.js +2 -2
  240. package/dist/components/filter/index.js +2 -2
  241. package/dist/components/footer/footer/index.esm.js +1 -1
  242. package/dist/components/footer/footer/index.js +1 -1
  243. package/dist/components/footer/index.esm.js +1 -1
  244. package/dist/components/footer/index.js +1 -1
  245. package/dist/components/form-control/form-builder/form-builder-element/dynamic-dependent-field/index.esm.js +1 -1
  246. package/dist/components/form-control/form-builder/form-builder-element/dynamic-dependent-field/index.js +1 -1
  247. package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.esm.js +1 -1
  248. package/dist/components/form-control/form-builder/form-builder-element/dynamic-select/index.js +1 -1
  249. package/dist/components/form-control/form-builder/form-builder-element/fixed-asset-item-add-modal/index.esm.js +1 -1
  250. package/dist/components/form-control/form-builder/form-builder-element/fixed-asset-item-add-modal/index.js +1 -1
  251. package/dist/components/form-control/form-builder/form-builder-element/index.esm.js +3 -3
  252. package/dist/components/form-control/form-builder/form-builder-element/index.js +3 -3
  253. package/dist/components/form-control/form-builder/form-builder-element/location-add-modal/index.esm.js +1 -1
  254. package/dist/components/form-control/form-builder/form-builder-element/location-add-modal/index.js +1 -1
  255. package/dist/components/form-control/form-builder/form-builder-element/select-configuration/index.esm.js +1 -1
  256. package/dist/components/form-control/form-builder/form-builder-element/select-configuration/index.js +1 -1
  257. package/dist/components/form-control/form-builder/form-builder-element/table/index.esm.js +1 -1
  258. package/dist/components/form-control/form-builder/form-builder-element/table/index.js +1 -1
  259. package/dist/components/form-control/form-builder/index.esm.js +3 -3
  260. package/dist/components/form-control/form-builder/index.js +3 -3
  261. package/dist/components/form-control/form-parser/form-parser/index.esm.js +1 -1
  262. package/dist/components/form-control/form-parser/form-parser/index.js +1 -1
  263. package/dist/components/form-control/form-parser/form-section/index.esm.js +1 -1
  264. package/dist/components/form-control/form-parser/form-section/index.js +1 -1
  265. package/dist/components/form-control/form-parser/index.esm.js +2 -2
  266. package/dist/components/form-control/form-parser/index.js +2 -2
  267. package/dist/components/form-control/index.esm.js +5 -5
  268. package/dist/components/form-control/index.js +5 -5
  269. package/dist/components/header/components/app-switcher/index.esm.js +1 -1
  270. package/dist/components/header/components/app-switcher/index.js +1 -1
  271. package/dist/components/header/components/global-search/index.esm.js +1 -1
  272. package/dist/components/header/components/global-search/index.js +1 -1
  273. package/dist/components/header/components/index.esm.js +1 -1
  274. package/dist/components/header/components/index.js +1 -1
  275. package/dist/components/header/components/notification-menu/index.esm.js +1 -1
  276. package/dist/components/header/components/notification-menu/index.js +1 -1
  277. package/dist/components/header/components/notification-menu/notification-menu/index.esm.js +1 -1
  278. package/dist/components/header/components/notification-menu/notification-menu/index.js +1 -1
  279. package/dist/components/header/header/index.esm.js +1 -1
  280. package/dist/components/header/header/index.js +1 -1
  281. package/dist/components/header/header-enhanced/index.esm.js +1 -1
  282. package/dist/components/header/header-enhanced/index.js +1 -1
  283. package/dist/components/header/index.esm.js +3 -3
  284. package/dist/components/header/index.js +3 -3
  285. package/dist/components/index.esm.js +117 -113
  286. package/dist/components/index.esm.js.map +1 -1
  287. package/dist/components/index.js +28 -24
  288. package/dist/components/index.js.map +1 -1
  289. package/dist/components/inventory-reports-title-bar/index.esm.js +1 -1
  290. package/dist/components/inventory-reports-title-bar/index.js +1 -1
  291. package/dist/components/inventory-reports-title-bar/inventory-reports-title-bar/index.esm.js +1 -1
  292. package/dist/components/inventory-reports-title-bar/inventory-reports-title-bar/index.js +1 -1
  293. package/dist/components/listing/index.esm.js +1 -1
  294. package/dist/components/listing/index.js +1 -1
  295. package/dist/components/listing/listing/index.esm.js +1 -1
  296. package/dist/components/listing/listing/index.js +1 -1
  297. package/dist/components/location-select/index.esm.js +1 -1
  298. package/dist/components/location-select/index.js +1 -1
  299. package/dist/components/material-editable-table/components/index.esm.js +1 -1
  300. package/dist/components/material-editable-table/components/index.js +1 -1
  301. package/dist/components/material-editable-table/components/inline-edit-fields/index.esm.js +1 -1
  302. package/dist/components/material-editable-table/components/inline-edit-fields/index.js +1 -1
  303. package/dist/components/material-editable-table/index.esm.js +2 -2
  304. package/dist/components/material-editable-table/index.js +2 -2
  305. package/dist/components/material-editable-table/material-editable-table/index.esm.js +1 -1
  306. package/dist/components/material-editable-table/material-editable-table/index.js +1 -1
  307. package/dist/components/material-table/components/index.esm.js +1 -1
  308. package/dist/components/material-table/components/index.js +1 -1
  309. package/dist/components/material-table/components/inline-edit-fields/index.esm.js +1 -1
  310. package/dist/components/material-table/components/inline-edit-fields/index.js +1 -1
  311. package/dist/components/material-table/index.esm.js +1 -1
  312. package/dist/components/material-table/index.js +1 -1
  313. package/dist/components/material-table/material-table/index.esm.js +1 -1
  314. package/dist/components/material-table/material-table/index.js +1 -1
  315. package/dist/components/page-navigator/components/index.esm.js +1 -1
  316. package/dist/components/page-navigator/components/index.js +1 -1
  317. package/dist/components/page-navigator/components/page-action/index.esm.js +1 -1
  318. package/dist/components/page-navigator/components/page-action/index.js +1 -1
  319. package/dist/components/page-navigator/index.esm.js +2 -2
  320. package/dist/components/page-navigator/index.js +2 -2
  321. package/dist/components/page-navigator/page-navigator/index.esm.js +1 -1
  322. package/dist/components/page-navigator/page-navigator/index.js +1 -1
  323. package/dist/components/parties-modal/index.esm.js +1 -1
  324. package/dist/components/parties-modal/index.js +1 -1
  325. package/dist/components/parties-modal/parties-modal/index.esm.js +1 -1
  326. package/dist/components/parties-modal/parties-modal/index.js +1 -1
  327. package/dist/components/reports-title-bar/index.esm.js +1 -1
  328. package/dist/components/reports-title-bar/index.js +1 -1
  329. package/dist/components/reports-title-bar/reports-title-bar/index.esm.js +1 -1
  330. package/dist/components/reports-title-bar/reports-title-bar/index.js +1 -1
  331. package/dist/components/rfq-response/index.esm.js +1 -1
  332. package/dist/components/rfq-response/index.js +1 -1
  333. package/dist/components/rfq-response/item-response-details/index.esm.js +1 -1
  334. package/dist/components/rfq-response/item-response-details/index.js +1 -1
  335. package/dist/components/schedule-report/index.esm.js +2 -2
  336. package/dist/components/schedule-report/index.js +2 -2
  337. package/dist/components/schedule-report/schedule-report/index.esm.js +1 -1
  338. package/dist/components/schedule-report/schedule-report/index.js +1 -1
  339. package/dist/components/schedule-report/schedule-report-modal/index.esm.js +1 -1
  340. package/dist/components/schedule-report/schedule-report-modal/index.js +1 -1
  341. package/dist/components/searchable-select/index.esm.js +1 -1
  342. package/dist/components/searchable-select/index.js +1 -1
  343. package/dist/components/share-modal/index.esm.js +2 -2
  344. package/dist/components/share-modal/index.js +2 -2
  345. package/dist/components/share-modal/share-modal/index.esm.js +1 -1
  346. package/dist/components/share-modal/share-modal/index.js +1 -1
  347. package/dist/components/share-modal/share-modal-enhanced/index.esm.js +1 -1
  348. package/dist/components/share-modal/share-modal-enhanced/index.js +1 -1
  349. package/dist/components/team-add-modal/index.esm.js +1 -1
  350. package/dist/components/team-add-modal/index.js +1 -1
  351. package/dist/components/uom-field-wrapper/index.esm.js +1 -1
  352. package/dist/components/uom-field-wrapper/index.js +1 -1
  353. package/dist/components/uom-field-wrapper/uom-field-wrapper/index.esm.js +1 -1
  354. package/dist/components/uom-field-wrapper/uom-field-wrapper/index.js +1 -1
  355. package/dist/constants/index.esm.js +86 -84
  356. package/dist/constants/index.js +5 -3
  357. package/dist/constants/index.js.map +1 -1
  358. package/dist/hooks/index.esm.js +3 -1
  359. package/dist/hooks/index.esm.js.map +1 -1
  360. package/dist/hooks/index.js +3 -1
  361. package/dist/hooks/index.js.map +1 -1
  362. package/dist/hooks/use-translations/index.esm.js +1 -1
  363. package/dist/hooks/use-translations/index.js +1 -1
  364. package/dist/hooks/useAddressContact/index.esm.js +6 -0
  365. package/dist/hooks/useAddressContact/index.esm.js.map +1 -0
  366. package/dist/hooks/useAddressContact/index.js +6 -0
  367. package/dist/hooks/useAddressContact/index.js.map +1 -0
  368. package/dist/hooks/useAddressContact.d.ts +3 -0
  369. package/dist/index.esm.js +244 -236
  370. package/dist/index.esm.js.map +1 -1
  371. package/dist/index.js +47 -39
  372. package/dist/index.js.map +1 -1
  373. package/dist/layout/fullScreen/index.esm.js +1 -1
  374. package/dist/layout/fullScreen/index.js +1 -1
  375. package/dist/layout/index.esm.js +2 -2
  376. package/dist/layout/index.js +2 -2
  377. package/dist/layout/sidebarScreen/index.esm.js +1 -1
  378. package/dist/layout/sidebarScreen/index.js +1 -1
  379. package/dist/runtime/index.esm.js +2 -2
  380. package/dist/runtime/index.js +2 -2
  381. package/dist/src/components/address-modal/address-modal.d.ts +18 -0
  382. package/dist/src/components/address-modal/index.d.ts +2 -0
  383. package/dist/src/components/contact-modal/contact-modal.d.ts +13 -0
  384. package/dist/src/components/contact-modal/index.d.ts +2 -0
  385. package/dist/src/components/index.d.ts +5 -0
  386. package/dist/src/constants/pathnames/pathname.crm.d.ts +4 -0
  387. package/dist/src/constants/pathnames/pathname.procurement.d.ts +4 -0
  388. package/dist/src/hooks/index.d.ts +1 -0
  389. package/dist/src/hooks/useAddressContact/index.d.ts +2 -0
  390. package/dist/src/hooks/useAddressContact/useAddressContact.d.ts +28 -0
  391. package/dist/style.css +41 -6
  392. package/dist/utils/calculation/index.esm.js +6 -2
  393. package/dist/utils/calculation/index.esm.js.map +1 -1
  394. package/dist/utils/calculation/index.js +6 -2
  395. package/dist/utils/calculation/index.js.map +1 -1
  396. package/dist/views/afterAuth/dashboard/index.esm.js +1 -1
  397. package/dist/views/afterAuth/dashboard/index.js +1 -1
  398. package/dist/views/afterAuth/index.esm.js +2 -2
  399. package/dist/views/afterAuth/index.js +2 -2
  400. package/dist/views/afterAuth/page-view/index.esm.js +1 -1
  401. package/dist/views/afterAuth/page-view/index.js +1 -1
  402. package/dist/views/form-builder/custom-form/index.esm.js +1 -1
  403. package/dist/views/form-builder/custom-form/index.js +1 -1
  404. package/dist/views/form-builder/form-fields/index.esm.js +1 -1
  405. package/dist/views/form-builder/form-fields/index.js +1 -1
  406. package/dist/views/form-builder/index.esm.js +3 -3
  407. package/dist/views/form-builder/index.js +3 -3
  408. package/dist/views/form-builder/utils/index.esm.js +1 -1
  409. package/dist/views/form-builder/utils/index.js +1 -1
  410. package/dist/views/index.esm.js +10 -10
  411. package/dist/views/index.js +10 -10
  412. package/dist/views/template-editor/add-template/index.esm.js +1 -1
  413. package/dist/views/template-editor/add-template/index.js +1 -1
  414. package/dist/views/template-editor/components/index.esm.js +1 -1
  415. package/dist/views/template-editor/components/index.js +1 -1
  416. package/dist/views/template-editor/index.esm.js +5 -5
  417. package/dist/views/template-editor/index.js +5 -5
  418. package/dist/views/template-editor/routes/index.esm.js +1 -1
  419. package/dist/views/template-editor/routes/index.js +1 -1
  420. package/dist/views/template-editor/templates/index.esm.js +1 -1
  421. package/dist/views/template-editor/templates/index.js +1 -1
  422. package/package.json +18 -114
  423. package/dist/chunks/form-section-DSLo1--E.js.map +0 -1
  424. package/dist/chunks/form-section-WxSMde7C.esm.js.map +0 -1
  425. package/dist/chunks/header-CssVAc7L.js.map +0 -1
  426. package/dist/chunks/header-DKNOkwDc.esm.js.map +0 -1
  427. package/dist/chunks/modules-CgsS9dWK.esm.js.map +0 -1
  428. package/dist/chunks/modules-CxiCcj8n.js.map +0 -1
  429. package/dist/chunks/pathname.rental-BJsG2Jd4.esm.js.map +0 -1
  430. package/dist/chunks/pathname.rental-BZDbH5Sm.js.map +0 -1
  431. package/dist/chunks/route-page-map-CEwJJyNC.esm.js.map +0 -1
  432. package/dist/chunks/route-page-map-DvI_JHLU.js.map +0 -1
  433. package/dist/chunks/routes-DySgJSqS.esm.js.map +0 -1
  434. package/dist/chunks/routes-bJIQdY4S.js.map +0 -1
  435. package/dist/chunks/searchable-select--dhEG2CL.js.map +0 -1
  436. package/dist/chunks/searchable-select-DR-q54Zn.esm.js.map +0 -1
  437. package/dist/chunks/table-DLWWu4pl.esm.js.map +0 -1
  438. package/dist/chunks/table-gZGVhEco.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { useMemo, useRef, useEffect } from "react";
3
3
  import { useFormContext } from "react-hook-form";
4
- import { D as DynamicSearchSelect } from "./searchable-select-DR-q54Zn.esm.js";
4
+ import { D as DynamicSearchSelect } from "./searchable-select-DAxe2dX5.esm.js";
5
5
  const normaliseFilterFields = (input, fallbackApiKey) => {
6
6
  if (typeof input === "string") {
7
7
  return [{ formField: input, apiKey: fallbackApiKey }];
@@ -126,4 +126,4 @@ const DynamicDependentFieldContent = ({ control, watch, setValue, getFieldState:
126
126
  export {
127
127
  DynamicDependentField as D
128
128
  };
129
- //# sourceMappingURL=DynamicDependentField-Cc3WD--P.esm.js.map
129
+ //# sourceMappingURL=DynamicDependentField-Bx-tnYfX.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicDependentField-Cc3WD--P.esm.js","sources":["../../src/components/form-control/form-builder/form-builder-element/dynamic-dependent-field/DynamicDependentField.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport DynamicSearchSelect from '../dynamic-select';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Shape of the filter map passed to DynamicSearchSelect's customeFilter */\ntype FilterMap = Record<string, any>;\n\n/**\n * filterFields accepts:\n * - string: `\"company\"` → watch form field `company`, use `filterKey` prop as API filter key\n * - object: `{ company: 'company_id' }` → key = form field to watch, value = API filter key\n */\ntype FilterFieldsInput = string | Record<string, string>;\n\n/** Normalised entry: which form field to watch → which API filter key to use */\ninterface FilterFieldEntry {\n /** The form field name to watch (e.g. \"company\") */\n formField: string;\n /** The API filter key to send (e.g. \"company_id\") */\n apiKey: string;\n}\n\nexport interface DynamicDependentFieldProps {\n /** Field name registered in React Hook Form (e.g. \"department_id\") */\n name: string;\n\n /**\n * Describes which form field(s) this select depends on.\n *\n * **String** – a single form field name. The API filter key is taken from `filterKey`.\n * @example filterFields=\"company\"\n *\n * **Object** – keys are form field names, values are API filter keys.\n * @example filterFields={{ company: 'company_id', branch: 'branch_id' }}\n */\n filterFields: FilterFieldsInput;\n\n /**\n * The form array/namespace prefix used in the parent form\n * (same as `fieldArrayName` in DynamicSearchSelect).\n */\n fieldArrayName: string;\n\n /**\n * API filter key used when `filterFields` is a plain string.\n * Ignored when `filterFields` is an object (the object values are used instead).\n * @default 'company_id'\n */\n filterKey?: string;\n\n /** Label displayed above the select */\n label?: string;\n\n /** Placeholder text inside the select */\n placeholder?: string;\n\n /**\n * API key string forwarded to `DynamicSearchSelect` as `apiType`.\n */\n apiType?: string;\n\n /**\n * Custom fetch function forwarded to `DynamicSearchSelect` as `customFetchApi`.\n */\n customFetchApi?: (...args: any[]) => Promise<any>;\n\n /** Disable the field regardless of filter state */\n disabled?: boolean;\n\n /** React Hook Form validation rules */\n rules?: Record<string, any>;\n\n /** Allow multi-select (forwarded as `is_multiselect`) */\n isMulti?: boolean;\n\n /** Mark field as required */\n required?: boolean;\n\n /** Form control object from useForm */\n control?: any;\n formControl?: any;\n\n /** Watch function from useForm */\n watch?: any;\n\n /** SetValue function from useForm */\n setValue?: any;\n\n /** GetFieldState function from useForm */\n getFieldState?: any;\n\n /** FormState object from useForm */\n formState?: any;\n\n /** Any additional props forwarded verbatim to DynamicSearchSelect */\n [key: string]: any;\n}\n\n// ---------------------------------------------------------------------------\n// Helper utilities\n// ---------------------------------------------------------------------------\n\n/**\n * Normalise `filterFields` into a uniform array of { formField, apiKey } entries.\n *\n * - string `\"company\"` → [{ formField: 'company', apiKey: <filterKey> }]\n * - object `{ company: 'company_id' }` → [{ formField: 'company', apiKey: 'company_id' }]\n */\nconst normaliseFilterFields = (\n input: FilterFieldsInput,\n fallbackApiKey: string\n): FilterFieldEntry[] => {\n if (typeof input === 'string') {\n return [{ formField: input, apiKey: fallbackApiKey }];\n }\n\n // Object – each key is a form field, each value is the API filter key\n return Object.entries(input).map(([formField, apiKey]) => ({\n formField,\n apiKey,\n }));\n};\n\n/**\n * Returns `true` when **every** value in the map is non-empty.\n */\nconst allFiltersFilled = (filters: FilterMap): boolean =>\n Object.values(filters).every((v) => {\n if (v === null || v === undefined || v === '') return false;\n if (Array.isArray(v) && v.length === 0) return false;\n return true;\n });\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * `DynamicDependentField` is a fully reusable, typed wrapper around\n * `DynamicSearchSelect` that:\n *\n * - Reads `control`, `watch`, and `setValue` from the nearest `FormProvider`.\n * - Watches one or more dependent fields (`filterFields`).\n * - Builds a `customeFilter` object from the watched values.\n * - Resets its own value and triggers a fresh option load whenever a watched\n * field changes.\n * - Disables itself automatically while any required filter is empty.\n *\n * @example\n * // String – single dependency, uses filterKey for the API filter key\n * <DynamicDependentField\n * name=\"department_id\"\n * fieldArrayName=\"add_payment_entry\"\n * filterFields=\"company\"\n * filterKey=\"company_id\"\n * apiType=\"department\"\n * />\n *\n * @example\n * // Object – multiple dependencies with explicit API filter keys\n * <DynamicDependentField\n * name=\"location_id\"\n * fieldArrayName=\"employee\"\n * filterFields={{ company: 'company_id', branch: 'branch_id' }}\n * apiType=\"location\"\n * />\n */\nconst DynamicDependentField: React.FC<DynamicDependentFieldProps> = (props) => {\n const formContext = useFormContext();\n\n // Prioritise props over context to allow manual override (essential for MFE)\n const control = props.formControl || props.control || formContext?.control;\n const watch = props.watch || formContext?.watch;\n const setValue = props.setValue || formContext?.setValue;\n const getFieldState = props.getFieldState || formContext?.getFieldState;\n const formState = props.formState || formContext?.formState;\n\n const hasMethods = !!(control && watch && setValue);\n\n if (!hasMethods) {\n // Fallback: render the select without dependency logic if form methods are missing\n return (\n <DynamicSearchSelect\n addType={props?.addType || props?.apiType}\n enable_footer={props?.enable_footer ?? true}\n {...props}\n {...(control ? { formControl: control } : {})}\n />\n );\n }\n\n return (\n <DynamicDependentFieldContent\n {...props}\n control={control}\n watch={watch}\n setValue={setValue}\n getFieldState={getFieldState}\n formState={formState}\n />\n );\n};\n\n/**\n * Inner component that performs the dependency logic.\n * It is only rendered when form methods are available.\n */\nconst DynamicDependentFieldContent: React.FC<\n DynamicDependentFieldProps & {\n control: any;\n watch: any;\n setValue: any;\n getFieldState: any;\n formState: any;\n }\n> = ({ control, watch, setValue, getFieldState: _getFieldState, formState: _formState, ...props }) => {\n const {\n name,\n filterFields = 'company_id',\n filterKey = 'company_id',\n fieldArrayName,\n enable_footer = true,\n apiType,\n } = props;\n\n // -----------------------------------------------------------------------\n // Normalise filterFields into a uniform array of { formField, apiKey }\n // -----------------------------------------------------------------------\n const entries: FilterFieldEntry[] = useMemo(\n () => normaliseFilterFields(filterFields, filterKey),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(filterFields), filterKey]\n );\n\n /** Just the form field names – used for watching and change detection */\n const formFieldNames = useMemo(() => entries.map((e) => e.formField), [entries]);\n\n // -----------------------------------------------------------------------\n // Watch all dependent form field values\n // -----------------------------------------------------------------------\n const watchedValues = watch(formFieldNames.map((f) => `${fieldArrayName}.${f}`));\n\n const watchedValuesArray: any[] = useMemo(\n () => (Array.isArray(watchedValues) ? watchedValues : [watchedValues]),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(watchedValues)]\n );\n\n // -----------------------------------------------------------------------\n // Build the filter map { company: 1, branch: 2 } (keyed by formField)\n // -----------------------------------------------------------------------\n const filters: FilterMap = useMemo(() => {\n return formFieldNames.reduce<FilterMap>((acc, field, index) => {\n acc[field] = watchedValuesArray[index];\n return acc;\n }, {});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(watchedValuesArray), formFieldNames.join(',')]);\n\n // -----------------------------------------------------------------------\n // Determine whether the field should be disabled\n // -----------------------------------------------------------------------\n const isDisabledDueToFilters = !allFiltersFilled(filters);\n const isFieldDisabled = props?.disabled || isDisabledDueToFilters;\n\n // -----------------------------------------------------------------------\n // Track previous filters to detect real changes and avoid infinite loops\n // -----------------------------------------------------------------------\n const prevFiltersRef = useRef<FilterMap | null>(null);\n const isFirstRender = useRef(true);\n\n // -----------------------------------------------------------------------\n // Reset own value when any filter changes (skip on mount)\n // -----------------------------------------------------------------------\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n prevFiltersRef.current = filters;\n return;\n }\n\n const prev = prevFiltersRef.current;\n const changedFields = formFieldNames.filter((field) => prev?.[field] !== filters[field]);\n const hasChanged = changedFields.length > 0;\n\n if (hasChanged) {\n prevFiltersRef.current = filters;\n\n setValue(`${fieldArrayName}.${name}`, props?.is_multiselect ? [] : null, {\n shouldValidate: false,\n shouldDirty: false\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(filters)]);\n\n // -----------------------------------------------------------------------\n // Build customeFilter in the format DynamicSearchSelect expects.\n //\n // For each entry, map the watched form value to the correct API filter key:\n // { formField: 'company', apiKey: 'company_id', value: 1 }\n // → { '&company_id.in': [1] }\n //\n // Array values (multiselect) are passed through as-is.\n // -----------------------------------------------------------------------\n const customeFilter: FilterMap = useMemo(() => {\n const dependentFilters = entries.reduce<FilterMap>((acc, entry) => {\n const value = filters[entry.formField];\n const hasValue = Array.isArray(value)\n ? value.length > 0\n : (value !== null && value !== undefined && value !== '');\n\n acc[`&${entry.apiKey}.in`] = hasValue ? Array.isArray(value) ? value : [value] : 0;\n return acc;\n }, {});\n\n // Merge with rest.customeFilter if provided\n return {\n ...dependentFilters,\n ...(props?.customeFilter || {})\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(filters), JSON.stringify(props?.customeFilter), isDisabledDueToFilters]);\n console.log(\"🚀 ~ DynamicDependentFieldContent ~ customeFilter:\", customeFilter)\n\n // -----------------------------------------------------------------------\n // Key derived from filter values — forces a full remount of DynamicSearchSelect\n // whenever any parent filter (e.g. company) changes, clearing its internal state.\n // -----------------------------------------------------------------------\n const updateKey = JSON.stringify(filters);\n\n // -----------------------------------------------------------------------\n // Render\n // -----------------------------------------------------------------------\n return (\n <DynamicSearchSelect\n key={updateKey}\n options={[]}\n addType={props?.addType || apiType}\n enable_footer={enable_footer}\n disabled={isFieldDisabled}\n {...(props as any)}\n customeFilter={customeFilter}\n formControl={control}\n />\n );\n};\n\nexport default DynamicDependentField;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DynamicDependentField-Bx-tnYfX.esm.js","sources":["../../src/components/form-control/form-builder/form-builder-element/dynamic-dependent-field/DynamicDependentField.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport DynamicSearchSelect from '../dynamic-select';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Shape of the filter map passed to DynamicSearchSelect's customeFilter */\ntype FilterMap = Record<string, any>;\n\n/**\n * filterFields accepts:\n * - string: `\"company\"` → watch form field `company`, use `filterKey` prop as API filter key\n * - object: `{ company: 'company_id' }` → key = form field to watch, value = API filter key\n */\ntype FilterFieldsInput = string | Record<string, string>;\n\n/** Normalised entry: which form field to watch → which API filter key to use */\ninterface FilterFieldEntry {\n /** The form field name to watch (e.g. \"company\") */\n formField: string;\n /** The API filter key to send (e.g. \"company_id\") */\n apiKey: string;\n}\n\nexport interface DynamicDependentFieldProps {\n /** Field name registered in React Hook Form (e.g. \"department_id\") */\n name: string;\n\n /**\n * Describes which form field(s) this select depends on.\n *\n * **String** – a single form field name. The API filter key is taken from `filterKey`.\n * @example filterFields=\"company\"\n *\n * **Object** – keys are form field names, values are API filter keys.\n * @example filterFields={{ company: 'company_id', branch: 'branch_id' }}\n */\n filterFields: FilterFieldsInput;\n\n /**\n * The form array/namespace prefix used in the parent form\n * (same as `fieldArrayName` in DynamicSearchSelect).\n */\n fieldArrayName: string;\n\n /**\n * API filter key used when `filterFields` is a plain string.\n * Ignored when `filterFields` is an object (the object values are used instead).\n * @default 'company_id'\n */\n filterKey?: string;\n\n /** Label displayed above the select */\n label?: string;\n\n /** Placeholder text inside the select */\n placeholder?: string;\n\n /**\n * API key string forwarded to `DynamicSearchSelect` as `apiType`.\n */\n apiType?: string;\n\n /**\n * Custom fetch function forwarded to `DynamicSearchSelect` as `customFetchApi`.\n */\n customFetchApi?: (...args: any[]) => Promise<any>;\n\n /** Disable the field regardless of filter state */\n disabled?: boolean;\n\n /** React Hook Form validation rules */\n rules?: Record<string, any>;\n\n /** Allow multi-select (forwarded as `is_multiselect`) */\n isMulti?: boolean;\n\n /** Mark field as required */\n required?: boolean;\n\n /** Form control object from useForm */\n control?: any;\n formControl?: any;\n\n /** Watch function from useForm */\n watch?: any;\n\n /** SetValue function from useForm */\n setValue?: any;\n\n /** GetFieldState function from useForm */\n getFieldState?: any;\n\n /** FormState object from useForm */\n formState?: any;\n\n /** Any additional props forwarded verbatim to DynamicSearchSelect */\n [key: string]: any;\n}\n\n// ---------------------------------------------------------------------------\n// Helper utilities\n// ---------------------------------------------------------------------------\n\n/**\n * Normalise `filterFields` into a uniform array of { formField, apiKey } entries.\n *\n * - string `\"company\"` → [{ formField: 'company', apiKey: <filterKey> }]\n * - object `{ company: 'company_id' }` → [{ formField: 'company', apiKey: 'company_id' }]\n */\nconst normaliseFilterFields = (\n input: FilterFieldsInput,\n fallbackApiKey: string\n): FilterFieldEntry[] => {\n if (typeof input === 'string') {\n return [{ formField: input, apiKey: fallbackApiKey }];\n }\n\n // Object – each key is a form field, each value is the API filter key\n return Object.entries(input).map(([formField, apiKey]) => ({\n formField,\n apiKey,\n }));\n};\n\n/**\n * Returns `true` when **every** value in the map is non-empty.\n */\nconst allFiltersFilled = (filters: FilterMap): boolean =>\n Object.values(filters).every((v) => {\n if (v === null || v === undefined || v === '') return false;\n if (Array.isArray(v) && v.length === 0) return false;\n return true;\n });\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * `DynamicDependentField` is a fully reusable, typed wrapper around\n * `DynamicSearchSelect` that:\n *\n * - Reads `control`, `watch`, and `setValue` from the nearest `FormProvider`.\n * - Watches one or more dependent fields (`filterFields`).\n * - Builds a `customeFilter` object from the watched values.\n * - Resets its own value and triggers a fresh option load whenever a watched\n * field changes.\n * - Disables itself automatically while any required filter is empty.\n *\n * @example\n * // String – single dependency, uses filterKey for the API filter key\n * <DynamicDependentField\n * name=\"department_id\"\n * fieldArrayName=\"add_payment_entry\"\n * filterFields=\"company\"\n * filterKey=\"company_id\"\n * apiType=\"department\"\n * />\n *\n * @example\n * // Object – multiple dependencies with explicit API filter keys\n * <DynamicDependentField\n * name=\"location_id\"\n * fieldArrayName=\"employee\"\n * filterFields={{ company: 'company_id', branch: 'branch_id' }}\n * apiType=\"location\"\n * />\n */\nconst DynamicDependentField: React.FC<DynamicDependentFieldProps> = (props) => {\n const formContext = useFormContext();\n\n // Prioritise props over context to allow manual override (essential for MFE)\n const control = props.formControl || props.control || formContext?.control;\n const watch = props.watch || formContext?.watch;\n const setValue = props.setValue || formContext?.setValue;\n const getFieldState = props.getFieldState || formContext?.getFieldState;\n const formState = props.formState || formContext?.formState;\n\n const hasMethods = !!(control && watch && setValue);\n\n if (!hasMethods) {\n // Fallback: render the select without dependency logic if form methods are missing\n return (\n <DynamicSearchSelect\n addType={props?.addType || props?.apiType}\n enable_footer={props?.enable_footer ?? true}\n {...props}\n {...(control ? { formControl: control } : {})}\n />\n );\n }\n\n return (\n <DynamicDependentFieldContent\n {...props}\n control={control}\n watch={watch}\n setValue={setValue}\n getFieldState={getFieldState}\n formState={formState}\n />\n );\n};\n\n/**\n * Inner component that performs the dependency logic.\n * It is only rendered when form methods are available.\n */\nconst DynamicDependentFieldContent: React.FC<\n DynamicDependentFieldProps & {\n control: any;\n watch: any;\n setValue: any;\n getFieldState: any;\n formState: any;\n }\n> = ({ control, watch, setValue, getFieldState: _getFieldState, formState: _formState, ...props }) => {\n const {\n name,\n filterFields = 'company_id',\n filterKey = 'company_id',\n fieldArrayName,\n enable_footer = true,\n apiType,\n } = props;\n\n // -----------------------------------------------------------------------\n // Normalise filterFields into a uniform array of { formField, apiKey }\n // -----------------------------------------------------------------------\n const entries: FilterFieldEntry[] = useMemo(\n () => normaliseFilterFields(filterFields, filterKey),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(filterFields), filterKey]\n );\n\n /** Just the form field names – used for watching and change detection */\n const formFieldNames = useMemo(() => entries.map((e) => e.formField), [entries]);\n\n // -----------------------------------------------------------------------\n // Watch all dependent form field values\n // -----------------------------------------------------------------------\n const watchedValues = watch(formFieldNames.map((f) => `${fieldArrayName}.${f}`));\n\n const watchedValuesArray: any[] = useMemo(\n () => (Array.isArray(watchedValues) ? watchedValues : [watchedValues]),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(watchedValues)]\n );\n\n // -----------------------------------------------------------------------\n // Build the filter map { company: 1, branch: 2 } (keyed by formField)\n // -----------------------------------------------------------------------\n const filters: FilterMap = useMemo(() => {\n return formFieldNames.reduce<FilterMap>((acc, field, index) => {\n acc[field] = watchedValuesArray[index];\n return acc;\n }, {});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(watchedValuesArray), formFieldNames.join(',')]);\n\n // -----------------------------------------------------------------------\n // Determine whether the field should be disabled\n // -----------------------------------------------------------------------\n const isDisabledDueToFilters = !allFiltersFilled(filters);\n const isFieldDisabled = props?.disabled || isDisabledDueToFilters;\n\n // -----------------------------------------------------------------------\n // Track previous filters to detect real changes and avoid infinite loops\n // -----------------------------------------------------------------------\n const prevFiltersRef = useRef<FilterMap | null>(null);\n const isFirstRender = useRef(true);\n\n // -----------------------------------------------------------------------\n // Reset own value when any filter changes (skip on mount)\n // -----------------------------------------------------------------------\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n prevFiltersRef.current = filters;\n return;\n }\n\n const prev = prevFiltersRef.current;\n const changedFields = formFieldNames.filter((field) => prev?.[field] !== filters[field]);\n const hasChanged = changedFields.length > 0;\n\n if (hasChanged) {\n prevFiltersRef.current = filters;\n\n setValue(`${fieldArrayName}.${name}`, props?.is_multiselect ? [] : null, {\n shouldValidate: false,\n shouldDirty: false\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(filters)]);\n\n // -----------------------------------------------------------------------\n // Build customeFilter in the format DynamicSearchSelect expects.\n //\n // For each entry, map the watched form value to the correct API filter key:\n // { formField: 'company', apiKey: 'company_id', value: 1 }\n // → { '&company_id.in': [1] }\n //\n // Array values (multiselect) are passed through as-is.\n // -----------------------------------------------------------------------\n const customeFilter: FilterMap = useMemo(() => {\n const dependentFilters = entries.reduce<FilterMap>((acc, entry) => {\n const value = filters[entry.formField];\n const hasValue = Array.isArray(value)\n ? value.length > 0\n : (value !== null && value !== undefined && value !== '');\n\n acc[`&${entry.apiKey}.in`] = hasValue ? Array.isArray(value) ? value : [value] : 0;\n return acc;\n }, {});\n\n // Merge with rest.customeFilter if provided\n return {\n ...dependentFilters,\n ...(props?.customeFilter || {})\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(filters), JSON.stringify(props?.customeFilter), isDisabledDueToFilters]);\n console.log(\"🚀 ~ DynamicDependentFieldContent ~ customeFilter:\", customeFilter)\n\n // -----------------------------------------------------------------------\n // Key derived from filter values — forces a full remount of DynamicSearchSelect\n // whenever any parent filter (e.g. company) changes, clearing its internal state.\n // -----------------------------------------------------------------------\n const updateKey = JSON.stringify(filters);\n\n // -----------------------------------------------------------------------\n // Render\n // -----------------------------------------------------------------------\n return (\n <DynamicSearchSelect\n key={updateKey}\n options={[]}\n addType={props?.addType || apiType}\n enable_footer={enable_footer}\n disabled={isFieldDisabled}\n {...(props as any)}\n customeFilter={customeFilter}\n formControl={control}\n />\n );\n};\n\nexport default DynamicDependentField;\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
3
  const React = require("react");
4
4
  const reactHookForm = require("react-hook-form");
5
- const searchableSelect = require("./searchable-select--dhEG2CL.js");
5
+ const searchableSelect = require("./searchable-select-yROdMxY5.js");
6
6
  const normaliseFilterFields = (input, fallbackApiKey) => {
7
7
  if (typeof input === "string") {
8
8
  return [{ formField: input, apiKey: fallbackApiKey }];
@@ -125,4 +125,4 @@ const DynamicDependentFieldContent = ({ control, watch, setValue, getFieldState:
125
125
  );
126
126
  };
127
127
  exports.DynamicDependentField = DynamicDependentField;
128
- //# sourceMappingURL=DynamicDependentField-D4Dfx8id.js.map
128
+ //# sourceMappingURL=DynamicDependentField-CHHi9988.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicDependentField-D4Dfx8id.js","sources":["../../src/components/form-control/form-builder/form-builder-element/dynamic-dependent-field/DynamicDependentField.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport DynamicSearchSelect from '../dynamic-select';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Shape of the filter map passed to DynamicSearchSelect's customeFilter */\ntype FilterMap = Record<string, any>;\n\n/**\n * filterFields accepts:\n * - string: `\"company\"` → watch form field `company`, use `filterKey` prop as API filter key\n * - object: `{ company: 'company_id' }` → key = form field to watch, value = API filter key\n */\ntype FilterFieldsInput = string | Record<string, string>;\n\n/** Normalised entry: which form field to watch → which API filter key to use */\ninterface FilterFieldEntry {\n /** The form field name to watch (e.g. \"company\") */\n formField: string;\n /** The API filter key to send (e.g. \"company_id\") */\n apiKey: string;\n}\n\nexport interface DynamicDependentFieldProps {\n /** Field name registered in React Hook Form (e.g. \"department_id\") */\n name: string;\n\n /**\n * Describes which form field(s) this select depends on.\n *\n * **String** – a single form field name. The API filter key is taken from `filterKey`.\n * @example filterFields=\"company\"\n *\n * **Object** – keys are form field names, values are API filter keys.\n * @example filterFields={{ company: 'company_id', branch: 'branch_id' }}\n */\n filterFields: FilterFieldsInput;\n\n /**\n * The form array/namespace prefix used in the parent form\n * (same as `fieldArrayName` in DynamicSearchSelect).\n */\n fieldArrayName: string;\n\n /**\n * API filter key used when `filterFields` is a plain string.\n * Ignored when `filterFields` is an object (the object values are used instead).\n * @default 'company_id'\n */\n filterKey?: string;\n\n /** Label displayed above the select */\n label?: string;\n\n /** Placeholder text inside the select */\n placeholder?: string;\n\n /**\n * API key string forwarded to `DynamicSearchSelect` as `apiType`.\n */\n apiType?: string;\n\n /**\n * Custom fetch function forwarded to `DynamicSearchSelect` as `customFetchApi`.\n */\n customFetchApi?: (...args: any[]) => Promise<any>;\n\n /** Disable the field regardless of filter state */\n disabled?: boolean;\n\n /** React Hook Form validation rules */\n rules?: Record<string, any>;\n\n /** Allow multi-select (forwarded as `is_multiselect`) */\n isMulti?: boolean;\n\n /** Mark field as required */\n required?: boolean;\n\n /** Form control object from useForm */\n control?: any;\n formControl?: any;\n\n /** Watch function from useForm */\n watch?: any;\n\n /** SetValue function from useForm */\n setValue?: any;\n\n /** GetFieldState function from useForm */\n getFieldState?: any;\n\n /** FormState object from useForm */\n formState?: any;\n\n /** Any additional props forwarded verbatim to DynamicSearchSelect */\n [key: string]: any;\n}\n\n// ---------------------------------------------------------------------------\n// Helper utilities\n// ---------------------------------------------------------------------------\n\n/**\n * Normalise `filterFields` into a uniform array of { formField, apiKey } entries.\n *\n * - string `\"company\"` → [{ formField: 'company', apiKey: <filterKey> }]\n * - object `{ company: 'company_id' }` → [{ formField: 'company', apiKey: 'company_id' }]\n */\nconst normaliseFilterFields = (\n input: FilterFieldsInput,\n fallbackApiKey: string\n): FilterFieldEntry[] => {\n if (typeof input === 'string') {\n return [{ formField: input, apiKey: fallbackApiKey }];\n }\n\n // Object – each key is a form field, each value is the API filter key\n return Object.entries(input).map(([formField, apiKey]) => ({\n formField,\n apiKey,\n }));\n};\n\n/**\n * Returns `true` when **every** value in the map is non-empty.\n */\nconst allFiltersFilled = (filters: FilterMap): boolean =>\n Object.values(filters).every((v) => {\n if (v === null || v === undefined || v === '') return false;\n if (Array.isArray(v) && v.length === 0) return false;\n return true;\n });\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * `DynamicDependentField` is a fully reusable, typed wrapper around\n * `DynamicSearchSelect` that:\n *\n * - Reads `control`, `watch`, and `setValue` from the nearest `FormProvider`.\n * - Watches one or more dependent fields (`filterFields`).\n * - Builds a `customeFilter` object from the watched values.\n * - Resets its own value and triggers a fresh option load whenever a watched\n * field changes.\n * - Disables itself automatically while any required filter is empty.\n *\n * @example\n * // String – single dependency, uses filterKey for the API filter key\n * <DynamicDependentField\n * name=\"department_id\"\n * fieldArrayName=\"add_payment_entry\"\n * filterFields=\"company\"\n * filterKey=\"company_id\"\n * apiType=\"department\"\n * />\n *\n * @example\n * // Object – multiple dependencies with explicit API filter keys\n * <DynamicDependentField\n * name=\"location_id\"\n * fieldArrayName=\"employee\"\n * filterFields={{ company: 'company_id', branch: 'branch_id' }}\n * apiType=\"location\"\n * />\n */\nconst DynamicDependentField: React.FC<DynamicDependentFieldProps> = (props) => {\n const formContext = useFormContext();\n\n // Prioritise props over context to allow manual override (essential for MFE)\n const control = props.formControl || props.control || formContext?.control;\n const watch = props.watch || formContext?.watch;\n const setValue = props.setValue || formContext?.setValue;\n const getFieldState = props.getFieldState || formContext?.getFieldState;\n const formState = props.formState || formContext?.formState;\n\n const hasMethods = !!(control && watch && setValue);\n\n if (!hasMethods) {\n // Fallback: render the select without dependency logic if form methods are missing\n return (\n <DynamicSearchSelect\n addType={props?.addType || props?.apiType}\n enable_footer={props?.enable_footer ?? true}\n {...props}\n {...(control ? { formControl: control } : {})}\n />\n );\n }\n\n return (\n <DynamicDependentFieldContent\n {...props}\n control={control}\n watch={watch}\n setValue={setValue}\n getFieldState={getFieldState}\n formState={formState}\n />\n );\n};\n\n/**\n * Inner component that performs the dependency logic.\n * It is only rendered when form methods are available.\n */\nconst DynamicDependentFieldContent: React.FC<\n DynamicDependentFieldProps & {\n control: any;\n watch: any;\n setValue: any;\n getFieldState: any;\n formState: any;\n }\n> = ({ control, watch, setValue, getFieldState: _getFieldState, formState: _formState, ...props }) => {\n const {\n name,\n filterFields = 'company_id',\n filterKey = 'company_id',\n fieldArrayName,\n enable_footer = true,\n apiType,\n } = props;\n\n // -----------------------------------------------------------------------\n // Normalise filterFields into a uniform array of { formField, apiKey }\n // -----------------------------------------------------------------------\n const entries: FilterFieldEntry[] = useMemo(\n () => normaliseFilterFields(filterFields, filterKey),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(filterFields), filterKey]\n );\n\n /** Just the form field names – used for watching and change detection */\n const formFieldNames = useMemo(() => entries.map((e) => e.formField), [entries]);\n\n // -----------------------------------------------------------------------\n // Watch all dependent form field values\n // -----------------------------------------------------------------------\n const watchedValues = watch(formFieldNames.map((f) => `${fieldArrayName}.${f}`));\n\n const watchedValuesArray: any[] = useMemo(\n () => (Array.isArray(watchedValues) ? watchedValues : [watchedValues]),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(watchedValues)]\n );\n\n // -----------------------------------------------------------------------\n // Build the filter map { company: 1, branch: 2 } (keyed by formField)\n // -----------------------------------------------------------------------\n const filters: FilterMap = useMemo(() => {\n return formFieldNames.reduce<FilterMap>((acc, field, index) => {\n acc[field] = watchedValuesArray[index];\n return acc;\n }, {});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(watchedValuesArray), formFieldNames.join(',')]);\n\n // -----------------------------------------------------------------------\n // Determine whether the field should be disabled\n // -----------------------------------------------------------------------\n const isDisabledDueToFilters = !allFiltersFilled(filters);\n const isFieldDisabled = props?.disabled || isDisabledDueToFilters;\n\n // -----------------------------------------------------------------------\n // Track previous filters to detect real changes and avoid infinite loops\n // -----------------------------------------------------------------------\n const prevFiltersRef = useRef<FilterMap | null>(null);\n const isFirstRender = useRef(true);\n\n // -----------------------------------------------------------------------\n // Reset own value when any filter changes (skip on mount)\n // -----------------------------------------------------------------------\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n prevFiltersRef.current = filters;\n return;\n }\n\n const prev = prevFiltersRef.current;\n const changedFields = formFieldNames.filter((field) => prev?.[field] !== filters[field]);\n const hasChanged = changedFields.length > 0;\n\n if (hasChanged) {\n prevFiltersRef.current = filters;\n\n setValue(`${fieldArrayName}.${name}`, props?.is_multiselect ? [] : null, {\n shouldValidate: false,\n shouldDirty: false\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(filters)]);\n\n // -----------------------------------------------------------------------\n // Build customeFilter in the format DynamicSearchSelect expects.\n //\n // For each entry, map the watched form value to the correct API filter key:\n // { formField: 'company', apiKey: 'company_id', value: 1 }\n // → { '&company_id.in': [1] }\n //\n // Array values (multiselect) are passed through as-is.\n // -----------------------------------------------------------------------\n const customeFilter: FilterMap = useMemo(() => {\n const dependentFilters = entries.reduce<FilterMap>((acc, entry) => {\n const value = filters[entry.formField];\n const hasValue = Array.isArray(value)\n ? value.length > 0\n : (value !== null && value !== undefined && value !== '');\n\n acc[`&${entry.apiKey}.in`] = hasValue ? Array.isArray(value) ? value : [value] : 0;\n return acc;\n }, {});\n\n // Merge with rest.customeFilter if provided\n return {\n ...dependentFilters,\n ...(props?.customeFilter || {})\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(filters), JSON.stringify(props?.customeFilter), isDisabledDueToFilters]);\n console.log(\"🚀 ~ DynamicDependentFieldContent ~ customeFilter:\", customeFilter)\n\n // -----------------------------------------------------------------------\n // Key derived from filter values — forces a full remount of DynamicSearchSelect\n // whenever any parent filter (e.g. company) changes, clearing its internal state.\n // -----------------------------------------------------------------------\n const updateKey = JSON.stringify(filters);\n\n // -----------------------------------------------------------------------\n // Render\n // -----------------------------------------------------------------------\n return (\n <DynamicSearchSelect\n key={updateKey}\n options={[]}\n addType={props?.addType || apiType}\n enable_footer={enable_footer}\n disabled={isFieldDisabled}\n {...(props as any)}\n customeFilter={customeFilter}\n formControl={control}\n />\n );\n};\n\nexport default DynamicDependentField;\n"],"names":["useFormContext","jsx","DynamicSearchSelect","useMemo","useRef","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"DynamicDependentField-CHHi9988.js","sources":["../../src/components/form-control/form-builder/form-builder-element/dynamic-dependent-field/DynamicDependentField.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport DynamicSearchSelect from '../dynamic-select';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Shape of the filter map passed to DynamicSearchSelect's customeFilter */\ntype FilterMap = Record<string, any>;\n\n/**\n * filterFields accepts:\n * - string: `\"company\"` → watch form field `company`, use `filterKey` prop as API filter key\n * - object: `{ company: 'company_id' }` → key = form field to watch, value = API filter key\n */\ntype FilterFieldsInput = string | Record<string, string>;\n\n/** Normalised entry: which form field to watch → which API filter key to use */\ninterface FilterFieldEntry {\n /** The form field name to watch (e.g. \"company\") */\n formField: string;\n /** The API filter key to send (e.g. \"company_id\") */\n apiKey: string;\n}\n\nexport interface DynamicDependentFieldProps {\n /** Field name registered in React Hook Form (e.g. \"department_id\") */\n name: string;\n\n /**\n * Describes which form field(s) this select depends on.\n *\n * **String** – a single form field name. The API filter key is taken from `filterKey`.\n * @example filterFields=\"company\"\n *\n * **Object** – keys are form field names, values are API filter keys.\n * @example filterFields={{ company: 'company_id', branch: 'branch_id' }}\n */\n filterFields: FilterFieldsInput;\n\n /**\n * The form array/namespace prefix used in the parent form\n * (same as `fieldArrayName` in DynamicSearchSelect).\n */\n fieldArrayName: string;\n\n /**\n * API filter key used when `filterFields` is a plain string.\n * Ignored when `filterFields` is an object (the object values are used instead).\n * @default 'company_id'\n */\n filterKey?: string;\n\n /** Label displayed above the select */\n label?: string;\n\n /** Placeholder text inside the select */\n placeholder?: string;\n\n /**\n * API key string forwarded to `DynamicSearchSelect` as `apiType`.\n */\n apiType?: string;\n\n /**\n * Custom fetch function forwarded to `DynamicSearchSelect` as `customFetchApi`.\n */\n customFetchApi?: (...args: any[]) => Promise<any>;\n\n /** Disable the field regardless of filter state */\n disabled?: boolean;\n\n /** React Hook Form validation rules */\n rules?: Record<string, any>;\n\n /** Allow multi-select (forwarded as `is_multiselect`) */\n isMulti?: boolean;\n\n /** Mark field as required */\n required?: boolean;\n\n /** Form control object from useForm */\n control?: any;\n formControl?: any;\n\n /** Watch function from useForm */\n watch?: any;\n\n /** SetValue function from useForm */\n setValue?: any;\n\n /** GetFieldState function from useForm */\n getFieldState?: any;\n\n /** FormState object from useForm */\n formState?: any;\n\n /** Any additional props forwarded verbatim to DynamicSearchSelect */\n [key: string]: any;\n}\n\n// ---------------------------------------------------------------------------\n// Helper utilities\n// ---------------------------------------------------------------------------\n\n/**\n * Normalise `filterFields` into a uniform array of { formField, apiKey } entries.\n *\n * - string `\"company\"` → [{ formField: 'company', apiKey: <filterKey> }]\n * - object `{ company: 'company_id' }` → [{ formField: 'company', apiKey: 'company_id' }]\n */\nconst normaliseFilterFields = (\n input: FilterFieldsInput,\n fallbackApiKey: string\n): FilterFieldEntry[] => {\n if (typeof input === 'string') {\n return [{ formField: input, apiKey: fallbackApiKey }];\n }\n\n // Object – each key is a form field, each value is the API filter key\n return Object.entries(input).map(([formField, apiKey]) => ({\n formField,\n apiKey,\n }));\n};\n\n/**\n * Returns `true` when **every** value in the map is non-empty.\n */\nconst allFiltersFilled = (filters: FilterMap): boolean =>\n Object.values(filters).every((v) => {\n if (v === null || v === undefined || v === '') return false;\n if (Array.isArray(v) && v.length === 0) return false;\n return true;\n });\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * `DynamicDependentField` is a fully reusable, typed wrapper around\n * `DynamicSearchSelect` that:\n *\n * - Reads `control`, `watch`, and `setValue` from the nearest `FormProvider`.\n * - Watches one or more dependent fields (`filterFields`).\n * - Builds a `customeFilter` object from the watched values.\n * - Resets its own value and triggers a fresh option load whenever a watched\n * field changes.\n * - Disables itself automatically while any required filter is empty.\n *\n * @example\n * // String – single dependency, uses filterKey for the API filter key\n * <DynamicDependentField\n * name=\"department_id\"\n * fieldArrayName=\"add_payment_entry\"\n * filterFields=\"company\"\n * filterKey=\"company_id\"\n * apiType=\"department\"\n * />\n *\n * @example\n * // Object – multiple dependencies with explicit API filter keys\n * <DynamicDependentField\n * name=\"location_id\"\n * fieldArrayName=\"employee\"\n * filterFields={{ company: 'company_id', branch: 'branch_id' }}\n * apiType=\"location\"\n * />\n */\nconst DynamicDependentField: React.FC<DynamicDependentFieldProps> = (props) => {\n const formContext = useFormContext();\n\n // Prioritise props over context to allow manual override (essential for MFE)\n const control = props.formControl || props.control || formContext?.control;\n const watch = props.watch || formContext?.watch;\n const setValue = props.setValue || formContext?.setValue;\n const getFieldState = props.getFieldState || formContext?.getFieldState;\n const formState = props.formState || formContext?.formState;\n\n const hasMethods = !!(control && watch && setValue);\n\n if (!hasMethods) {\n // Fallback: render the select without dependency logic if form methods are missing\n return (\n <DynamicSearchSelect\n addType={props?.addType || props?.apiType}\n enable_footer={props?.enable_footer ?? true}\n {...props}\n {...(control ? { formControl: control } : {})}\n />\n );\n }\n\n return (\n <DynamicDependentFieldContent\n {...props}\n control={control}\n watch={watch}\n setValue={setValue}\n getFieldState={getFieldState}\n formState={formState}\n />\n );\n};\n\n/**\n * Inner component that performs the dependency logic.\n * It is only rendered when form methods are available.\n */\nconst DynamicDependentFieldContent: React.FC<\n DynamicDependentFieldProps & {\n control: any;\n watch: any;\n setValue: any;\n getFieldState: any;\n formState: any;\n }\n> = ({ control, watch, setValue, getFieldState: _getFieldState, formState: _formState, ...props }) => {\n const {\n name,\n filterFields = 'company_id',\n filterKey = 'company_id',\n fieldArrayName,\n enable_footer = true,\n apiType,\n } = props;\n\n // -----------------------------------------------------------------------\n // Normalise filterFields into a uniform array of { formField, apiKey }\n // -----------------------------------------------------------------------\n const entries: FilterFieldEntry[] = useMemo(\n () => normaliseFilterFields(filterFields, filterKey),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(filterFields), filterKey]\n );\n\n /** Just the form field names – used for watching and change detection */\n const formFieldNames = useMemo(() => entries.map((e) => e.formField), [entries]);\n\n // -----------------------------------------------------------------------\n // Watch all dependent form field values\n // -----------------------------------------------------------------------\n const watchedValues = watch(formFieldNames.map((f) => `${fieldArrayName}.${f}`));\n\n const watchedValuesArray: any[] = useMemo(\n () => (Array.isArray(watchedValues) ? watchedValues : [watchedValues]),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(watchedValues)]\n );\n\n // -----------------------------------------------------------------------\n // Build the filter map { company: 1, branch: 2 } (keyed by formField)\n // -----------------------------------------------------------------------\n const filters: FilterMap = useMemo(() => {\n return formFieldNames.reduce<FilterMap>((acc, field, index) => {\n acc[field] = watchedValuesArray[index];\n return acc;\n }, {});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(watchedValuesArray), formFieldNames.join(',')]);\n\n // -----------------------------------------------------------------------\n // Determine whether the field should be disabled\n // -----------------------------------------------------------------------\n const isDisabledDueToFilters = !allFiltersFilled(filters);\n const isFieldDisabled = props?.disabled || isDisabledDueToFilters;\n\n // -----------------------------------------------------------------------\n // Track previous filters to detect real changes and avoid infinite loops\n // -----------------------------------------------------------------------\n const prevFiltersRef = useRef<FilterMap | null>(null);\n const isFirstRender = useRef(true);\n\n // -----------------------------------------------------------------------\n // Reset own value when any filter changes (skip on mount)\n // -----------------------------------------------------------------------\n useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n prevFiltersRef.current = filters;\n return;\n }\n\n const prev = prevFiltersRef.current;\n const changedFields = formFieldNames.filter((field) => prev?.[field] !== filters[field]);\n const hasChanged = changedFields.length > 0;\n\n if (hasChanged) {\n prevFiltersRef.current = filters;\n\n setValue(`${fieldArrayName}.${name}`, props?.is_multiselect ? [] : null, {\n shouldValidate: false,\n shouldDirty: false\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(filters)]);\n\n // -----------------------------------------------------------------------\n // Build customeFilter in the format DynamicSearchSelect expects.\n //\n // For each entry, map the watched form value to the correct API filter key:\n // { formField: 'company', apiKey: 'company_id', value: 1 }\n // → { '&company_id.in': [1] }\n //\n // Array values (multiselect) are passed through as-is.\n // -----------------------------------------------------------------------\n const customeFilter: FilterMap = useMemo(() => {\n const dependentFilters = entries.reduce<FilterMap>((acc, entry) => {\n const value = filters[entry.formField];\n const hasValue = Array.isArray(value)\n ? value.length > 0\n : (value !== null && value !== undefined && value !== '');\n\n acc[`&${entry.apiKey}.in`] = hasValue ? Array.isArray(value) ? value : [value] : 0;\n return acc;\n }, {});\n\n // Merge with rest.customeFilter if provided\n return {\n ...dependentFilters,\n ...(props?.customeFilter || {})\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(filters), JSON.stringify(props?.customeFilter), isDisabledDueToFilters]);\n console.log(\"🚀 ~ DynamicDependentFieldContent ~ customeFilter:\", customeFilter)\n\n // -----------------------------------------------------------------------\n // Key derived from filter values — forces a full remount of DynamicSearchSelect\n // whenever any parent filter (e.g. company) changes, clearing its internal state.\n // -----------------------------------------------------------------------\n const updateKey = JSON.stringify(filters);\n\n // -----------------------------------------------------------------------\n // Render\n // -----------------------------------------------------------------------\n return (\n <DynamicSearchSelect\n key={updateKey}\n options={[]}\n addType={props?.addType || apiType}\n enable_footer={enable_footer}\n disabled={isFieldDisabled}\n {...(props as any)}\n customeFilter={customeFilter}\n formControl={control}\n />\n );\n};\n\nexport default DynamicDependentField;\n"],"names":["useFormContext","jsx","DynamicSearchSelect","useMemo","useRef","useEffect"],"mappings":";;;;;AAgHA,MAAM,wBAAwB,CAC1B,OACA,mBACqB;AACrB,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO,CAAC,EAAE,WAAW,OAAO,QAAQ,gBAAgB;AAAA,EACxD;AAGA,SAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,WAAW,MAAM,OAAO;AAAA,IACvD;AAAA,IACA;AAAA,EAAA,EACF;AACN;AAKA,MAAM,mBAAmB,CAAC,YACtB,OAAO,OAAO,OAAO,EAAE,MAAM,CAAC,MAAM;AAChC,MAAI,MAAM,QAAQ,MAAM,UAAa,MAAM,GAAI,QAAO;AACtD,MAAI,MAAM,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAG,QAAO;AAC/C,SAAO;AACX,CAAC;AAoCL,MAAM,wBAA8D,CAAC,UAAU;AAC3E,QAAM,cAAcA,cAAAA,eAAA;AAGpB,QAAM,UAAU,MAAM,eAAe,MAAM,YAAW,2CAAa;AACnE,QAAM,QAAQ,MAAM,UAAS,2CAAa;AAC1C,QAAM,WAAW,MAAM,aAAY,2CAAa;AAChD,QAAM,gBAAgB,MAAM,kBAAiB,2CAAa;AAC1D,QAAM,YAAY,MAAM,cAAa,2CAAa;AAElD,QAAM,aAAa,CAAC,EAAE,WAAW,SAAS;AAE1C,MAAI,CAAC,YAAY;AAEb,WACIC,2BAAAA;AAAAA,MAACC,iBAAAA;AAAAA,MAAA;AAAA,QACG,UAAS,+BAAO,aAAW,+BAAO;AAAA,QAClC,gBAAe,+BAAO,kBAAiB;AAAA,QACtC,GAAG;AAAA,QACH,GAAI,UAAU,EAAE,aAAa,YAAY,CAAA;AAAA,MAAC;AAAA,IAAA;AAAA,EAGvD;AAEA,SACID,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAG;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAAA;AAGZ;AAMA,MAAM,+BAQF,CAAC,EAAE,SAAS,OAAO,UAAU,eAAe,gBAAgB,WAAW,YAAY,GAAG,MAAA,MAAY;AAClG,QAAM;AAAA,IACF;AAAA,IACA,eAAe;AAAA,IACf,YAAY;AAAA,IACZ;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,EAAA,IACA;AAKJ,QAAM,UAA8BE,MAAAA;AAAAA,IAChC,MAAM,sBAAsB,cAAc,SAAS;AAAA;AAAA,IAEnD,CAAC,KAAK,UAAU,YAAY,GAAG,SAAS;AAAA,EAAA;AAI5C,QAAM,iBAAiBA,MAAAA,QAAQ,MAAM,QAAQ,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC,OAAO,CAAC;AAK/E,QAAM,gBAAgB,MAAM,eAAe,IAAI,CAAC,MAAM,GAAG,cAAc,IAAI,CAAC,EAAE,CAAC;AAE/E,QAAM,qBAA4BA,MAAAA;AAAAA,IAC9B,MAAO,MAAM,QAAQ,aAAa,IAAI,gBAAgB,CAAC,aAAa;AAAA;AAAA,IAEpE,CAAC,KAAK,UAAU,aAAa,CAAC;AAAA,EAAA;AAMlC,QAAM,UAAqBA,MAAAA,QAAQ,MAAM;AACrC,WAAO,eAAe,OAAkB,CAAC,KAAK,OAAO,UAAU;AAC3D,UAAI,KAAK,IAAI,mBAAmB,KAAK;AACrC,aAAO;AAAA,IACX,GAAG,CAAA,CAAE;AAAA,EAET,GAAG,CAAC,KAAK,UAAU,kBAAkB,GAAG,eAAe,KAAK,GAAG,CAAC,CAAC;AAKjE,QAAM,yBAAyB,CAAC,iBAAiB,OAAO;AACxD,QAAM,mBAAkB,+BAAO,aAAY;AAK3C,QAAM,iBAAiBC,MAAAA,OAAyB,IAAI;AACpD,QAAM,gBAAgBA,MAAAA,OAAO,IAAI;AAKjCC,QAAAA,UAAU,MAAM;AACZ,QAAI,cAAc,SAAS;AACvB,oBAAc,UAAU;AACxB,qBAAe,UAAU;AACzB;AAAA,IACJ;AAEA,UAAM,OAAO,eAAe;AAC5B,UAAM,gBAAgB,eAAe,OAAO,CAAC,WAAU,6BAAO,YAAW,QAAQ,KAAK,CAAC;AACvF,UAAM,aAAa,cAAc,SAAS;AAE1C,QAAI,YAAY;AACZ,qBAAe,UAAU;AAEzB,eAAS,GAAG,cAAc,IAAI,IAAI,KAAI,+BAAO,kBAAiB,CAAA,IAAK,MAAM;AAAA,QACrE,gBAAgB;AAAA,QAChB,aAAa;AAAA,MAAA,CAChB;AAAA,IACL;AAAA,EAEJ,GAAG,CAAC,KAAK,UAAU,OAAO,CAAC,CAAC;AAW5B,QAAM,gBAA2BF,MAAAA,QAAQ,MAAM;AAC3C,UAAM,mBAAmB,QAAQ,OAAkB,CAAC,KAAK,UAAU;AAC/D,YAAM,QAAQ,QAAQ,MAAM,SAAS;AACrC,YAAM,WAAW,MAAM,QAAQ,KAAK,IAC9B,MAAM,SAAS,IACd,UAAU,QAAQ,UAAU,UAAa,UAAU;AAE1D,UAAI,IAAI,MAAM,MAAM,KAAK,IAAI,WAAW,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI;AACjF,aAAO;AAAA,IACX,GAAG,CAAA,CAAE;AAGL,WAAO;AAAA,MACH,GAAG;AAAA,MACH,IAAI,+BAAO,kBAAiB,CAAA;AAAA,IAAC;AAAA,EAGrC,GAAG,CAAC,KAAK,UAAU,OAAO,GAAG,KAAK,UAAU,+BAAO,aAAa,GAAG,sBAAsB,CAAC;AAC1F,UAAQ,IAAI,sDAAsD,aAAa;AAM/E,QAAM,YAAY,KAAK,UAAU,OAAO;AAKxC,SACIF,2BAAAA;AAAAA,IAACC,iBAAAA;AAAAA,IAAA;AAAA,MAEG,SAAS,CAAA;AAAA,MACT,UAAS,+BAAO,YAAW;AAAA,MAC3B;AAAA,MACA,UAAU;AAAA,MACT,GAAI;AAAA,MACL;AAAA,MACA,aAAa;AAAA,IAAA;AAAA,IAPR;AAAA,EAAA;AAUjB;;"}
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
- const actionBar$1 = require("./action-bar-DaUwKb13.js");
4
- const searchableSelect = require("./searchable-select--dhEG2CL.js");
3
+ const actionBar$1 = require("./action-bar-AO3ogsEJ.js");
4
+ const searchableSelect = require("./searchable-select-yROdMxY5.js");
5
5
  require("lodash");
6
6
  const typography = require("./typography-Bqfr1Ksf.js");
7
7
  const actionBar = require("./action-bar-DMv6sqDP.js");
8
8
  const React = require("react");
9
9
  const reactRouterDom = require("react-router-dom");
10
10
  const runtime = require("@erpsquad/common/runtime");
11
- const footer = require("./footer-DnIO-vaU.js");
11
+ const footer = require("./footer-D7PnNU8i.js");
12
12
  const material = require("@mui/material");
13
13
  const gridView = require("./grid-view-C90ukHo3.js");
14
- const useTranslations = require("./use-translations-C0inIl3N.js");
14
+ const useTranslations = require("./use-translations-CUG3OpLf.js");
15
15
  const reactI18next = require("react-i18next");
16
16
  const useApi = require("./useApi-D0VEyAvR.js");
17
17
  const api$1 = require("./api-D3c7E20L.js");
@@ -297,4 +297,4 @@ const Forms = ({ config }) => {
297
297
  ] });
298
298
  };
299
299
  exports.Forms = Forms;
300
- //# sourceMappingURL=FORMS-BvvLxTZ4.js.map
300
+ //# sourceMappingURL=FORMS-B_9QsQ0j.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FORMS-BvvLxTZ4.js","sources":["../../src/components/custom-forms/FORMS.tsx"],"sourcesContent":["import { ActionBar } from '../action-bar';\nimport { MaterialTable } from '../material-table';\nimport { Typography } from '../typography';\nimport { viewTypes } from '../../constants';\nimport { MRT_ColumnOrderState, MRT_SortingState } from \"material-react-table\";\nimport { useState, useEffect, useMemo, useCallback } from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport \"./custom-forms.scss\";\nimport { useAuth } from '@erpsquad/common/runtime';\nimport { Footer } from '../footer/footer';\nimport { IPaginationModel } from '../../types';\nimport { Box } from \"@mui/material\";\nimport GridCard from \"./grid-view/grid-view.js\";\nimport { useAppTranslations } from \"../../hooks/use-translations\";\nimport { useTranslation } from 'react-i18next';\nimport useApi from '../../hooks/useApi';\nimport { getV1FormBuilder, setBaseUrl as setSystemBaseUrl } from '../../api-client/api.system-feature/api';\nimport { getToken } from '../../utils/common';\n\ninterface ActionData {\n label: string;\n position: number;\n}\n\ninterface ModuleConfig {\n filterName: string;\n redirectionPath: string;\n}\n\n\n\nconst INITIAL_ORDER = [\"name\", \"fields\", \"noOfCustomFields\", \"customFields\"];\nconst DEFAULT_ACTION_BAR_DATA = [{ label: 'Table', position: 0 }];\nconst CUSTOM_FIELD_DISPLAY_LIMIT = 5;\n\ninterface FormBuilderState {\n rows: any[];\n isLoading: boolean;\n paginationModel: {\n pageNo: number;\n limit: number;\n totalCount: number;\n };\n}\n\nconst Forms = ({ config }: { config?: any }) => {\n const { t } = useTranslation();\n useAppTranslations(); // Load translations for current module\n const navigate = useNavigate();\n const location = useLocation();\n const { user } = useAuth();\n console.log(\"user.........\", user)\n const { callApi } = useApi();\n\n const [formBuilder, setFormBuilder] = useState<FormBuilderState>({\n rows: [],\n isLoading: false,\n paginationModel: {\n pageNo: 1,\n limit: 10,\n totalCount: 0\n }\n });\n\n // Initialize state with proper defaults and memoization\n const [actionBarData, setActionBarData] = useState<ActionData[]>(() => {\n const formView = localStorage.getItem(\"form-view\");\n return formView ? JSON.parse(formView) : DEFAULT_ACTION_BAR_DATA;\n });\n\n const [search, setSearch] = useState<string>(\"\");\n const [actionBarActiveTab, setActionBarActiveTab] = useState<string>(() =>\n actionBarData?.[0]?.label || viewTypes.TABLE\n );\n const [columnOrder, setColumnOrder] = useState(INITIAL_ORDER);\n const [sorting, setSorting] = useState<MRT_SortingState>([]);\n\n // Memoized computed values to prevent unnecessary recalculations\n const currentModule = useMemo(() => location.pathname.split('/')[2], [location.pathname]);\n\n const modulesConfig = useMemo(() => ({\n ...config\n }), [config]);\n\n const moduleConfig = useMemo(() =>\n modulesConfig[currentModule] || { filterName: '', redirectionPath: '' },\n [currentModule, modulesConfig]\n );\n\n console.log(\"external moduleConfig..........\", moduleConfig)\n const navigationPath = useMemo(() =>\n `/dashboard/${currentModule}${moduleConfig.redirectionPath}`,\n [currentModule, moduleConfig.redirectionPath]\n );\n\n const filters = useMemo(() =>\n `(company_id.eq=${user?.company_id}&module.eq=${moduleConfig.filterName})`,\n [user?.company_id, moduleConfig.filterName]\n );\n\n const paginationData = useMemo(() => {\n const { pageNo, limit, totalCount } = formBuilder.paginationModel;\n const total = limit ? Math.ceil(totalCount / limit) : 0;\n const skip = limit * (pageNo - 1);\n return { total, skip, pageNo, limit };\n }, [formBuilder.paginationModel]);\n\n // Utility function moved outside render to prevent recreation\n const formatText = useCallback((key: string): string => {\n return key\n ? key\n .split(/[:_-]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n : key;\n }, []);\n\n // Memoized event handlers to prevent child re-renders\n const handleColumnOrdering = useCallback((colOrder: MRT_ColumnOrderState) => {\n setColumnOrder(colOrder.slice(1));\n }, []);\n\n const handlePaginationModel = useCallback((model: IPaginationModel) => {\n setFormBuilder(prev => ({\n ...prev,\n paginationModel: {\n ...model,\n totalCount: prev.paginationModel.totalCount\n }\n }));\n }, []);\n\n const handleSearch = useCallback((searchValue: string) => {\n setSearch(searchValue);\n }, []);\n\n const handleRowClick = useCallback((rowData: any) => {\n navigate(navigationPath, {\n state: rowData,\n });\n }, [navigate, navigationPath]);\n\n // Memoized columns definition to prevent recreation on each render\n const columns = useMemo(() => [\n {\n accessorKey: \"name\",\n header: \"Form Name\",\n visible: true,\n Cell: ({ row }: any) =>\n row?.original?.name ? (\n <div\n onClick={() => handleRowClick(row.original)}\n style={{ cursor: 'pointer' }}\n >\n {formatText(row.original.name)}\n </div>\n ) : (\n \"-\"\n ),\n },\n {\n accessorKey: \"fields.length\",\n header: \"No. of Fields\",\n visible: true,\n size: 150\n },\n {\n accessorKey: \"fields\",\n header: \"No. of custom fields\",\n visible: true,\n size: 80,\n Cell: ({ row }: any) =>\n row?.original?.fields ? (\n <div>\n {\n row.original.fields.filter(\n (field: { is_system_field: boolean }) => !field.is_system_field,\n ).length\n }\n </div>\n ) : (\n \"-\"\n ),\n },\n {\n accessorKey: \"fields\",\n header: \"Custom Fields\",\n visible: true,\n Cell: ({ row }: any) => {\n const fields = row?.original?.fields?.filter(\n (field: { is_system_field: boolean; label: string }) =>\n !field?.is_system_field && field?.label,\n ) || [];\n\n if (!fields.length) return '-';\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap', p: 0.5 }}>\n {fields.slice(0, CUSTOM_FIELD_DISPLAY_LIMIT).map((item: any, index: number) => (\n <Typography\n key={`${item.label}-${index}`}\n type=\"s5\"\n weight=\"medium\"\n className=\"forms--CustomField\"\n >\n {item?.label?.includes(\".\") ? t(item.label) : item.label}\n </Typography>\n ))}\n {fields.length > CUSTOM_FIELD_DISPLAY_LIMIT && (\n <Typography\n type=\"s5\"\n weight=\"medium\"\n className=\"forms--CustomField\"\n >\n +{fields.length - CUSTOM_FIELD_DISPLAY_LIMIT} more\n </Typography>\n )}\n </Box>\n );\n }\n },\n ], [formatText, handleRowClick, t]);\n\n // Memoized footer pages to prevent recreation\n const footerPages = useMemo(() => [\n {\n name: 'Default',\n _id: 1,\n data: []\n }\n ], []);\n\n\n const fetchForms = useCallback(async () => {\n console.log(\"moduleConfig.............\", moduleConfig)\n if (!moduleConfig.filterName || !user?.company_id) return;\n\n const sort = sorting?.[0];\n const params = {\n skip: paginationData.skip,\n limit: paginationData.limit,\n search,\n filters,\n ...(sort && { order: `${sort.id}:${sort.desc ? -1 : 1}` }),\n ...getToken(),\n 'x-timezone': getToken()['x-timezone']?.toString() || ''\n };\n console.log(\"params..............\", params)\n\n setFormBuilder(prev => ({ ...prev, isLoading: true }));\n const response = await getV1FormBuilder({\n ...params,\n ...getToken\n })\n console.log(\"response........\", response)\n setFormBuilder({\n rows: response?.data?.form,\n isLoading: false,\n paginationModel: {\n ...formBuilder.paginationModel,\n ...response?.data?.pagination\n }\n });\n\n\n }, [filters,\n paginationData.skip,\n paginationData.limit,\n sorting,\n search,\n moduleConfig.filterName,\n user?.company_id,\n ])\n // Effect for fetching data - optimized with proper dependencies\n useEffect(() => {\n fetchForms()\n }, [\n fetchForms\n ]);\n\n // Effect for setting active tab - only run when actionBarData changes\n useEffect(() => {\n if (actionBarData?.length && actionBarData[0].label !== actionBarActiveTab) {\n setActionBarActiveTab(actionBarData[0].label);\n }\n }, [actionBarData]);\n\n // Effect for localStorage - debounced to prevent excessive writes\n useEffect(() => {\n if (actionBarData?.length) {\n const timeoutId = setTimeout(() => {\n localStorage.setItem(\"form-view\", JSON.stringify(actionBarData));\n }, 300);\n\n return () => clearTimeout(timeoutId);\n }\n }, [actionBarData]);\n\n return (\n <section className=\"forms\">\n <ActionBar\n title=\"Form\"\n button={false}\n data={actionBarData}\n setData={setActionBarData}\n active={actionBarActiveTab}\n setActive={(tab) => {\n setActionBarActiveTab(tab);\n }}\n handleSearch={handleSearch}\n showFilter={false}\n />\n\n {actionBarActiveTab === viewTypes.TABLE && (\n <MaterialTable\n enablePagination={false}\n columnOrder={[\"mrt-row-select\", ...columnOrder]}\n handleColumnOrdering={handleColumnOrdering}\n rows={formBuilder.rows}\n columns={columns}\n totalPages={1}\n paginationModel={{ pageNo: 1, limit: 10 }}\n enableEditing={false}\n states={{ sorting: sorting || [] }}\n onSortingChange={setSorting}\n disableDefaultActionColumn\n getSelectedData={() => { }}\n />\n )}\n\n {actionBarActiveTab === viewTypes.GRID && (\n <GridCard data={formBuilder.rows} config={config} />\n )}\n\n <Footer\n pages={footerPages}\n setPages={() => { }}\n currentPage={1}\n setCurrentPage={() => { }}\n total={paginationData.total}\n paginationModel={{\n pageNo: formBuilder.paginationModel.pageNo,\n limit: formBuilder.paginationModel.limit\n }}\n handlePaginationModel={handlePaginationModel}\n sharedPages={[]}\n resource=\"\"\n savePageConfiguration={() => { }}\n handlePageDelete={() => { }}\n enablePages={false}\n isPaginationDisplayed={true}\n />\n </section>\n );\n};\n\nexport default Forms;"],"names":["useTranslation","useAppTranslations","useNavigate","useLocation","useAuth","useApi","useState","viewTypes","useMemo","useCallback","jsx","jsxs","Box","Typography","_a","getToken","getV1FormBuilder","useEffect","ActionBar","MaterialTable","GridCard","Footer"],"mappings":"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"}
1
+ {"version":3,"file":"FORMS-B_9QsQ0j.js","sources":["../../src/components/custom-forms/FORMS.tsx"],"sourcesContent":["import { ActionBar } from '../action-bar';\nimport { MaterialTable } from '../material-table';\nimport { Typography } from '../typography';\nimport { viewTypes } from '../../constants';\nimport { MRT_ColumnOrderState, MRT_SortingState } from \"material-react-table\";\nimport { useState, useEffect, useMemo, useCallback } from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport \"./custom-forms.scss\";\nimport { useAuth } from '@erpsquad/common/runtime';\nimport { Footer } from '../footer/footer';\nimport { IPaginationModel } from '../../types';\nimport { Box } from \"@mui/material\";\nimport GridCard from \"./grid-view/grid-view.js\";\nimport { useAppTranslations } from \"../../hooks/use-translations\";\nimport { useTranslation } from 'react-i18next';\nimport useApi from '../../hooks/useApi';\nimport { getV1FormBuilder, setBaseUrl as setSystemBaseUrl } from '../../api-client/api.system-feature/api';\nimport { getToken } from '../../utils/common';\n\ninterface ActionData {\n label: string;\n position: number;\n}\n\ninterface ModuleConfig {\n filterName: string;\n redirectionPath: string;\n}\n\n\n\nconst INITIAL_ORDER = [\"name\", \"fields\", \"noOfCustomFields\", \"customFields\"];\nconst DEFAULT_ACTION_BAR_DATA = [{ label: 'Table', position: 0 }];\nconst CUSTOM_FIELD_DISPLAY_LIMIT = 5;\n\ninterface FormBuilderState {\n rows: any[];\n isLoading: boolean;\n paginationModel: {\n pageNo: number;\n limit: number;\n totalCount: number;\n };\n}\n\nconst Forms = ({ config }: { config?: any }) => {\n const { t } = useTranslation();\n useAppTranslations(); // Load translations for current module\n const navigate = useNavigate();\n const location = useLocation();\n const { user } = useAuth();\n console.log(\"user.........\", user)\n const { callApi } = useApi();\n\n const [formBuilder, setFormBuilder] = useState<FormBuilderState>({\n rows: [],\n isLoading: false,\n paginationModel: {\n pageNo: 1,\n limit: 10,\n totalCount: 0\n }\n });\n\n // Initialize state with proper defaults and memoization\n const [actionBarData, setActionBarData] = useState<ActionData[]>(() => {\n const formView = localStorage.getItem(\"form-view\");\n return formView ? JSON.parse(formView) : DEFAULT_ACTION_BAR_DATA;\n });\n\n const [search, setSearch] = useState<string>(\"\");\n const [actionBarActiveTab, setActionBarActiveTab] = useState<string>(() =>\n actionBarData?.[0]?.label || viewTypes.TABLE\n );\n const [columnOrder, setColumnOrder] = useState(INITIAL_ORDER);\n const [sorting, setSorting] = useState<MRT_SortingState>([]);\n\n // Memoized computed values to prevent unnecessary recalculations\n const currentModule = useMemo(() => location.pathname.split('/')[2], [location.pathname]);\n\n const modulesConfig = useMemo(() => ({\n ...config\n }), [config]);\n\n const moduleConfig = useMemo(() =>\n modulesConfig[currentModule] || { filterName: '', redirectionPath: '' },\n [currentModule, modulesConfig]\n );\n\n console.log(\"external moduleConfig..........\", moduleConfig)\n const navigationPath = useMemo(() =>\n `/dashboard/${currentModule}${moduleConfig.redirectionPath}`,\n [currentModule, moduleConfig.redirectionPath]\n );\n\n const filters = useMemo(() =>\n `(company_id.eq=${user?.company_id}&module.eq=${moduleConfig.filterName})`,\n [user?.company_id, moduleConfig.filterName]\n );\n\n const paginationData = useMemo(() => {\n const { pageNo, limit, totalCount } = formBuilder.paginationModel;\n const total = limit ? Math.ceil(totalCount / limit) : 0;\n const skip = limit * (pageNo - 1);\n return { total, skip, pageNo, limit };\n }, [formBuilder.paginationModel]);\n\n // Utility function moved outside render to prevent recreation\n const formatText = useCallback((key: string): string => {\n return key\n ? key\n .split(/[:_-]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n : key;\n }, []);\n\n // Memoized event handlers to prevent child re-renders\n const handleColumnOrdering = useCallback((colOrder: MRT_ColumnOrderState) => {\n setColumnOrder(colOrder.slice(1));\n }, []);\n\n const handlePaginationModel = useCallback((model: IPaginationModel) => {\n setFormBuilder(prev => ({\n ...prev,\n paginationModel: {\n ...model,\n totalCount: prev.paginationModel.totalCount\n }\n }));\n }, []);\n\n const handleSearch = useCallback((searchValue: string) => {\n setSearch(searchValue);\n }, []);\n\n const handleRowClick = useCallback((rowData: any) => {\n navigate(navigationPath, {\n state: rowData,\n });\n }, [navigate, navigationPath]);\n\n // Memoized columns definition to prevent recreation on each render\n const columns = useMemo(() => [\n {\n accessorKey: \"name\",\n header: \"Form Name\",\n visible: true,\n Cell: ({ row }: any) =>\n row?.original?.name ? (\n <div\n onClick={() => handleRowClick(row.original)}\n style={{ cursor: 'pointer' }}\n >\n {formatText(row.original.name)}\n </div>\n ) : (\n \"-\"\n ),\n },\n {\n accessorKey: \"fields.length\",\n header: \"No. of Fields\",\n visible: true,\n size: 150\n },\n {\n accessorKey: \"fields\",\n header: \"No. of custom fields\",\n visible: true,\n size: 80,\n Cell: ({ row }: any) =>\n row?.original?.fields ? (\n <div>\n {\n row.original.fields.filter(\n (field: { is_system_field: boolean }) => !field.is_system_field,\n ).length\n }\n </div>\n ) : (\n \"-\"\n ),\n },\n {\n accessorKey: \"fields\",\n header: \"Custom Fields\",\n visible: true,\n Cell: ({ row }: any) => {\n const fields = row?.original?.fields?.filter(\n (field: { is_system_field: boolean; label: string }) =>\n !field?.is_system_field && field?.label,\n ) || [];\n\n if (!fields.length) return '-';\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap', p: 0.5 }}>\n {fields.slice(0, CUSTOM_FIELD_DISPLAY_LIMIT).map((item: any, index: number) => (\n <Typography\n key={`${item.label}-${index}`}\n type=\"s5\"\n weight=\"medium\"\n className=\"forms--CustomField\"\n >\n {item?.label?.includes(\".\") ? t(item.label) : item.label}\n </Typography>\n ))}\n {fields.length > CUSTOM_FIELD_DISPLAY_LIMIT && (\n <Typography\n type=\"s5\"\n weight=\"medium\"\n className=\"forms--CustomField\"\n >\n +{fields.length - CUSTOM_FIELD_DISPLAY_LIMIT} more\n </Typography>\n )}\n </Box>\n );\n }\n },\n ], [formatText, handleRowClick, t]);\n\n // Memoized footer pages to prevent recreation\n const footerPages = useMemo(() => [\n {\n name: 'Default',\n _id: 1,\n data: []\n }\n ], []);\n\n\n const fetchForms = useCallback(async () => {\n console.log(\"moduleConfig.............\", moduleConfig)\n if (!moduleConfig.filterName || !user?.company_id) return;\n\n const sort = sorting?.[0];\n const params = {\n skip: paginationData.skip,\n limit: paginationData.limit,\n search,\n filters,\n ...(sort && { order: `${sort.id}:${sort.desc ? -1 : 1}` }),\n ...getToken(),\n 'x-timezone': getToken()['x-timezone']?.toString() || ''\n };\n console.log(\"params..............\", params)\n\n setFormBuilder(prev => ({ ...prev, isLoading: true }));\n const response = await getV1FormBuilder({\n ...params,\n ...getToken\n })\n console.log(\"response........\", response)\n setFormBuilder({\n rows: response?.data?.form,\n isLoading: false,\n paginationModel: {\n ...formBuilder.paginationModel,\n ...response?.data?.pagination\n }\n });\n\n\n }, [filters,\n paginationData.skip,\n paginationData.limit,\n sorting,\n search,\n moduleConfig.filterName,\n user?.company_id,\n ])\n // Effect for fetching data - optimized with proper dependencies\n useEffect(() => {\n fetchForms()\n }, [\n fetchForms\n ]);\n\n // Effect for setting active tab - only run when actionBarData changes\n useEffect(() => {\n if (actionBarData?.length && actionBarData[0].label !== actionBarActiveTab) {\n setActionBarActiveTab(actionBarData[0].label);\n }\n }, [actionBarData]);\n\n // Effect for localStorage - debounced to prevent excessive writes\n useEffect(() => {\n if (actionBarData?.length) {\n const timeoutId = setTimeout(() => {\n localStorage.setItem(\"form-view\", JSON.stringify(actionBarData));\n }, 300);\n\n return () => clearTimeout(timeoutId);\n }\n }, [actionBarData]);\n\n return (\n <section className=\"forms\">\n <ActionBar\n title=\"Form\"\n button={false}\n data={actionBarData}\n setData={setActionBarData}\n active={actionBarActiveTab}\n setActive={(tab) => {\n setActionBarActiveTab(tab);\n }}\n handleSearch={handleSearch}\n showFilter={false}\n />\n\n {actionBarActiveTab === viewTypes.TABLE && (\n <MaterialTable\n enablePagination={false}\n columnOrder={[\"mrt-row-select\", ...columnOrder]}\n handleColumnOrdering={handleColumnOrdering}\n rows={formBuilder.rows}\n columns={columns}\n totalPages={1}\n paginationModel={{ pageNo: 1, limit: 10 }}\n enableEditing={false}\n states={{ sorting: sorting || [] }}\n onSortingChange={setSorting}\n disableDefaultActionColumn\n getSelectedData={() => { }}\n />\n )}\n\n {actionBarActiveTab === viewTypes.GRID && (\n <GridCard data={formBuilder.rows} config={config} />\n )}\n\n <Footer\n pages={footerPages}\n setPages={() => { }}\n currentPage={1}\n setCurrentPage={() => { }}\n total={paginationData.total}\n paginationModel={{\n pageNo: formBuilder.paginationModel.pageNo,\n limit: formBuilder.paginationModel.limit\n }}\n handlePaginationModel={handlePaginationModel}\n sharedPages={[]}\n resource=\"\"\n savePageConfiguration={() => { }}\n handlePageDelete={() => { }}\n enablePages={false}\n isPaginationDisplayed={true}\n />\n </section>\n );\n};\n\nexport default Forms;"],"names":["useTranslation","useAppTranslations","useNavigate","useLocation","useAuth","useApi","useState","viewTypes","useMemo","useCallback","jsx","jsxs","Box","Typography","_a","getToken","getV1FormBuilder","useEffect","ActionBar","MaterialTable","GridCard","Footer"],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { A as ActionBar } from "./action-bar-BY6HTsH2.esm.js";
3
- import { M as MaterialTable } from "./searchable-select-DR-q54Zn.esm.js";
2
+ import { A as ActionBar } from "./action-bar-D9G1pWQA.esm.js";
3
+ import { M as MaterialTable } from "./searchable-select-DAxe2dX5.esm.js";
4
4
  import "lodash";
5
5
  import { T as Typography } from "./typography-CG_A0iOJ.esm.js";
6
6
  import { v as viewTypes } from "./action-bar-BsXTcYpL.esm.js";
7
7
  import { useState, useMemo, useCallback, useEffect } from "react";
8
8
  import { useNavigate, useLocation } from "react-router-dom";
9
9
  import { useAuth } from "@erpsquad/common/runtime";
10
- import { F as Footer } from "./footer-CNvyE8xQ.esm.js";
10
+ import { F as Footer } from "./footer-oWkachwS.esm.js";
11
11
  import { Box } from "@mui/material";
12
12
  import { G as GridCard } from "./grid-view-BKEPKlKk.esm.js";
13
- import { u as useAppTranslations } from "./use-translations-DM1EocaI.esm.js";
13
+ import { u as useAppTranslations } from "./use-translations-Gnp2IAjX.esm.js";
14
14
  import { useTranslation } from "react-i18next";
15
15
  import { u as useApi } from "./useApi-9KP8aPjh.esm.js";
16
16
  import { q as getV1FormBuilder } from "./api-DBmWILBN.esm.js";
@@ -298,4 +298,4 @@ const Forms = ({ config }) => {
298
298
  export {
299
299
  Forms as F
300
300
  };
301
- //# sourceMappingURL=FORMS-CTCStVJN.esm.js.map
301
+ //# sourceMappingURL=FORMS-BgGb794W.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FORMS-CTCStVJN.esm.js","sources":["../../src/components/custom-forms/FORMS.tsx"],"sourcesContent":["import { ActionBar } from '../action-bar';\nimport { MaterialTable } from '../material-table';\nimport { Typography } from '../typography';\nimport { viewTypes } from '../../constants';\nimport { MRT_ColumnOrderState, MRT_SortingState } from \"material-react-table\";\nimport { useState, useEffect, useMemo, useCallback } from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport \"./custom-forms.scss\";\nimport { useAuth } from '@erpsquad/common/runtime';\nimport { Footer } from '../footer/footer';\nimport { IPaginationModel } from '../../types';\nimport { Box } from \"@mui/material\";\nimport GridCard from \"./grid-view/grid-view.js\";\nimport { useAppTranslations } from \"../../hooks/use-translations\";\nimport { useTranslation } from 'react-i18next';\nimport useApi from '../../hooks/useApi';\nimport { getV1FormBuilder, setBaseUrl as setSystemBaseUrl } from '../../api-client/api.system-feature/api';\nimport { getToken } from '../../utils/common';\n\ninterface ActionData {\n label: string;\n position: number;\n}\n\ninterface ModuleConfig {\n filterName: string;\n redirectionPath: string;\n}\n\n\n\nconst INITIAL_ORDER = [\"name\", \"fields\", \"noOfCustomFields\", \"customFields\"];\nconst DEFAULT_ACTION_BAR_DATA = [{ label: 'Table', position: 0 }];\nconst CUSTOM_FIELD_DISPLAY_LIMIT = 5;\n\ninterface FormBuilderState {\n rows: any[];\n isLoading: boolean;\n paginationModel: {\n pageNo: number;\n limit: number;\n totalCount: number;\n };\n}\n\nconst Forms = ({ config }: { config?: any }) => {\n const { t } = useTranslation();\n useAppTranslations(); // Load translations for current module\n const navigate = useNavigate();\n const location = useLocation();\n const { user } = useAuth();\n console.log(\"user.........\", user)\n const { callApi } = useApi();\n\n const [formBuilder, setFormBuilder] = useState<FormBuilderState>({\n rows: [],\n isLoading: false,\n paginationModel: {\n pageNo: 1,\n limit: 10,\n totalCount: 0\n }\n });\n\n // Initialize state with proper defaults and memoization\n const [actionBarData, setActionBarData] = useState<ActionData[]>(() => {\n const formView = localStorage.getItem(\"form-view\");\n return formView ? JSON.parse(formView) : DEFAULT_ACTION_BAR_DATA;\n });\n\n const [search, setSearch] = useState<string>(\"\");\n const [actionBarActiveTab, setActionBarActiveTab] = useState<string>(() =>\n actionBarData?.[0]?.label || viewTypes.TABLE\n );\n const [columnOrder, setColumnOrder] = useState(INITIAL_ORDER);\n const [sorting, setSorting] = useState<MRT_SortingState>([]);\n\n // Memoized computed values to prevent unnecessary recalculations\n const currentModule = useMemo(() => location.pathname.split('/')[2], [location.pathname]);\n\n const modulesConfig = useMemo(() => ({\n ...config\n }), [config]);\n\n const moduleConfig = useMemo(() =>\n modulesConfig[currentModule] || { filterName: '', redirectionPath: '' },\n [currentModule, modulesConfig]\n );\n\n console.log(\"external moduleConfig..........\", moduleConfig)\n const navigationPath = useMemo(() =>\n `/dashboard/${currentModule}${moduleConfig.redirectionPath}`,\n [currentModule, moduleConfig.redirectionPath]\n );\n\n const filters = useMemo(() =>\n `(company_id.eq=${user?.company_id}&module.eq=${moduleConfig.filterName})`,\n [user?.company_id, moduleConfig.filterName]\n );\n\n const paginationData = useMemo(() => {\n const { pageNo, limit, totalCount } = formBuilder.paginationModel;\n const total = limit ? Math.ceil(totalCount / limit) : 0;\n const skip = limit * (pageNo - 1);\n return { total, skip, pageNo, limit };\n }, [formBuilder.paginationModel]);\n\n // Utility function moved outside render to prevent recreation\n const formatText = useCallback((key: string): string => {\n return key\n ? key\n .split(/[:_-]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n : key;\n }, []);\n\n // Memoized event handlers to prevent child re-renders\n const handleColumnOrdering = useCallback((colOrder: MRT_ColumnOrderState) => {\n setColumnOrder(colOrder.slice(1));\n }, []);\n\n const handlePaginationModel = useCallback((model: IPaginationModel) => {\n setFormBuilder(prev => ({\n ...prev,\n paginationModel: {\n ...model,\n totalCount: prev.paginationModel.totalCount\n }\n }));\n }, []);\n\n const handleSearch = useCallback((searchValue: string) => {\n setSearch(searchValue);\n }, []);\n\n const handleRowClick = useCallback((rowData: any) => {\n navigate(navigationPath, {\n state: rowData,\n });\n }, [navigate, navigationPath]);\n\n // Memoized columns definition to prevent recreation on each render\n const columns = useMemo(() => [\n {\n accessorKey: \"name\",\n header: \"Form Name\",\n visible: true,\n Cell: ({ row }: any) =>\n row?.original?.name ? (\n <div\n onClick={() => handleRowClick(row.original)}\n style={{ cursor: 'pointer' }}\n >\n {formatText(row.original.name)}\n </div>\n ) : (\n \"-\"\n ),\n },\n {\n accessorKey: \"fields.length\",\n header: \"No. of Fields\",\n visible: true,\n size: 150\n },\n {\n accessorKey: \"fields\",\n header: \"No. of custom fields\",\n visible: true,\n size: 80,\n Cell: ({ row }: any) =>\n row?.original?.fields ? (\n <div>\n {\n row.original.fields.filter(\n (field: { is_system_field: boolean }) => !field.is_system_field,\n ).length\n }\n </div>\n ) : (\n \"-\"\n ),\n },\n {\n accessorKey: \"fields\",\n header: \"Custom Fields\",\n visible: true,\n Cell: ({ row }: any) => {\n const fields = row?.original?.fields?.filter(\n (field: { is_system_field: boolean; label: string }) =>\n !field?.is_system_field && field?.label,\n ) || [];\n\n if (!fields.length) return '-';\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap', p: 0.5 }}>\n {fields.slice(0, CUSTOM_FIELD_DISPLAY_LIMIT).map((item: any, index: number) => (\n <Typography\n key={`${item.label}-${index}`}\n type=\"s5\"\n weight=\"medium\"\n className=\"forms--CustomField\"\n >\n {item?.label?.includes(\".\") ? t(item.label) : item.label}\n </Typography>\n ))}\n {fields.length > CUSTOM_FIELD_DISPLAY_LIMIT && (\n <Typography\n type=\"s5\"\n weight=\"medium\"\n className=\"forms--CustomField\"\n >\n +{fields.length - CUSTOM_FIELD_DISPLAY_LIMIT} more\n </Typography>\n )}\n </Box>\n );\n }\n },\n ], [formatText, handleRowClick, t]);\n\n // Memoized footer pages to prevent recreation\n const footerPages = useMemo(() => [\n {\n name: 'Default',\n _id: 1,\n data: []\n }\n ], []);\n\n\n const fetchForms = useCallback(async () => {\n console.log(\"moduleConfig.............\", moduleConfig)\n if (!moduleConfig.filterName || !user?.company_id) return;\n\n const sort = sorting?.[0];\n const params = {\n skip: paginationData.skip,\n limit: paginationData.limit,\n search,\n filters,\n ...(sort && { order: `${sort.id}:${sort.desc ? -1 : 1}` }),\n ...getToken(),\n 'x-timezone': getToken()['x-timezone']?.toString() || ''\n };\n console.log(\"params..............\", params)\n\n setFormBuilder(prev => ({ ...prev, isLoading: true }));\n const response = await getV1FormBuilder({\n ...params,\n ...getToken\n })\n console.log(\"response........\", response)\n setFormBuilder({\n rows: response?.data?.form,\n isLoading: false,\n paginationModel: {\n ...formBuilder.paginationModel,\n ...response?.data?.pagination\n }\n });\n\n\n }, [filters,\n paginationData.skip,\n paginationData.limit,\n sorting,\n search,\n moduleConfig.filterName,\n user?.company_id,\n ])\n // Effect for fetching data - optimized with proper dependencies\n useEffect(() => {\n fetchForms()\n }, [\n fetchForms\n ]);\n\n // Effect for setting active tab - only run when actionBarData changes\n useEffect(() => {\n if (actionBarData?.length && actionBarData[0].label !== actionBarActiveTab) {\n setActionBarActiveTab(actionBarData[0].label);\n }\n }, [actionBarData]);\n\n // Effect for localStorage - debounced to prevent excessive writes\n useEffect(() => {\n if (actionBarData?.length) {\n const timeoutId = setTimeout(() => {\n localStorage.setItem(\"form-view\", JSON.stringify(actionBarData));\n }, 300);\n\n return () => clearTimeout(timeoutId);\n }\n }, [actionBarData]);\n\n return (\n <section className=\"forms\">\n <ActionBar\n title=\"Form\"\n button={false}\n data={actionBarData}\n setData={setActionBarData}\n active={actionBarActiveTab}\n setActive={(tab) => {\n setActionBarActiveTab(tab);\n }}\n handleSearch={handleSearch}\n showFilter={false}\n />\n\n {actionBarActiveTab === viewTypes.TABLE && (\n <MaterialTable\n enablePagination={false}\n columnOrder={[\"mrt-row-select\", ...columnOrder]}\n handleColumnOrdering={handleColumnOrdering}\n rows={formBuilder.rows}\n columns={columns}\n totalPages={1}\n paginationModel={{ pageNo: 1, limit: 10 }}\n enableEditing={false}\n states={{ sorting: sorting || [] }}\n onSortingChange={setSorting}\n disableDefaultActionColumn\n getSelectedData={() => { }}\n />\n )}\n\n {actionBarActiveTab === viewTypes.GRID && (\n <GridCard data={formBuilder.rows} config={config} />\n )}\n\n <Footer\n pages={footerPages}\n setPages={() => { }}\n currentPage={1}\n setCurrentPage={() => { }}\n total={paginationData.total}\n paginationModel={{\n pageNo: formBuilder.paginationModel.pageNo,\n limit: formBuilder.paginationModel.limit\n }}\n handlePaginationModel={handlePaginationModel}\n sharedPages={[]}\n resource=\"\"\n savePageConfiguration={() => { }}\n handlePageDelete={() => { }}\n enablePages={false}\n isPaginationDisplayed={true}\n />\n </section>\n );\n};\n\nexport default Forms;"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"FORMS-BgGb794W.esm.js","sources":["../../src/components/custom-forms/FORMS.tsx"],"sourcesContent":["import { ActionBar } from '../action-bar';\nimport { MaterialTable } from '../material-table';\nimport { Typography } from '../typography';\nimport { viewTypes } from '../../constants';\nimport { MRT_ColumnOrderState, MRT_SortingState } from \"material-react-table\";\nimport { useState, useEffect, useMemo, useCallback } from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport \"./custom-forms.scss\";\nimport { useAuth } from '@erpsquad/common/runtime';\nimport { Footer } from '../footer/footer';\nimport { IPaginationModel } from '../../types';\nimport { Box } from \"@mui/material\";\nimport GridCard from \"./grid-view/grid-view.js\";\nimport { useAppTranslations } from \"../../hooks/use-translations\";\nimport { useTranslation } from 'react-i18next';\nimport useApi from '../../hooks/useApi';\nimport { getV1FormBuilder, setBaseUrl as setSystemBaseUrl } from '../../api-client/api.system-feature/api';\nimport { getToken } from '../../utils/common';\n\ninterface ActionData {\n label: string;\n position: number;\n}\n\ninterface ModuleConfig {\n filterName: string;\n redirectionPath: string;\n}\n\n\n\nconst INITIAL_ORDER = [\"name\", \"fields\", \"noOfCustomFields\", \"customFields\"];\nconst DEFAULT_ACTION_BAR_DATA = [{ label: 'Table', position: 0 }];\nconst CUSTOM_FIELD_DISPLAY_LIMIT = 5;\n\ninterface FormBuilderState {\n rows: any[];\n isLoading: boolean;\n paginationModel: {\n pageNo: number;\n limit: number;\n totalCount: number;\n };\n}\n\nconst Forms = ({ config }: { config?: any }) => {\n const { t } = useTranslation();\n useAppTranslations(); // Load translations for current module\n const navigate = useNavigate();\n const location = useLocation();\n const { user } = useAuth();\n console.log(\"user.........\", user)\n const { callApi } = useApi();\n\n const [formBuilder, setFormBuilder] = useState<FormBuilderState>({\n rows: [],\n isLoading: false,\n paginationModel: {\n pageNo: 1,\n limit: 10,\n totalCount: 0\n }\n });\n\n // Initialize state with proper defaults and memoization\n const [actionBarData, setActionBarData] = useState<ActionData[]>(() => {\n const formView = localStorage.getItem(\"form-view\");\n return formView ? JSON.parse(formView) : DEFAULT_ACTION_BAR_DATA;\n });\n\n const [search, setSearch] = useState<string>(\"\");\n const [actionBarActiveTab, setActionBarActiveTab] = useState<string>(() =>\n actionBarData?.[0]?.label || viewTypes.TABLE\n );\n const [columnOrder, setColumnOrder] = useState(INITIAL_ORDER);\n const [sorting, setSorting] = useState<MRT_SortingState>([]);\n\n // Memoized computed values to prevent unnecessary recalculations\n const currentModule = useMemo(() => location.pathname.split('/')[2], [location.pathname]);\n\n const modulesConfig = useMemo(() => ({\n ...config\n }), [config]);\n\n const moduleConfig = useMemo(() =>\n modulesConfig[currentModule] || { filterName: '', redirectionPath: '' },\n [currentModule, modulesConfig]\n );\n\n console.log(\"external moduleConfig..........\", moduleConfig)\n const navigationPath = useMemo(() =>\n `/dashboard/${currentModule}${moduleConfig.redirectionPath}`,\n [currentModule, moduleConfig.redirectionPath]\n );\n\n const filters = useMemo(() =>\n `(company_id.eq=${user?.company_id}&module.eq=${moduleConfig.filterName})`,\n [user?.company_id, moduleConfig.filterName]\n );\n\n const paginationData = useMemo(() => {\n const { pageNo, limit, totalCount } = formBuilder.paginationModel;\n const total = limit ? Math.ceil(totalCount / limit) : 0;\n const skip = limit * (pageNo - 1);\n return { total, skip, pageNo, limit };\n }, [formBuilder.paginationModel]);\n\n // Utility function moved outside render to prevent recreation\n const formatText = useCallback((key: string): string => {\n return key\n ? key\n .split(/[:_-]/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n : key;\n }, []);\n\n // Memoized event handlers to prevent child re-renders\n const handleColumnOrdering = useCallback((colOrder: MRT_ColumnOrderState) => {\n setColumnOrder(colOrder.slice(1));\n }, []);\n\n const handlePaginationModel = useCallback((model: IPaginationModel) => {\n setFormBuilder(prev => ({\n ...prev,\n paginationModel: {\n ...model,\n totalCount: prev.paginationModel.totalCount\n }\n }));\n }, []);\n\n const handleSearch = useCallback((searchValue: string) => {\n setSearch(searchValue);\n }, []);\n\n const handleRowClick = useCallback((rowData: any) => {\n navigate(navigationPath, {\n state: rowData,\n });\n }, [navigate, navigationPath]);\n\n // Memoized columns definition to prevent recreation on each render\n const columns = useMemo(() => [\n {\n accessorKey: \"name\",\n header: \"Form Name\",\n visible: true,\n Cell: ({ row }: any) =>\n row?.original?.name ? (\n <div\n onClick={() => handleRowClick(row.original)}\n style={{ cursor: 'pointer' }}\n >\n {formatText(row.original.name)}\n </div>\n ) : (\n \"-\"\n ),\n },\n {\n accessorKey: \"fields.length\",\n header: \"No. of Fields\",\n visible: true,\n size: 150\n },\n {\n accessorKey: \"fields\",\n header: \"No. of custom fields\",\n visible: true,\n size: 80,\n Cell: ({ row }: any) =>\n row?.original?.fields ? (\n <div>\n {\n row.original.fields.filter(\n (field: { is_system_field: boolean }) => !field.is_system_field,\n ).length\n }\n </div>\n ) : (\n \"-\"\n ),\n },\n {\n accessorKey: \"fields\",\n header: \"Custom Fields\",\n visible: true,\n Cell: ({ row }: any) => {\n const fields = row?.original?.fields?.filter(\n (field: { is_system_field: boolean; label: string }) =>\n !field?.is_system_field && field?.label,\n ) || [];\n\n if (!fields.length) return '-';\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexWrap: 'wrap', p: 0.5 }}>\n {fields.slice(0, CUSTOM_FIELD_DISPLAY_LIMIT).map((item: any, index: number) => (\n <Typography\n key={`${item.label}-${index}`}\n type=\"s5\"\n weight=\"medium\"\n className=\"forms--CustomField\"\n >\n {item?.label?.includes(\".\") ? t(item.label) : item.label}\n </Typography>\n ))}\n {fields.length > CUSTOM_FIELD_DISPLAY_LIMIT && (\n <Typography\n type=\"s5\"\n weight=\"medium\"\n className=\"forms--CustomField\"\n >\n +{fields.length - CUSTOM_FIELD_DISPLAY_LIMIT} more\n </Typography>\n )}\n </Box>\n );\n }\n },\n ], [formatText, handleRowClick, t]);\n\n // Memoized footer pages to prevent recreation\n const footerPages = useMemo(() => [\n {\n name: 'Default',\n _id: 1,\n data: []\n }\n ], []);\n\n\n const fetchForms = useCallback(async () => {\n console.log(\"moduleConfig.............\", moduleConfig)\n if (!moduleConfig.filterName || !user?.company_id) return;\n\n const sort = sorting?.[0];\n const params = {\n skip: paginationData.skip,\n limit: paginationData.limit,\n search,\n filters,\n ...(sort && { order: `${sort.id}:${sort.desc ? -1 : 1}` }),\n ...getToken(),\n 'x-timezone': getToken()['x-timezone']?.toString() || ''\n };\n console.log(\"params..............\", params)\n\n setFormBuilder(prev => ({ ...prev, isLoading: true }));\n const response = await getV1FormBuilder({\n ...params,\n ...getToken\n })\n console.log(\"response........\", response)\n setFormBuilder({\n rows: response?.data?.form,\n isLoading: false,\n paginationModel: {\n ...formBuilder.paginationModel,\n ...response?.data?.pagination\n }\n });\n\n\n }, [filters,\n paginationData.skip,\n paginationData.limit,\n sorting,\n search,\n moduleConfig.filterName,\n user?.company_id,\n ])\n // Effect for fetching data - optimized with proper dependencies\n useEffect(() => {\n fetchForms()\n }, [\n fetchForms\n ]);\n\n // Effect for setting active tab - only run when actionBarData changes\n useEffect(() => {\n if (actionBarData?.length && actionBarData[0].label !== actionBarActiveTab) {\n setActionBarActiveTab(actionBarData[0].label);\n }\n }, [actionBarData]);\n\n // Effect for localStorage - debounced to prevent excessive writes\n useEffect(() => {\n if (actionBarData?.length) {\n const timeoutId = setTimeout(() => {\n localStorage.setItem(\"form-view\", JSON.stringify(actionBarData));\n }, 300);\n\n return () => clearTimeout(timeoutId);\n }\n }, [actionBarData]);\n\n return (\n <section className=\"forms\">\n <ActionBar\n title=\"Form\"\n button={false}\n data={actionBarData}\n setData={setActionBarData}\n active={actionBarActiveTab}\n setActive={(tab) => {\n setActionBarActiveTab(tab);\n }}\n handleSearch={handleSearch}\n showFilter={false}\n />\n\n {actionBarActiveTab === viewTypes.TABLE && (\n <MaterialTable\n enablePagination={false}\n columnOrder={[\"mrt-row-select\", ...columnOrder]}\n handleColumnOrdering={handleColumnOrdering}\n rows={formBuilder.rows}\n columns={columns}\n totalPages={1}\n paginationModel={{ pageNo: 1, limit: 10 }}\n enableEditing={false}\n states={{ sorting: sorting || [] }}\n onSortingChange={setSorting}\n disableDefaultActionColumn\n getSelectedData={() => { }}\n />\n )}\n\n {actionBarActiveTab === viewTypes.GRID && (\n <GridCard data={formBuilder.rows} config={config} />\n )}\n\n <Footer\n pages={footerPages}\n setPages={() => { }}\n currentPage={1}\n setCurrentPage={() => { }}\n total={paginationData.total}\n paginationModel={{\n pageNo: formBuilder.paginationModel.pageNo,\n limit: formBuilder.paginationModel.limit\n }}\n handlePaginationModel={handlePaginationModel}\n sharedPages={[]}\n resource=\"\"\n savePageConfiguration={() => { }}\n handlePageDelete={() => { }}\n enablePages={false}\n isPaginationDisplayed={true}\n />\n </section>\n );\n};\n\nexport default Forms;"],"names":["_a"],"mappings":"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"}
@@ -3,8 +3,8 @@ const jsxRuntime = require("react/jsx-runtime");
3
3
  const React = require("react");
4
4
  const material = require("@mui/material");
5
5
  const ERPUIProvider = require("./ERPUIProvider-DvW3nMzW.js");
6
- const shareModalEnhanced = require("./share-modal-enhanced-D2dMDnYj.js");
7
- const headerEnhanced = require("./header-enhanced-CTWeMXmz.js");
6
+ const shareModalEnhanced = require("./share-modal-enhanced-ChDKNe5b.js");
7
+ const headerEnhanced = require("./header-enhanced-DrNWfa82.js");
8
8
  const FlexibleReduxExample = () => {
9
9
  const [useRedux, setUseRedux] = React.useState(false);
10
10
  const [showShareModal, setShowShareModal] = React.useState(false);
@@ -145,4 +145,4 @@ const FlexibleReduxExample = () => {
145
145
  ] }) });
146
146
  };
147
147
  exports.FlexibleReduxExample = FlexibleReduxExample;
148
- //# sourceMappingURL=FlexibleReduxExample-2rKuFI8o.js.map
148
+ //# sourceMappingURL=FlexibleReduxExample-C2xFVH1K.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlexibleReduxExample-2rKuFI8o.js","sources":["../../src/components/examples/FlexibleReduxExample.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Box, Button, Typography, Switch, FormControlLabel } from '@mui/material';\nimport { ERPUIProvider } from '../providers/ERPUIProvider';\nimport ShareModalEnhanced from '../share-modal/share-modal-enhanced';\nimport HeaderEnhanced from '../header/header-enhanced';\n\n/**\n * Example component demonstrating flexible Redux usage\n * This shows how components can work with or without Redux\n */\nconst FlexibleReduxExample: React.FC = () => {\n const [useRedux, setUseRedux] = useState(false);\n const [showShareModal, setShowShareModal] = useState(false);\n \n // Mock data for non-Redux usage\n const [users] = useState([\n { id: 1, first_name: 'John', last_name: 'Doe', label: 'John Doe', value: 1 },\n { id: 2, first_name: 'Jane', last_name: 'Smith', label: 'Jane Smith', value: 2 },\n ]);\n \n const [departments] = useState([\n { id: 1, name: 'Engineering', label: 'Engineering', value: 1 },\n { id: 2, name: 'Marketing', label: 'Marketing', value: 2 },\n ]);\n \n const [languages] = useState([\n { code: 'en', label: 'English', direction: 'ltr' },\n { code: 'es', label: 'Spanish', direction: 'ltr' },\n { code: 'ar', label: 'Arabic', direction: 'rtl' },\n ]);\n \n const [currentLanguage, setCurrentLanguage] = useState(languages[0]);\n const [loading, setLoading] = useState(false);\n\n // Mock API functions\n const fetchUsersAndDepartments = async () => {\n setLoading(true);\n // Simulate API call\n await new Promise(resolve => setTimeout(resolve, 1000));\n setLoading(false);\n };\n\n const handleLanguageChange = (languageCode: string) => {\n const language = languages.find(lang => lang.code === languageCode);\n if (language) {\n setCurrentLanguage(language);\n }\n };\n\n const handleShareSubmit = (data: any) => {\n setShowShareModal(false);\n };\n\n return (\n <ERPUIProvider useRedux={useRedux}>\n <Box sx={{ p: 3 }}>\n <Typography variant=\"h4\" gutterBottom>\n Flexible Redux Integration Example\n </Typography>\n \n <Typography variant=\"body1\" sx={{ mb: 2 }}>\n This example demonstrates how ERP UI Library components can work with or without Redux.\n Toggle the switch below to see the difference.\n </Typography>\n\n <FormControlLabel\n control={\n <Switch\n checked={useRedux}\n onChange={(e) => setUseRedux(e.target.checked)}\n />\n }\n label={`Use Redux: ${useRedux ? 'Enabled' : 'Disabled'}`}\n sx={{ mb: 3 }}\n />\n\n <Box sx={{ mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Current Mode: {useRedux ? 'Redux-based' : 'Prop-based'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {useRedux \n ? 'Components are using Redux for state management'\n : 'Components are using props and local state for data'\n }\n </Typography>\n </Box>\n\n {/* Header Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2, mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Header Component\n </Typography>\n <HeaderEnhanced\n useRedux={useRedux}\n languages={useRedux ? undefined : languages}\n currentLanguage={useRedux ? undefined : currentLanguage}\n languagesLoading={useRedux ? undefined : loading}\n onLanguageChange={useRedux ? undefined : handleLanguageChange}\n onFetchLanguages={useRedux ? undefined : fetchUsersAndDepartments}\n />\n </Box>\n\n {/* Share Modal Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2, mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Share Modal Component\n </Typography>\n <Button\n variant=\"contained\"\n onClick={() => setShowShareModal(true)}\n sx={{ mb: 2 }}\n >\n Open Share Modal\n </Button>\n \n <ShareModalEnhanced\n open={showShareModal}\n onClose={() => setShowShareModal(false)}\n title=\"Share Document\"\n toggleSwitch={true}\n onSubmit={handleShareSubmit}\n useRedux={useRedux}\n users={useRedux ? undefined : users}\n departments={useRedux ? undefined : departments}\n loading={useRedux ? undefined : loading}\n onFetchUsersAndDepartments={useRedux ? undefined : fetchUsersAndDepartments}\n />\n </Box>\n\n {/* Code Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2 }}>\n <Typography variant=\"h6\" gutterBottom>\n Code Example\n </Typography>\n <Box\n component=\"pre\"\n sx={{\n backgroundColor: 'grey.100',\n p: 2,\n borderRadius: 1,\n overflow: 'auto',\n fontSize: '0.875rem',\n }}\n >\n {useRedux ? `\n// Redux-based usage\n<ERPUIProvider useRedux={true} reduxStore={store} apiClient={apiClient}>\n <HeaderEnhanced useRedux={true} />\n <ShareModalEnhanced useRedux={true} />\n</ERPUIProvider>\n ` : `\n// Prop-based usage\n<ERPUIProvider useRedux={false}>\n <HeaderEnhanced\n useRedux={false}\n languages={languages}\n currentLanguage={currentLanguage}\n onLanguageChange={handleLanguageChange}\n />\n <ShareModalEnhanced\n useRedux={false}\n users={users}\n departments={departments}\n loading={loading}\n onFetchUsersAndDepartments={fetchUsersAndDepartments}\n />\n</ERPUIProvider>\n `}\n </Box>\n </Box>\n </Box>\n </ERPUIProvider>\n );\n};\n\nexport default FlexibleReduxExample;"],"names":["useState","jsx","ERPUIProvider","jsxs","Box","Typography","FormControlLabel","Switch","HeaderEnhanced","Button","ShareModalEnhanced"],"mappings":"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"}
1
+ {"version":3,"file":"FlexibleReduxExample-C2xFVH1K.js","sources":["../../src/components/examples/FlexibleReduxExample.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Box, Button, Typography, Switch, FormControlLabel } from '@mui/material';\nimport { ERPUIProvider } from '../providers/ERPUIProvider';\nimport ShareModalEnhanced from '../share-modal/share-modal-enhanced';\nimport HeaderEnhanced from '../header/header-enhanced';\n\n/**\n * Example component demonstrating flexible Redux usage\n * This shows how components can work with or without Redux\n */\nconst FlexibleReduxExample: React.FC = () => {\n const [useRedux, setUseRedux] = useState(false);\n const [showShareModal, setShowShareModal] = useState(false);\n \n // Mock data for non-Redux usage\n const [users] = useState([\n { id: 1, first_name: 'John', last_name: 'Doe', label: 'John Doe', value: 1 },\n { id: 2, first_name: 'Jane', last_name: 'Smith', label: 'Jane Smith', value: 2 },\n ]);\n \n const [departments] = useState([\n { id: 1, name: 'Engineering', label: 'Engineering', value: 1 },\n { id: 2, name: 'Marketing', label: 'Marketing', value: 2 },\n ]);\n \n const [languages] = useState([\n { code: 'en', label: 'English', direction: 'ltr' },\n { code: 'es', label: 'Spanish', direction: 'ltr' },\n { code: 'ar', label: 'Arabic', direction: 'rtl' },\n ]);\n \n const [currentLanguage, setCurrentLanguage] = useState(languages[0]);\n const [loading, setLoading] = useState(false);\n\n // Mock API functions\n const fetchUsersAndDepartments = async () => {\n setLoading(true);\n // Simulate API call\n await new Promise(resolve => setTimeout(resolve, 1000));\n setLoading(false);\n };\n\n const handleLanguageChange = (languageCode: string) => {\n const language = languages.find(lang => lang.code === languageCode);\n if (language) {\n setCurrentLanguage(language);\n }\n };\n\n const handleShareSubmit = (data: any) => {\n setShowShareModal(false);\n };\n\n return (\n <ERPUIProvider useRedux={useRedux}>\n <Box sx={{ p: 3 }}>\n <Typography variant=\"h4\" gutterBottom>\n Flexible Redux Integration Example\n </Typography>\n \n <Typography variant=\"body1\" sx={{ mb: 2 }}>\n This example demonstrates how ERP UI Library components can work with or without Redux.\n Toggle the switch below to see the difference.\n </Typography>\n\n <FormControlLabel\n control={\n <Switch\n checked={useRedux}\n onChange={(e) => setUseRedux(e.target.checked)}\n />\n }\n label={`Use Redux: ${useRedux ? 'Enabled' : 'Disabled'}`}\n sx={{ mb: 3 }}\n />\n\n <Box sx={{ mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Current Mode: {useRedux ? 'Redux-based' : 'Prop-based'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {useRedux \n ? 'Components are using Redux for state management'\n : 'Components are using props and local state for data'\n }\n </Typography>\n </Box>\n\n {/* Header Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2, mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Header Component\n </Typography>\n <HeaderEnhanced\n useRedux={useRedux}\n languages={useRedux ? undefined : languages}\n currentLanguage={useRedux ? undefined : currentLanguage}\n languagesLoading={useRedux ? undefined : loading}\n onLanguageChange={useRedux ? undefined : handleLanguageChange}\n onFetchLanguages={useRedux ? undefined : fetchUsersAndDepartments}\n />\n </Box>\n\n {/* Share Modal Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2, mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Share Modal Component\n </Typography>\n <Button\n variant=\"contained\"\n onClick={() => setShowShareModal(true)}\n sx={{ mb: 2 }}\n >\n Open Share Modal\n </Button>\n \n <ShareModalEnhanced\n open={showShareModal}\n onClose={() => setShowShareModal(false)}\n title=\"Share Document\"\n toggleSwitch={true}\n onSubmit={handleShareSubmit}\n useRedux={useRedux}\n users={useRedux ? undefined : users}\n departments={useRedux ? undefined : departments}\n loading={useRedux ? undefined : loading}\n onFetchUsersAndDepartments={useRedux ? undefined : fetchUsersAndDepartments}\n />\n </Box>\n\n {/* Code Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2 }}>\n <Typography variant=\"h6\" gutterBottom>\n Code Example\n </Typography>\n <Box\n component=\"pre\"\n sx={{\n backgroundColor: 'grey.100',\n p: 2,\n borderRadius: 1,\n overflow: 'auto',\n fontSize: '0.875rem',\n }}\n >\n {useRedux ? `\n// Redux-based usage\n<ERPUIProvider useRedux={true} reduxStore={store} apiClient={apiClient}>\n <HeaderEnhanced useRedux={true} />\n <ShareModalEnhanced useRedux={true} />\n</ERPUIProvider>\n ` : `\n// Prop-based usage\n<ERPUIProvider useRedux={false}>\n <HeaderEnhanced\n useRedux={false}\n languages={languages}\n currentLanguage={currentLanguage}\n onLanguageChange={handleLanguageChange}\n />\n <ShareModalEnhanced\n useRedux={false}\n users={users}\n departments={departments}\n loading={loading}\n onFetchUsersAndDepartments={fetchUsersAndDepartments}\n />\n</ERPUIProvider>\n `}\n </Box>\n </Box>\n </Box>\n </ERPUIProvider>\n );\n};\n\nexport default FlexibleReduxExample;"],"names":["useState","jsx","ERPUIProvider","jsxs","Box","Typography","FormControlLabel","Switch","HeaderEnhanced","Button","ShareModalEnhanced"],"mappings":"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"}
@@ -2,8 +2,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
3
  import { Box, Typography, FormControlLabel, Switch, Button } from "@mui/material";
4
4
  import { E as ERPUIProvider } from "./ERPUIProvider-DqKdePsJ.esm.js";
5
- import { S as SharePopUpEnhanced } from "./share-modal-enhanced-B9RdKJpc.esm.js";
6
- import { H as HeaderEnhanced } from "./header-enhanced-DvQomhLR.esm.js";
5
+ import { S as SharePopUpEnhanced } from "./share-modal-enhanced-DDcZXJfH.esm.js";
6
+ import { H as HeaderEnhanced } from "./header-enhanced-YIZWG48T.esm.js";
7
7
  const FlexibleReduxExample = () => {
8
8
  const [useRedux, setUseRedux] = useState(false);
9
9
  const [showShareModal, setShowShareModal] = useState(false);
@@ -146,4 +146,4 @@ const FlexibleReduxExample = () => {
146
146
  export {
147
147
  FlexibleReduxExample as F
148
148
  };
149
- //# sourceMappingURL=FlexibleReduxExample-CDqcmsA4.esm.js.map
149
+ //# sourceMappingURL=FlexibleReduxExample-DBkCdTko.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlexibleReduxExample-CDqcmsA4.esm.js","sources":["../../src/components/examples/FlexibleReduxExample.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Box, Button, Typography, Switch, FormControlLabel } from '@mui/material';\nimport { ERPUIProvider } from '../providers/ERPUIProvider';\nimport ShareModalEnhanced from '../share-modal/share-modal-enhanced';\nimport HeaderEnhanced from '../header/header-enhanced';\n\n/**\n * Example component demonstrating flexible Redux usage\n * This shows how components can work with or without Redux\n */\nconst FlexibleReduxExample: React.FC = () => {\n const [useRedux, setUseRedux] = useState(false);\n const [showShareModal, setShowShareModal] = useState(false);\n \n // Mock data for non-Redux usage\n const [users] = useState([\n { id: 1, first_name: 'John', last_name: 'Doe', label: 'John Doe', value: 1 },\n { id: 2, first_name: 'Jane', last_name: 'Smith', label: 'Jane Smith', value: 2 },\n ]);\n \n const [departments] = useState([\n { id: 1, name: 'Engineering', label: 'Engineering', value: 1 },\n { id: 2, name: 'Marketing', label: 'Marketing', value: 2 },\n ]);\n \n const [languages] = useState([\n { code: 'en', label: 'English', direction: 'ltr' },\n { code: 'es', label: 'Spanish', direction: 'ltr' },\n { code: 'ar', label: 'Arabic', direction: 'rtl' },\n ]);\n \n const [currentLanguage, setCurrentLanguage] = useState(languages[0]);\n const [loading, setLoading] = useState(false);\n\n // Mock API functions\n const fetchUsersAndDepartments = async () => {\n setLoading(true);\n // Simulate API call\n await new Promise(resolve => setTimeout(resolve, 1000));\n setLoading(false);\n };\n\n const handleLanguageChange = (languageCode: string) => {\n const language = languages.find(lang => lang.code === languageCode);\n if (language) {\n setCurrentLanguage(language);\n }\n };\n\n const handleShareSubmit = (data: any) => {\n setShowShareModal(false);\n };\n\n return (\n <ERPUIProvider useRedux={useRedux}>\n <Box sx={{ p: 3 }}>\n <Typography variant=\"h4\" gutterBottom>\n Flexible Redux Integration Example\n </Typography>\n \n <Typography variant=\"body1\" sx={{ mb: 2 }}>\n This example demonstrates how ERP UI Library components can work with or without Redux.\n Toggle the switch below to see the difference.\n </Typography>\n\n <FormControlLabel\n control={\n <Switch\n checked={useRedux}\n onChange={(e) => setUseRedux(e.target.checked)}\n />\n }\n label={`Use Redux: ${useRedux ? 'Enabled' : 'Disabled'}`}\n sx={{ mb: 3 }}\n />\n\n <Box sx={{ mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Current Mode: {useRedux ? 'Redux-based' : 'Prop-based'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {useRedux \n ? 'Components are using Redux for state management'\n : 'Components are using props and local state for data'\n }\n </Typography>\n </Box>\n\n {/* Header Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2, mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Header Component\n </Typography>\n <HeaderEnhanced\n useRedux={useRedux}\n languages={useRedux ? undefined : languages}\n currentLanguage={useRedux ? undefined : currentLanguage}\n languagesLoading={useRedux ? undefined : loading}\n onLanguageChange={useRedux ? undefined : handleLanguageChange}\n onFetchLanguages={useRedux ? undefined : fetchUsersAndDepartments}\n />\n </Box>\n\n {/* Share Modal Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2, mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Share Modal Component\n </Typography>\n <Button\n variant=\"contained\"\n onClick={() => setShowShareModal(true)}\n sx={{ mb: 2 }}\n >\n Open Share Modal\n </Button>\n \n <ShareModalEnhanced\n open={showShareModal}\n onClose={() => setShowShareModal(false)}\n title=\"Share Document\"\n toggleSwitch={true}\n onSubmit={handleShareSubmit}\n useRedux={useRedux}\n users={useRedux ? undefined : users}\n departments={useRedux ? undefined : departments}\n loading={useRedux ? undefined : loading}\n onFetchUsersAndDepartments={useRedux ? undefined : fetchUsersAndDepartments}\n />\n </Box>\n\n {/* Code Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2 }}>\n <Typography variant=\"h6\" gutterBottom>\n Code Example\n </Typography>\n <Box\n component=\"pre\"\n sx={{\n backgroundColor: 'grey.100',\n p: 2,\n borderRadius: 1,\n overflow: 'auto',\n fontSize: '0.875rem',\n }}\n >\n {useRedux ? `\n// Redux-based usage\n<ERPUIProvider useRedux={true} reduxStore={store} apiClient={apiClient}>\n <HeaderEnhanced useRedux={true} />\n <ShareModalEnhanced useRedux={true} />\n</ERPUIProvider>\n ` : `\n// Prop-based usage\n<ERPUIProvider useRedux={false}>\n <HeaderEnhanced\n useRedux={false}\n languages={languages}\n currentLanguage={currentLanguage}\n onLanguageChange={handleLanguageChange}\n />\n <ShareModalEnhanced\n useRedux={false}\n users={users}\n departments={departments}\n loading={loading}\n onFetchUsersAndDepartments={fetchUsersAndDepartments}\n />\n</ERPUIProvider>\n `}\n </Box>\n </Box>\n </Box>\n </ERPUIProvider>\n );\n};\n\nexport default FlexibleReduxExample;"],"names":["ShareModalEnhanced"],"mappings":";;;;;;AAUA,MAAM,uBAAiC,MAAM;AAC3C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAG1D,QAAM,CAAC,KAAK,IAAI,SAAS;AAAA,IACvB,EAAE,IAAI,GAAG,YAAY,QAAQ,WAAW,OAAO,OAAO,YAAY,OAAO,EAAA;AAAA,IACzE,EAAE,IAAI,GAAG,YAAY,QAAQ,WAAW,SAAS,OAAO,cAAc,OAAO,EAAA;AAAA,EAAE,CAChF;AAED,QAAM,CAAC,WAAW,IAAI,SAAS;AAAA,IAC7B,EAAE,IAAI,GAAG,MAAM,eAAe,OAAO,eAAe,OAAO,EAAA;AAAA,IAC3D,EAAE,IAAI,GAAG,MAAM,aAAa,OAAO,aAAa,OAAO,EAAA;AAAA,EAAE,CAC1D;AAED,QAAM,CAAC,SAAS,IAAI,SAAS;AAAA,IAC3B,EAAE,MAAM,MAAM,OAAO,WAAW,WAAW,MAAA;AAAA,IAC3C,EAAE,MAAM,MAAM,OAAO,WAAW,WAAW,MAAA;AAAA,IAC3C,EAAE,MAAM,MAAM,OAAO,UAAU,WAAW,MAAA;AAAA,EAAM,CACjD;AAED,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,UAAU,CAAC,CAAC;AACnE,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAG5C,QAAM,2BAA2B,YAAY;AAC3C,eAAW,IAAI;AAEf,UAAM,IAAI,QAAQ,CAAA,YAAW,WAAW,SAAS,GAAI,CAAC;AACtD,eAAW,KAAK;AAAA,EAClB;AAEA,QAAM,uBAAuB,CAAC,iBAAyB;AACrD,UAAM,WAAW,UAAU,KAAK,CAAA,SAAQ,KAAK,SAAS,YAAY;AAClE,QAAI,UAAU;AACZ,yBAAmB,QAAQ;AAAA,IAC7B;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,SAAc;AACvC,sBAAkB,KAAK;AAAA,EACzB;AAEA,SACE,oBAAC,iBAAc,UACb,UAAA,qBAAC,OAAI,IAAI,EAAE,GAAG,EAAA,GACZ,UAAA;AAAA,IAAA,oBAAC,YAAA,EAAW,SAAQ,MAAK,cAAY,MAAC,UAAA,sCAEtC;AAAA,IAEA,oBAAC,cAAW,SAAQ,SAAQ,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,yIAAA,CAG3C;AAAA,IAEA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SACE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU,CAAC,MAAM,YAAY,EAAE,OAAO,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAGjD,OAAO,cAAc,WAAW,YAAY,UAAU;AAAA,QACtD,IAAI,EAAE,IAAI,EAAA;AAAA,MAAE;AAAA,IAAA;AAAA,yBAGb,KAAA,EAAI,IAAI,EAAE,IAAI,KACb,UAAA;AAAA,MAAA,qBAAC,YAAA,EAAW,SAAQ,MAAK,cAAY,MAAC,UAAA;AAAA,QAAA;AAAA,QACrB,WAAW,gBAAgB;AAAA,MAAA,GAC5C;AAAA,MACA,oBAAC,cAAW,SAAQ,SAAQ,OAAM,kBAC/B,UAAA,WACG,oDACA,sDAAA,CAEN;AAAA,IAAA,GACF;AAAA,IAGA,qBAAC,KAAA,EAAI,IAAI,EAAE,QAAQ,GAAG,aAAa,YAAY,cAAc,GAAG,GAAG,GAAG,IAAI,KACxE,UAAA;AAAA,MAAA,oBAAC,YAAA,EAAW,SAAQ,MAAK,cAAY,MAAC,UAAA,oBAEtC;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,WAAW,WAAW,SAAY;AAAA,UAClC,iBAAiB,WAAW,SAAY;AAAA,UACxC,kBAAkB,WAAW,SAAY;AAAA,UACzC,kBAAkB,WAAW,SAAY;AAAA,UACzC,kBAAkB,WAAW,SAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IAC3C,GACF;AAAA,IAGA,qBAAC,KAAA,EAAI,IAAI,EAAE,QAAQ,GAAG,aAAa,YAAY,cAAc,GAAG,GAAG,GAAG,IAAI,KACxE,UAAA;AAAA,MAAA,oBAAC,YAAA,EAAW,SAAQ,MAAK,cAAY,MAAC,UAAA,yBAEtC;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,MAAM,kBAAkB,IAAI;AAAA,UACrC,IAAI,EAAE,IAAI,EAAA;AAAA,UACX,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAID;AAAA,QAACA;AAAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM,kBAAkB,KAAK;AAAA,UACtC,OAAM;AAAA,UACN,cAAc;AAAA,UACd,UAAU;AAAA,UACV;AAAA,UACA,OAAO,WAAW,SAAY;AAAA,UAC9B,aAAa,WAAW,SAAY;AAAA,UACpC,SAAS,WAAW,SAAY;AAAA,UAChC,4BAA4B,WAAW,SAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IACrD,GACF;AAAA,IAGA,qBAAC,KAAA,EAAI,IAAI,EAAE,QAAQ,GAAG,aAAa,YAAY,cAAc,GAAG,GAAG,EAAA,GACjE,UAAA;AAAA,MAAA,oBAAC,YAAA,EAAW,SAAQ,MAAK,cAAY,MAAC,UAAA,gBAEtC;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,IAAI;AAAA,YACF,iBAAiB;AAAA,YACjB,GAAG;AAAA,YACH,cAAc;AAAA,YACd,UAAU;AAAA,YACV,UAAU;AAAA,UAAA;AAAA,UAGX,UAAA,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAkBN,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
1
+ {"version":3,"file":"FlexibleReduxExample-DBkCdTko.esm.js","sources":["../../src/components/examples/FlexibleReduxExample.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Box, Button, Typography, Switch, FormControlLabel } from '@mui/material';\nimport { ERPUIProvider } from '../providers/ERPUIProvider';\nimport ShareModalEnhanced from '../share-modal/share-modal-enhanced';\nimport HeaderEnhanced from '../header/header-enhanced';\n\n/**\n * Example component demonstrating flexible Redux usage\n * This shows how components can work with or without Redux\n */\nconst FlexibleReduxExample: React.FC = () => {\n const [useRedux, setUseRedux] = useState(false);\n const [showShareModal, setShowShareModal] = useState(false);\n \n // Mock data for non-Redux usage\n const [users] = useState([\n { id: 1, first_name: 'John', last_name: 'Doe', label: 'John Doe', value: 1 },\n { id: 2, first_name: 'Jane', last_name: 'Smith', label: 'Jane Smith', value: 2 },\n ]);\n \n const [departments] = useState([\n { id: 1, name: 'Engineering', label: 'Engineering', value: 1 },\n { id: 2, name: 'Marketing', label: 'Marketing', value: 2 },\n ]);\n \n const [languages] = useState([\n { code: 'en', label: 'English', direction: 'ltr' },\n { code: 'es', label: 'Spanish', direction: 'ltr' },\n { code: 'ar', label: 'Arabic', direction: 'rtl' },\n ]);\n \n const [currentLanguage, setCurrentLanguage] = useState(languages[0]);\n const [loading, setLoading] = useState(false);\n\n // Mock API functions\n const fetchUsersAndDepartments = async () => {\n setLoading(true);\n // Simulate API call\n await new Promise(resolve => setTimeout(resolve, 1000));\n setLoading(false);\n };\n\n const handleLanguageChange = (languageCode: string) => {\n const language = languages.find(lang => lang.code === languageCode);\n if (language) {\n setCurrentLanguage(language);\n }\n };\n\n const handleShareSubmit = (data: any) => {\n setShowShareModal(false);\n };\n\n return (\n <ERPUIProvider useRedux={useRedux}>\n <Box sx={{ p: 3 }}>\n <Typography variant=\"h4\" gutterBottom>\n Flexible Redux Integration Example\n </Typography>\n \n <Typography variant=\"body1\" sx={{ mb: 2 }}>\n This example demonstrates how ERP UI Library components can work with or without Redux.\n Toggle the switch below to see the difference.\n </Typography>\n\n <FormControlLabel\n control={\n <Switch\n checked={useRedux}\n onChange={(e) => setUseRedux(e.target.checked)}\n />\n }\n label={`Use Redux: ${useRedux ? 'Enabled' : 'Disabled'}`}\n sx={{ mb: 3 }}\n />\n\n <Box sx={{ mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Current Mode: {useRedux ? 'Redux-based' : 'Prop-based'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {useRedux \n ? 'Components are using Redux for state management'\n : 'Components are using props and local state for data'\n }\n </Typography>\n </Box>\n\n {/* Header Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2, mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Header Component\n </Typography>\n <HeaderEnhanced\n useRedux={useRedux}\n languages={useRedux ? undefined : languages}\n currentLanguage={useRedux ? undefined : currentLanguage}\n languagesLoading={useRedux ? undefined : loading}\n onLanguageChange={useRedux ? undefined : handleLanguageChange}\n onFetchLanguages={useRedux ? undefined : fetchUsersAndDepartments}\n />\n </Box>\n\n {/* Share Modal Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2, mb: 3 }}>\n <Typography variant=\"h6\" gutterBottom>\n Share Modal Component\n </Typography>\n <Button\n variant=\"contained\"\n onClick={() => setShowShareModal(true)}\n sx={{ mb: 2 }}\n >\n Open Share Modal\n </Button>\n \n <ShareModalEnhanced\n open={showShareModal}\n onClose={() => setShowShareModal(false)}\n title=\"Share Document\"\n toggleSwitch={true}\n onSubmit={handleShareSubmit}\n useRedux={useRedux}\n users={useRedux ? undefined : users}\n departments={useRedux ? undefined : departments}\n loading={useRedux ? undefined : loading}\n onFetchUsersAndDepartments={useRedux ? undefined : fetchUsersAndDepartments}\n />\n </Box>\n\n {/* Code Example */}\n <Box sx={{ border: 1, borderColor: 'grey.300', borderRadius: 1, p: 2 }}>\n <Typography variant=\"h6\" gutterBottom>\n Code Example\n </Typography>\n <Box\n component=\"pre\"\n sx={{\n backgroundColor: 'grey.100',\n p: 2,\n borderRadius: 1,\n overflow: 'auto',\n fontSize: '0.875rem',\n }}\n >\n {useRedux ? `\n// Redux-based usage\n<ERPUIProvider useRedux={true} reduxStore={store} apiClient={apiClient}>\n <HeaderEnhanced useRedux={true} />\n <ShareModalEnhanced useRedux={true} />\n</ERPUIProvider>\n ` : `\n// Prop-based usage\n<ERPUIProvider useRedux={false}>\n <HeaderEnhanced\n useRedux={false}\n languages={languages}\n currentLanguage={currentLanguage}\n onLanguageChange={handleLanguageChange}\n />\n <ShareModalEnhanced\n useRedux={false}\n users={users}\n departments={departments}\n loading={loading}\n onFetchUsersAndDepartments={fetchUsersAndDepartments}\n />\n</ERPUIProvider>\n `}\n </Box>\n </Box>\n </Box>\n </ERPUIProvider>\n );\n};\n\nexport default FlexibleReduxExample;"],"names":["ShareModalEnhanced"],"mappings":"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"}