npm-pkg-hook 1.12.7 → 1.12.9

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 (348) hide show
  1. package/.babelrc +0 -0
  2. package/.env +5 -0
  3. package/.github/pull_request_template.md +18 -0
  4. package/.github/workflows/pepeline.yaml +30 -0
  5. package/dist/index.js +47752 -10080
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.mjs +47068 -9612
  8. package/dist/index.mjs.map +1 -0
  9. package/eslint.config.mts +153 -0
  10. package/expire.json +1 -0
  11. package/jsconfig.json +28 -0
  12. package/package.json +24 -61
  13. package/script.txt +7 -0
  14. package/src/config/client/errors.ts +39 -0
  15. package/src/config/client/index.ts +1 -0
  16. package/src/config/content/en.json +5 -0
  17. package/src/config/content/es.json +5 -0
  18. package/src/config/content/index.ts +16 -0
  19. package/src/cookies/index.ts +3 -0
  20. package/src/hooks/addTenMinutes/index.ts +14 -0
  21. package/src/hooks/calculateLogLatHaversine/index.ts +41 -0
  22. package/src/hooks/completeSchedules/index.ts +22 -0
  23. package/src/hooks/convertToMilitaryTime/index.ts +18 -0
  24. package/src/hooks/generateStoreURL/index.ts +41 -0
  25. package/src/hooks/generateTemplate/index.ts +66 -0
  26. package/src/hooks/getCardType/index.ts +24 -0
  27. package/src/hooks/getCategoriesWithProduct/helpers/index.ts +7 -0
  28. package/src/hooks/getCategoriesWithProduct/index.ts +62 -0
  29. package/src/hooks/getGlobalSession/index.ts +69 -0
  30. package/src/hooks/getSession/index.ts +72 -0
  31. package/src/hooks/getTodayTimestamps/index.ts +70 -0
  32. package/src/hooks/getTotalHours/index.ts +76 -0
  33. package/src/hooks/handleLogin/index.ts +14 -0
  34. package/src/hooks/index.ts +153 -0
  35. package/src/hooks/isTokenExpired/index.ts +17 -0
  36. package/src/hooks/newMessageSubscription/index.ts +28 -0
  37. package/src/hooks/newStoreOrderSubscription/index.ts +26 -0
  38. package/src/hooks/statusOpenStores/helpers/index.ts +124 -0
  39. package/src/hooks/statusOpenStores/index.ts +221 -0
  40. package/src/hooks/updateExtProductFoodsOptional/index.ts +49 -0
  41. package/src/hooks/useAcumulateDate/index.ts +18 -0
  42. package/src/hooks/useAllStoresPendingToRegister/index.ts +37 -0
  43. package/src/hooks/useAmountInput/index.ts +127 -0
  44. package/src/hooks/useAnimationFrame/index.ts +45 -0
  45. package/src/hooks/useAnimationText/index.ts +31 -0
  46. package/src/hooks/useAsideCart/helpers/index.ts +22 -0
  47. package/src/hooks/useAsideCart/index.ts +217 -0
  48. package/src/hooks/useAsideCart/queries.ts +10 -0
  49. package/src/hooks/useBanner/index.ts +20 -0
  50. package/src/hooks/useCart/index.ts +2 -0
  51. package/src/hooks/useCart/queries.ts +174 -0
  52. package/src/hooks/useCart/useCart/helpers/index.ts +79 -0
  53. package/src/hooks/useCart/useCart/index.ts +424 -0
  54. package/src/hooks/useCart/useGetCart/index.ts +34 -0
  55. package/src/hooks/useCatWithProduct/index.ts +54 -0
  56. package/src/hooks/useCatWithProduct/queries.ts +200 -0
  57. package/src/hooks/useCatWithProduct/types/index.ts +104 -0
  58. package/src/hooks/useCatWithProductClient/index.ts +57 -0
  59. package/src/hooks/useCatWithProductClient/queries.ts +56 -0
  60. package/src/hooks/useCategoriesProduct/index.ts +14 -0
  61. package/src/hooks/useCategoriesProduct/queries.ts +16 -0
  62. package/src/hooks/useCategoryInStore/index.ts +167 -0
  63. package/src/hooks/useCategoryInStore/queries.ts +78 -0
  64. package/src/hooks/useCategoryStore/index.ts +8 -0
  65. package/src/hooks/useCategoryStore/queries.ts +16 -0
  66. package/src/hooks/useChartData/index.ts +171 -0
  67. package/src/hooks/useChartData/useChartData/index.ts +200 -0
  68. package/src/hooks/useChartData/useChartDataAllOrders/index.ts +94 -0
  69. package/src/hooks/useChatRoomSubscription/index.ts +28 -0
  70. package/src/hooks/useCheckbox/index.ts +115 -0
  71. package/src/hooks/useCities/index.ts +14 -0
  72. package/src/hooks/useCities/queries.ts +12 -0
  73. package/src/hooks/useClients/index.ts +97 -0
  74. package/src/hooks/useClients/queries.ts +215 -0
  75. package/src/hooks/useColorByLetters/helpers/alea.ts +73 -0
  76. package/src/hooks/useColorByLetters/helpers/colors.ts +45 -0
  77. package/src/hooks/useColorByLetters/helpers/index.ts +22 -0
  78. package/src/hooks/useColorByLetters/helpers/mersenne_twister.ts +118 -0
  79. package/src/hooks/useColorByLetters/index.ts +24 -0
  80. package/src/hooks/useConnection/index.ts +24 -0
  81. package/src/hooks/useCountries/index.ts +20 -0
  82. package/src/hooks/useCountries/queries.ts +12 -0
  83. package/src/hooks/useCreateDeliveryTime/index.ts +51 -0
  84. package/src/hooks/useCreateOrderStatusType/index.ts +134 -0
  85. package/src/hooks/useCreateProduct/helpers/index.ts +23 -0
  86. package/src/hooks/useCreateProduct/helpers/manageCacheDataCatProduct/index.ts +52 -0
  87. package/src/hooks/useCreateProduct/helpers/useEditImageProduct/index.ts +182 -0
  88. package/src/hooks/useCreateProduct/index.ts +337 -0
  89. package/src/hooks/useCreateStorePendingToRegister/index.ts +17 -0
  90. package/src/hooks/useCreateStorePendingToRegister/queries.ts +10 -0
  91. package/src/hooks/useDashboardComponents/index.ts +50 -0
  92. package/src/hooks/useDeleteExtraProductFoods/index.ts +13 -0
  93. package/src/hooks/useDeleteSubProductOptional/index.ts +32 -0
  94. package/src/hooks/useDeleteSubProductOptional/queries.ts +10 -0
  95. package/src/hooks/useDeliveryTime/index.ts +29 -0
  96. package/src/hooks/useDepartments/index.ts +14 -0
  97. package/src/hooks/useDepartments/queries.ts +13 -0
  98. package/src/hooks/useDessert/helpers/index.ts +51 -0
  99. package/src/hooks/useDessert/index.ts +529 -0
  100. package/src/hooks/useDessertWithPrice/helpers/index.ts +76 -0
  101. package/src/hooks/useDessertWithPrice/index.ts +381 -0
  102. package/src/hooks/useDessertWithPrice/queries.ts +18 -0
  103. package/src/hooks/useDevWS/index.ts +53 -0
  104. package/src/hooks/useDevices/index.ts +2 -0
  105. package/src/hooks/useDevices/queries.ts +28 -0
  106. package/src/hooks/useDevices/useGetDevices.ts +28 -0
  107. package/src/hooks/useDevices/useRegisterDevices.ts +75 -0
  108. package/src/hooks/useDownloadReports/helpers/downloadFileFromResponse.ts +21 -0
  109. package/src/hooks/useDownloadReports/index.ts +2 -0
  110. package/src/hooks/useDownloadReports/useDownloadReportByDay/index.ts +105 -0
  111. package/src/hooks/useDownloadReports/useGetReportByDateRange/index.ts +116 -0
  112. package/src/hooks/useDrag/index.ts +79 -0
  113. package/src/hooks/useDropzone/index.ts +94 -0
  114. package/src/hooks/useDynamicAuth/index.ts +14 -0
  115. package/src/hooks/useDynamicAuth/queries.ts +24 -0
  116. package/src/hooks/useEditCategory/index.ts +41 -0
  117. package/src/hooks/useEditOneExtProductFoodOptional/index.ts +28 -0
  118. package/src/hooks/useEditOneExtProductFoodOptional/queries.ts +16 -0
  119. package/src/hooks/useEditSubProductOptional/index.ts +12 -0
  120. package/src/hooks/useEditSubProductOptional/queries.ts +10 -0
  121. package/src/hooks/useEmployee/index.ts +18 -0
  122. package/src/hooks/useEmployee/queries.ts +85 -0
  123. package/src/hooks/useEmployee/useCreateEmployee.ts +90 -0
  124. package/src/hooks/useEvent/index.ts +34 -0
  125. package/src/hooks/useFavoriteStores/index.ts +31 -0
  126. package/src/hooks/useFavoriteStores/queries.ts +54 -0
  127. package/src/hooks/useFetchJson/index.ts +25 -0
  128. package/src/hooks/useFetchMoreInteractions/index.jsx +39 -0
  129. package/src/hooks/useFilterConfigs/index.ts +173 -0
  130. package/src/hooks/useFingerprintjs/index.ts +197 -0
  131. package/src/hooks/useFormTools/index.ts +143 -0
  132. package/src/hooks/useFormatDate/index.ts +91 -0
  133. package/src/hooks/useFormatNumberPhone/index.ts +23 -0
  134. package/src/hooks/useFullScreenMode/index.ts +61 -0
  135. package/src/hooks/useGenerateNumberArray/index.ts +17 -0
  136. package/src/hooks/useGetAllLocationUser/index.ts +13 -0
  137. package/src/hooks/useGetAllLocationUser/queries.ts +44 -0
  138. package/src/hooks/useGetAllSales/index.ts +26 -0
  139. package/src/hooks/useGetCookies/index.ts +43 -0
  140. package/src/hooks/useGetExtProductFoodsSubOptionalAll/index.ts +15 -0
  141. package/src/hooks/useGetFoodRecomended/index.ts +33 -0
  142. package/src/hooks/useGetFoodRecomended/queries.ts +47 -0
  143. package/src/hooks/useGetMessagesToRoom/index.ts +23 -0
  144. package/src/hooks/useGetMinPrice/index.ts +13 -0
  145. package/src/hooks/useGetMinPrice/queries.ts +7 -0
  146. package/src/hooks/useGetOneStoreRating/index.ts +41 -0
  147. package/src/hooks/useGetOneStoreRating/queries.ts +18 -0
  148. package/src/hooks/useGetSalesAmountToday/index.ts +31 -0
  149. package/src/hooks/useGetStoreCookie/index.ts +21 -0
  150. package/src/hooks/useGoogleLogin/index.ts +169 -0
  151. package/src/hooks/useGoogleLogin/loadScript.ts +15 -0
  152. package/src/hooks/useGoogleLogin/removeScript.ts +7 -0
  153. package/src/hooks/useHover/index.ts +32 -0
  154. package/src/hooks/useImageOptimization/index.ts +32 -0
  155. package/src/hooks/useImageUploaderProduct/helper/canvasUtils.ts +146 -0
  156. package/src/hooks/useImageUploaderProduct/helper/getOrientation.ts +54 -0
  157. package/src/hooks/useImageUploaderProduct/helper/index.ts +5 -0
  158. package/src/hooks/useImageUploaderProduct/index.ts +295 -0
  159. package/src/hooks/useImageWeight/index.ts +55 -0
  160. package/src/hooks/useImagesStore/index.ts +227 -0
  161. package/src/hooks/useImagesStore/queries.ts +193 -0
  162. package/src/hooks/useImagesStore/utils/index.ts +4 -0
  163. package/src/hooks/useIncomingOrders/index.ts +11 -0
  164. package/src/hooks/useIncomingOrders/queries.ts +87 -0
  165. package/src/hooks/useInnerHtml/index.ts +39 -0
  166. package/src/hooks/useIntersection/index.ts +84 -0
  167. package/src/hooks/useInventory/index.ts +2 -0
  168. package/src/hooks/useInventory/queries.ts +58 -0
  169. package/src/hooks/useInventory/useGetProductsInStock.ts +16 -0
  170. package/src/hooks/useInventory/useUpdateManageStock.ts +41 -0
  171. package/src/hooks/useKeypress/index.ts +28 -0
  172. package/src/hooks/useLazyScript/index.ts +74 -0
  173. package/src/hooks/useLocalBackendIp/index.ts +34 -0
  174. package/src/hooks/useLocalSorage/index.ts +36 -0
  175. package/src/hooks/useLocationManager/index.ts +63 -0
  176. package/src/hooks/useLocationNavigate/index.ts +54 -0
  177. package/src/hooks/useLoginEmployeeInStore/index.ts +38 -0
  178. package/src/hooks/useLogout/helpers/BroadcastChannel.ts +74 -0
  179. package/src/hooks/useLogout/helpers/apiBaseUrl.ts +12 -0
  180. package/src/hooks/useLogout/helpers/fetchData.ts +37 -0
  181. package/src/hooks/useLogout/helpers/getCsrfToken.ts +37 -0
  182. package/src/hooks/useLogout/helpers/index.ts +65 -0
  183. package/src/hooks/useLogout/helpers/logger.ts +88 -0
  184. package/src/hooks/useLogout/helpers/parseUrl.ts +39 -0
  185. package/src/hooks/useLogout/index.ts +105 -0
  186. package/src/hooks/useManageNewOrder/helpers/index.ts +45 -0
  187. package/src/hooks/useManageNewOrder/helpers/mock.ts +0 -0
  188. package/src/hooks/useManageNewOrder/index.ts +104 -0
  189. package/src/hooks/useManageQueryParams/index.ts +120 -0
  190. package/src/hooks/useMobile/index.ts +65 -0
  191. package/src/hooks/useModules/helpers/index.ts +1 -0
  192. package/src/hooks/useModules/helpers/validateModules.ts +29 -0
  193. package/src/hooks/useModules/index.ts +124 -0
  194. package/src/hooks/useMouse/index.ts +55 -0
  195. package/src/hooks/useMutateHeight/index.ts +36 -0
  196. package/src/hooks/useOrderClient/index.ts +5 -0
  197. package/src/hooks/useOrderStatusTypes/index.ts +2 -0
  198. package/src/hooks/useOrderStatusTypes/useOrderStatusTypes/index.ts +133 -0
  199. package/src/hooks/useOrderStatusTypes/useUpdateOrderStatusPriorities/index.ts +99 -0
  200. package/src/hooks/useOrders/index.ts +3 -0
  201. package/src/hooks/useOrders/queries.ts +99 -0
  202. package/src/hooks/useOrders/useChangeOrderState/index.ts +128 -0
  203. package/src/hooks/useOrders/useOrdersFromStore/index.ts +78 -0
  204. package/src/hooks/usePWAInstall/index.ts +38 -0
  205. package/src/hooks/usePaymentMethod/index.ts +3 -0
  206. package/src/hooks/usePaymentMethod/paymentMethod.gql.ts +62 -0
  207. package/src/hooks/usePaymentMethod/paymentMethod.types.ts +28 -0
  208. package/src/hooks/usePaymentMethod/useCreatePaymentMethod/index.ts +25 -0
  209. package/src/hooks/usePaymentMethod/useGetAllPaymentMethods/index.ts +19 -0
  210. package/src/hooks/usePaymentMethod/useGetPaymentMethod/index.ts +26 -0
  211. package/src/hooks/usePortFetcher/index.ts +33 -0
  212. package/src/hooks/usePrintSaleTicket/index.ts +68 -0
  213. package/src/hooks/useProductsFood/index.ts +341 -0
  214. package/src/hooks/useProductsFood/queriesStore.ts +964 -0
  215. package/src/hooks/useProductsFood/types/index.ts +0 -0
  216. package/src/hooks/useProductsFood/useEditProduct.ts +49 -0
  217. package/src/hooks/useProductsFood/usetagsProducts.ts +101 -0
  218. package/src/hooks/useProviders/index.ts +3 -0
  219. package/src/hooks/useProviders/queries.ts +31 -0
  220. package/src/hooks/useProviders/useProvidersCreateStore/index.ts +13 -0
  221. package/src/hooks/useProviders/useProvidersDataStore/index.ts +25 -0
  222. package/src/hooks/useProvidersStore/index.ts +25 -0
  223. package/src/hooks/useProvidersStore/queries.ts +31 -0
  224. package/src/hooks/usePushNotificationOrder/index.ts +52 -0
  225. package/src/hooks/usePushNotifications/helpers/index.ts +123 -0
  226. package/src/hooks/usePushNotifications/index.ts +150 -0
  227. package/src/hooks/useQueryLocationsMap/index.ts +20 -0
  228. package/src/hooks/useQueryLocationsMap/queries.ts +40 -0
  229. package/src/hooks/useRatingArrayData/index.ts +54 -0
  230. package/src/hooks/useRatingArrayData/queries.ts +19 -0
  231. package/src/hooks/useReactToPrint/index.txt +1223 -0
  232. package/src/hooks/useRemoveExtraProductFoodsOptional/index.ts +24 -0
  233. package/src/hooks/useRemoveExtraProductFoodsOptional/queries.ts +48 -0
  234. package/src/hooks/useReport/index.ts +48 -0
  235. package/src/hooks/useReport/queries.ts +72 -0
  236. package/src/hooks/useRestaurant/helpers/index.ts +28 -0
  237. package/src/hooks/useRestaurant/helpers/manageStatusOpen.ts +26 -0
  238. package/src/hooks/useRestaurant/index.ts +71 -0
  239. package/src/hooks/useRestaurant/queries.ts +81 -0
  240. package/src/hooks/useRoads/index.ts +20 -0
  241. package/src/hooks/useRoads/queries.ts +13 -0
  242. package/src/hooks/useRoles/index.ts +4 -0
  243. package/src/hooks/useRoles/queries.ts +70 -0
  244. package/src/hooks/useRoles/useCreateRole.ts +40 -0
  245. package/src/hooks/useRoles/useGetRoles.ts +37 -0
  246. package/src/hooks/useRoles/useRemoveRoles.ts +40 -0
  247. package/src/hooks/useRoles/useUpdateRolesPriority.ts +44 -0
  248. package/src/hooks/useSales/helpers/add-product.utils.ts +120 -0
  249. package/src/hooks/useSales/helpers/apply-discount-to-cart.utils.ts +292 -0
  250. package/src/hooks/useSales/helpers/comment-product.utils.ts +41 -0
  251. package/src/hooks/useSales/helpers/constants/index.ts +38 -0
  252. package/src/hooks/useSales/helpers/extras.utils.ts +42 -0
  253. package/src/hooks/useSales/helpers/filterProductsByCarProId.utils.ts +17 -0
  254. package/src/hooks/useSales/helpers/increment-product-quantity.utils.ts +76 -0
  255. package/src/hooks/useSales/helpers/index.ts +3 -0
  256. package/src/hooks/useSales/helpers/initializer.utils.ts +22 -0
  257. package/src/hooks/useSales/helpers/isStockInsufficient.ts +3 -0
  258. package/src/hooks/useSales/helpers/remove-product.utils.test.ts +49 -0
  259. package/src/hooks/useSales/helpers/remove-product.utils.ts +34 -0
  260. package/src/hooks/useSales/helpers/resolveProduct.ts +29 -0
  261. package/src/hooks/useSales/helpers/useAddToCart.ts +64 -0
  262. package/src/hooks/useSales/index.ts +1418 -0
  263. package/src/hooks/useSales/queries.ts +532 -0
  264. package/src/hooks/useSales/types/index.ts +206 -0
  265. package/src/hooks/useSales/types/use-sales.types.ts +8 -0
  266. package/src/hooks/useSales/useGetSale.ts +21 -0
  267. package/src/hooks/useSales/useTotalSales.ts +24 -0
  268. package/src/hooks/useSaveAvailableProduct/helpers/index.ts +38 -0
  269. package/src/hooks/useSaveAvailableProduct/index.ts +32 -0
  270. package/src/hooks/useSaveAvailableProduct/queries.ts +10 -0
  271. package/src/hooks/useSaveLocation/index.ts +17 -0
  272. package/src/hooks/useSaveLocation/queries.ts +19 -0
  273. package/src/hooks/useSchedule/index.ts +35 -0
  274. package/src/hooks/useSchedule/queries.ts +43 -0
  275. package/src/hooks/useSchedule/schedule.ts +79 -0
  276. package/src/hooks/useScheduleData/index.ts +135 -0
  277. package/src/hooks/useScroll/index.ts +56 -0
  278. package/src/hooks/useScrollRotate/index.ts +16 -0
  279. package/src/hooks/useSetImageProducts/index.ts +59 -0
  280. package/src/hooks/useSetImageProducts/queries.ts +18 -0
  281. package/src/hooks/useSetSession/index.ts +44 -0
  282. package/src/hooks/useSetState/index.ts +24 -0
  283. package/src/hooks/useSetupSchedule/helpers/index.ts +85 -0
  284. package/src/hooks/useSetupSchedule/index.ts +284 -0
  285. package/src/hooks/useStatusOpenStore/helpers/index.ts +124 -0
  286. package/src/hooks/useStatusOpenStore/index.ts +195 -0
  287. package/src/hooks/useStatusOrdersClient/helpers/index.ts +14 -0
  288. package/src/hooks/useStatusOrdersClient/index.ts +18 -0
  289. package/src/hooks/useStatusOrdersClient/queries.ts +80 -0
  290. package/src/hooks/useStock/index.ts +1 -0
  291. package/src/hooks/useStock/useStockUpdatedAllSubscription.ts +40 -0
  292. package/src/hooks/useStockMovements/helpers/index.ts +16 -0
  293. package/src/hooks/useStockMovements/index.ts +39 -0
  294. package/src/hooks/useStore/index.ts +83 -0
  295. package/src/hooks/useStore/queries.ts +163 -0
  296. package/src/hooks/useStoreCalendar/index.ts +5 -0
  297. package/src/hooks/useStoreContacts/index.ts +53 -0
  298. package/src/hooks/useStoreContacts/queries.ts +48 -0
  299. package/src/hooks/useStoreTable/index.ts +2 -0
  300. package/src/hooks/useStoreTable/queries.ts +47 -0
  301. package/src/hooks/useStoreTable/useStoreTableCreate.ts +77 -0
  302. package/src/hooks/useStoreTable/useStoreTables.ts +15 -0
  303. package/src/hooks/useSubscriptionValidation/index.ts +112 -0
  304. package/src/hooks/useTagProducts/index.ts +3 -0
  305. package/src/hooks/useTagProducts/useDeleteOneTag.ts +106 -0
  306. package/src/hooks/useTagProducts/useGetAllTags.ts +68 -0
  307. package/src/hooks/useTagProducts/useRegisterMultipleTags.ts +157 -0
  308. package/src/hooks/useTheme/index.ts +65 -0
  309. package/src/hooks/useTimeAgo/useTimeAgo.ts +39 -0
  310. package/src/hooks/useTokenCards/index.ts +45 -0
  311. package/src/hooks/useTopProductsMovements/index.ts +27 -0
  312. package/src/hooks/useTotalAllSales/index.ts +25 -0
  313. package/src/hooks/useTotalProductsInStock/index.ts +23 -0
  314. package/src/hooks/useTotalProductsSold/index.ts +23 -0
  315. package/src/hooks/useTotalProductsSolded/index.ts +20 -0
  316. package/src/hooks/useUpdateCart/index.ts +131 -0
  317. package/src/hooks/useUpdateCartCookie/index.ts +60 -0
  318. package/src/hooks/useUpdateDashboardComponent/index.ts +91 -0
  319. package/src/hooks/useUpdateExistingOrders/index.ts +85 -0
  320. package/src/hooks/useUpdateExtProductFoodsSubOptional/index.ts +61 -0
  321. package/src/hooks/useUpdateModuleOrder/index.ts +37 -0
  322. package/src/hooks/useUpdateMultipleExtProduct/index.ts +34 -0
  323. package/src/hooks/useUpdateMultipleExtProduct/queries.ts +33 -0
  324. package/src/hooks/useUpdateMultipleProducts/index.ts +117 -0
  325. package/src/hooks/useUpdateMultipleProducts/queries.ts +51 -0
  326. package/src/hooks/useUploadProducts/helpers/index.ts +1 -0
  327. package/src/hooks/useUploadProducts/helpers/parseNumber.ts +37 -0
  328. package/src/hooks/useUploadProducts/helpers/validateProductDataExcel.ts +73 -0
  329. package/src/hooks/useUploadProducts/index.ts +442 -0
  330. package/src/hooks/useUpsertGoal/index.ts +68 -0
  331. package/src/hooks/useUser/index.ts +24 -0
  332. package/src/hooks/useUser/queries.ts +131 -0
  333. package/src/hooks/useWeeklyStockMovement/helpers/index.ts +32 -0
  334. package/src/hooks/useWeeklyStockMovement/index.ts +52 -0
  335. package/src/hooks/useWindowSize/index.ts +45 -0
  336. package/src/index.ts +8 -0
  337. package/src/mock/dessert/index.ts +16 -0
  338. package/src/mock/index.ts +1 -0
  339. package/src/security/index.ts +1 -0
  340. package/src/services/index.ts +1 -0
  341. package/src/utils/UtilDateRange.ts +56 -0
  342. package/src/utils/generateCode.ts +222 -0
  343. package/src/utils/index.ts +2 -0
  344. package/src/utils/utils.ts +344 -0
  345. package/tsconfig.eslint.json +16 -0
  346. package/tsconfig.json +21 -0
  347. package/tsup.config.ts +24 -0
  348. package/dist/index.cjs +0 -20089
