npm-pkg-hook 1.3.8 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/.babelrc +2 -10
  2. package/.env +5 -1
  3. package/dist/index.js +17953 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/index.mjs +17711 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/eslint.config.mjs +154 -0
  8. package/expire.json +1 -0
  9. package/index.d.ts +2 -0
  10. package/jest.config.ts +9 -0
  11. package/package.json +45 -36
  12. package/src/config/client/errors.ts +39 -0
  13. package/src/config/content/en.json +5 -0
  14. package/src/config/content/es.json +5 -0
  15. package/src/config/content/index.ts +16 -0
  16. package/src/hooks/addTenMinutes/index.ts +14 -0
  17. package/src/hooks/calculateLogLatHaversine/index.ts +41 -0
  18. package/src/hooks/completeSchedules/index.ts +22 -0
  19. package/src/hooks/convertToMilitaryTime/index.ts +18 -0
  20. package/src/hooks/generateStoreURL/index.ts +41 -0
  21. package/src/hooks/generateTemplate/index.ts +66 -0
  22. package/src/hooks/getCardType/index.ts +24 -0
  23. package/src/hooks/getCategoriesWithProduct/{index.js → index.ts} +7 -7
  24. package/src/hooks/getGlobalSession/index.ts +69 -0
  25. package/src/hooks/getSession/index.ts +72 -0
  26. package/src/hooks/getTodayTimestamps/index.ts +70 -0
  27. package/src/hooks/getTotalHours/index.ts +76 -0
  28. package/src/hooks/handleLogin/index.ts +14 -0
  29. package/src/hooks/index.ts +154 -0
  30. package/src/hooks/isTokenExpired/index.ts +17 -0
  31. package/src/hooks/newMessageSubscription/index.ts +28 -0
  32. package/src/hooks/newStoreOrderSubscription/index.ts +26 -0
  33. package/src/hooks/{useStatusOpenStore/helpers/index.js → statusOpenStores/helpers/index.ts} +24 -1
  34. package/src/hooks/statusOpenStores/index.ts +221 -0
  35. package/src/hooks/updateExtProductFoodsOptional/{index.js → index.ts} +15 -6
  36. package/src/hooks/useAcumulateDate/index.ts +18 -0
  37. package/src/hooks/useAllStoresPendingToRegister/index.ts +37 -0
  38. package/src/hooks/useAmountInput/index.ts +127 -0
  39. package/src/hooks/useAnimationText/{index.jsx → index.ts} +2 -2
  40. package/src/hooks/useAsideCart/index.ts +217 -0
  41. package/src/hooks/useBanner/{index.js → index.ts} +2 -1
  42. package/src/hooks/useCart/{queries.js → queries.ts} +11 -1
  43. package/src/hooks/useCart/useCart/helpers/{index.js → index.ts} +10 -6
  44. package/src/hooks/useCart/useCart/{index.js → index.ts} +58 -44
  45. package/src/hooks/useCart/useGetCart/{index.js → index.ts} +6 -3
  46. package/src/hooks/useCatWithProduct/{index.js → index.ts} +17 -7
  47. package/src/hooks/useCatWithProduct/{queries.js → queries.ts} +50 -23
  48. package/src/hooks/useCatWithProduct/types/index.ts +104 -0
  49. package/src/hooks/useCatWithProductClient/{index.js → index.ts} +19 -18
  50. package/src/hooks/useCatWithProductClient/{queries.js → queries.ts} +1 -0
  51. package/src/hooks/useCategoriesProduct/{index.js → index.ts} +3 -1
  52. package/src/hooks/useCategoriesProduct/{queries.js → queries.ts} +2 -2
  53. package/src/hooks/useCategoryInStore/index.ts +167 -0
  54. package/src/hooks/useCategoryInStore/{queries.js → queries.ts} +2 -2
  55. package/src/hooks/useCategoryStore/{index.js → index.ts} +4 -3
  56. package/src/hooks/useCategoryStore/{queries.js → queries.ts} +2 -2
  57. package/src/hooks/useChartData/{index.js → index.ts} +31 -34
  58. package/src/hooks/useChartData/useChartData/{index.js → index.ts} +31 -30
  59. package/src/hooks/useChartData/useChartDataAllOrders/{index.js → index.ts} +4 -4
  60. package/src/hooks/useChatRoomSubscription/index.ts +28 -0
  61. package/src/hooks/useCheckbox/{index.js → index.ts} +1 -1
  62. package/src/hooks/useCities/index.ts +14 -0
  63. package/src/hooks/useCities/queries.ts +12 -0
  64. package/src/hooks/useClients/{index.js → index.ts} +36 -10
  65. package/src/hooks/useClients/queries.ts +215 -0
  66. package/src/hooks/useColorByLetters/helpers/alea.ts +73 -0
  67. package/src/hooks/useColorByLetters/helpers/colors.ts +45 -0
  68. package/src/hooks/useColorByLetters/helpers/index.ts +24 -0
  69. package/src/hooks/useColorByLetters/helpers/mersenne_twister.ts +118 -0
  70. package/src/hooks/useColorByLetters/index.ts +24 -0
  71. package/src/hooks/useConnection/index.ts +24 -0
  72. package/src/hooks/useCountries/index.ts +20 -0
  73. package/src/hooks/useCountries/queries.ts +12 -0
  74. package/src/hooks/useCreateDeliveryTime/index.ts +51 -0
  75. package/src/hooks/useCreateOrderStatusType/index.ts +134 -0
  76. package/src/hooks/useCreateProduct/helpers/index.ts +23 -0
  77. package/src/hooks/useCreateProduct/helpers/manageCacheDataCatProduct/{index.js → index.ts} +1 -1
  78. package/src/hooks/useCreateProduct/helpers/useEditImageProduct/{index.js → index.ts} +14 -8
  79. package/src/hooks/useCreateProduct/index.ts +337 -0
  80. package/src/hooks/useCreateStorePendingToRegister/index.ts +17 -0
  81. package/src/hooks/useCreateStorePendingToRegister/queries.ts +10 -0
  82. package/src/hooks/useDashboardComponents/index.ts +50 -0
  83. package/src/hooks/useDeleteExtraProductFoods/index.ts +13 -0
  84. package/src/hooks/useDeleteSubProductOptional/{index.js → index.ts} +5 -3
  85. package/src/hooks/useDeliveryTime/index.ts +29 -0
  86. package/src/hooks/useDepartments/index.ts +14 -0
  87. package/src/hooks/useDepartments/queries.ts +13 -0
  88. package/src/hooks/useDessert/{index.js → index.ts} +162 -114
  89. package/src/hooks/useDessertWithPrice/helpers/index.ts +76 -0
  90. package/src/hooks/useDessertWithPrice/index.ts +381 -0
  91. package/src/hooks/useDessertWithPrice/queries.ts +18 -0
  92. package/src/hooks/useDevWS/index.ts +53 -0
  93. package/src/hooks/useDevices/index.ts +2 -0
  94. package/src/hooks/useDevices/queries.ts +28 -0
  95. package/src/hooks/useDevices/useGetDevices.ts +28 -0
  96. package/src/hooks/useDevices/useRegisterDevices.ts +75 -0
  97. package/src/hooks/useDownloadReports/helpers/downloadFileFromResponse.ts +21 -0
  98. package/src/hooks/useDownloadReports/index.ts +2 -0
  99. package/src/hooks/useDownloadReports/useDownloadReportByDay/index.ts +105 -0
  100. package/src/hooks/useDownloadReports/useGetReportByDateRange/index.ts +116 -0
  101. package/src/hooks/useDrag/{index.js → index.ts} +16 -0
  102. package/src/hooks/useDropzone/{index.js → index.ts} +2 -2
  103. package/src/hooks/useDynamicAuth/{index.js → index.ts} +2 -1
  104. package/src/hooks/useEditCategory/{index.js → index.ts} +14 -14
  105. package/src/hooks/useEditOneExtProductFoodOptional/index.ts +28 -0
  106. package/src/hooks/useEditOneExtProductFoodOptional/{queries.js → queries.ts} +2 -2
  107. package/src/hooks/useEditSubProductOptional/index.ts +12 -0
  108. package/src/hooks/useEmployee/index.ts +18 -0
  109. package/src/hooks/useEmployee/queries.ts +85 -0
  110. package/src/hooks/useEmployee/useCreateEmployee.ts +90 -0
  111. package/src/hooks/useEvent/{index.js → index.ts} +1 -0
  112. package/src/hooks/useFavoriteStores/index.ts +31 -0
  113. package/src/hooks/useFavoriteStores/queries.ts +54 -0
  114. package/src/hooks/useFetchMoreInteractions/index.jsx +26 -26
  115. package/src/hooks/useFilterConfigs/index.ts +173 -0
  116. package/src/hooks/useFingerprintjs/{index.js → index.ts} +32 -7
  117. package/src/hooks/useFormTools/index.ts +143 -0
  118. package/src/hooks/useFormatDate/index.ts +91 -0
  119. package/src/hooks/useFullScreenMode/{index.js → index.ts} +1 -5
  120. package/src/hooks/useGetAllLocationUser/index.ts +13 -0
  121. package/src/hooks/useGetAllLocationUser/queries.ts +44 -0
  122. package/src/hooks/{useSales/useGetAllSales/index.js → useGetAllSales/index.ts} +3 -2
  123. package/src/hooks/useGetCookies/index.ts +43 -0
  124. package/src/hooks/useGetExtProductFoodsSubOptionalAll/{index.js → index.ts} +2 -1
  125. package/src/hooks/useGetFoodRecomended/{index.js → index.ts} +2 -1
  126. package/src/hooks/useGetMessagesToRoom/index.ts +23 -0
  127. package/src/hooks/useGetMinPrice/{index.js → index.ts} +2 -1
  128. package/src/hooks/useGetOneStoreRating/{index.js → index.ts} +2 -1
  129. package/src/hooks/useGetSalesAmountToday/index.ts +31 -0
  130. package/src/hooks/useGetStoreCookie/index.ts +21 -0
  131. package/src/hooks/useGoogleLogin/{index.js → index.ts} +14 -5
  132. package/src/hooks/useHover/{index.js → index.ts} +3 -0
  133. package/src/hooks/useImageOptimization/{index.js → index.ts} +4 -0
  134. package/src/hooks/useImageUploaderProduct/helper/canvasUtils.ts +146 -0
  135. package/src/hooks/useImageUploaderProduct/helper/getOrientation.ts +54 -0
  136. package/src/hooks/useImageUploaderProduct/helper/index.ts +5 -0
  137. package/src/hooks/useImageUploaderProduct/index.ts +295 -0
  138. package/src/hooks/useImageWeight/{index.js → index.ts} +4 -0
  139. package/src/hooks/useImagesStore/index.ts +227 -0
  140. package/src/hooks/useImagesStore/{queries.js → queries.ts} +4 -68
  141. package/src/hooks/useImagesStore/utils/index.ts +4 -0
  142. package/src/hooks/useIncomingOrders/index.ts +11 -0
  143. package/src/hooks/useIncomingOrders/queries.ts +87 -0
  144. package/src/hooks/useIntersection/{index.js → index.ts} +1 -1
  145. package/src/hooks/useInventory/index.ts +2 -0
  146. package/src/hooks/useInventory/queries.ts +58 -0
  147. package/src/hooks/useInventory/useGetProductsInStock.ts +16 -0
  148. package/src/hooks/useInventory/useUpdateManageStock.ts +41 -0
  149. package/src/hooks/useLazyScript/{index.js → index.ts} +3 -0
  150. package/src/hooks/useLocalBackendIp/index.ts +34 -0
  151. package/src/hooks/useLocalSorage/{index.js → index.ts} +3 -3
  152. package/src/hooks/useLocationManager/index.ts +63 -0
  153. package/src/hooks/useLoginEmployeeInStore/index.ts +38 -0
  154. package/src/hooks/useLogout/helpers/BroadcastChannel.ts +74 -0
  155. package/src/hooks/useLogout/helpers/apiBaseUrl.ts +12 -0
  156. package/src/hooks/useLogout/helpers/fetchData.ts +37 -0
  157. package/src/hooks/useLogout/helpers/getCsrfToken.ts +37 -0
  158. package/src/hooks/useLogout/helpers/index.ts +65 -0
  159. package/src/hooks/useLogout/helpers/logger.ts +88 -0
  160. package/src/hooks/useLogout/helpers/parseUrl.ts +39 -0
  161. package/src/hooks/useLogout/index.ts +105 -0
  162. package/src/hooks/useManageNewOrder/helpers/index.ts +45 -0
  163. package/src/hooks/useManageNewOrder/index.ts +104 -0
  164. package/src/hooks/useManageQueryParams/index.ts +120 -0
  165. package/src/hooks/useMobile/index.ts +65 -0
  166. package/src/hooks/useModules/helpers/index.ts +1 -0
  167. package/src/hooks/useModules/helpers/validateModules.ts +43 -0
  168. package/src/hooks/useModules/index.ts +124 -0
  169. package/src/hooks/useMouse/index.ts +55 -0
  170. package/src/hooks/useOrderStatusTypes/index.ts +2 -0
  171. package/src/hooks/useOrderStatusTypes/useOrderStatusTypes/index.ts +133 -0
  172. package/src/hooks/useOrderStatusTypes/useUpdateOrderStatusPriorities/index.ts +99 -0
  173. package/src/hooks/useOrders/index.ts +3 -0
  174. package/src/hooks/useOrders/queries.ts +99 -0
  175. package/src/hooks/useOrders/useChangeOrderState/index.ts +128 -0
  176. package/src/hooks/useOrders/{index.js → useOrdersFromStore/index.ts} +20 -18
  177. package/src/hooks/usePWAInstall/index.ts +38 -0
  178. package/src/hooks/usePaymentMethod/index.ts +3 -0
  179. package/src/hooks/usePaymentMethod/paymentMethod.gql.ts +62 -0
  180. package/src/hooks/usePaymentMethod/paymentMethod.types.ts +28 -0
  181. package/src/hooks/usePaymentMethod/useCreatePaymentMethod/index.ts +25 -0
  182. package/src/hooks/usePaymentMethod/useGetAllPaymentMethods/index.ts +19 -0
  183. package/src/hooks/usePaymentMethod/useGetPaymentMethod/index.ts +26 -0
  184. package/src/hooks/usePortFetcher/index.ts +33 -0
  185. package/src/hooks/usePrintSaleTicket/index.ts +68 -0
  186. package/src/hooks/useProductsFood/index.ts +341 -0
  187. package/src/hooks/useProductsFood/{queriesStore.js → queriesStore.ts} +151 -84
  188. package/src/hooks/useProductsFood/types/index.ts +0 -0
  189. package/src/hooks/useProductsFood/useEditProduct.ts +49 -0
  190. package/src/hooks/useProductsFood/usetagsProducts.ts +101 -0
  191. package/src/hooks/useProviders/useProvidersCreateStore/{index.js → index.ts} +2 -1
  192. package/src/hooks/useProviders/useProvidersDataStore/{index.js → index.ts} +2 -1
  193. package/src/hooks/useProvidersStore/{index.js → index.ts} +2 -1
  194. package/src/hooks/usePushNotificationOrder/index.ts +52 -0
  195. package/src/hooks/usePushNotifications/helpers/index.ts +123 -0
  196. package/src/hooks/usePushNotifications/index.ts +150 -0
  197. package/src/hooks/useQueryLocationsMap/index.ts +20 -0
  198. package/src/hooks/useQueryLocationsMap/queries.ts +40 -0
  199. package/src/hooks/useRatingArrayData/{index.js → index.ts} +4 -4
  200. package/src/hooks/useRatingArrayData/{queries.js → queries.ts} +1 -1
  201. package/src/hooks/useReactToPrint/index.ts +4 -0
  202. package/src/hooks/useRemoveExtraProductFoodsOptional/{index.js → index.ts} +2 -1
  203. package/src/hooks/useRemoveExtraProductFoodsOptional/{queries.js → queries.ts} +4 -4
  204. package/src/hooks/useReport/{index.js → index.ts} +5 -5
  205. package/src/hooks/useReport/{queries.js → queries.ts} +4 -55
  206. package/src/hooks/useRestaurant/helpers/index.ts +28 -0
  207. package/src/hooks/useRestaurant/helpers/manageStatusOpen.ts +26 -0
  208. package/src/hooks/useRestaurant/index.ts +71 -0
  209. package/src/hooks/useRestaurant/{queries.js → queries.ts} +2 -1
  210. package/src/hooks/useRoads/index.ts +20 -0
  211. package/src/hooks/useRoads/queries.ts +13 -0
  212. package/src/hooks/useRoles/index.ts +4 -0
  213. package/src/hooks/useRoles/queries.ts +70 -0
  214. package/src/hooks/useRoles/useCreateRole.ts +40 -0
  215. package/src/hooks/useRoles/useGetRoles.ts +37 -0
  216. package/src/hooks/useRoles/useRemoveRoles.ts +40 -0
  217. package/src/hooks/useRoles/useUpdateRolesPriority.ts +44 -0
  218. package/src/hooks/useSales/helpers/add-product.utils.ts +120 -0
  219. package/src/hooks/useSales/helpers/apply-discount-to-cart.utils.ts +292 -0
  220. package/src/hooks/useSales/helpers/comment-product.utils.ts +41 -0
  221. package/src/hooks/useSales/helpers/constants/index.ts +38 -0
  222. package/src/hooks/useSales/helpers/extras.utils.ts +42 -0
  223. package/src/hooks/useSales/helpers/filterProductsByCarProId.utils.ts +17 -0
  224. package/src/hooks/useSales/helpers/increment-product-quantity.utils.ts +76 -0
  225. package/src/hooks/useSales/helpers/index.ts +3 -0
  226. package/src/hooks/useSales/helpers/initializer.utils.ts +22 -0
  227. package/src/hooks/useSales/helpers/isStockInsufficient.ts +3 -0
  228. package/src/hooks/useSales/helpers/remove-product.utils.test.ts +49 -0
  229. package/src/hooks/useSales/helpers/remove-product.utils.ts +34 -0
  230. package/src/hooks/useSales/helpers/resolveProduct.ts +29 -0
  231. package/src/hooks/useSales/helpers/useAddToCart.ts +64 -0
  232. package/src/hooks/useSales/index.ts +1418 -0
  233. package/src/hooks/useSales/{queries.js → queries.ts} +256 -166
  234. package/src/hooks/useSales/types/index.ts +206 -0
  235. package/src/hooks/useSales/types/use-sales.types.ts +8 -0
  236. package/src/hooks/useSales/useGetSale.ts +21 -0
  237. package/src/hooks/useSales/useTotalSales.ts +24 -0
  238. package/src/hooks/useSaveAvailableProduct/helpers/{index.js → index.ts} +4 -4
  239. package/src/hooks/useSaveAvailableProduct/{index.js → index.ts} +7 -1
  240. package/src/hooks/useSaveLocation/index.ts +17 -0
  241. package/src/hooks/useSaveLocation/queries.ts +19 -0
  242. package/src/hooks/useSchedule/{index.jsx → index.ts} +16 -4
  243. package/src/hooks/useSchedule/{index.js → schedule.ts} +22 -15
  244. package/src/hooks/useScheduleData/{index.js → index.ts} +21 -9
  245. package/src/hooks/useSetImageProducts/index.ts +59 -0
  246. package/src/hooks/useSetImageProducts/queries.ts +18 -0
  247. package/src/hooks/useSetSession/{index.js → index.ts} +16 -17
  248. package/src/hooks/useSetupSchedule/helpers/index.ts +85 -0
  249. package/src/hooks/useSetupSchedule/index.ts +284 -0
  250. package/src/hooks/useStatusOpenStore/helpers/index.ts +124 -0
  251. package/src/hooks/useStatusOpenStore/{index.js → index.ts} +39 -16
  252. package/src/hooks/useStatusOrdersClient/{index.js → index.ts} +3 -2
  253. package/src/hooks/useStatusOrdersClient/{queries.js → queries.ts} +2 -2
  254. package/src/hooks/useStock/index.ts +1 -0
  255. package/src/hooks/useStock/useStockUpdatedAllSubscription.ts +40 -0
  256. package/src/hooks/useStockMovements/helpers/index.ts +16 -0
  257. package/src/hooks/useStockMovements/index.ts +39 -0
  258. package/src/hooks/useStore/index.ts +83 -0
  259. package/src/hooks/useStore/{queries.js → queries.ts} +71 -71
  260. package/src/hooks/useStoreContacts/{index.js → index.ts} +11 -5
  261. package/src/hooks/useStoreTable/index.ts +2 -0
  262. package/src/hooks/useStoreTable/queries.ts +47 -0
  263. package/src/hooks/useStoreTable/useStoreTableCreate.ts +77 -0
  264. package/src/hooks/useStoreTable/useStoreTables.ts +15 -0
  265. package/src/hooks/useSubscriptionValidation/index.ts +112 -0
  266. package/src/hooks/useTagProducts/index.ts +3 -0
  267. package/src/hooks/useTagProducts/useDeleteOneTag.ts +106 -0
  268. package/src/hooks/useTagProducts/useGetAllTags.ts +68 -0
  269. package/src/hooks/useTagProducts/useRegisterMultipleTags.ts +157 -0
  270. package/src/hooks/useTheme/index.ts +65 -0
  271. package/src/hooks/useTimeAgo/{useTimeAgo.js → useTimeAgo.ts} +7 -7
  272. package/src/hooks/useTokenCards/index.ts +45 -0
  273. package/src/hooks/useTopProductsMovements/index.ts +27 -0
  274. package/src/hooks/useTotalAllSales/index.ts +25 -0
  275. package/src/hooks/useTotalProductsInStock/index.ts +23 -0
  276. package/src/hooks/useTotalProductsSold/index.ts +23 -0
  277. package/src/hooks/useTotalProductsSolded/index.ts +20 -0
  278. package/src/hooks/useUpdateCart/{index.js → index.ts} +3 -2
  279. package/src/hooks/useUpdateCartCookie/index.ts +60 -0
  280. package/src/hooks/useUpdateDashboardComponent/index.ts +91 -0
  281. package/src/hooks/useUpdateExistingOrders/{index.js → index.ts} +5 -11
  282. package/src/hooks/useUpdateExtProductFoodsSubOptional/index.ts +61 -0
  283. package/src/hooks/useUpdateModuleOrder/index.ts +37 -0
  284. package/src/hooks/useUpdateMultipleExtProduct/index.ts +34 -0
  285. package/src/hooks/useUpdateMultipleExtProduct/queries.ts +33 -0
  286. package/src/hooks/useUpdateMultipleProducts/index.ts +117 -0
  287. package/src/hooks/useUpdateMultipleProducts/queries.ts +51 -0
  288. package/src/hooks/useUploadProducts/helpers/index.ts +1 -0
  289. package/src/hooks/useUploadProducts/helpers/parseNumber.ts +37 -0
  290. package/src/hooks/useUploadProducts/helpers/validateProductDataExcel.ts +73 -0
  291. package/src/hooks/useUploadProducts/index.ts +442 -0
  292. package/src/hooks/useUpsertGoal/index.ts +68 -0
  293. package/src/hooks/useUser/{index.js → index.ts} +11 -4
  294. package/src/hooks/useUser/{queries.js → queries.ts} +9 -4
  295. package/src/hooks/useWeeklyStockMovement/helpers/index.ts +32 -0
  296. package/src/hooks/useWeeklyStockMovement/index.ts +52 -0
  297. package/src/hooks/useWindowSize/{index.js → index.ts} +9 -2
  298. package/src/index.ts +12 -0
  299. package/src/security/index.ts +1 -0
  300. package/src/services/index.ts +1 -0
  301. package/src/utils/UtilDateRange.ts +56 -0
  302. package/src/utils/generateCode.ts +222 -0
  303. package/src/utils/index.ts +2 -0
  304. package/src/utils/utils.ts +344 -0
  305. package/tsconfig.eslint.json +17 -0
  306. package/tsconfig.json +21 -0
  307. package/tsup.config.ts +24 -0
  308. package/.eslintrc.js +0 -38
  309. package/.eslintrc.json +0 -127
  310. package/next.config.js +0 -126
  311. package/src/config/client/errors.js +0 -26
  312. package/src/hooks/getGlobalSession/index.js +0 -49
  313. package/src/hooks/getSession/index.js +0 -18
  314. package/src/hooks/handleLogin/index.js +0 -10
  315. package/src/hooks/index.js +0 -77
  316. package/src/hooks/useAcumulateDate/index.js +0 -16
  317. package/src/hooks/useAsideCart/index.js +0 -155
  318. package/src/hooks/useCategoryInStore/index.js +0 -98
  319. package/src/hooks/useClients/queries.js +0 -127
  320. package/src/hooks/useConnection/index.js +0 -22
  321. package/src/hooks/useCreateProduct/index.js +0 -291
  322. package/src/hooks/useDevices/index.js +0 -35
  323. package/src/hooks/useDevices/queries.js +0 -19
  324. package/src/hooks/useEditOneExtProductFoodOptional/index.js +0 -28
  325. package/src/hooks/useEditSubProductOptional/index.js +0 -11
  326. package/src/hooks/useEmployee/index.js +0 -13
  327. package/src/hooks/useEmployee/queries.js +0 -17
  328. package/src/hooks/useFavoriteStores/index.js +0 -19
  329. package/src/hooks/useFavoriteStores/queries.js +0 -47
  330. package/src/hooks/useFormTools/index.js +0 -100
  331. package/src/hooks/useFormatDate/index.js +0 -33
  332. package/src/hooks/useGetStoreCookie/index.js +0 -22
  333. package/src/hooks/useImagesStore/index.js +0 -183
  334. package/src/hooks/useLogout/helpers/BroadcastChannel.js +0 -32
  335. package/src/hooks/useLogout/helpers/apiBaseUrl.js +0 -8
  336. package/src/hooks/useLogout/helpers/fetchData.js +0 -29
  337. package/src/hooks/useLogout/helpers/getCsrfToken.js +0 -30
  338. package/src/hooks/useLogout/helpers/index.js +0 -54
  339. package/src/hooks/useLogout/helpers/logger.js +0 -72
  340. package/src/hooks/useLogout/helpers/parseUrl.js +0 -36
  341. package/src/hooks/useLogout/index.js +0 -46
  342. package/src/hooks/useManageQueryParams/index.js +0 -37
  343. package/src/hooks/useMobile/index.js +0 -39
  344. package/src/hooks/useOrders/queries.js +0 -328
  345. package/src/hooks/useProductsFood/index.js +0 -234
  346. package/src/hooks/useProductsFood/useEditProduct.js +0 -8
  347. package/src/hooks/useProductsFood/usetagsProducts.js +0 -94
  348. package/src/hooks/useRestaurant/index.js +0 -19
  349. package/src/hooks/useSales/helpers/index.js +0 -8
  350. package/src/hooks/useSales/index.js +0 -1102
  351. package/src/hooks/useSales/useGetSale.js +0 -13
  352. package/src/hooks/useSales/useTotalSales.js +0 -24
  353. package/src/hooks/useStore/index.js +0 -70
  354. package/src/hooks/useUpdateExtProductFoodsSubOptional/index.js +0 -38
  355. package/src/index.jsx +0 -4
  356. package/src/utils/index.js +0 -141
  357. /package/src/config/client/{index.js → index.ts} +0 -0
  358. /package/src/hooks/getCategoriesWithProduct/helpers/{index.js → index.ts} +0 -0
  359. /package/src/hooks/useAnimationFrame/{index.js → index.ts} +0 -0
  360. /package/src/hooks/useAsideCart/helpers/{index.js → index.ts} +0 -0
  361. /package/src/hooks/useAsideCart/{queries.js → queries.ts} +0 -0
  362. /package/src/hooks/useCart/{index.js → index.ts} +0 -0
  363. /package/src/hooks/useDeleteSubProductOptional/{queries.js → queries.ts} +0 -0
  364. /package/src/hooks/useDessert/helpers/{index.js → index.ts} +0 -0
  365. /package/src/hooks/useDynamicAuth/{queries.js → queries.ts} +0 -0
  366. /package/src/hooks/useEditSubProductOptional/{queries.js → queries.ts} +0 -0
  367. /package/src/hooks/useFetchJson/{index.js → index.ts} +0 -0
  368. /package/src/hooks/useFormatNumberPhone/{index.js → index.ts} +0 -0
  369. /package/src/hooks/useGenerateNumberArray/{index.js → index.ts} +0 -0
  370. /package/src/hooks/useGetFoodRecomended/{queries.js → queries.ts} +0 -0
  371. /package/src/hooks/useGetMinPrice/{queries.js → queries.ts} +0 -0
  372. /package/src/hooks/useGetOneStoreRating/{queries.js → queries.ts} +0 -0
  373. /package/src/hooks/useGoogleLogin/{loadScript.js → loadScript.ts} +0 -0
  374. /package/src/hooks/useGoogleLogin/{removeScript.js → removeScript.ts} +0 -0
  375. /package/src/hooks/useInnerHtml/{index.js → index.ts} +0 -0
  376. /package/src/hooks/useKeypress/{index.js → index.ts} +0 -0
  377. /package/src/hooks/useLocationNavigate/{index.js → index.ts} +0 -0
  378. /package/src/{security/index.js → hooks/useManageNewOrder/helpers/mock.ts} +0 -0
  379. /package/src/hooks/useMutateHeight/{index.js → index.ts} +0 -0
  380. /package/src/hooks/useOrderClient/{index.js → index.ts} +0 -0
  381. /package/src/hooks/useProviders/{index.js → index.ts} +0 -0
  382. /package/src/hooks/useProviders/{queries.js → queries.ts} +0 -0
  383. /package/src/hooks/useProvidersStore/{queries.js → queries.ts} +0 -0
  384. /package/src/hooks/useReactToPrint/{index.js → index.txt} +0 -0
  385. /package/src/hooks/useSaveAvailableProduct/{queries.js → queries.ts} +0 -0
  386. /package/src/hooks/useSchedule/{queries.js → queries.ts} +0 -0
  387. /package/src/hooks/useScroll/{index.js → index.ts} +0 -0
  388. /package/src/hooks/useScrollRotate/{index.js → index.ts} +0 -0
  389. /package/src/hooks/useSetState/{index.js → index.ts} +0 -0
  390. /package/src/hooks/useStatusOrdersClient/helpers/{index.js → index.ts} +0 -0
  391. /package/src/hooks/useStoreCalendar/{index.js → index.ts} +0 -0
  392. /package/src/hooks/useStoreContacts/{queries.js → queries.ts} +0 -0
  393. /package/src/mock/dessert/{index.js → index.ts} +0 -0
  394. /package/src/mock/{index.js → index.ts} +0 -0
