npm-pkg-hook 1.12.4 → 1.12.8

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 (354) hide show
  1. package/dist/index.js +57529 -0
  2. package/dist/index.js.map +1 -0
  3. package/dist/index.mjs +57315 -0
  4. package/dist/index.mjs.map +1 -0
  5. package/eslint.config.mts +153 -0
  6. package/package.json +30 -45
  7. package/src/config/client/errors.ts +39 -0
  8. package/src/hooks/addTenMinutes/{index.js → index.ts} +4 -4
  9. package/src/hooks/calculateLogLatHaversine/{index.js → index.ts} +15 -4
  10. package/src/hooks/completeSchedules/{index.js → index.ts} +4 -4
  11. package/src/hooks/convertToMilitaryTime/index.ts +18 -0
  12. package/src/hooks/generateStoreURL/index.ts +41 -0
  13. package/src/hooks/generateTemplate/{index.js → index.ts} +15 -11
  14. package/src/hooks/getCardType/{index.js → index.ts} +1 -1
  15. package/src/hooks/getCategoriesWithProduct/{index.js → index.ts} +7 -7
  16. package/src/hooks/getGlobalSession/index.ts +69 -0
  17. package/src/hooks/getSession/index.ts +72 -0
  18. package/src/hooks/getTodayTimestamps/{index.js → index.ts} +18 -12
  19. package/src/hooks/getTotalHours/index.ts +76 -0
  20. package/src/hooks/handleLogin/{index.js → index.ts} +4 -0
  21. package/src/hooks/index.ts +8 -2
  22. package/src/hooks/statusOpenStores/helpers/{index.js → index.ts} +24 -1
  23. package/src/hooks/statusOpenStores/index.ts +221 -0
  24. package/src/hooks/updateExtProductFoodsOptional/{index.js → index.ts} +12 -3
  25. package/src/hooks/useAcumulateDate/index.ts +18 -0
  26. package/src/hooks/useAllStoresPendingToRegister/{index.js → index.ts} +3 -0
  27. package/src/hooks/useAmountInput/index.ts +42 -32
  28. package/src/hooks/useAnimationText/{index.jsx → index.ts} +2 -2
  29. package/src/hooks/useAsideCart/{index.js → index.ts} +22 -19
  30. package/src/hooks/useBanner/{index.js → index.ts} +2 -1
  31. package/src/hooks/useCart/useCart/helpers/{index.js → index.ts} +10 -6
  32. package/src/hooks/useCart/useCart/{index.js → index.ts} +29 -17
  33. package/src/hooks/useCart/useGetCart/{index.js → index.ts} +2 -1
  34. package/src/hooks/useCatWithProduct/{index.js → index.ts} +11 -5
  35. package/src/hooks/useCatWithProduct/types/index.ts +104 -0
  36. package/src/hooks/useCatWithProductClient/{index.js → index.ts} +3 -2
  37. package/src/hooks/useCategoriesProduct/{index.js → index.ts} +2 -1
  38. package/src/hooks/useCategoryInStore/index.ts +167 -0
  39. package/src/hooks/useCategoryStore/{index.js → index.ts} +2 -1
  40. package/src/hooks/useCategoryStore/{queries.js → queries.ts} +2 -2
  41. package/src/hooks/useChartData/{index.js → index.ts} +9 -8
  42. package/src/hooks/useChartData/useChartData/{index.js → index.ts} +31 -30
  43. package/src/hooks/useChartData/useChartDataAllOrders/{index.js → index.ts} +2 -2
  44. package/src/hooks/useCheckbox/{index.js → index.ts} +1 -1
  45. package/src/hooks/useCities/{index.js → index.ts} +2 -1
  46. package/src/hooks/useClients/{index.js → index.ts} +2 -1
  47. package/src/hooks/useClients/{queries.js → queries.ts} +7 -4
  48. package/src/hooks/useColorByLetters/helpers/{alea.js → alea.ts} +19 -0
  49. package/src/hooks/useColorByLetters/helpers/{index.js → index.ts} +5 -1
  50. package/src/hooks/useColorByLetters/helpers/{mersenne_twister.js → mersenne_twister.ts} +1 -1
  51. package/src/hooks/useColorByLetters/{index.js → index.ts} +3 -6
  52. package/src/hooks/useConnection/{index.js → index.ts} +3 -3
  53. package/src/hooks/useCountries/{index.js → index.ts} +2 -1
  54. package/src/hooks/useCreateOrderStatusType/index.ts +8 -6
  55. package/src/hooks/useCreateProduct/helpers/{index.js → index.ts} +1 -1
  56. package/src/hooks/useCreateProduct/helpers/manageCacheDataCatProduct/{index.js → index.ts} +1 -1
  57. package/src/hooks/useCreateProduct/helpers/useEditImageProduct/{index.js → index.ts} +14 -8
  58. package/src/hooks/useCreateProduct/{index.js → index.ts} +22 -19
  59. package/src/hooks/useCreateStorePendingToRegister/{index.js → index.ts} +5 -1
  60. package/src/hooks/useDeleteExtraProductFoods/{index.js → index.ts} +2 -1
  61. package/src/hooks/useDeleteSubProductOptional/{index.js → index.ts} +5 -3
  62. package/src/hooks/useDeliveryTime/{index.js → index.ts} +3 -1
  63. package/src/hooks/useDepartments/{index.js → index.ts} +2 -1
  64. package/src/hooks/useDessert/{index.js → index.ts} +56 -52
  65. package/src/hooks/useDessertWithPrice/helpers/{index.js → index.ts} +4 -4
  66. package/src/hooks/useDessertWithPrice/{index.js → index.ts} +34 -26
  67. package/src/hooks/useDevWS/index.ts +43 -43
  68. package/src/hooks/useDevices/{useGetDevices.js → useGetDevices.ts} +3 -3
  69. package/src/hooks/useDevices/{useRegisterDevices.js → useRegisterDevices.ts} +5 -5
  70. package/src/hooks/useDownloadReports/helpers/downloadFileFromResponse.ts +17 -17
  71. package/src/hooks/useDownloadReports/useDownloadReportByDay/index.ts +4 -2
  72. package/src/hooks/useDownloadReports/useGetReportByDateRange/index.ts +3 -2
  73. package/src/hooks/useDrag/{index.js → index.ts} +16 -0
  74. package/src/hooks/useDropzone/{index.js → index.ts} +2 -2
  75. package/src/hooks/useDynamicAuth/{index.js → index.ts} +2 -1
  76. package/src/hooks/useEditCategory/{index.js → index.ts} +5 -5
  77. package/src/hooks/useEditOneExtProductFoodOptional/index.ts +28 -0
  78. package/src/hooks/useEditOneExtProductFoodOptional/{queries.js → queries.ts} +2 -2
  79. package/src/hooks/useEditSubProductOptional/index.ts +12 -0
  80. package/src/hooks/useEmployee/{index.js → index.ts} +2 -1
  81. package/src/hooks/useEmployee/{queries.js → queries.ts} +1 -1
  82. package/src/hooks/useEmployee/{useCreateEmployee.js → useCreateEmployee.ts} +6 -2
  83. package/src/hooks/useFavoriteStores/{index.js → index.ts} +5 -3
  84. package/src/hooks/useFetchMoreInteractions/index.jsx +26 -26
  85. package/src/hooks/useFilterConfigs/index.ts +173 -0
  86. package/src/hooks/useFingerprintjs/{index.js → index.ts} +29 -4
  87. package/src/hooks/useFormTools/{index.js → index.ts} +38 -11
  88. package/src/hooks/useFormatDate/{index.js → index.ts} +10 -5
  89. package/src/hooks/useFullScreenMode/{index.js → index.ts} +1 -5
  90. package/src/hooks/useGetAllLocationUser/{index.js → index.ts} +2 -1
  91. package/src/hooks/useGetAllLocationUser/{queries.js → queries.ts} +2 -2
  92. package/src/hooks/{useSales/useGetAllSales/index.js → useGetAllSales/index.ts} +3 -2
  93. package/src/hooks/useGetExtProductFoodsSubOptionalAll/{index.js → index.ts} +2 -1
  94. package/src/hooks/useGetFoodRecomended/{index.js → index.ts} +2 -1
  95. package/src/hooks/useGetMinPrice/{index.js → index.ts} +2 -1
  96. package/src/hooks/useGetOneStoreRating/{index.js → index.ts} +2 -1
  97. package/src/hooks/useGetStoreCookie/{index.js → index.ts} +1 -1
  98. package/src/hooks/useGoogleLogin/{index.js → index.ts} +14 -5
  99. package/src/hooks/useHover/{index.js → index.ts} +3 -0
  100. package/src/hooks/useImageOptimization/{index.js → index.ts} +4 -0
  101. package/src/hooks/useImageUploaderProduct/helper/canvasUtils.ts +25 -9
  102. package/src/hooks/useImageUploaderProduct/helper/getOrientation.ts +5 -4
  103. package/src/hooks/useImageUploaderProduct/index.ts +227 -224
  104. package/src/hooks/useImageWeight/{index.js → index.ts} +4 -0
  105. package/src/hooks/useImagesStore/{index.js → index.ts} +7 -5
  106. package/src/hooks/useImagesStore/{queries.js → queries.ts} +1 -1
  107. package/src/hooks/useIncomingOrders/{index.js → index.ts} +2 -1
  108. package/src/hooks/useIncomingOrders/{queries.js → queries.ts} +1 -1
  109. package/src/hooks/useIntersection/{index.js → index.ts} +1 -1
  110. package/src/hooks/useInventory/{queries.js → queries.ts} +2 -2
  111. package/src/hooks/useInventory/{useGetProductsInStock.js → useGetProductsInStock.ts} +2 -1
  112. package/src/hooks/useLazyScript/{index.js → index.ts} +3 -0
  113. package/src/hooks/useLocalSorage/{index.js → index.ts} +3 -3
  114. package/src/hooks/useLocationManager/{index.js → index.ts} +3 -3
  115. package/src/hooks/useLoginEmployeeInStore/{index.js → index.ts} +1 -1
  116. package/src/hooks/useLogout/helpers/BroadcastChannel.ts +74 -0
  117. package/src/hooks/useLogout/helpers/{apiBaseUrl.js → apiBaseUrl.ts} +4 -0
  118. package/src/hooks/useLogout/helpers/{fetchData.js → fetchData.ts} +10 -1
  119. package/src/hooks/useLogout/helpers/{getCsrfToken.js → getCsrfToken.ts} +8 -1
  120. package/src/hooks/useLogout/helpers/{index.js → index.ts} +14 -6
  121. package/src/hooks/useLogout/helpers/{logger.js → logger.ts} +26 -8
  122. package/src/hooks/useLogout/helpers/{parseUrl.js → parseUrl.ts} +5 -2
  123. package/src/hooks/useLogout/{index.js → index.ts} +29 -20
  124. package/src/hooks/useManageNewOrder/helpers/{index.js → index.ts} +1 -1
  125. package/src/hooks/useManageNewOrder/{index.js → index.ts} +6 -4
  126. package/src/hooks/useManageQueryParams/index.ts +120 -0
  127. package/src/hooks/useModules/helpers/{validateModules.js → validateModules.ts} +1 -1
  128. package/src/hooks/useModules/index.ts +124 -0
  129. package/src/hooks/useMouse/index.ts +23 -18
  130. package/src/hooks/useOrderStatusTypes/useOrderStatusTypes/index.ts +1 -1
  131. package/src/hooks/useOrderStatusTypes/useUpdateOrderStatusPriorities/index.ts +7 -5
  132. package/src/hooks/useOrders/{queries.js → queries.ts} +30 -20
  133. package/src/hooks/useOrders/useChangeOrderState/index.ts +79 -76
  134. package/src/hooks/useOrders/useOrdersFromStore/index.ts +4 -3
  135. package/src/hooks/usePaymentMethod/index.ts +3 -0
  136. package/src/hooks/usePaymentMethod/paymentMethod.gql.ts +62 -0
  137. package/src/hooks/usePaymentMethod/paymentMethod.types.ts +28 -0
  138. package/src/hooks/usePaymentMethod/useCreatePaymentMethod/index.ts +25 -0
  139. package/src/hooks/usePaymentMethod/useGetAllPaymentMethods/index.ts +19 -0
  140. package/src/hooks/usePaymentMethod/useGetPaymentMethod/index.ts +26 -0
  141. package/src/hooks/usePrintSaleTicket/index.ts +4 -0
  142. package/src/hooks/useProductsFood/{index.js → index.ts} +115 -27
  143. package/src/hooks/useProductsFood/{queriesStore.js → queriesStore.ts} +1 -1
  144. package/src/hooks/useProductsFood/{useEditProduct.js → useEditProduct.ts} +2 -1
  145. package/src/hooks/useProductsFood/{usetagsProducts.js → usetagsProducts.ts} +6 -3
  146. package/src/hooks/useProviders/useProvidersCreateStore/{index.js → index.ts} +2 -1
  147. package/src/hooks/useProviders/useProvidersDataStore/{index.js → index.ts} +2 -1
  148. package/src/hooks/useProvidersStore/{index.js → index.ts} +2 -1
  149. package/src/hooks/usePushNotificationOrder/{index.js → index.ts} +1 -1
  150. package/src/hooks/usePushNotifications/helpers/{index.js → index.ts} +9 -0
  151. package/src/hooks/usePushNotifications/{index.js → index.ts} +2 -1
  152. package/src/hooks/useQueryLocationsMap/{index.js → index.ts} +2 -1
  153. package/src/hooks/useRatingArrayData/{index.js → index.ts} +4 -4
  154. package/src/hooks/useRatingArrayData/{queries.js → queries.ts} +1 -1
  155. package/src/hooks/useRemoveExtraProductFoodsOptional/{index.js → index.ts} +2 -1
  156. package/src/hooks/useReport/{index.js → index.ts} +2 -1
  157. package/src/hooks/useReport/{queries.js → queries.ts} +2 -53
  158. package/src/hooks/useRestaurant/helpers/{index.js → index.ts} +4 -0
  159. package/src/hooks/useRestaurant/helpers/{manageStatusOpen.js → manageStatusOpen.ts} +1 -1
  160. package/src/hooks/useRestaurant/{index.js → index.ts} +5 -3
  161. package/src/hooks/useRoads/{index.js → index.ts} +2 -1
  162. package/src/hooks/useRoles/{queries.js → queries.ts} +1 -1
  163. package/src/hooks/useRoles/{useCreateRole.js → useCreateRole.ts} +4 -1
  164. package/src/hooks/useRoles/{useGetRoles.js → useGetRoles.ts} +2 -1
  165. package/src/hooks/useSales/helpers/add-product.utils.ts +120 -0
  166. package/src/hooks/useSales/helpers/apply-discount-to-cart.utils.ts +292 -0
  167. package/src/hooks/useSales/helpers/comment-product.utils.ts +41 -0
  168. package/src/hooks/useSales/helpers/constants/index.ts +38 -0
  169. package/src/hooks/useSales/helpers/extras.utils.ts +42 -0
  170. package/src/hooks/useSales/helpers/filterProductsByCarProId.utils.ts +17 -0
  171. package/src/hooks/useSales/helpers/increment-product-quantity.utils.ts +76 -0
  172. package/src/hooks/useSales/helpers/index.ts +3 -0
  173. package/src/hooks/useSales/helpers/initializer.utils.ts +22 -0
  174. package/src/hooks/useSales/helpers/isStockInsufficient.ts +3 -0
  175. package/src/hooks/useSales/helpers/remove-product.utils.test.ts +49 -0
  176. package/src/hooks/useSales/helpers/remove-product.utils.ts +34 -0
  177. package/src/hooks/useSales/helpers/resolveProduct.ts +29 -0
  178. package/src/hooks/useSales/helpers/useAddToCart.ts +64 -0
  179. package/src/hooks/useSales/{index.js → index.ts} +559 -522
  180. package/src/hooks/useSales/{queries.js → queries.ts} +187 -79
  181. package/src/hooks/useSales/types/index.ts +206 -0
  182. package/src/hooks/useSales/types/use-sales.types.ts +8 -0
  183. package/src/hooks/useSales/{useGetSale.js → useGetSale.ts} +10 -2
  184. package/src/hooks/useSales/{useTotalSales.js → useTotalSales.ts} +2 -1
  185. package/src/hooks/useSaveAvailableProduct/helpers/{index.js → index.ts} +4 -4
  186. package/src/hooks/useSaveAvailableProduct/{index.js → index.ts} +2 -1
  187. package/src/hooks/useSaveLocation/{index.js → index.ts} +2 -1
  188. package/src/hooks/useSaveLocation/{queries.js → queries.ts} +1 -1
  189. package/src/hooks/useSchedule/{index.jsx → index.ts} +14 -1
  190. package/src/hooks/useSchedule/{index.js → schedule.ts} +2 -1
  191. package/src/hooks/useScheduleData/{index.js → index.ts} +21 -9
  192. package/src/hooks/useSetImageProducts/{index.js → index.ts} +4 -2
  193. package/src/hooks/useSetupSchedule/{index.js → index.ts} +40 -28
  194. package/src/hooks/useStatusOpenStore/helpers/{index.js → index.ts} +24 -1
  195. package/src/hooks/useStatusOpenStore/{index.js → index.ts} +30 -14
  196. package/src/hooks/useStatusOrdersClient/{index.js → index.ts} +3 -2
  197. package/src/hooks/useStatusOrdersClient/{queries.js → queries.ts} +2 -2
  198. package/src/hooks/useStock/index.ts +1 -0
  199. package/src/hooks/useStock/useStockUpdatedAllSubscription.ts +40 -0
  200. package/src/hooks/useStockMovements/helpers/{index.js → index.ts} +1 -1
  201. package/src/hooks/useStockMovements/{index.js → index.ts} +4 -3
  202. package/src/hooks/useStore/{index.js → index.ts} +30 -27
  203. package/src/hooks/useStoreContacts/{index.js → index.ts} +11 -5
  204. package/src/hooks/useStoreTable/{useStoreTableCreate.js → useStoreTableCreate.ts} +3 -2
  205. package/src/hooks/useStoreTable/{useStoreTables.js → useStoreTables.ts} +2 -1
  206. package/src/hooks/useSubscriptionValidation/index.ts +112 -0
  207. package/src/hooks/useTagProducts/useDeleteOneTag.ts +66 -66
  208. package/src/hooks/useTagProducts/useGetAllTags.ts +2 -2
  209. package/src/hooks/useTagProducts/useRegisterMultipleTags.ts +27 -26
  210. package/src/hooks/useTheme/index.ts +65 -0
  211. package/src/hooks/useTimeAgo/{useTimeAgo.js → useTimeAgo.ts} +7 -7
  212. package/src/hooks/useTokenCards/{index.js → index.ts} +7 -3
  213. package/src/hooks/useUpdateCart/{index.js → index.ts} +3 -2
  214. package/src/hooks/useUpdateCartCookie/{index.js → index.ts} +23 -6
  215. package/src/hooks/useUpdateDashboardComponent/index.ts +11 -11
  216. package/src/hooks/useUpdateExtProductFoodsSubOptional/{index.js → index.ts} +2 -1
  217. package/src/hooks/useUpdateModuleOrder/{index.js → index.ts} +2 -2
  218. package/src/hooks/useUpdateMultipleExtProduct/{index.js → index.ts} +2 -1
  219. package/src/hooks/useUpdateMultipleProducts/{index.js → index.ts} +57 -20
  220. package/src/hooks/useUploadProducts/helpers/{parseNumber.js → parseNumber.ts} +3 -3
  221. package/src/hooks/useUploadProducts/{index.js → index.ts} +89 -69
  222. package/src/hooks/useUpsertGoal/{index.js → index.ts} +1 -1
  223. package/src/hooks/useUser/{index.js → index.ts} +5 -4
  224. package/src/hooks/useWeeklyStockMovement/helpers/{index.js → index.ts} +3 -3
  225. package/src/hooks/useWeeklyStockMovement/{index.js → index.ts} +4 -3
  226. package/src/hooks/useWindowSize/{index.js → index.ts} +9 -2
  227. package/src/index.ts +13 -0
  228. package/src/security/index.ts +1 -0
  229. package/src/services/index.ts +1 -0
  230. package/src/utils/UtilDateRange.ts +56 -0
  231. package/src/utils/generateCode.ts +222 -0
  232. package/src/utils/index.ts +2 -0
  233. package/src/utils/{index.js → utils.ts} +69 -31
  234. package/tsconfig.eslint.json +16 -0
  235. package/tsconfig.json +18 -2
  236. package/tsup.config.ts +24 -0
  237. package/.eslintrc.js +0 -38
  238. package/.eslintrc.json +0 -127
  239. package/src/config/client/errors.js +0 -26
  240. package/src/hooks/convertToMilitaryTime/index.js +0 -14
  241. package/src/hooks/generateStoreURL/index.js +0 -38
  242. package/src/hooks/getGlobalSession/index.js +0 -49
  243. package/src/hooks/getSession/index.js +0 -18
  244. package/src/hooks/getTotalHours/index.js +0 -48
  245. package/src/hooks/statusOpenStores/index.js +0 -156
  246. package/src/hooks/useAcumulateDate/index.js +0 -16
  247. package/src/hooks/useCategoryInStore/index.js +0 -100
  248. package/src/hooks/useEditOneExtProductFoodOptional/index.js +0 -28
  249. package/src/hooks/useEditSubProductOptional/index.js +0 -11
  250. package/src/hooks/useLogout/helpers/BroadcastChannel.js +0 -31
  251. package/src/hooks/useManageQueryParams/index.js +0 -40
  252. package/src/hooks/useModules/index.js +0 -58
  253. package/src/hooks/useSales/helpers/index.js +0 -55
  254. package/src/hooks/useSubscriptionValidation/index.js +0 -41
  255. package/src/index.jsx +0 -9
  256. package/src/security/index.js +0 -1
  257. package/src/utils/UtilDateRange.js +0 -31
  258. /package/src/config/client/{index.js → index.ts} +0 -0
  259. /package/src/config/content/{index.js → index.ts} +0 -0
  260. /package/src/cookies/{index.js → index.ts} +0 -0
  261. /package/src/hooks/getCategoriesWithProduct/helpers/{index.js → index.ts} +0 -0
  262. /package/src/hooks/isTokenExpired/{index.js → index.ts} +0 -0
  263. /package/src/hooks/newMessageSubscription/{index.js → index.ts} +0 -0
  264. /package/src/hooks/newStoreOrderSubscription/{index.js → index.ts} +0 -0
  265. /package/src/hooks/useAnimationFrame/{index.js → index.ts} +0 -0
  266. /package/src/hooks/useAsideCart/helpers/{index.js → index.ts} +0 -0
  267. /package/src/hooks/useAsideCart/{queries.js → queries.ts} +0 -0
  268. /package/src/hooks/useCart/{index.js → index.ts} +0 -0
  269. /package/src/hooks/useCart/{queries.js → queries.ts} +0 -0
  270. /package/src/hooks/useCatWithProduct/{queries.js → queries.ts} +0 -0
  271. /package/src/hooks/useCatWithProductClient/{queries.js → queries.ts} +0 -0
  272. /package/src/hooks/useCategoriesProduct/{queries.js → queries.ts} +0 -0
  273. /package/src/hooks/useCategoryInStore/{queries.js → queries.ts} +0 -0
  274. /package/src/hooks/useChatRoomSubscription/{index.js → index.ts} +0 -0
  275. /package/src/hooks/useCities/{queries.js → queries.ts} +0 -0
  276. /package/src/hooks/useColorByLetters/helpers/{colors.js → colors.ts} +0 -0
  277. /package/src/hooks/useCountries/{queries.js → queries.ts} +0 -0
  278. /package/src/hooks/useCreateDeliveryTime/{index.js → index.ts} +0 -0
  279. /package/src/hooks/useCreateStorePendingToRegister/{queries.js → queries.ts} +0 -0
  280. /package/src/hooks/useDashboardComponents/{index.js → index.ts} +0 -0
  281. /package/src/hooks/useDeleteSubProductOptional/{queries.js → queries.ts} +0 -0
  282. /package/src/hooks/useDepartments/{queries.js → queries.ts} +0 -0
  283. /package/src/hooks/useDessert/helpers/{index.js → index.ts} +0 -0
  284. /package/src/hooks/useDessertWithPrice/{queries.js → queries.ts} +0 -0
  285. /package/src/hooks/useDevices/{index.js → index.ts} +0 -0
  286. /package/src/hooks/useDevices/{queries.js → queries.ts} +0 -0
  287. /package/src/hooks/useDynamicAuth/{queries.js → queries.ts} +0 -0
  288. /package/src/hooks/useEditSubProductOptional/{queries.js → queries.ts} +0 -0
  289. /package/src/hooks/useEvent/{index.js → index.ts} +0 -0
  290. /package/src/hooks/useFavoriteStores/{queries.js → queries.ts} +0 -0
  291. /package/src/hooks/useFetchJson/{index.js → index.ts} +0 -0
  292. /package/src/hooks/useFormatNumberPhone/{index.js → index.ts} +0 -0
  293. /package/src/hooks/useGenerateNumberArray/{index.js → index.ts} +0 -0
  294. /package/src/hooks/useGetCookies/{index.js → index.ts} +0 -0
  295. /package/src/hooks/useGetFoodRecomended/{queries.js → queries.ts} +0 -0
  296. /package/src/hooks/useGetMessagesToRoom/{index.js → index.ts} +0 -0
  297. /package/src/hooks/useGetMinPrice/{queries.js → queries.ts} +0 -0
  298. /package/src/hooks/useGetOneStoreRating/{queries.js → queries.ts} +0 -0
  299. /package/src/hooks/useGetSalesAmountToday/{index.js → index.ts} +0 -0
  300. /package/src/hooks/useGoogleLogin/{loadScript.js → loadScript.ts} +0 -0
  301. /package/src/hooks/useGoogleLogin/{removeScript.js → removeScript.ts} +0 -0
  302. /package/src/hooks/useImagesStore/utils/{index.js → index.ts} +0 -0
  303. /package/src/hooks/useInnerHtml/{index.js → index.ts} +0 -0
  304. /package/src/hooks/useInventory/{index.js → index.ts} +0 -0
  305. /package/src/hooks/useInventory/{useUpdateManageStock.js → useUpdateManageStock.ts} +0 -0
  306. /package/src/hooks/useKeypress/{index.js → index.ts} +0 -0
  307. /package/src/hooks/useLocalBackendIp/{index.js → index.ts} +0 -0
  308. /package/src/hooks/useLocationNavigate/{index.js → index.ts} +0 -0
  309. /package/src/hooks/useManageNewOrder/helpers/{mock.js → mock.ts} +0 -0
  310. /package/src/hooks/useMobile/{index.js → index.ts} +0 -0
  311. /package/src/hooks/useModules/helpers/{index.js → index.ts} +0 -0
  312. /package/src/hooks/useMutateHeight/{index.js → index.ts} +0 -0
  313. /package/src/hooks/useOrderClient/{index.js → index.ts} +0 -0
  314. /package/src/hooks/useOrders/{index.js → index.ts} +0 -0
  315. /package/src/hooks/usePWAInstall/{index.js → index.ts} +0 -0
  316. /package/src/{services/index.js → hooks/useProductsFood/types/index.ts} +0 -0
  317. /package/src/hooks/useProviders/{index.js → index.ts} +0 -0
  318. /package/src/hooks/useProviders/{queries.js → queries.ts} +0 -0
  319. /package/src/hooks/useProvidersStore/{queries.js → queries.ts} +0 -0
  320. /package/src/hooks/useQueryLocationsMap/{queries.js → queries.ts} +0 -0
  321. /package/src/hooks/useReactToPrint/{index.js → index.txt} +0 -0
  322. /package/src/hooks/useRemoveExtraProductFoodsOptional/{queries.js → queries.ts} +0 -0
  323. /package/src/hooks/useRestaurant/{queries.js → queries.ts} +0 -0
  324. /package/src/hooks/useRoads/{queries.js → queries.ts} +0 -0
  325. /package/src/hooks/useRoles/{index.js → index.ts} +0 -0
  326. /package/src/hooks/useRoles/{useRemoveRoles.js → useRemoveRoles.ts} +0 -0
  327. /package/src/hooks/useRoles/{useUpdateRolesPriority.js → useUpdateRolesPriority.ts} +0 -0
  328. /package/src/hooks/useSaveAvailableProduct/{queries.js → queries.ts} +0 -0
  329. /package/src/hooks/useSchedule/{queries.js → queries.ts} +0 -0
  330. /package/src/hooks/useScroll/{index.js → index.ts} +0 -0
  331. /package/src/hooks/useScrollRotate/{index.js → index.ts} +0 -0
  332. /package/src/hooks/useSetImageProducts/{queries.js → queries.ts} +0 -0
  333. /package/src/hooks/useSetSession/{index.js → index.ts} +0 -0
  334. /package/src/hooks/useSetState/{index.js → index.ts} +0 -0
  335. /package/src/hooks/useSetupSchedule/helpers/{index.js → index.ts} +0 -0
  336. /package/src/hooks/useStatusOrdersClient/helpers/{index.js → index.ts} +0 -0
  337. /package/src/hooks/useStore/{queries.js → queries.ts} +0 -0
  338. /package/src/hooks/useStoreCalendar/{index.js → index.ts} +0 -0
  339. /package/src/hooks/useStoreContacts/{queries.js → queries.ts} +0 -0
  340. /package/src/hooks/useStoreTable/{index.js → index.ts} +0 -0
  341. /package/src/hooks/useStoreTable/{queries.js → queries.ts} +0 -0
  342. /package/src/hooks/useTopProductsMovements/{index.js → index.ts} +0 -0
  343. /package/src/hooks/useTotalAllSales/{index.js → index.ts} +0 -0
  344. /package/src/hooks/useTotalProductsInStock/{index.js → index.ts} +0 -0
  345. /package/src/hooks/useTotalProductsSold/{index.js → index.ts} +0 -0
  346. /package/src/hooks/useTotalProductsSolded/{index.js → index.ts} +0 -0
  347. /package/src/hooks/useUpdateExistingOrders/{index.js → index.ts} +0 -0
  348. /package/src/hooks/useUpdateMultipleExtProduct/{queries.js → queries.ts} +0 -0
  349. /package/src/hooks/useUpdateMultipleProducts/{queries.js → queries.ts} +0 -0
  350. /package/src/hooks/useUploadProducts/helpers/{index.js → index.ts} +0 -0
  351. /package/src/hooks/useUploadProducts/helpers/{validateProductDataExcel.js → validateProductDataExcel.ts} +0 -0
  352. /package/src/hooks/useUser/{queries.js → queries.ts} +0 -0
  353. /package/src/mock/dessert/{index.js → index.ts} +0 -0
  354. /package/src/mock/{index.js → index.ts} +0 -0