@@ -0,0 +1,153 @@
1
+ import js from "@eslint/js"
2
+ import { defineConfig } from "eslint/config"
3
+ import importPlugin from "eslint-plugin-import"
4
+ import jsdoc from "eslint-plugin-jsdoc"
5
+ import react from "eslint-plugin-react"
6
+ import globals from "globals"
7
+ import tseslint from "typescript-eslint"
8
+
9
+ export default defineConfig([
10
+ // base JS/TS files
11
+ {
12
+ files: ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
13
+ plugins: {
14
+ js,
15
+ import: importPlugin, // 👈 ,
16
+ jsdoc,
17
+ react,
18
+ "react-hooks": require("eslint-plugin-react-hooks"),
19
+ },
20
+ extends: ["js/recommended"],
21
+ languageOptions: {
22
+ globals: { ...globals.browser, ...globals.node },
23
+ ecmaVersion: "latest",
24
+ sourceType: "module",
25
+ },
26
+ },
27
+
28
+ // recommended TS config (from typescript-eslint)
29
+ tseslint.configs.recommended,
30
+
31
+ // Strict, opinionated ruleset applied across the codebase
32
+ {
33
+ files: ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
34
+ // rely on previously loaded parsers/plugins (typescript-eslint, etc.)
35
+ rules: {
36
+ // JavaScript hygiene
37
+ eqeqeq: "error",
38
+ curly: ["error", "multi-line"],
39
+ "no-var": "error",
40
+ "prefer-const": ["error", { destructuring: "all" }],
41
+ "no-debugger": "error",
42
+ "no-console": ["warn", { allow: ["warn", "error"] }],
43
+ "consistent-return": "error",
44
+ "no-implicit-coercion": "error",
45
+
46
+ // complexity / maintainability
47
+ complexity: ["warn", 10],
48
+ "max-params": ["warn", 4],
49
+ "max-depth": ["warn", 4],
50
+ "max-lines": ["warn", { max: 400, skipBlankLines: true, skipComments: true }],
51
+
52
+ // import/order (requires eslint-plugin-import)
53
+ "import/order": [
54
+ "error",
55
+ {
56
+ groups: ["builtin", "external", "internal", "parent", "sibling", "index", "type"],
57
+ "newlines-between": "always",
58
+ alphabetize: { order: "asc", caseInsensitive: true },
59
+ },
60
+ ],
61
+
62
+ // encourage clear async/await and promise handling
63
+ "no-return-await": "error",
64
+ "require-atomic-updates": "error",
65
+
66
+ // jsdoc (requires eslint-plugin-jsdoc) — keep docs enforced
67
+ "jsdoc/check-alignment": "warn",
68
+ "jsdoc/require-jsdoc": [
69
+ "warn",
70
+ {
71
+ require: {
72
+ FunctionDeclaration: true,
73
+ MethodDefinition: true,
74
+ ClassDeclaration: true,
75
+ ArrowFunctionExpression: false,
76
+ FunctionExpression: false,
77
+ },
78
+ },
79
+ ],
80
+ "jsdoc/require-param": "error",
81
+ "jsdoc/require-returns": "error",
82
+ },
83
+ settings: {
84
+ react: { version: "detect" },
85
+ // import resolver for TypeScript projects (if installed)
86
+ "import/parsers": { "@typescript-eslint/parser": [".ts", ".tsx"] },
87
+ "import/resolver": {
88
+ typescript: {
89
+ // Use default tsconfig lookup. Override if monorepo packages have own tsconfigs.
90
+ },
91
+ },
92
+ },
93
+ },
94
+
95
+ // React / Next / Hooks specific rules
96
+ {
97
+ files: ["**/*.{jsx,tsx}"],
98
+ rules: {
99
+ "react/prop-types": "off", // TS covers prop types
100
+ "react/react-in-jsx-scope": "off",
101
+ "react/jsx-uses-react": "off",
102
+ "react/jsx-boolean-value": ["error", "always"],
103
+ "react/jsx-curly-brace-presence": ["error", { props: "always", children: "never" }],
104
+ "react/jsx-no-useless-fragment": "error",
105
+ "react-hooks/rules-of-hooks": "error",
106
+ "react-hooks/exhaustive-deps": ["warn", { additionalHooks: "(useRecoilCallback)" }],
107
+ },
108
+ // ensure react plugin is available in projects using JSX
109
+ // (no explicit plugin import here plugin must be installed)
110
+ },
111
+
112
+ // Node-only package override for packages/logic (no browser globals, no React)
113
+ {
114
+ files: ["packages/logic/**/*.{ts,js}"],
115
+ languageOptions: {
116
+ globals: { ...globals.node },
117
+ sourceType: "module",
118
+ },
119
+ rules: {
120
+ // logic package should be pure and side-effect free where possible
121
+ "no-restricted-syntax": [
122
+ "error",
123
+ {
124
+ selector: "CallExpression[callee.name='fetch']",
125
+ message: "Avoid fetch in logic package inject HTTP clients from caller.",
126
+ },
127
+ ],
128
+ "import/no-extraneous-dependencies": ["error", { devDependencies: false, optionalDependencies: false }],
129
+ // allow fewer UI-related rules
130
+ "react/no-unknown-property": "off",
131
+ },
132
+ },
133
+
134
+ // GraphQL linting placeholder (if @graphql-eslint installed + .graphqlrc present)
135
+ {
136
+ files: ["**/*.graphql", "**/*.gql", "**/*.{ts,tsx,js,jsx}"],
137
+ rules: {
138
+ // keep GraphQL checks opt-in via plugin these are examples you can enable
139
+ // '@graphql-eslint/no-deprecated-fields': 'warn',
140
+ // '@graphql-eslint/known-type-names': 'error',
141
+ },
142
+ },
143
+
144
+ // Strictness for commit-time / CI (can be toggled by CI pipeline)
145
+ {
146
+ files: ["**/*.{js,ts,tsx}"],
147
+ // treat some warnings as errors in CI — consumer can override in CI env
148
+ rules: {
149
+ // This is intentionally conservative in local dev CI pipeline can set env to escalate
150
+ "no-warning-comments": ["warn", { terms: ["todo", "fixme", "xxx"], location: "start" }],
151
+ },
152
+ },
153
+ ])
package/expire.json ADDED
@@ -0,0 +1 @@
1
+ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSmVzdXMgSnV2aW5hbyIsImVtYWlsIjoianV2aW5hb2plc3VzZEBnbWFpbC5jb20iLCJ1c2VybmFtZSI6Ikplc3VzIEp1dmluYW8iLCJyZXN0YXVyYW50Ijp7ImlkU3RvcmUiOiIwMTNlNTM4Ny0zNGExLTZhNzgtMzAzZC01MDk4ZjE3YmY2NDAiLCJpZCI6IjAxM2U1Mzg3LTM0YTEtNmE3OC0zMDNkLTUwOThmMTdiZjY0MCJ9LCJpZCI6IjAxM2U1Mzg3LTM0YTEtNmE3OC0zMDNkLTUwOThmMTdiZjY0MCIsImlhdCI6MTcwNjY3MTkwOCwiZXhwIjoxNzA3MDA1MjA4fQ.V---HeOaEMX9tow6Yh-33ehM6HV-h-1YQ8dmxJfVcyE
package/jsconfig.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es5",
4
+ "lib": [
5
+ "dom",
6
+ "dom.iterable"
7
+ ],
8
+ "allowJs": true,
9
+ "skipLibCheck": true,
10
+ "strict": false,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "noEmit": true,
13
+ "esModuleInterop": true,
14
+ "module": "commonjs",
15
+ "moduleResolution": "node",
16
+ "resolveJsonModule": true,
17
+ "isolatedModules": true,
18
+ "jsx": "preserve",
19
+ "incremental": true
20
+ },
21
+ "include": [
22
+ "**/*.ts",
23
+ "**/*.tsx"
24
+ ],
25
+ "exclude": [
26
+ "node_modules"
27
+ ]
28
+ }
package/package.json CHANGED
@@ -1,72 +1,35 @@
1
1
  {
2
- "author": "",
3
- "dependencies": {
4
- "@apollo/client": "3.6.9",
5
- "@typescript-eslint/parser": "^5.37.0",
6
- "file-saver": "2.0.5",
7
- "js-cookie": "3.0.1",
8
- "lodash": "^4.17.21",
9
- "moment": "^2.29.4",
10
- "next": "15.2.4",
11
- "react": "^19.0.0",
12
- "react-dom": "^19.0.0",
13
- "react-query": "^3.39.2",
14
- "xlsx": "0.18.5"
15
- },
16
- "description": "description-pkg-hook",
17
- "devDependencies": {
18
- "@babel/preset-env": "^7.19.1",
19
- "@babel/preset-react": "^7.18.6",
20
- "@babel/preset-typescript": "^7.18.6",
21
- "@types/jest": "^30.0.0",
22
- "@types/js-cookie": "3.0.6",
23
- "@types/node": "^20.11.16",
24
- "@types/react": "^18.0.20",
25
- "@typescript-eslint/eslint-plugin": "5.29.0",
26
- "@typescript-eslint/parser": "5.29.0",
27
- "eslint": "^8.0.1",
28
- "eslint-config-standard": "^17.0.0",
29
- "eslint-plugin-import": "^2.25.2",
30
- "eslint-plugin-n": "^15.0.0",
31
- "eslint-plugin-promise": "^6.0.0",
32
- "eslint-plugin-react": "^7.33.2",
33
- "eslint-plugin-react-hooks": "^4.6.0",
34
- "jest": "^30.2.0",
35
- "ts-jest": "^29.4.6",
36
- "tsup": "8.5.1",
37
- "typesdefs": "1.0.6"
38
- },
2
+ "main": "dist/index.cjs",
3
+ "module": "dist/index.mjs",
4
+ "types": "dist/index.d.ts",
39
5
  "exports": {
40
6
  ".": {
41
- "import": "./dist/index.js",
7
+ "import": "./dist/index.mjs",
42
8
  "require": "./dist/index.cjs",
43
9
  "types": "./dist/index.d.ts"
44
10
  }
45
11
  },
46
- "files": [
47
- "dist"
48
- ],
49
- "license": "ISC",
50
- "main": "./dist/index.cjs",
51
- "module": "./dist/index.js",
52
- "name": "npm-pkg-hook",
53
- "private": false,
54
- "publishConfig": {
55
- "registry": "https://registry.npmjs.org/"
56
- },
57
- "repository": {
58
- "type": "git",
59
- "url": "https://github.com/Jesus123780/pkg-hook"
60
- },
61
12
  "scripts": {
62
- "build": "tsup src/index.ts --format esm,cjs",
13
+ "build": "tsup",
14
+ "prepare": "npm run build",
15
+ "prepublishOnly": "npm run build",
63
16
  "lint": "eslint .",
64
- "lint:fix": "npm run lint -- --fix",
65
- "rm": "rm -rf node_modules package-lock.json && npm i",
66
- "test": "jest",
67
- "test:watch": "jest --watch"
17
+ "test": "jest"
18
+ },
19
+ "peerDependencies": {
20
+ "react": "^18 || ^19",
21
+ "react-dom": "^18 || ^19",
22
+ "next": "^14 || ^15",
23
+ "@apollo/client": "^3 || ^4",
24
+ "graphql": "^16"
25
+ },
26
+ "devDependencies": {
27
+ "tsup": "8.5.1",
28
+ "typescript": "5.9.3",
29
+ "@types/react": "18.0.20",
30
+ "@types/js-cookie": "3.0.6",
31
+ "@types/file-saver": "2.0.7"
68
32
  },
69
- "type": "module",
70
- "types": "./dist/index.d.ts",
71
- "version": "1.12.7"
33
+ "version": "1.12.9",
34
+ "name": "npm-pkg-hook"
72
35
  }