@@ -0,0 +1,13 @@
1
+ import { gql } from '@apollo/client'
2
+
3
+ export const GET_ALL_ROAD = gql`
4
+ query getTypeRoad {
5
+ road{
6
+ rId
7
+ rName
8
+ rState
9
+ rDatCre
10
+ rDatMod
11
+ }
12
+ }
13
+ `
@@ -0,0 +1,4 @@
1
+ export * from './useCreateRole'
2
+ export * from './useGetRoles'
3
+ export * from './useUpdateRolesPriority'
4
+ export * from './useRemoveRoles'
@@ -0,0 +1,70 @@
1
+ import { gql } from '@apollo/client'
2
+
3
+ export const GET_ALL_ROLES = gql`
4
+ query getRoles($idStore: ID, $search: String, $min: Int, $max: Int, $fromDate: DateTime, $toDate: DateTime, $page: Int) {
5
+ getRoles(idStore: $idStore, search: $search, min: $min, max: $max, fromDate: $fromDate, toDate: $toDate, page: $page) {
6
+ success
7
+ message
8
+ errors {
9
+ path
10
+ message
11
+ type
12
+ context {
13
+ limit
14
+ value
15
+ label
16
+ key
17
+ }
18
+ __typename
19
+ }
20
+ pagination {
21
+ totalRecords
22
+ totalPages
23
+ currentPage
24
+ __typename
25
+ }
26
+ data {
27
+ idRole
28
+ name
29
+ priority
30
+ description
31
+ permissions
32
+ createdAt
33
+ updatedAt
34
+ }
35
+ }
36
+ }
37
+ `
38
+
39
+ /**
40
+ * Mutación para crear un nuevo rol
41
+ */
42
+ export const CREATE_ROLE_MUTATION = gql`
43
+ mutation createRoleMutation($input: IRole!) {
44
+ createRoleMutation(input: $input) {
45
+ success
46
+ message
47
+ errors {
48
+ path
49
+ message
50
+ type
51
+ context {
52
+ limit
53
+ value
54
+ label
55
+ key
56
+ }
57
+ __typename
58
+ }
59
+ data {
60
+ idRole
61
+ name
62
+ priority
63
+ description
64
+ permissions
65
+ createdAt
66
+ updatedAt
67
+ }
68
+ }
69
+ }
70
+ `
@@ -0,0 +1,40 @@
1
+ import { useMutation } from '@apollo/client'
2
+
3
+ import { CREATE_ROLE_MUTATION } from './queries'
4
+ /**
5
+ * Custom hook para crear un nuevo rol
6
+ * @param root0
7
+ * @param root0.sendNotification
8
+ * @returns {Object} - Estado de la mutación, incluyendo loading, error, data y la función createRoleMutation
9
+ */
10
+ export const useCreateRole = ({
11
+ sendNotification = () => {
12
+ return {
13
+ title: '',
14
+ description: '',
15
+ backgroundColor: ''
16
+ }
17
+ }
18
+ } = {
19
+ sendNotification: () => {
20
+ }
21
+ }) => {
22
+ const [createRoleMutation, { loading, error, data }] = useMutation(CREATE_ROLE_MUTATION, {
23
+ onError: () => {
24
+ sendNotification({
25
+ title: 'Error',
26
+ description: 'Ocurrió un error inesperado',
27
+ backgroundColor: 'error'
28
+ })
29
+ },
30
+ onCompleted: () => {
31
+ return null
32
+ }
33
+ })
34
+
35
+ return [createRoleMutation, {
36
+ loading,
37
+ error,
38
+ data: data?.createRoleMutation ?? null
39
+ }]
40
+ }
@@ -0,0 +1,37 @@
1
+ import { useQuery } from '@apollo/client'
2
+
3
+ import { GET_ALL_ROLES } from './queries'
4
+
5
+ export const useGetRoles = ({
6
+ max,
7
+ order = 'DESC',
8
+ search,
9
+ sendNotification = () => { }
10
+ } = {}) => {
11
+ const {
12
+ loading,
13
+ error,
14
+ called,
15
+ data,
16
+ refetch
17
+ } = useQuery(GET_ALL_ROLES, {
18
+ onError: () => {
19
+ sendNotification({
20
+ title: 'Error',
21
+ description: 'Algo salió mal',
22
+ backgroundColor: 'error'
23
+ })
24
+ },
25
+ variables: {
26
+ search,
27
+ max: max || 25,
28
+ order
29
+ }
30
+ })
31
+ return [data?.getRoles, {
32
+ loading: called ? false : loading,
33
+ buttonLoading: loading,
34
+ error,
35
+ refetch
36
+ }]
37
+ }
@@ -0,0 +1,40 @@
1
+ import { useMutation, gql } from '@apollo/client'
2
+
3
+ // Define the GraphQL mutation
4
+ const REMOVE_ROLES_MUTATION = gql`
5
+ mutation removeRoles($roleIds: [ID!]!) {
6
+ removeRoles(roleIds: $roleIds) {
7
+ success
8
+ message
9
+ }
10
+ }
11
+ `
12
+
13
+ /**
14
+ * Custom hook to call removeRoles mutation.
15
+ *
16
+ * @returns {Object} An object containing the mutation function and the loading/error state.
17
+ */
18
+ export function useRemoveRoles () {
19
+ const [removeRoles, { loading, error, data }] = useMutation(REMOVE_ROLES_MUTATION, {
20
+ onError: (err) => {
21
+ console.error('Error removing roles:', err)
22
+ }
23
+ })
24
+
25
+ const removeRolesHandler = async ({ roleIds = [] }) => {
26
+ try {
27
+ const { data } = await removeRoles({ variables: { roleIds } })
28
+ return data.removeRoles
29
+ } catch (err) {
30
+ console.error('Error removing roles:', err)
31
+ throw err
32
+ }
33
+ }
34
+
35
+ return [removeRolesHandler, {
36
+ loading,
37
+ error,
38
+ data
39
+ }]
40
+ }
@@ -0,0 +1,44 @@
1
+ import { useMutation, gql } from '@apollo/client'
2
+
3
+ // Define the mutation
4
+ const UPDATE_ROLES_PRIORITY = gql`
5
+ mutation updateRolesPriority($roles: [IParamsPriority]!) {
6
+ updateRolesPriority(roles: $roles) {
7
+ success
8
+ message
9
+ }
10
+ }
11
+ `
12
+
13
+ /**
14
+ * Custom hook to update roles priority
15
+ * @returns {Object} - Returns the mutation function and the mutation state
16
+ */
17
+ export const useUpdateRolesPriority = () => {
18
+ const [updateRolesPriority, { data, loading, error }] = useMutation(UPDATE_ROLES_PRIORITY)
19
+
20
+ /**
21
+ * Function to update the priority of roles
22
+ * @param {Array} roles - The array of roles with their priorities to be updated
23
+ * @returns {Promise<void>}
24
+ */
25
+ const handleUpdateRolesPriority = async (roles) => {
26
+ try {
27
+ const response = await updateRolesPriority({
28
+ variables: { roles }
29
+ })
30
+
31
+ // You can handle the response or any additional logic here
32
+ return response
33
+ } catch (err) {
34
+ // Handle the error as needed
35
+ console.error('Error updating roles priority:', err)
36
+ }
37
+ }
38
+
39
+ return [handleUpdateRolesPriority, {
40
+ data,
41
+ loading,
42
+ error
43
+ }]
44
+ }
@@ -0,0 +1,120 @@
1
+ import { NotificationPayload } from '../types'
2
+
3
+ import { isStockInsufficient } from './isStockInsufficient'
4
+
5
+ interface AddToCartProps {
6
+ state: any
7
+ action: any
8
+ product: any
9
+ sendNotification?: (args: NotificationPayload) => any
10
+ sendAlertStock: (stock: number) => void
11
+ }
12
+
13
+ /**
14
+ * Adds a product to the cart with maximum performance.
15
+ * Avoids full array scans and minimizes object cloning.
16
+ * @param {any} state - Current reducer state.
17
+ * @param {any} action - Action containing product data.
18
+ * @returns {any} Updated state.
19
+ */
20
+ export const addToCartFunc = ({
21
+ state = {},
22
+ action = {},
23
+ product,
24
+ sendNotification = () => { },
25
+ sendAlertStock = () => { }
26
+ }: AddToCartProps) => {
27
+ const payload = action?.payload ?? {}
28
+ const {
29
+ pId,
30
+ pName,
31
+ getOneTags,
32
+ stock,
33
+ ProDescription,
34
+ ProImage,
35
+ ProPrice,
36
+ ProDescuento
37
+ } = payload
38
+
39
+ // Validate basic stock
40
+ if (stock === 0) {
41
+ sendNotification({
42
+ title: 'Sin stock',
43
+ backgroundColor: 'warning',
44
+ description: 'Producto sin stock disponible en tu inventario'
45
+ })
46
+ return state
47
+ }
48
+
49
+ // PRE-FETCH product references (only ONCE)
50
+ const productExistIndex = state.PRODUCT.findIndex((item: any) => {return item.pId === pId})
51
+ const productExist = productExistIndex !== -1 ? state.PRODUCT[productExistIndex] : null
52
+ if (!product) return state
53
+
54
+ // Check stock handling rules
55
+ const currentQty = productExist?.ProQuantity ?? 0
56
+ if (product.manageStock && isStockInsufficient(currentQty, product.stock)) {
57
+ sendAlertStock(stock)
58
+ return state
59
+ }
60
+
61
+ const isFree = productExist?.free ?? false
62
+ const newQuantity = productExist ? currentQty + 1 : 1
63
+
64
+ // Calculate new unit price only once
65
+ const unitPrice = product.ProPrice ?? 0
66
+
67
+ // Calculate final price respecting 'free' mode
68
+ const newPrice = isFree ? 0 : newQuantity * unitPrice
69
+
70
+ // COMMON STATE UPDATES
71
+ const baseState = {
72
+ ...state,
73
+ counter: state.counter + 1,
74
+ totalAmount: state.totalAmount + ProPrice,
75
+ startAnimateUp: 'start-animate-up'
76
+ }
77
+
78
+ // CASE 1: Product does NOT exist → add it
79
+ if (!productExist) {
80
+ const newProduct = {
81
+ pId,
82
+ pName,
83
+ editing: false,
84
+ getOneTags,
85
+ unitPrice,
86
+ manageStock: product.manageStock ?? false,
87
+ ProDescription,
88
+ ProImage,
89
+ ProPrice,
90
+ stock,
91
+ ProDescuento,
92
+ ProQuantity: 1,
93
+ free: false
94
+ }
95
+
96
+ return {
97
+ ...baseState,
98
+ PRODUCT: [...state.PRODUCT, newProduct]
99
+ }
100
+ }
101
+
102
+ // CASE 2: Product already exists → update only ONE item
103
+ const newList = [...state.PRODUCT]
104
+
105
+ newList[productExistIndex] = {
106
+ ...productExist,
107
+ getOneTags: product.genderTags,
108
+ unitPrice,
109
+ editing: false,
110
+ oldQuantity: newQuantity,
111
+ ProPrice: newPrice,
112
+ ProQuantity: newQuantity,
113
+ free: isFree
114
+ }
115
+
116
+ return {
117
+ ...baseState,
118
+ PRODUCT: newList
119
+ }
120
+ }
@@ -0,0 +1,292 @@
1
+ export enum TypeDiscount {
2
+ PERCENT = 'PERCENT',
3
+ AMOUNT = 'AMOUNT'
4
+ }
5
+ interface DiscountPayload {
6
+ type: TypeDiscount
7
+ value: number
8
+ }
9
+
10
+ /**
11
+ * Apply a discount to the reducer state in a mathematically-exact way.
12
+ *
13
+ * - Supports two discount types: "PERCENT" (0-100) and "AMOUNT" (fixed currency amount).
14
+ * - Works in integer cents to avoid floating point errors, distributes rounding
15
+ * remainders using the Largest Remainder Method so allocations sum exactly.
16
+ * - BEFORE applying a new discount, restores original prices if they were previously saved
17
+ * (originalProPrice and originalNewExtraPrice). This prevents stacking discounts.
18
+ * - Applies discount first to `ProPrice` (base) and, if needed, to `dataExtra[].newExtraPrice`
19
+ * proportionally, never producing negative prices.
20
+ * - Returns a new state (immutable) and sets metadata: discountType, discountPercent,
21
+ * discountAmount, discountBreakdown and preserves original prices in `originalProPrice`
22
+ * and `dataExtra[].originalNewExtraPrice`.
23
+ *
24
+ * NOTE: Uses optional `sendNotification` to report errors/success.
25
+ *
26
+ * @param {any} state - current reducer state
27
+ * @param {{ type: string, value: number }} payload - { type: 'PERCENT'|'AMOUNT', value: number }
28
+ * @param {(notification: {title:string,backgroundColor:'success'|'error'|'warning'|'info',description:string}) => void} sendNotification
29
+ * @returns {any} new state with discounts applied (idempotent w.r.t repeated calls)
30
+ */
31
+ export const applyDiscountToCart = (
32
+ state: any,
33
+ payload: DiscountPayload,
34
+ sendNotification?: (notification: {
35
+ title: string
36
+ backgroundColor: 'success' | 'error' | 'warning' | 'info'
37
+ description: string
38
+ }) => void
39
+ ) => {
40
+ const discountType = (payload?.type ?? TypeDiscount.PERCENT).toString().toUpperCase()
41
+ const rawValue = Number(payload?.value)
42
+
43
+ // Basic validations
44
+ if (!Array.isArray(state?.PRODUCT) || state.PRODUCT.length === 0) {
45
+ sendNotification?.({
46
+ title: 'Warning',
47
+ backgroundColor: 'warning',
48
+ description: 'No items in cart to apply discount.'
49
+ })
50
+ return {
51
+ ...state,
52
+ discountType,
53
+ discountPercent: 0,
54
+ discountAmount: 0,
55
+ discountBreakdown: []
56
+ }
57
+ }
58
+
59
+ if (Number.isNaN(rawValue) || rawValue < 0) {
60
+ sendNotification?.({
61
+ title: 'Error',
62
+ backgroundColor: 'error',
63
+ description: 'Invalid discount value.'
64
+ })
65
+ return state
66
+ }
67
+
68
+ if (discountType !== TypeDiscount.PERCENT && discountType !== TypeDiscount.AMOUNT) {
69
+ sendNotification?.({
70
+ title: 'Error',
71
+ backgroundColor: 'error',
72
+ description: 'Invalid discount type.'
73
+ })
74
+ return state
75
+ }
76
+
77
+ if (discountType === TypeDiscount.PERCENT && (rawValue < 0 || rawValue > 100)) {
78
+ sendNotification?.({
79
+ title: 'Error',
80
+ backgroundColor: 'warning',
81
+ description: 'Percentage must be between 0 and 100.'
82
+ })
83
+ return state
84
+ }
85
+
86
+ // Helpers - work in cents to preserve exactness
87
+ const toCents = (n: number) => {return Math.round((Number(n) || 0) * 100)}
88
+ const fromCents = (c: number) => {return c / 100}
89
+
90
+ // --- Normalize / Restore originals to avoid stacking discounts ---
91
+ // For each product, use saved original prices if present; otherwise use current as "original"
92
+ const normalizedItems = state.PRODUCT.map((item: any) => {
93
+ // Determine original base price (prefer originalProPrice if present)
94
+ const origBaseRaw =
95
+ item.originalProPrice !== undefined && item.originalProPrice !== null
96
+ ? Number(item.originalProPrice)
97
+ : Number(item.ProPrice || 0)
98
+
99
+ const baseCents = toCents(origBaseRaw)
100
+
101
+ // Normalize extras: preserve originalNewExtraPrice if exists, else take current newExtraPrice
102
+ const extrasRaw = Array.isArray(item.dataExtra) ? item.dataExtra : []
103
+ const extrasNormalized = extrasRaw.map((ex: any) => {
104
+ const origExRaw =
105
+ ex.originalNewExtraPrice !== undefined && ex.originalNewExtraPrice !== null
106
+ ? Number(ex.originalNewExtraPrice)
107
+ : Number(ex.newExtraPrice || 0)
108
+ return {
109
+ originalExtraObject: ex,
110
+ originalNewExtraPriceRaw: origExRaw,
111
+ originalNewExtraPriceCents: toCents(origExRaw)
112
+ }
113
+ })
114
+
115
+ const extrasCentsList = extrasNormalized.map((e: any) => {return e.originalNewExtraPriceCents})
116
+ const extrasTotalCents = extrasCentsList.reduce((s: number, v: number) => {return s + v}, 0)
117
+ const itemTotalCents = baseCents + extrasTotalCents
118
+
119
+ return {
120
+ originalItem: item,
121
+ baseCents,
122
+ extrasNormalized,
123
+ extrasCentsList,
124
+ extrasTotalCents,
125
+ itemTotalCents
126
+ }
127
+ })
128
+
129
+ const cartTotalCents = normalizedItems.reduce((s: number, it: any) => {return s + it.itemTotalCents}, 0)
130
+
131
+ if (cartTotalCents === 0) {
132
+ sendNotification?.({
133
+ title: 'Warning',
134
+ backgroundColor: 'warning',
135
+ description: 'Cart total is zero; nothing to discount.'
136
+ })
137
+ return {
138
+ ...state,
139
+ discountType,
140
+ discountPercent: 0,
141
+ discountAmount: 0,
142
+ discountBreakdown: []
143
+ }
144
+ }
145
+
146
+ // Determine requested total discount in cents
147
+ let totalDiscountCents = 0
148
+ if (discountType === TypeDiscount.PERCENT) {
149
+ totalDiscountCents = Math.round((cartTotalCents * rawValue) / 100)
150
+ } else {
151
+ totalDiscountCents = toCents(rawValue)
152
+ // Cap to cart total
153
+ if (totalDiscountCents > cartTotalCents) {
154
+ totalDiscountCents = cartTotalCents
155
+ }
156
+ }
157
+
158
+ // If no discount to apply
159
+ if (totalDiscountCents <= 0) {
160
+ sendNotification?.({
161
+ title: 'Notice',
162
+ backgroundColor: 'info',
163
+ description: 'No discount applied.'
164
+ })
165
+ return {
166
+ ...state,
167
+ discountType,
168
+ discountPercent: discountType === TypeDiscount.PERCENT ? rawValue : +((totalDiscountCents / cartTotalCents) * 100).toFixed(2),
169
+ discountAmount: fromCents(totalDiscountCents),
170
+ discountBreakdown: []
171
+ }
172
+ }
173
+
174
+ // ---- Allocation using Largest Remainder Method (exact cents) ----
175
+ const rawAllocs = normalizedItems.map((it: any) => {return (it.itemTotalCents * totalDiscountCents) / cartTotalCents})
176
+ const floorAllocs = rawAllocs.map((v: any) => {return Math.floor(v)})
177
+ const remainders = rawAllocs.map((v: any, i: number) => {return { idx: i, rem: v - floorAllocs[i] }})
178
+ const sumFloor = floorAllocs.reduce((s: number, v: number) => {return s + v}, 0)
179
+ let remainingCents = totalDiscountCents - sumFloor
180
+
181
+ remainders.sort((a: any, b: any) => {return b.rem - a.rem})
182
+ const finalAllocs = [...floorAllocs]
183
+ for (let i = 0; i < remainders.length && remainingCents > 0; i++) {
184
+ finalAllocs[remainders[i].idx] += 1
185
+ remainingCents -= 1
186
+ }
187
+
188
+ // ---- Apply allocations to restored originals (base first, then extras) ----
189
+ const breakdown: { pId: string | number; discountAmount: number }[] = []
190
+ const newProducts = normalizedItems.map((it: any, idx: number) => {
191
+ const allocated = finalAllocs[idx] // cents
192
+ let remainingToTake = allocated
193
+
194
+ // Apply on base
195
+ const origBaseCents = it.baseCents
196
+ const usedOnBase = Math.min(origBaseCents, remainingToTake)
197
+ const baseAfter = origBaseCents - usedOnBase
198
+ remainingToTake -= usedOnBase
199
+
200
+ // Apply on extras proportionally if needed
201
+ let newExtrasCentsList = it.extrasCentsList.slice() // copy
202
+ if (remainingToTake > 0 && it.extrasTotalCents > 0) {
203
+ const extrasTotal = it.extrasTotalCents
204
+ // raw per-extra allocation
205
+ const rawExtraAllocs = newExtrasCentsList.map((exCents: number) => {return (exCents / extrasTotal) * remainingToTake})
206
+ const floorExtraAllocs = rawExtraAllocs.map((v: number) => {return Math.floor(v)})
207
+ const usedExtraFloor = floorExtraAllocs.reduce((s: number, v: number) => {return s + v}, 0)
208
+ let rest = remainingToTake - usedExtraFloor
209
+
210
+ const extraRemainders = rawExtraAllocs.map((v: number, i: number) => {return { idx: i, rem: v - floorExtraAllocs[i] }})
211
+ extraRemainders.sort((a: any, b: any) => {return b.rem - a.rem})
212
+ const finalExtraAllocs = [...floorExtraAllocs]
213
+ for (let k = 0; k < extraRemainders.length && rest > 0; k++) {
214
+ finalExtraAllocs[extraRemainders[k].idx] += 1
215
+ rest -= 1
216
+ }
217
+
218
+ // apply finalExtraAllocs with cap
219
+ newExtrasCentsList = newExtrasCentsList.map((exCents: number, i: number) => {
220
+ const reduceBy = Math.min(exCents, finalExtraAllocs[i])
221
+ return exCents - reduceBy
222
+ })
223
+
224
+ remainingToTake = 0
225
+ }
226
+
227
+ // Build updated product object:
228
+ const newBaseCents = baseAfter
229
+ const newProPrice = fromCents(newBaseCents)
230
+
231
+ const originalExtrasObjects = it.extrasNormalized.map((e: any) => {return e.originalExtraObject || {}})
232
+ const newDataExtra = originalExtrasObjects.map((exObj: any, i: number) => {
233
+ const newExtraPrice = fromCents(newExtrasCentsList[i] || 0)
234
+ // preserve originalNewExtraPrice on each extra (if not already)
235
+ return {
236
+ ...exObj,
237
+ originalNewExtraPrice: exObj.originalNewExtraPrice !== undefined ? exObj.originalNewExtraPrice : exObj.newExtraPrice,
238
+ newExtraPrice
239
+ }
240
+ })
241
+
242
+ const appliedDiscountCents = allocated - remainingToTake
243
+ breakdown.push({ pId: it.originalItem.pId, discountAmount: fromCents(appliedDiscountCents) })
244
+
245
+ const itemTotalCentsBefore = it.itemTotalCents || 0
246
+ const itemDiscountPercent = itemTotalCentsBefore > 0 ? +((appliedDiscountCents / itemTotalCentsBefore) * 100).toFixed(4) : 0
247
+
248
+ return {
249
+ ...it.originalItem,
250
+ // save originalProPrice if not present (so future calls can restore)
251
+ originalProPrice:
252
+ it.originalItem.originalProPrice !== undefined && it.originalItem.originalProPrice !== null
253
+ ? it.originalItem.originalProPrice
254
+ : fromCents(it.baseCents),
255
+ ProPrice: newProPrice,
256
+ dataExtra: newDataExtra,
257
+ // per-item metadata
258
+ discountAmount: fromCents(appliedDiscountCents),
259
+ discountPercent: itemDiscountPercent
260
+ }
261
+ })
262
+
263
+ // Final safety check & tiny correction if needed
264
+ const allocatedSumCents = breakdown.reduce((s, b) => {return s + toCents(Number(b.discountAmount) || 0)}, 0)
265
+ if (allocatedSumCents !== totalDiscountCents) {
266
+ const diff = totalDiscountCents - allocatedSumCents
267
+ if (newProducts.length > 0 && diff !== 0) {
268
+ const first = newProducts[0]
269
+ first.discountAmount = Number(first.discountAmount || 0) + fromCents(diff)
270
+ const adjustOnBase = Math.min(toCents(first.ProPrice), diff)
271
+ first.ProPrice = fromCents(Math.max(0, toCents(first.ProPrice) - adjustOnBase))
272
+ breakdown[0].discountAmount = Number(breakdown[0].discountAmount || 0) + fromCents(diff)
273
+ }
274
+ }
275
+
276
+ const overallPercent = +((totalDiscountCents / cartTotalCents) * 100).toFixed(4)
277
+
278
+ sendNotification?.({
279
+ title: 'Discount applied',
280
+ backgroundColor: 'success',
281
+ description: `${discountType === TypeDiscount.PERCENT ? rawValue + '%' : fromCents(totalDiscountCents)} discount applied successfully.`
282
+ })
283
+
284
+ return {
285
+ ...state,
286
+ PRODUCT: newProducts,
287
+ discountType,
288
+ discountPercent: discountType === TypeDiscount.PERCENT ? rawValue : overallPercent,
289
+ discountAmount: fromCents(totalDiscountCents),
290
+ discountBreakdown: breakdown
291
+ }
292
+ }