@@ -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
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Adds or removes a comment from a product in cart.
3
+ * - Pure function (reducer-safe)
4
+ * - Supports delete mode
5
+ * - Avoids unnecessary re-renders
6
+ *
7
+ * @param {Object} params
8
+ * @param {Object} params.state - Current reducer state
9
+ * @param {string | number} params.productId - Product identifier
10
+ * @param {string} params.comment - Comment text
11
+ * @param {boolean} params.deleteValue - If true, removes the comment
12
+ *
13
+ * @returns {Object} Updated state
14
+ */
15
+ export const commentProduct = ({
16
+ state,
17
+ productId,
18
+ comment = '',
19
+ deleteValue = false
20
+ }: {
21
+ state: any;
22
+ productId: string | number;
23
+ comment?: string;
24
+ deleteValue?: boolean;
25
+ }) => {
26
+ if (!productId) return state
27
+
28
+ const PRODUCT = state.PRODUCT.map((item: any) =>
29
+ {return item.pId === productId
30
+ ? {
31
+ ...item,
32
+ comment: deleteValue ? '' : comment
33
+ }
34
+ : item}
35
+ )
36
+
37
+ return {
38
+ ...state,
39
+ PRODUCT
40
+ }
41
+ }
@@ -0,0 +1,38 @@
1
+ import { SalesState } from '../../types'
2
+ import { TypeDiscount } from '../apply-discount-to-cart.utils'
3
+
4
+ export enum SalesActionTypes {
5
+ ADD_TO_CART = 'ADD_TO_CART',
6
+ ADD_PRODUCT = 'ADD_PRODUCT',
7
+ REMOVE_PRODUCT = 'REMOVE_PRODUCT',
8
+ REMOVE_PRODUCT_TO_CART = 'REMOVE_PRODUCT_TO_CART',
9
+ ON_CHANGE = 'ON_CHANGE',
10
+ UPDATE_SUCCESS_QUANTITY_EDITING_PRODUCT = 'UPDATE_SUCCESS_QUANTITY_EDITING_PRODUCT',
11
+ CANCEL_UPDATE_QUANTITY_EDITING_PRODUCT = 'CANCEL_UPDATE_QUANTITY_EDITING_PRODUCT',
12
+ REMOVE_ALL_PRODUCTS = 'REMOVE_ALL_PRODUCTS',
13
+ TOGGLE_FREE_PRODUCT = 'TOGGLE_FREE_PRODUCT',
14
+ TOGGLE_EDITING_PRODUCT = 'TOGGLE_EDITING_PRODUCT',
15
+ INCREMENT = 'INCREMENT',
16
+ DECREMENT = 'DECREMENT',
17
+ PUT_COMMENT = 'PUT_COMMENT',
18
+ PUT_EXTRA_PRODUCTS_AND_OPTIONAL_PRODUCT = 'PUT_EXTRA_PRODUCTS_AND_OPTIONAL_PRODUCT',
19
+ PRICE_RANGE = 'PRICE_RANGE',
20
+ SORT = 'SORT',
21
+ PAYMENT_METHOD = 'PAYMENT_METHOD',
22
+ APPLY_DISCOUNT = 'APPLY_DISCOUNT'
23
+ }
24
+ export const initialStateSales: SalesState = {
25
+ animateType: '',
26
+ counter: 0,
27
+ discountAmount: 0,
28
+ discountPercent: 0,
29
+ discountType: TypeDiscount.PERCENT,
30
+ itemsInCart: 0,
31
+ payId: '',
32
+ priceRange: 0,
33
+ PRODUCT: [],
34
+ sortBy: null,
35
+ startAnimateUp: '',
36
+ totalAmount: 0,
37
+ totalPrice: 0
38
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * extrasUtils.ts
3
+ * Increment/decrement extras handling as pure functions returning new arrays.
4
+ */
5
+
6
+ /**
7
+ * Increment extra entry
8
+ * @param {Array} dataExtra
9
+ * @param {string|number} exPid
10
+ * @returns {Array}
11
+ */
12
+ export const incrementExtra = (dataExtra = [], exPid: string | number) => {
13
+ if (!Array.isArray(dataExtra)) return []
14
+ return dataExtra.map((producto: any) => {
15
+ if (producto.exPid === exPid) {
16
+ const initialQuantity = producto.quantity ? producto.quantity : 0
17
+ const newQuantity = initialQuantity + 1
18
+ const newExtraPrice = (producto.extraPrice || 0) * newQuantity
19
+ return { ...producto, quantity: newQuantity, newExtraPrice }
20
+ }
21
+ return producto
22
+ })
23
+ }
24
+
25
+ /**
26
+ * Decrement extra entry
27
+ * @param {Array} dataExtra
28
+ * @param {string|number} exPid
29
+ * @returns {Array}
30
+ */
31
+ export const decrementExtra = (dataExtra = [], exPid: string | number) => {
32
+ if (!Array.isArray(dataExtra)) return []
33
+ return dataExtra.map((producto: any) => {
34
+ if (producto.exPid === exPid) {
35
+ const { quantity = 0, extraPrice = 0 } = producto
36
+ const newQuantity = Math.max(quantity - 1, 0)
37
+ const newExtraPrice = newQuantity === 0 ? extraPrice : extraPrice * newQuantity
38
+ return { ...producto, quantity: newQuantity, newExtraPrice }
39
+ }
40
+ return producto
41
+ })
42
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Filter products by carProId.
3
+ * @param {Array} products - Array of products to filter.
4
+ * @param {Array} carProIds - Array of carProId to filter by.
5
+ * @returns {Array} - Filtered array of products or all products if no matches found.
6
+ */
7
+ export function filterProductsByCarProId(products: any[], carProIds: (string | number)[]) {
8
+ if (!Array.isArray(products)) {
9
+ return []
10
+ }
11
+
12
+ if (!Array.isArray(carProIds) || carProIds.length === 0) {
13
+ return products
14
+ }
15
+
16
+ return products.filter(product => {return carProIds.includes(product.carProId)})
17
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Increments product quantity in cart safely.
3
+ * - Validates stock
4
+ * - Respects free mode
5
+ * - Avoids unnecessary mutations
6
+ *
7
+ * @param {Object} params
8
+ * @param {Object} params.state - Current reducer state
9
+ * @param {string | number} params.productId - Product identifier
10
+ * @param {Object[]} params.productsFood - Source products list
11
+ * @param {Function} params.sendNotification - Notification handler
12
+ *
13
+ * @returns {Object} Updated state
14
+ */
15
+ export const incrementProductQuantity = ({
16
+ state,
17
+ productId,
18
+ productsFood = [],
19
+ sendNotification = () => {}
20
+ }: {
21
+ state: any;
22
+ productId: string | number;
23
+ productsFood: any[];
24
+ sendNotification?: Function;
25
+ }) => {
26
+ const sourceProduct = productsFood.find(
27
+ (product) => {return product.pId === productId}
28
+ )
29
+
30
+ if (!sourceProduct) return state
31
+
32
+ const PRODUCT = state.PRODUCT.map((item: any) => {
33
+ if (item.pId !== productId) return item
34
+
35
+ const {
36
+ stock = 0,
37
+ manageStock,
38
+ ProPrice: unitPrice = 0
39
+ } = sourceProduct
40
+
41
+ const isFree = Boolean(item.free)
42
+ const newQuantity = item.ProQuantity + 1
43
+
44
+ // Stock = 0
45
+ if (stock === 0) {
46
+ sendNotification({
47
+ title: 'Sin stock',
48
+ backgroundColor: 'warning',
49
+ description: `El producto ${item.pName} está agotado y no puede ser añadido al carrito.`
50
+ })
51
+ return item
52
+ }
53
+
54
+ // Stock exceeded
55
+ if (manageStock && newQuantity > stock) {
56
+ sendNotification({
57
+ title: 'Stock insuficiente',
58
+ backgroundColor: 'warning',
59
+ description: `No puedes agregar más unidades de ${item.pName}, stock disponible: ${stock}`
60
+ })
61
+ return item
62
+ }
63
+
64
+ return {
65
+ ...item,
66
+ ProQuantity: newQuantity,
67
+ ProPrice: isFree ? 0 : newQuantity * unitPrice
68
+ }
69
+ })
70
+
71
+ return {
72
+ ...state,
73
+ counter: state.counter + 1,
74
+ PRODUCT
75
+ }
76
+ }
@@ -0,0 +1,3 @@
1
+ export * from './extras.utils'
2
+ export * from './remove-product.utils'
3
+ export * from './filterProductsByCarProId.utils'
@@ -0,0 +1,22 @@
1
+ import { Cookies } from '../../../cookies'
2
+ import { SalesState } from '../types'
3
+
4
+ import { initialStateSales } from './constants'
5
+
6
+ /**
7
+ * Initializes sales state from cookies or fallback state
8
+ * @param initialValue
9
+ */
10
+ export const initializer = (
11
+ initialValue: SalesState = initialStateSales
12
+ ): SalesState => {
13
+ try {
14
+ const raw = Cookies.get(process.env.NEXT_LOCAL_SALES_STORE)
15
+
16
+ if (!raw) return initialValue
17
+
18
+ return JSON.parse(raw) as SalesState
19
+ } catch {
20
+ return initialValue
21
+ }
22
+ }
@@ -0,0 +1,3 @@
1
+ export const isStockInsufficient = (currentQuantity: number, stock: number) => {
2
+ return currentQuantity >= stock
3
+ }
@@ -0,0 +1,49 @@
1
+ import { handleRemoveProduct } from './remove-product.utils'
2
+
3
+ describe('handleRemoveProduct', () => {
4
+ test('decrements product quantity and updates price when ProQuantity > 1', () => {
5
+ const state = {
6
+ counter: 5,
7
+ totalAmount: 100,
8
+ PRODUCT: [
9
+ { pId: 'p1', ProQuantity: 3, ProPrice: 30 },
10
+ { pId: 'p2', ProQuantity: 1, ProPrice: 20 }
11
+ ]
12
+ }
13
+ const productsFood = [{ pId: 'p1', ProPrice: 10 }]
14
+ const action = { payload: { pId: 'p1', ProQuantity: 3, ProPrice: 10 } }
15
+
16
+ const result = handleRemoveProduct(state as any, action as any, productsFood as any)
17
+
18
+ expect(result.counter).toBe(4)
19
+ expect(result.totalAmount).toBe(90)
20
+ expect(result.PRODUCT).toHaveLength(2)
21
+
22
+ const updated = result.PRODUCT.find((p: any) => {return p.pId === 'p1'})
23
+ expect(updated).toEqual({ pId: 'p1', ProQuantity: 2, ProPrice: 20 })
24
+
25
+ const unchanged = result.PRODUCT.find((p: any) => {return p.pId === 'p2'})
26
+ expect(unchanged).toEqual({ pId: 'p2', ProQuantity: 1, ProPrice: 20 })
27
+ })
28
+
29
+ test('removes product from PRODUCT when ProQuantity === 1', () => {
30
+ const state = {
31
+ counter: 2,
32
+ totalAmount: 30,
33
+ PRODUCT: [
34
+ { pId: 'p1', ProQuantity: 1, ProPrice: 15 },
35
+ { pId: 'p2', ProQuantity: 1, ProPrice: 15 }
36
+ ]
37
+ }
38
+ const productsFood = [{ pId: 'p1', ProPrice: 15 }]
39
+ const action = { payload: { pId: 'p1', ProQuantity: 1, ProPrice: 15 } }
40
+
41
+ const result = handleRemoveProduct(state as any, action as any, productsFood as any)
42
+
43
+ expect(result.counter).toBe(1)
44
+ expect(result.totalAmount).toBe(15)
45
+ expect(result.PRODUCT).toHaveLength(1)
46
+ expect(result.PRODUCT.find((p: any) => {return p.pId === 'p1'})).toBeUndefined()
47
+ expect(result.PRODUCT[0]).toEqual({ pId: 'p2', ProQuantity: 1, ProPrice: 15 })
48
+ })
49
+ })
@@ -0,0 +1,34 @@
1
+ /**
2
+ *
3
+ * @param state
4
+ * @param action
5
+ * @param productsFood
6
+ */
7
+ export function handleRemoveProduct(state: any, action: any, productsFood: any) {
8
+ const productExist = state?.PRODUCT.find((items: any) => {
9
+ return items.pId === action.payload.pId
10
+ })
11
+ const OurProduct = productsFood.find((items: any) => {
12
+ return items.pId === action.payload.pId
13
+ })
14
+ return {
15
+ ...state,
16
+ counter: state.counter - 1,
17
+ totalAmount: state.totalAmount - action.payload.ProPrice,
18
+ PRODUCT:
19
+ action.payload.ProQuantity > 1
20
+ ? state.PRODUCT.map((items: any) => {
21
+ return items.pId === action.payload.pId
22
+ ? {
23
+ ...items,
24
+ pId: action.payload.pId,
25
+ ProQuantity: items.ProQuantity - 1,
26
+ ProPrice: productExist.ProPrice - OurProduct?.ProPrice
27
+ }
28
+ : items
29
+ })
30
+ : state.PRODUCT.filter((items: any) => {
31
+ return items.pId !== action.payload.pId
32
+ })
33
+ }
34
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * resolveProduct - resolve product from local memory or fetch from API
3
+ * @param {{ pId: string, productsFood?: any[], fetchProduct: (params:{pId:string}) => Promise<any> }} args
4
+ * @returns {Promise<any|null>} resolved product or null if not found
5
+ */
6
+ export const resolveProduct = async ({
7
+ pId,
8
+ productsFood = [],
9
+ fetchProduct
10
+ }: {
11
+ pId: string
12
+ productsFood?: any[]
13
+ fetchProduct: (params: { pId: string }) => Promise<any>
14
+ }): Promise<any | null> => {
15
+ if (!pId) return null
16
+
17
+ // fast memory lookup
18
+ const mem = productsFood.find((it: any) => {return it?.pId === pId})
19
+ if (mem) return mem
20
+
21
+ // fetch from API and normalize
22
+ try {
23
+ const res = await fetchProduct({ pId })
24
+ return res?.data?.productFoodsOne ?? null
25
+ } catch (err) {
26
+ // bubble up null — caller will notify
27
+ return null
28
+ }
29
+ }