package/script.txt ADDED
@@ -0,0 +1,7 @@
1
+ // (function (params) {
2
+ // var ct = document.createElement('link');
3
+ // ct.rel = 'stylesheet';
4
+ // ct.href = 'https://csswizardry.com/ct/ct.css';
5
+ // ct.classList.add('ct');
6
+ // document.head.appendChild(ct)
7
+ // }());
@@ -0,0 +1,39 @@
1
+ import { onError } from '@apollo/client/link/error'
2
+
3
+ interface GraphQLErrorExtension {
4
+ code?: string
5
+ message?: string
6
+ }
7
+
8
+ interface GraphQLErrorItem {
9
+ extensions?: GraphQLErrorExtension
10
+ }
11
+
12
+ interface ErrorWithErrors {
13
+ errors?: GraphQLErrorItem[]
14
+ }
15
+
16
+ export const errorHandler = (error: ErrorWithErrors | null | undefined): boolean | null => {
17
+ let logout: boolean | null = null
18
+ if (error && Array.isArray(error?.errors)) {
19
+ error.errors?.length && error?.errors?.forEach((err: GraphQLErrorItem) => {
20
+ if (err?.extensions) {
21
+ const { code, message }: GraphQLErrorExtension = err?.extensions || {}
22
+ if (code === 'UNAUTHENTICATED' || code === 'FORBIDDEN') {
23
+ logout = true
24
+ return {
25
+ status: 'FORBIDDEN',
26
+ message
27
+ }
28
+ }
29
+ }
30
+ })
31
+ }
32
+ return logout
33
+ }
34
+
35
+ export const errorLink = onError(({ graphQLErrors, networkError }) => {
36
+ if (graphQLErrors)graphQLErrors.map(({ message, path }) => { return console.log(`[GraphQL error]: Message: ${message}, Path: ${path}`) })
37
+
38
+ if (networkError) console.log(`[Network error]: ${networkError}`)
39
+ })
@@ -0,0 +1 @@
1
+ export * from './errors'
@@ -0,0 +1,5 @@
1
+ {
2
+ "SESSION_EXPIRED": "Token expired",
3
+ "BANNER_UPDATED": "Banner updated",
4
+ "BANNER_UPDATE_FAILED": "Banner update failed"
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "SESSION_EXPIRED": "Token expired",
3
+ "BANNER_UPDATED": "Banner actualizado",
4
+ "BANNER_UPDATE_FAILED": "No se pudo actualizar el banner"
5
+ }
@@ -0,0 +1,16 @@
1
+ // src/config/content/index.js
2
+
3
+ import contentEn from './en.json'
4
+ import contentEs from './es.json'
5
+
6
+ const LANG = 'es'
7
+
8
+ const CONTENT = {
9
+ en: contentEn,
10
+ es: contentEs
11
+ }
12
+
13
+ export const t = (key) => {
14
+ const content = CONTENT[LANG] || {}
15
+ return content[key] || key
16
+ }
@@ -0,0 +1,3 @@
1
+ import Cookies from 'js-cookie'
2
+
3
+ export { Cookies }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Function that adds 10 to a given number representing minutes.
3
+ * @param {number} num - The number of minutes (between 1 and 60).
4
+ * @returns {string} A string indicating the original number and the result of adding 10 minutes.
5
+ */
6
+ export const addTenMinutes = (num: number) => {
7
+ if (num > 60) return ''
8
+ if (num >= 50) {
9
+ const newNum = num - 10
10
+ return `${newNum} - ${60} min`
11
+ }
12
+ return `${num} - ${num + 10} min`
13
+
14
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ *
3
+ * @param deg
4
+ */
5
+ function deg2rad(deg: number): number {
6
+ return deg * (Math.PI / 180)
7
+ }
8
+
9
+ // Función para calcular la distancia entre un punto fijo y un punto dado utilizando la fórmula de Haversine
10
+ /**
11
+ *
12
+ * @param lat1
13
+ * @param lon1
14
+ * @param lat2
15
+ * @param lon2
16
+ */
17
+ export function calculateLogLatHaversine(lat1: number, lon1: number, lat2: number, lon2: number): number {
18
+ const radioTierra = 6371 // Radio de la Tierra en kilómetros
19
+ const dLat = deg2rad(lat2 - lat1)
20
+ const dLon = deg2rad(lon2 - lon1)
21
+ const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
22
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
23
+ Math.sin(dLon / 2) * Math.sin(dLon / 2)
24
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
25
+ const distancia = radioTierra * c
26
+ return distancia
27
+ }
28
+ // 768px
29
+ // Coordenadas del punto fijo
30
+ const puntoFijo = { lat: 4.7984084, lon: -75.7338831 }
31
+
32
+ // Array de coordenadas de ejemplo
33
+ const coordenadas = [
34
+ { lat: 4.7954221, lon: -75.730596 }
35
+ ]
36
+
37
+ // Calcular distancias entre cada punto y el punto fijo
38
+ coordenadas.forEach((coordenada, index) => {
39
+ const distancia = calculateLogLatHaversine(puntoFijo.lat, puntoFijo.lon, coordenada.lat, coordenada.lon)
40
+ console.log(`La distancia entre el punto fijo y coordenada ${index + 1} es ${distancia.toFixed(2)} kilómetros`)
41
+ })
@@ -0,0 +1,22 @@
1
+ export const completeSchedules = (dataSchedules: { schDay: number; schHoSta: string; schHoEnd: string }[]) => {
2
+ // Días de la semana
3
+ const daysSemana = ['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado', 'Domingo']
4
+
5
+ // Mapear los horarios existentes para crear un mapa por día
6
+ const horariosPorDia = dataSchedules.reduce((mapa, horario) => {
7
+ const day = daysSemana[horario.schDay]
8
+ if (!mapa[day]) {
9
+ mapa[day] = []
10
+ }
11
+ mapa[day].push({ horaInicio: horario.schHoSta, horaFin: horario.schHoEnd })
12
+ return mapa
13
+ }, {} as Record<string, { horaInicio: string; horaFin: string }[]>)
14
+
15
+ // Completar los días que faltan y formatear el objeto
16
+ const horariosFormateados = daysSemana.map((day, index) => {return {
17
+ day,
18
+ horarios: horariosPorDia[day] || [{ horaInicio: '', horaFin: '' }]
19
+ }})
20
+
21
+ return horariosFormateados
22
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ *
3
+ * @param time12Hour
4
+ */
5
+ export function convertToMilitaryTime(time12Hour: string): string {
6
+ const [time, period]: [string, string] = time12Hour.split(' ') as [string, string]
7
+ let [hours, minutes]: [string, string] = time.split(':') as [string, string]
8
+
9
+ if (period === 'PM' && hours !== '12') {
10
+ hours = String(Number(hours) + 12)
11
+ }
12
+
13
+ if (period === 'AM' && hours === '12') {
14
+ hours = '00'
15
+ }
16
+
17
+ return `${hours}:${minutes}`
18
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Generate the store URL based on given parameters.
3
+ * @returns The generated URL or '/' if any field is missing.
4
+ */
5
+ type City = { cName: string };
6
+ type Department = { dName: string };
7
+
8
+ interface GenerateStoreURLParams {
9
+ city: City;
10
+ department: Department;
11
+ storeName: string;
12
+ idStore: string;
13
+ rootMainPath?: string;
14
+ }
15
+
16
+ export const generateStoreURL = ({
17
+ city,
18
+ department,
19
+ storeName,
20
+ idStore,
21
+ rootMainPath = 'delivery'
22
+ }: GenerateStoreURLParams): string => {
23
+ // Validate all necessary fields
24
+ if (
25
+ !process.env.MAIN_URL_BASE ||
26
+ !city?.cName ||
27
+ !department?.dName ||
28
+ !storeName ||
29
+ !idStore
30
+ ) {
31
+ return '/' // Return '/' or any default case you'd prefer
32
+ }
33
+
34
+ const cityName = city.cName.toLocaleLowerCase()
35
+ const departmentName = department.dName.toLocaleLowerCase()
36
+
37
+ // Replace spaces in storeName with hyphens
38
+ const formattedStoreName = storeName.replace(/ /g, '-')
39
+
40
+ return `${process.env.MAIN_URL_BASE}/${rootMainPath}/${cityName}-${departmentName}/${formattedStoreName}/${idStore}`
41
+ }
@@ -0,0 +1,66 @@
1
+ import { saveAs } from 'file-saver'
2
+ import * as Excel from 'xlsx'
3
+
4
+ /**
5
+ * Class to generate Excel reports.
6
+ */
7
+ export class GenerateReport {
8
+ /**
9
+ * Generates an Excel report from given data and type.
10
+ * @param {Array<object>} data - The data to be included in the Excel report.
11
+ * @param {number} type - The type of report to generate.
12
+ * @throws Will throw an error if data is not an array or type is not a valid number.
13
+ */
14
+ GenExcelReport(data: object[], type: number): void {
15
+ if (!Array.isArray(data)) {
16
+ throw new TypeError('Data must be an array of objects.')
17
+ }
18
+
19
+ if (typeof type !== 'number') {
20
+ throw new TypeError('Type must be a valid number.')
21
+ }
22
+
23
+ const ws = Excel.utils.json_to_sheet(data)
24
+
25
+ // Apply bold font to the header row
26
+ const ref = ws['!ref']
27
+ if (!ref) {
28
+ throw new TypeError('Worksheet reference is undefined.')
29
+ }
30
+ const range = Excel.utils.decode_range(ref)
31
+ for (let C = range.s.c; C <= range.e.c; ++C) {
32
+ const cell = ws[Excel.utils.encode_cell({ r: 0, c: C })]
33
+ if (cell) {
34
+ cell.s = {
35
+ font: {
36
+ bold: true
37
+ }
38
+ }
39
+ }
40
+ }
41
+
42
+ const wb = Excel.utils.book_new()
43
+ Excel.utils.book_append_sheet(wb, ws, 'Hoja1')
44
+ const excelBuffer = Excel.write(wb, { bookType: 'xlsx', type: 'array' })
45
+ const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
46
+ const fileName = this.GenExcelReportFileName(type)
47
+ if (fileName) {
48
+ saveAs(blob, String(fileName))
49
+ } else {
50
+ throw new TypeError('Invalid report type provided.')
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Generates the file name for the Excel report based on the type.
56
+ * @param {number} type - The type of report.
57
+ * @returns {string | null} The file name for the report, or null if type is invalid.
58
+ */
59
+ GenExcelReportFileName(type: number): string | null {
60
+ const fileNames: { [key: number]: string } = {
61
+ 1: `report_${new Date().toISOString().replace(':', '-').replace('.', '-')}.xlsx`
62
+ }
63
+
64
+ return fileNames[type] ?? null
65
+ }
66
+ }
@@ -0,0 +1,24 @@
1
+ export const getCardType = (cardNum: string) => {
2
+ let payCardType = ''
3
+
4
+ if (cardNum.startsWith('4')) {
5
+ payCardType = 'VISA'
6
+ } else if (cardNum.startsWith('5')) {
7
+ payCardType = 'MASTERCARD'
8
+ } else {
9
+ const regexMap = [
10
+ { regEx: /^4[0-9]{5}/gi, cardType: 'VISA' },
11
+ { regEx: /^5[1-5][0-9]{4}/gi, cardType: 'MASTERCARD' },
12
+ { regEx: /^(5[06-8]\d{4}|6\d{5})/gi, cardType: 'MAESTRO' }
13
+ ]
14
+
15
+ for (const { regEx, cardType } of regexMap) {
16
+ if (cardNum.match(regEx)) {
17
+ payCardType = cardType
18
+ break
19
+ }
20
+ }
21
+ }
22
+
23
+ return payCardType
24
+ }
@@ -0,0 +1,7 @@
1
+ export const jaccardSimilarity = (s1, s2) => {
2
+ const set1 = new Set(s1)
3
+ const set2 = new Set(s2)
4
+ const intersection = new Set([...set1].filter(x => { return set2.has(x) }))
5
+ const union = new Set([...set1, ...set2])
6
+ return intersection.size / union.size
7
+ }
@@ -0,0 +1,62 @@
1
+ import { jaccardSimilarity } from './helpers'
2
+
3
+ /**
4
+ * Get categories that contain products with names similar to the given product name.
5
+ * Uses the Jaccard similarity coefficient for string comparison.
6
+ * @param {Array} data - The array of categories with product information.
7
+ * @param {string} productName - The name of the product to search for.
8
+ * @param {number} similarityThreshold - The minimum similarity threshold for products (0.0 to 1.0).
9
+ * @returns {Array} - An array of categories containing similar products.
10
+ */
11
+ export const getCategoriesWithProduct = (
12
+ data = [],
13
+ productName = '',
14
+ similarityThreshold = 0.0) => {
15
+ // Validate input data
16
+ if (!data || !Array.isArray(data)) {
17
+ return data || []
18
+ }
19
+
20
+ if (typeof productName !== 'string' || productName.trim() === '') {
21
+ return data
22
+ }
23
+
24
+ // Convert product name to lowercase for case-insensitive comparison
25
+ const productNameLower = productName.toLowerCase()
26
+
27
+ // Use a Set to store unique product names for better performance
28
+ const uniqueProductNames = new Set()
29
+
30
+ // Store unique product names in the Set
31
+ data.forEach(category => {
32
+ if (category?.productFoodsAll && Array.isArray(category.productFoodsAll)) {
33
+ category.productFoodsAll.forEach(product => {
34
+ const productLower = product.pName.toLowerCase()
35
+ uniqueProductNames.add(productLower)
36
+ })
37
+ }
38
+ })
39
+
40
+ // Filter categories that contain products with names similar to the given product name
41
+ const matchingCategories = data.filter(category => {
42
+ if (category?.productFoodsAll && Array.isArray(category.productFoodsAll)) {
43
+ const products = category.productFoodsAll.some(product => {
44
+ const productLower = product?.pName?.toLowerCase()
45
+ return jaccardSimilarity(productNameLower, productLower) >= similarityThreshold
46
+ })
47
+ return products
48
+ }
49
+ return false
50
+ })
51
+
52
+ // Find similar products in each matching category
53
+ const findProduct = matchingCategories?.map(categories => {
54
+ const similarProducts = categories.productFoodsAll.filter(product => {
55
+ const productLower = product?.pName?.toLowerCase()
56
+ return productLower.includes(productNameLower)
57
+ })
58
+ return similarProducts.length > 0 ? { ...categories, productFoodsAll: similarProducts } : null
59
+ }).filter(Boolean)
60
+
61
+ return findProduct
62
+ }