npm-pkg-hook 1.3.9 → 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.
- package/.babelrc +2 -10
- package/.env +5 -1
- package/dist/index.js +17953 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +17711 -0
- package/dist/index.mjs.map +1 -0
- package/eslint.config.mjs +154 -0
- package/expire.json +1 -0
- package/index.d.ts +2 -0
- package/jest.config.ts +9 -0
- package/package.json +45 -36
- package/src/config/client/errors.ts +39 -0
- package/src/config/content/en.json +5 -0
- package/src/config/content/es.json +5 -0
- package/src/config/content/index.ts +16 -0
- package/src/hooks/addTenMinutes/index.ts +14 -0
- package/src/hooks/calculateLogLatHaversine/index.ts +41 -0
- package/src/hooks/completeSchedules/index.ts +22 -0
- package/src/hooks/convertToMilitaryTime/index.ts +18 -0
- package/src/hooks/generateStoreURL/index.ts +41 -0
- package/src/hooks/generateTemplate/index.ts +66 -0
- package/src/hooks/getCardType/index.ts +24 -0
- package/src/hooks/getCategoriesWithProduct/{index.js → index.ts} +7 -7
- package/src/hooks/getGlobalSession/index.ts +69 -0
- package/src/hooks/getSession/index.ts +72 -0
- package/src/hooks/getTodayTimestamps/index.ts +70 -0
- package/src/hooks/getTotalHours/index.ts +76 -0
- package/src/hooks/handleLogin/index.ts +14 -0
- package/src/hooks/index.ts +154 -0
- package/src/hooks/isTokenExpired/index.ts +17 -0
- package/src/hooks/newMessageSubscription/index.ts +28 -0
- package/src/hooks/newStoreOrderSubscription/index.ts +26 -0
- package/src/hooks/{useStatusOpenStore/helpers/index.js → statusOpenStores/helpers/index.ts} +24 -1
- package/src/hooks/statusOpenStores/index.ts +221 -0
- package/src/hooks/updateExtProductFoodsOptional/{index.js → index.ts} +15 -6
- package/src/hooks/useAcumulateDate/index.ts +18 -0
- package/src/hooks/useAllStoresPendingToRegister/index.ts +37 -0
- package/src/hooks/useAmountInput/index.ts +127 -0
- package/src/hooks/useAnimationText/{index.jsx → index.ts} +2 -2
- package/src/hooks/useAsideCart/index.ts +217 -0
- package/src/hooks/useBanner/{index.js → index.ts} +2 -1
- package/src/hooks/useCart/{queries.js → queries.ts} +11 -1
- package/src/hooks/useCart/useCart/helpers/{index.js → index.ts} +10 -6
- package/src/hooks/useCart/useCart/{index.js → index.ts} +58 -44
- package/src/hooks/useCart/useGetCart/{index.js → index.ts} +6 -3
- package/src/hooks/useCatWithProduct/{index.js → index.ts} +17 -7
- package/src/hooks/useCatWithProduct/{queries.js → queries.ts} +50 -23
- package/src/hooks/useCatWithProduct/types/index.ts +104 -0
- package/src/hooks/useCatWithProductClient/{index.js → index.ts} +19 -18
- package/src/hooks/useCatWithProductClient/{queries.js → queries.ts} +1 -0
- package/src/hooks/useCategoriesProduct/{index.js → index.ts} +3 -1
- package/src/hooks/useCategoriesProduct/{queries.js → queries.ts} +2 -2
- package/src/hooks/useCategoryInStore/index.ts +167 -0
- package/src/hooks/useCategoryInStore/{queries.js → queries.ts} +2 -2
- package/src/hooks/useCategoryStore/{index.js → index.ts} +4 -3
- package/src/hooks/useCategoryStore/{queries.js → queries.ts} +2 -2
- package/src/hooks/useChartData/{index.js → index.ts} +31 -34
- package/src/hooks/useChartData/useChartData/{index.js → index.ts} +31 -30
- package/src/hooks/useChartData/useChartDataAllOrders/{index.js → index.ts} +4 -4
- package/src/hooks/useChatRoomSubscription/index.ts +28 -0
- package/src/hooks/useCheckbox/{index.js → index.ts} +1 -1
- package/src/hooks/useCities/index.ts +14 -0
- package/src/hooks/useCities/queries.ts +12 -0
- package/src/hooks/useClients/{index.js → index.ts} +36 -10
- package/src/hooks/useClients/queries.ts +215 -0
- package/src/hooks/useColorByLetters/helpers/alea.ts +73 -0
- package/src/hooks/useColorByLetters/helpers/colors.ts +45 -0
- package/src/hooks/useColorByLetters/helpers/index.ts +24 -0
- package/src/hooks/useColorByLetters/helpers/mersenne_twister.ts +118 -0
- package/src/hooks/useColorByLetters/index.ts +24 -0
- package/src/hooks/useConnection/index.ts +24 -0
- package/src/hooks/useCountries/index.ts +20 -0
- package/src/hooks/useCountries/queries.ts +12 -0
- package/src/hooks/useCreateDeliveryTime/index.ts +51 -0
- package/src/hooks/useCreateOrderStatusType/index.ts +134 -0
- package/src/hooks/useCreateProduct/helpers/index.ts +23 -0
- package/src/hooks/useCreateProduct/helpers/manageCacheDataCatProduct/{index.js → index.ts} +1 -1
- package/src/hooks/useCreateProduct/helpers/useEditImageProduct/{index.js → index.ts} +14 -8
- package/src/hooks/useCreateProduct/index.ts +337 -0
- package/src/hooks/useCreateStorePendingToRegister/index.ts +17 -0
- package/src/hooks/useCreateStorePendingToRegister/queries.ts +10 -0
- package/src/hooks/useDashboardComponents/index.ts +50 -0
- package/src/hooks/useDeleteExtraProductFoods/index.ts +13 -0
- package/src/hooks/useDeleteSubProductOptional/{index.js → index.ts} +5 -3
- package/src/hooks/useDeliveryTime/index.ts +29 -0
- package/src/hooks/useDepartments/index.ts +14 -0
- package/src/hooks/useDepartments/queries.ts +13 -0
- package/src/hooks/useDessert/{index.js → index.ts} +162 -114
- package/src/hooks/useDessertWithPrice/helpers/index.ts +76 -0
- package/src/hooks/useDessertWithPrice/index.ts +381 -0
- package/src/hooks/useDessertWithPrice/queries.ts +18 -0
- package/src/hooks/useDevWS/index.ts +53 -0
- package/src/hooks/useDevices/index.ts +2 -0
- package/src/hooks/useDevices/queries.ts +28 -0
- package/src/hooks/useDevices/useGetDevices.ts +28 -0
- package/src/hooks/useDevices/useRegisterDevices.ts +75 -0
- package/src/hooks/useDownloadReports/helpers/downloadFileFromResponse.ts +21 -0
- package/src/hooks/useDownloadReports/index.ts +2 -0
- package/src/hooks/useDownloadReports/useDownloadReportByDay/index.ts +105 -0
- package/src/hooks/useDownloadReports/useGetReportByDateRange/index.ts +116 -0
- package/src/hooks/useDrag/{index.js → index.ts} +16 -0
- package/src/hooks/useDropzone/{index.js → index.ts} +2 -2
- package/src/hooks/useDynamicAuth/{index.js → index.ts} +2 -1
- package/src/hooks/useEditCategory/{index.js → index.ts} +14 -14
- package/src/hooks/useEditOneExtProductFoodOptional/index.ts +28 -0
- package/src/hooks/useEditOneExtProductFoodOptional/{queries.js → queries.ts} +2 -2
- package/src/hooks/useEditSubProductOptional/index.ts +12 -0
- package/src/hooks/useEmployee/index.ts +18 -0
- package/src/hooks/useEmployee/queries.ts +85 -0
- package/src/hooks/useEmployee/useCreateEmployee.ts +90 -0
- package/src/hooks/useEvent/{index.js → index.ts} +1 -0
- package/src/hooks/useFavoriteStores/index.ts +31 -0
- package/src/hooks/useFavoriteStores/queries.ts +54 -0
- package/src/hooks/useFetchMoreInteractions/index.jsx +26 -26
- package/src/hooks/useFilterConfigs/index.ts +173 -0
- package/src/hooks/useFingerprintjs/{index.js → index.ts} +32 -7
- package/src/hooks/useFormTools/index.ts +143 -0
- package/src/hooks/useFormatDate/index.ts +91 -0
- package/src/hooks/useFullScreenMode/{index.js → index.ts} +1 -5
- package/src/hooks/useGetAllLocationUser/index.ts +13 -0
- package/src/hooks/useGetAllLocationUser/queries.ts +44 -0
- package/src/hooks/{useSales/useGetAllSales/index.js → useGetAllSales/index.ts} +3 -2
- package/src/hooks/useGetCookies/index.ts +43 -0
- package/src/hooks/useGetExtProductFoodsSubOptionalAll/{index.js → index.ts} +2 -1
- package/src/hooks/useGetFoodRecomended/{index.js → index.ts} +2 -1
- package/src/hooks/useGetMessagesToRoom/index.ts +23 -0
- package/src/hooks/useGetMinPrice/{index.js → index.ts} +2 -1
- package/src/hooks/useGetOneStoreRating/{index.js → index.ts} +2 -1
- package/src/hooks/useGetSalesAmountToday/index.ts +31 -0
- package/src/hooks/useGetStoreCookie/index.ts +21 -0
- package/src/hooks/useGoogleLogin/{index.js → index.ts} +14 -5
- package/src/hooks/useHover/{index.js → index.ts} +3 -0
- package/src/hooks/useImageOptimization/{index.js → index.ts} +4 -0
- package/src/hooks/useImageUploaderProduct/helper/canvasUtils.ts +146 -0
- package/src/hooks/useImageUploaderProduct/helper/getOrientation.ts +54 -0
- package/src/hooks/useImageUploaderProduct/helper/index.ts +5 -0
- package/src/hooks/useImageUploaderProduct/index.ts +295 -0
- package/src/hooks/useImageWeight/{index.js → index.ts} +4 -0
- package/src/hooks/useImagesStore/index.ts +227 -0
- package/src/hooks/useImagesStore/{queries.js → queries.ts} +4 -68
- package/src/hooks/useImagesStore/utils/index.ts +4 -0
- package/src/hooks/useIncomingOrders/index.ts +11 -0
- package/src/hooks/useIncomingOrders/queries.ts +87 -0
- package/src/hooks/useIntersection/{index.js → index.ts} +1 -1
- package/src/hooks/useInventory/index.ts +2 -0
- package/src/hooks/useInventory/queries.ts +58 -0
- package/src/hooks/useInventory/useGetProductsInStock.ts +16 -0
- package/src/hooks/useInventory/useUpdateManageStock.ts +41 -0
- package/src/hooks/useLazyScript/{index.js → index.ts} +3 -0
- package/src/hooks/useLocalBackendIp/index.ts +34 -0
- package/src/hooks/useLocalSorage/{index.js → index.ts} +3 -3
- package/src/hooks/useLocationManager/index.ts +63 -0
- package/src/hooks/useLoginEmployeeInStore/index.ts +38 -0
- package/src/hooks/useLogout/helpers/BroadcastChannel.ts +74 -0
- package/src/hooks/useLogout/helpers/apiBaseUrl.ts +12 -0
- package/src/hooks/useLogout/helpers/fetchData.ts +37 -0
- package/src/hooks/useLogout/helpers/getCsrfToken.ts +37 -0
- package/src/hooks/useLogout/helpers/index.ts +65 -0
- package/src/hooks/useLogout/helpers/logger.ts +88 -0
- package/src/hooks/useLogout/helpers/parseUrl.ts +39 -0
- package/src/hooks/useLogout/index.ts +105 -0
- package/src/hooks/useManageNewOrder/helpers/index.ts +45 -0
- package/src/hooks/useManageNewOrder/index.ts +104 -0
- package/src/hooks/useManageQueryParams/index.ts +120 -0
- package/src/hooks/useMobile/index.ts +65 -0
- package/src/hooks/useModules/helpers/index.ts +1 -0
- package/src/hooks/useModules/helpers/validateModules.ts +43 -0
- package/src/hooks/useModules/index.ts +124 -0
- package/src/hooks/useMouse/index.ts +55 -0
- package/src/hooks/useOrderStatusTypes/index.ts +2 -0
- package/src/hooks/useOrderStatusTypes/useOrderStatusTypes/index.ts +133 -0
- package/src/hooks/useOrderStatusTypes/useUpdateOrderStatusPriorities/index.ts +99 -0
- package/src/hooks/useOrders/index.ts +3 -0
- package/src/hooks/useOrders/queries.ts +99 -0
- package/src/hooks/useOrders/useChangeOrderState/index.ts +128 -0
- package/src/hooks/useOrders/{index.js → useOrdersFromStore/index.ts} +20 -18
- package/src/hooks/usePWAInstall/index.ts +38 -0
- package/src/hooks/usePaymentMethod/index.ts +3 -0
- package/src/hooks/usePaymentMethod/paymentMethod.gql.ts +62 -0
- package/src/hooks/usePaymentMethod/paymentMethod.types.ts +28 -0
- package/src/hooks/usePaymentMethod/useCreatePaymentMethod/index.ts +25 -0
- package/src/hooks/usePaymentMethod/useGetAllPaymentMethods/index.ts +19 -0
- package/src/hooks/usePaymentMethod/useGetPaymentMethod/index.ts +26 -0
- package/src/hooks/usePortFetcher/index.ts +33 -0
- package/src/hooks/usePrintSaleTicket/index.ts +68 -0
- package/src/hooks/useProductsFood/index.ts +341 -0
- package/src/hooks/useProductsFood/{queriesStore.js → queriesStore.ts} +151 -84
- package/src/hooks/useProductsFood/types/index.ts +0 -0
- package/src/hooks/useProductsFood/useEditProduct.ts +49 -0
- package/src/hooks/useProductsFood/usetagsProducts.ts +101 -0
- package/src/hooks/useProviders/useProvidersCreateStore/{index.js → index.ts} +2 -1
- package/src/hooks/useProviders/useProvidersDataStore/{index.js → index.ts} +2 -1
- package/src/hooks/useProvidersStore/{index.js → index.ts} +2 -1
- package/src/hooks/usePushNotificationOrder/index.ts +52 -0
- package/src/hooks/usePushNotifications/helpers/index.ts +123 -0
- package/src/hooks/usePushNotifications/index.ts +150 -0
- package/src/hooks/useQueryLocationsMap/index.ts +20 -0
- package/src/hooks/useQueryLocationsMap/queries.ts +40 -0
- package/src/hooks/useRatingArrayData/{index.js → index.ts} +4 -4
- package/src/hooks/useRatingArrayData/{queries.js → queries.ts} +1 -1
- package/src/hooks/useReactToPrint/index.ts +4 -0
- package/src/hooks/useRemoveExtraProductFoodsOptional/{index.js → index.ts} +2 -1
- package/src/hooks/useRemoveExtraProductFoodsOptional/{queries.js → queries.ts} +4 -4
- package/src/hooks/useReport/{index.js → index.ts} +5 -5
- package/src/hooks/useReport/{queries.js → queries.ts} +4 -55
- package/src/hooks/useRestaurant/helpers/index.ts +28 -0
- package/src/hooks/useRestaurant/helpers/manageStatusOpen.ts +26 -0
- package/src/hooks/useRestaurant/index.ts +71 -0
- package/src/hooks/useRestaurant/{queries.js → queries.ts} +2 -1
- package/src/hooks/useRoads/index.ts +20 -0
- package/src/hooks/useRoads/queries.ts +13 -0
- package/src/hooks/useRoles/index.ts +4 -0
- package/src/hooks/useRoles/queries.ts +70 -0
- package/src/hooks/useRoles/useCreateRole.ts +40 -0
- package/src/hooks/useRoles/useGetRoles.ts +37 -0
- package/src/hooks/useRoles/useRemoveRoles.ts +40 -0
- package/src/hooks/useRoles/useUpdateRolesPriority.ts +44 -0
- package/src/hooks/useSales/helpers/add-product.utils.ts +120 -0
- package/src/hooks/useSales/helpers/apply-discount-to-cart.utils.ts +292 -0
- package/src/hooks/useSales/helpers/comment-product.utils.ts +41 -0
- package/src/hooks/useSales/helpers/constants/index.ts +38 -0
- package/src/hooks/useSales/helpers/extras.utils.ts +42 -0
- package/src/hooks/useSales/helpers/filterProductsByCarProId.utils.ts +17 -0
- package/src/hooks/useSales/helpers/increment-product-quantity.utils.ts +76 -0
- package/src/hooks/useSales/helpers/index.ts +3 -0
- package/src/hooks/useSales/helpers/initializer.utils.ts +22 -0
- package/src/hooks/useSales/helpers/isStockInsufficient.ts +3 -0
- package/src/hooks/useSales/helpers/remove-product.utils.test.ts +49 -0
- package/src/hooks/useSales/helpers/remove-product.utils.ts +34 -0
- package/src/hooks/useSales/helpers/resolveProduct.ts +29 -0
- package/src/hooks/useSales/helpers/useAddToCart.ts +64 -0
- package/src/hooks/useSales/index.ts +1418 -0
- package/src/hooks/useSales/{queries.js → queries.ts} +256 -166
- package/src/hooks/useSales/types/index.ts +206 -0
- package/src/hooks/useSales/types/use-sales.types.ts +8 -0
- package/src/hooks/useSales/useGetSale.ts +21 -0
- package/src/hooks/useSales/useTotalSales.ts +24 -0
- package/src/hooks/useSaveAvailableProduct/helpers/{index.js → index.ts} +4 -4
- package/src/hooks/useSaveAvailableProduct/{index.js → index.ts} +7 -1
- package/src/hooks/useSaveLocation/index.ts +17 -0
- package/src/hooks/useSaveLocation/queries.ts +19 -0
- package/src/hooks/useSchedule/{index.jsx → index.ts} +16 -4
- package/src/hooks/useSchedule/{index.js → schedule.ts} +22 -15
- package/src/hooks/useScheduleData/{index.js → index.ts} +21 -9
- package/src/hooks/useSetImageProducts/index.ts +59 -0
- package/src/hooks/useSetImageProducts/queries.ts +18 -0
- package/src/hooks/useSetSession/{index.js → index.ts} +16 -17
- package/src/hooks/useSetupSchedule/helpers/index.ts +85 -0
- package/src/hooks/useSetupSchedule/index.ts +284 -0
- package/src/hooks/useStatusOpenStore/helpers/index.ts +124 -0
- package/src/hooks/useStatusOpenStore/{index.js → index.ts} +39 -16
- package/src/hooks/useStatusOrdersClient/{index.js → index.ts} +3 -2
- package/src/hooks/useStatusOrdersClient/{queries.js → queries.ts} +2 -2
- package/src/hooks/useStock/index.ts +1 -0
- package/src/hooks/useStock/useStockUpdatedAllSubscription.ts +40 -0
- package/src/hooks/useStockMovements/helpers/index.ts +16 -0
- package/src/hooks/useStockMovements/index.ts +39 -0
- package/src/hooks/useStore/index.ts +83 -0
- package/src/hooks/useStore/{queries.js → queries.ts} +71 -71
- package/src/hooks/useStoreContacts/{index.js → index.ts} +11 -5
- package/src/hooks/useStoreTable/index.ts +2 -0
- package/src/hooks/useStoreTable/queries.ts +47 -0
- package/src/hooks/useStoreTable/useStoreTableCreate.ts +77 -0
- package/src/hooks/useStoreTable/useStoreTables.ts +15 -0
- package/src/hooks/useSubscriptionValidation/index.ts +112 -0
- package/src/hooks/useTagProducts/index.ts +3 -0
- package/src/hooks/useTagProducts/useDeleteOneTag.ts +106 -0
- package/src/hooks/useTagProducts/useGetAllTags.ts +68 -0
- package/src/hooks/useTagProducts/useRegisterMultipleTags.ts +157 -0
- package/src/hooks/useTheme/index.ts +65 -0
- package/src/hooks/useTimeAgo/{useTimeAgo.js → useTimeAgo.ts} +7 -7
- package/src/hooks/useTokenCards/index.ts +45 -0
- package/src/hooks/useTopProductsMovements/index.ts +27 -0
- package/src/hooks/useTotalAllSales/index.ts +25 -0
- package/src/hooks/useTotalProductsInStock/index.ts +23 -0
- package/src/hooks/useTotalProductsSold/index.ts +23 -0
- package/src/hooks/useTotalProductsSolded/index.ts +20 -0
- package/src/hooks/useUpdateCart/{index.js → index.ts} +3 -2
- package/src/hooks/useUpdateCartCookie/index.ts +60 -0
- package/src/hooks/useUpdateDashboardComponent/index.ts +91 -0
- package/src/hooks/useUpdateExistingOrders/{index.js → index.ts} +5 -11
- package/src/hooks/useUpdateExtProductFoodsSubOptional/index.ts +61 -0
- package/src/hooks/useUpdateModuleOrder/index.ts +37 -0
- package/src/hooks/useUpdateMultipleExtProduct/index.ts +34 -0
- package/src/hooks/useUpdateMultipleExtProduct/queries.ts +33 -0
- package/src/hooks/useUpdateMultipleProducts/index.ts +117 -0
- package/src/hooks/useUpdateMultipleProducts/queries.ts +51 -0
- package/src/hooks/useUploadProducts/helpers/index.ts +1 -0
- package/src/hooks/useUploadProducts/helpers/parseNumber.ts +37 -0
- package/src/hooks/useUploadProducts/helpers/validateProductDataExcel.ts +73 -0
- package/src/hooks/useUploadProducts/index.ts +442 -0
- package/src/hooks/useUpsertGoal/index.ts +68 -0
- package/src/hooks/useUser/{index.js → index.ts} +11 -4
- package/src/hooks/useUser/{queries.js → queries.ts} +9 -4
- package/src/hooks/useWeeklyStockMovement/helpers/index.ts +32 -0
- package/src/hooks/useWeeklyStockMovement/index.ts +52 -0
- package/src/hooks/useWindowSize/{index.js → index.ts} +9 -2
- package/src/index.ts +12 -0
- package/src/security/index.ts +1 -0
- package/src/services/index.ts +1 -0
- package/src/utils/UtilDateRange.ts +56 -0
- package/src/utils/generateCode.ts +222 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/utils.ts +344 -0
- package/tsconfig.eslint.json +17 -0
- package/tsconfig.json +21 -0
- package/tsup.config.ts +24 -0
- package/.eslintrc.js +0 -38
- package/.eslintrc.json +0 -127
- package/next.config.js +0 -126
- package/src/config/client/errors.js +0 -26
- package/src/hooks/getGlobalSession/index.js +0 -49
- package/src/hooks/getSession/index.js +0 -18
- package/src/hooks/handleLogin/index.js +0 -10
- package/src/hooks/index.js +0 -77
- package/src/hooks/useAcumulateDate/index.js +0 -16
- package/src/hooks/useAsideCart/index.js +0 -155
- package/src/hooks/useCategoryInStore/index.js +0 -98
- package/src/hooks/useClients/queries.js +0 -127
- package/src/hooks/useConnection/index.js +0 -22
- package/src/hooks/useCreateProduct/index.js +0 -291
- package/src/hooks/useDevices/index.js +0 -35
- package/src/hooks/useDevices/queries.js +0 -19
- package/src/hooks/useEditOneExtProductFoodOptional/index.js +0 -28
- package/src/hooks/useEditSubProductOptional/index.js +0 -11
- package/src/hooks/useEmployee/index.js +0 -13
- package/src/hooks/useEmployee/queries.js +0 -17
- package/src/hooks/useFavoriteStores/index.js +0 -19
- package/src/hooks/useFavoriteStores/queries.js +0 -47
- package/src/hooks/useFormTools/index.js +0 -100
- package/src/hooks/useFormatDate/index.js +0 -33
- package/src/hooks/useGetStoreCookie/index.js +0 -22
- package/src/hooks/useImagesStore/index.js +0 -183
- package/src/hooks/useLogout/helpers/BroadcastChannel.js +0 -32
- package/src/hooks/useLogout/helpers/apiBaseUrl.js +0 -8
- package/src/hooks/useLogout/helpers/fetchData.js +0 -29
- package/src/hooks/useLogout/helpers/getCsrfToken.js +0 -30
- package/src/hooks/useLogout/helpers/index.js +0 -54
- package/src/hooks/useLogout/helpers/logger.js +0 -72
- package/src/hooks/useLogout/helpers/parseUrl.js +0 -36
- package/src/hooks/useLogout/index.js +0 -46
- package/src/hooks/useManageQueryParams/index.js +0 -37
- package/src/hooks/useMobile/index.js +0 -39
- package/src/hooks/useOrders/queries.js +0 -328
- package/src/hooks/useProductsFood/index.js +0 -234
- package/src/hooks/useProductsFood/useEditProduct.js +0 -8
- package/src/hooks/useProductsFood/usetagsProducts.js +0 -94
- package/src/hooks/useRestaurant/index.js +0 -19
- package/src/hooks/useSales/helpers/index.js +0 -8
- package/src/hooks/useSales/index.js +0 -1102
- package/src/hooks/useSales/useGetSale.js +0 -13
- package/src/hooks/useSales/useTotalSales.js +0 -24
- package/src/hooks/useStore/index.js +0 -70
- package/src/hooks/useUpdateExtProductFoodsSubOptional/index.js +0 -38
- package/src/index.jsx +0 -4
- package/src/utils/index.js +0 -141
- /package/src/config/client/{index.js → index.ts} +0 -0
- /package/src/hooks/getCategoriesWithProduct/helpers/{index.js → index.ts} +0 -0
- /package/src/hooks/useAnimationFrame/{index.js → index.ts} +0 -0
- /package/src/hooks/useAsideCart/helpers/{index.js → index.ts} +0 -0
- /package/src/hooks/useAsideCart/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useCart/{index.js → index.ts} +0 -0
- /package/src/hooks/useDeleteSubProductOptional/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useDessert/helpers/{index.js → index.ts} +0 -0
- /package/src/hooks/useDynamicAuth/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useEditSubProductOptional/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useFetchJson/{index.js → index.ts} +0 -0
- /package/src/hooks/useFormatNumberPhone/{index.js → index.ts} +0 -0
- /package/src/hooks/useGenerateNumberArray/{index.js → index.ts} +0 -0
- /package/src/hooks/useGetFoodRecomended/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useGetMinPrice/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useGetOneStoreRating/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useGoogleLogin/{loadScript.js → loadScript.ts} +0 -0
- /package/src/hooks/useGoogleLogin/{removeScript.js → removeScript.ts} +0 -0
- /package/src/hooks/useInnerHtml/{index.js → index.ts} +0 -0
- /package/src/hooks/useKeypress/{index.js → index.ts} +0 -0
- /package/src/hooks/useLocationNavigate/{index.js → index.ts} +0 -0
- /package/src/{security/index.js → hooks/useManageNewOrder/helpers/mock.ts} +0 -0
- /package/src/hooks/useMutateHeight/{index.js → index.ts} +0 -0
- /package/src/hooks/useOrderClient/{index.js → index.ts} +0 -0
- /package/src/hooks/useProviders/{index.js → index.ts} +0 -0
- /package/src/hooks/useProviders/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useProvidersStore/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useReactToPrint/{index.js → index.txt} +0 -0
- /package/src/hooks/useSaveAvailableProduct/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useSchedule/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useScroll/{index.js → index.ts} +0 -0
- /package/src/hooks/useScrollRotate/{index.js → index.ts} +0 -0
- /package/src/hooks/useSetState/{index.js → index.ts} +0 -0
- /package/src/hooks/useStatusOrdersClient/helpers/{index.js → index.ts} +0 -0
- /package/src/hooks/useStoreCalendar/{index.js → index.ts} +0 -0
- /package/src/hooks/useStoreContacts/{queries.js → queries.ts} +0 -0
- /package/src/mock/dessert/{index.js → index.ts} +0 -0
- /package/src/mock/{index.js → index.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/hooks/updateExtProductFoodsOptional/index.ts","../src/utils/UtilDateRange.ts","../src/utils/utils.ts","../src/hooks/useProductsFood/queriesStore.ts","../src/hooks/useAcumulateDate/index.ts","../src/hooks/useBanner/index.ts","../src/hooks/useStore/index.ts","../src/config/client/errors.ts","../src/hooks/useLogout/index.ts","../src/cookies/index.ts","../src/hooks/useLogout/helpers/apiBaseUrl.ts","../src/hooks/useLogout/helpers/BroadcastChannel.ts","../src/hooks/useLogout/helpers/fetchData.ts","../src/hooks/useLogout/helpers/logger.ts","../src/hooks/useLogout/helpers/parseUrl.ts","../src/hooks/useLogout/helpers/getCsrfToken.ts","../src/hooks/useLogout/helpers/index.ts","../src/hooks/useStore/queries.ts","../src/hooks/useCategoryInStore/index.ts","../src/hooks/useCategoryInStore/queries.ts","../src/hooks/useCategoryStore/index.ts","../src/hooks/useCategoryStore/queries.ts","../src/hooks/useCatWithProduct/index.ts","../src/hooks/useCatWithProduct/queries.ts","../src/hooks/useManageQueryParams/index.ts","../src/hooks/useDeliveryTime/index.ts","../src/hooks/useModules/index.ts","../src/hooks/useModules/helpers/validateModules.ts","../src/hooks/getTotalHours/index.ts","../src/hooks/useUpdateMultipleProducts/index.ts","../src/hooks/useCategoriesProduct/index.ts","../src/hooks/useCategoriesProduct/queries.ts","../src/hooks/useUpdateMultipleProducts/queries.ts","../src/hooks/useTokenCards/index.ts","../src/hooks/useStoreTable/useStoreTableCreate.ts","../src/hooks/useStoreTable/queries.ts","../src/hooks/useStoreTable/useStoreTables.ts","../src/hooks/useSubscriptionValidation/index.ts","../src/hooks/convertToMilitaryTime/index.ts","../src/hooks/useRoles/useCreateRole.ts","../src/hooks/useRoles/queries.ts","../src/hooks/useRoles/useGetRoles.ts","../src/hooks/useRoles/useUpdateRolesPriority.ts","../src/hooks/useRoles/useRemoveRoles.ts","../src/hooks/useLocalBackendIp/index.ts","../src/hooks/statusOpenStores/helpers/index.ts","../src/hooks/statusOpenStores/index.ts","../src/hooks/completeSchedules/index.ts","../src/hooks/getCardType/index.ts","../src/hooks/useLoginEmployeeInStore/index.ts","../src/hooks/useUploadProducts/index.ts","../src/hooks/useUploadProducts/helpers/validateProductDataExcel.ts","../src/hooks/useAmountInput/index.ts","../src/hooks/useColorByLetters/helpers/alea.ts","../src/hooks/useColorByLetters/helpers/mersenne_twister.ts","../src/hooks/useColorByLetters/helpers/index.ts","../src/hooks/useColorByLetters/helpers/colors.ts","../src/hooks/useColorByLetters/index.ts","../src/hooks/newMessageSubscription/index.ts","../src/hooks/usePWAInstall/index.ts","../src/hooks/useGetCookies/index.ts","../src/hooks/generateTemplate/index.ts","../src/hooks/isTokenExpired/index.ts","../src/hooks/useCreateDeliveryTime/index.ts","../src/hooks/addTenMinutes/index.ts","../src/hooks/useUpdateCartCookie/index.ts","../src/hooks/useSetupSchedule/index.ts","../src/hooks/useSchedule/index.ts","../src/hooks/useSchedule/queries.ts","../src/hooks/useSchedule/schedule.ts","../src/hooks/useSetupSchedule/helpers/index.ts","../src/hooks/useMouse/index.ts","../src/hooks/useStatusOpenStore/index.ts","../src/hooks/useFormatDate/index.ts","../src/hooks/useStatusOpenStore/helpers/index.ts","../src/hooks/usePushNotificationOrder/index.ts","../src/hooks/newStoreOrderSubscription/index.ts","../src/hooks/useChatRoomSubscription/index.ts","../src/hooks/useScheduleData/index.ts","../src/hooks/useGetMessagesToRoom/index.ts","../src/hooks/useOrders/queries.ts","../src/hooks/useOrders/useChangeOrderState/index.ts","../src/hooks/useOrders/useOrdersFromStore/index.ts","../src/hooks/usePushNotifications/index.ts","../src/hooks/usePushNotifications/helpers/index.ts","../src/hooks/useLocationManager/index.ts","../src/hooks/useQueryLocationsMap/index.ts","../src/hooks/useQueryLocationsMap/queries.ts","../src/hooks/useGetAllLocationUser/index.ts","../src/hooks/useGetAllLocationUser/queries.ts","../src/hooks/useFingerprintjs/index.ts","../src/hooks/useCountries/index.ts","../src/hooks/useCountries/queries.ts","../src/hooks/useDessertWithPrice/index.ts","../src/hooks/useDeleteExtraProductFoods/index.ts","../src/hooks/useDessertWithPrice/queries.ts","../src/hooks/useUpdateMultipleExtProduct/index.ts","../src/hooks/useUpdateMultipleExtProduct/queries.ts","../src/hooks/useDessertWithPrice/helpers/index.ts","../src/hooks/generateStoreURL/index.ts","../src/hooks/useCreateStorePendingToRegister/index.ts","../src/hooks/useCreateStorePendingToRegister/queries.ts","../src/hooks/useDepartments/index.ts","../src/hooks/useDepartments/queries.ts","../src/hooks/useSaveLocation/index.ts","../src/hooks/useSaveLocation/queries.ts","../src/hooks/useRoads/index.ts","../src/hooks/useRoads/queries.ts","../src/hooks/useCities/index.ts","../src/hooks/useCities/queries.ts","../src/hooks/useEditCategory/index.ts","../src/hooks/useEmployee/index.ts","../src/hooks/useEmployee/queries.ts","../src/hooks/useEmployee/useCreateEmployee.ts","../src/hooks/useCheckbox/index.ts","../src/hooks/useRemoveExtraProductFoodsOptional/index.ts","../src/hooks/useRemoveExtraProductFoodsOptional/queries.ts","../src/hooks/useDeleteSubProductOptional/index.ts","../src/hooks/useDeleteSubProductOptional/queries.ts","../src/hooks/useGetOneStoreRating/index.ts","../src/hooks/useGetOneStoreRating/queries.ts","../src/hooks/useFavoriteStores/index.ts","../src/hooks/useRestaurant/helpers/index.ts","../src/hooks/useRestaurant/helpers/manageStatusOpen.ts","../src/hooks/useFavoriteStores/queries.ts","../src/hooks/useAsideCart/index.ts","../src/hooks/useCart/useCart/index.ts","../src/hooks/useGetExtProductFoodsSubOptionalAll/index.ts","../src/hooks/useProductsFood/index.ts","../src/hooks/useStock/useStockUpdatedAllSubscription.ts","../src/hooks/useProductsFood/useEditProduct.ts","../src/hooks/useCart/queries.ts","../src/hooks/useCart/useGetCart/index.ts","../src/hooks/useCart/useCart/helpers/index.ts","../src/hooks/useAsideCart/helpers/index.ts","../src/hooks/useAsideCart/queries.ts","../src/hooks/useRatingArrayData/index.ts","../src/hooks/useRatingArrayData/queries.ts","../src/hooks/useChartData/index.ts","../src/hooks/useReport/queries.ts","../src/hooks/useGetAllSales/index.ts","../src/hooks/useSales/queries.ts","../src/hooks/useChartData/useChartDataAllOrders/index.ts","../src/hooks/useDevices/useGetDevices.ts","../src/hooks/useDevices/queries.ts","../src/hooks/useDevices/useRegisterDevices.ts","../src/hooks/useClients/index.ts","../src/hooks/useClients/queries.ts","../src/hooks/useScroll/index.ts","../src/hooks/useStatusOrdersClient/index.ts","../src/hooks/useStatusOrdersClient/helpers/index.ts","../src/hooks/useStatusOrdersClient/queries.ts","../src/hooks/useUpdateExistingOrders/index.ts","../src/hooks/useConnection/index.ts","../src/hooks/useManageNewOrder/index.ts","../src/hooks/useManageNewOrder/helpers/index.ts","../src/hooks/useCreateProduct/index.ts","../src/hooks/useLocalSorage/index.ts","../src/hooks/useProductsFood/usetagsProducts.ts","../src/hooks/useTagProducts/useRegisterMultipleTags.ts","../src/hooks/useTagProducts/useGetAllTags.ts","../src/hooks/useTagProducts/useDeleteOneTag.ts","../src/hooks/useSetImageProducts/index.ts","../src/hooks/useSetImageProducts/queries.ts","../src/hooks/useCreateProduct/helpers/useEditImageProduct/index.ts","../src/hooks/useDessert/index.ts","../src/mock/dessert/index.ts","../src/hooks/useEditSubProductOptional/index.ts","../src/hooks/useEditSubProductOptional/queries.ts","../src/hooks/useUpdateExtProductFoodsSubOptional/index.ts","../src/hooks/useDessert/helpers/index.ts","../src/hooks/useDrag/index.ts","../src/hooks/useEvent/index.ts","../src/hooks/useFetchJson/index.ts","../src/hooks/getTodayTimestamps/index.ts","../src/hooks/useFormatNumberPhone/index.ts","../src/hooks/useFormTools/index.ts","../src/hooks/useHover/index.ts","../src/hooks/useImageOptimization/index.ts","../src/hooks/useImagesStore/index.ts","../src/hooks/useImagesStore/utils/index.ts","../src/hooks/useImagesStore/queries.ts","../src/hooks/useImageWeight/index.ts","../src/hooks/useIntersection/index.ts","../src/hooks/useKeypress/index.ts","../src/hooks/useLazyScript/index.ts","../src/hooks/useLocationNavigate/index.ts","../src/hooks/useSetSession/index.ts","../src/hooks/useMobile/index.ts","../src/hooks/useMutateHeight/index.ts","../src/hooks/useReport/index.ts","../src/hooks/useSales/useTotalSales.ts","../src/hooks/useOrderClient/index.ts","../src/hooks/useStoreContacts/index.ts","../src/hooks/useStoreContacts/queries.ts","../src/hooks/useRestaurant/index.ts","../src/hooks/useRestaurant/queries.ts","../src/hooks/useSales/index.ts","../src/utils/generateCode.ts","../src/hooks/useSales/helpers/isStockInsufficient.ts","../src/hooks/useSales/helpers/add-product.utils.ts","../src/hooks/useSales/helpers/apply-discount-to-cart.utils.ts","../src/hooks/useSales/helpers/constants/index.ts","../src/hooks/useSales/helpers/extras.utils.ts","../src/hooks/useSales/helpers/filterProductsByCarProId.utils.ts","../src/hooks/useSales/helpers/remove-product.utils.ts","../src/hooks/useSales/helpers/increment-product-quantity.utils.ts","../src/hooks/useSales/helpers/initializer.utils.ts","../src/hooks/useSales/useGetSale.ts","../src/hooks/useGetMinPrice/index.ts","../src/hooks/useGetMinPrice/queries.ts","../src/hooks/useCatWithProductClient/index.ts","../src/hooks/useCatWithProductClient/queries.ts","../src/hooks/useGetFoodRecomended/index.ts","../src/hooks/useGetFoodRecomended/queries.ts","../src/hooks/useSaveAvailableProduct/index.ts","../src/hooks/useSaveAvailableProduct/helpers/index.ts","../src/hooks/useSaveAvailableProduct/queries.ts","../src/hooks/useSetState/index.ts","../src/hooks/useStoreCalendar/index.ts","../src/hooks/getCategoriesWithProduct/helpers/index.ts","../src/hooks/getCategoriesWithProduct/index.ts","../src/hooks/useIncomingOrders/index.ts","../src/hooks/useIncomingOrders/queries.ts","../src/hooks/useTimeAgo/useTimeAgo.ts","../src/hooks/useUpdateCart/index.ts","../src/hooks/useUser/index.ts","../src/hooks/useUser/queries.ts","../src/hooks/useGetStoreCookie/index.ts","../src/hooks/getGlobalSession/index.ts","../src/hooks/handleLogin/index.ts","../src/hooks/useInventory/useGetProductsInStock.ts","../src/hooks/useInventory/queries.ts","../src/hooks/useInventory/useUpdateManageStock.ts","../src/hooks/useStockMovements/index.ts","../src/hooks/useStockMovements/helpers/index.ts","../src/hooks/useTopProductsMovements/index.ts","../src/hooks/useTotalProductsSold/index.ts","../src/hooks/useTotalProductsInStock/index.ts","../src/hooks/useTotalAllSales/index.ts","../src/hooks/useTotalProductsSolded/index.ts","../src/hooks/useWeeklyStockMovement/index.ts","../src/hooks/useWeeklyStockMovement/helpers/index.ts","../src/hooks/useGetSalesAmountToday/index.ts","../src/hooks/useUpsertGoal/index.ts","../src/hooks/useDashboardComponents/index.ts","../src/hooks/useUpdateDashboardComponent/index.ts","../src/hooks/useUpdateModuleOrder/index.ts","../src/hooks/useDownloadReports/useDownloadReportByDay/index.ts","../src/hooks/useDownloadReports/helpers/downloadFileFromResponse.ts","../src/hooks/useDownloadReports/useGetReportByDateRange/index.ts","../src/hooks/usePortFetcher/index.ts","../src/hooks/useImageUploaderProduct/index.ts","../src/hooks/useImageUploaderProduct/helper/index.ts","../src/hooks/useImageUploaderProduct/helper/canvasUtils.ts","../src/hooks/useImageUploaderProduct/helper/getOrientation.ts","../src/hooks/useOrderStatusTypes/useUpdateOrderStatusPriorities/index.ts","../src/hooks/useOrderStatusTypes/useOrderStatusTypes/index.ts","../src/hooks/useCreateOrderStatusType/index.ts","../src/hooks/useDevWS/index.ts","../src/hooks/usePrintSaleTicket/index.ts","../src/hooks/usePaymentMethod/useCreatePaymentMethod/index.ts","../src/hooks/usePaymentMethod/paymentMethod.gql.ts","../src/hooks/usePaymentMethod/useGetAllPaymentMethods/index.ts","../src/hooks/usePaymentMethod/useGetPaymentMethod/index.ts","../src/hooks/useTheme/index.ts","../src/hooks/useFilterConfigs/index.ts","../src/hooks/getSession/index.ts","../src/security/index.ts","../src/index.ts"],"sourcesContent":["{\r\n \"dependencies\": {\r\n \"@apollo/client\": \"3.13.5\",\r\n \"file-saver\": \"2.0.5\",\r\n \"graphql\": \"16.12.0\",\r\n \"js-cookie\": \"3.0.5\",\r\n \"lodash\": \"4.17.23\",\r\n \"typesdefs\": \"^1.0.6\",\r\n \"xlsx\": \"0.18.5\"\r\n },\r\n \"devDependencies\": {\r\n \"@babel/core\": \"7.29.0\",\r\n \"@babel/preset-env\": \"7.29.0\",\r\n \"@babel/preset-typescript\": \"7.28.5\",\r\n \"@eslint/js\": \"^9.39.2\",\r\n \"@types/file-saver\": \"2.0.7\",\r\n \"@types/js-cookie\": \"3.0.6\",\r\n \"@types/react\": \"18.0.20\",\r\n \"babel-jest\": \"30.2.0\",\r\n \"eslint\": \"^9.39.2\",\r\n \"eslint-plugin-import\": \"2.32.0\",\r\n \"eslint-plugin-jsdoc\": \"62.5.0\",\r\n \"eslint-plugin-react\": \"^7.37.5\",\r\n \"eslint-plugin-react-hooks\": \"7.0.1\",\r\n \"globals\": \"^17.2.0\",\r\n \"jest\": \"30.2.0\",\r\n \"ts-node\": \"10.9.2\",\r\n \"tsup\": \"8.5.1\",\r\n \"typescript\": \"5.9.3\",\r\n \"typescript-eslint\": \"^8.54.0\"\r\n },\r\n \"exports\": {\r\n \".\": {\r\n \"import\": \"./dist/index.mjs\",\r\n \"require\": \"./dist/index.cjs\",\r\n \"types\": \"./dist/index.d.ts\"\r\n }\r\n },\r\n \"main\": \"dist/index.cjs\",\r\n \"module\": \"dist/index.mjs\",\r\n \"name\": \"npm-pkg-hook\",\r\n \"peerDependencies\": {\r\n \"next\": \"^14 || ^15\",\r\n \"react\": \"^18 || ^19\",\r\n \"react-dom\": \"^18 || ^19\"\r\n },\r\n \"scripts\": {\r\n \"build\": \"tsup\",\r\n \"lint\": \"eslint .\",\r\n \"prepare\": \"npm run build\",\r\n \"prepublishOnly\": \"npm run build\",\r\n \"test\": \"jest\"\r\n },\r\n \"types\": \"index.d.ts\",\r\n \"version\": \"1.4.0\"\r\n}","import { useMutation } from '@apollo/client'\n\r\nimport { updateCacheMod } from '../../utils'\r\nimport { GET_EXTRAS_PRODUCT_FOOD_OPTIONAL, UPDATE_EXTRAS_PRODUCT_FOOD_OPTIONAL } from '../useProductsFood/queriesStore'\r\n\r\nexport const useUpdateExtProductFoodsOptional = () => {\r\n const [updateExtProductOptional] = useMutation(UPDATE_EXTRAS_PRODUCT_FOOD_OPTIONAL)\r\n\r\n const handleUpdateExtProduct = async ({\r\n pId,\r\n code,\r\n opExPid,\r\n OptionalProName,\r\n required,\r\n numbersOptionalOnly\r\n }: {\r\n pId: string\r\n code: string\r\n opExPid: string\r\n OptionalProName?: string\r\n required?: boolean\r\n numbersOptionalOnly?: number | string\r\n }) => {\r\n return await updateExtProductOptional({\r\n variables: {\r\n input: {\r\n pId,\r\n code,\r\n opExPid,\r\n OptionalProName,\r\n required,\r\n numbersOptionalOnly: Number(numbersOptionalOnly)\r\n }\r\n },\r\n update: (cache, { data: { ExtProductFoodsOptionalAll } }) => {\r\n updateCacheMod({\r\n cache,\r\n query: GET_EXTRAS_PRODUCT_FOOD_OPTIONAL,\r\n nameFun: 'ExtProductFoodsOptionalAll',\r\n dataNew: ExtProductFoodsOptionalAll,\r\n type: 1\r\n })\r\n }\r\n })\r\n }\r\n return {\r\n handleUpdateExtProduct\r\n }\r\n}\r\n","/**\r\n * Returns an object containing the start and end of the day in local time (UTC-5 by default) for the given date.\r\n * @returns {{ start: Date; end: Date }} An object with `start` and `end` Date properties.\r\n */\r\nexport class UtilDateRange {\r\n private readonly date: Date\r\n\r\n /**\r\n * \r\n * @param date\r\n * @returns UtilDateRange instance\r\n */\r\n constructor(date: Date | string | number = new Date()) {\r\n this.date = new Date(date) // Asegura que sea un objeto Date\r\n }\r\n\r\n /**\r\n *\r\n * @param date\r\n * @returns Date ajustada a la zona horaria local (UTC-5)\r\n */\r\n private toLocalTime(date: Date | string | number): Date {\r\n const offset = -5 // UTC-5 (ajustar si es necesario)\r\n const localDate = new Date(date)\r\n localDate.setHours(localDate.getHours() + offset)\r\n return localDate\r\n }\r\n\r\n /**\r\n * @returns Date al inicio del día (00:00:00.000) en hora local\r\n */\r\n getStartOfDay(): Date {\r\n const localDate = this.toLocalTime(this.date)\r\n localDate.setHours(0, 0, 0, 0)\r\n return localDate\r\n }\r\n\r\n /**\r\n * @returns Date al final del día (23:59:59.999) en hora local\r\n */\r\n getEndOfDay(): Date {\r\n const localDate = this.toLocalTime(this.date)\r\n localDate.setHours(23, 59, 59, 999)\r\n return localDate\r\n }\r\n\r\n /**\r\n * @returns {{ start: Date; end: Date }} Objeto con las fechas de inicio y fin del día en hora local\r\n */\r\n getRange(): { start: Date; end: Date } {\r\n return {\r\n start: this.getStartOfDay(),\r\n end: this.getEndOfDay()\r\n }\r\n }\r\n}\r\n","import { randomBytes } from 'node:crypto'\r\n\r\n/**\r\n * @description It takes an array of elements and returns an object with a submit hook for each element.\r\n * @version 0.1.1\r\n * @param {array} elements elementos del formulario\r\n * @return {array} devuelve un array de booleanos con el nombre identificador para cada estado en react.\r\n */\r\nconst validTypes: Record<string, boolean> = {\r\n text: true,\r\n password: true,\r\n email: true,\r\n number: true,\r\n hidden: true,\r\n textarea: true\r\n}\r\n\r\nexport const statusOrder = {\r\n 0: '',\r\n 1: 'ENTRANTE',\r\n 2: 'PROCESO',\r\n 3: 'LISTOS',\r\n 4: 'CONCLUIDOS',\r\n 5: 'REJECTED'\r\n}\r\n\r\nexport const statusProduct = {\r\n deleted: 0,\r\n active: 1\r\n}\r\n\r\nexport const validationSubmitHooks = (elements: Array<HTMLElement & { name?: string; type?: string; value?: any; dataset?: DOMStringMap }>) => {\r\n if (!elements || elements.length === 0) {\r\n return {}\r\n }\r\n let errorForm: Record<string, boolean> = {}\r\n\r\n for (const element of elements) {\r\n if (element.name) {\r\n const elementType = (element.type as string) || element.tagName.toLowerCase()\r\n if (validTypes[elementType]) {\r\n if (element.dataset && element.dataset.required === 'true') {\r\n if (!element.value) {\r\n errorForm = { ...errorForm, [element.name]: true }\r\n } else {\r\n errorForm = { ...errorForm, [element.name]: false }\r\n }\r\n } else {\r\n errorForm = { ...errorForm, [element.name]: false }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return errorForm\r\n}\r\n\r\nexport const getCurrentDomain = (): string | boolean => {\r\n return typeof window !== 'undefined' && window.location.hostname\r\n}\r\n\r\n\r\ninterface RandomCodeOptions {\r\n prefix?: string;\r\n suffix?: string;\r\n}\r\n\r\n/**\r\n * Generates a cryptographically secure random string of given length.\r\n * @param length - Desired length of the generated code.\r\n * @param options - Optional prefix/suffix configuration.\r\n * @returns Random alphanumeric string with optional prefix and suffix.\r\n */\r\nexport const RandomCode = (\r\n length: number,\r\n options: RandomCodeOptions = {}\r\n): string => {\r\n if (length <= 0) {\r\n throw new Error('Length must be greater than 0')\r\n }\r\n\r\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\r\n const charactersLength = characters.length\r\n\r\n // Generate enough random bytes\r\n const randomBuffer = randomBytes(length)\r\n let code = ''\r\n\r\n for (let i = 0; i < length; i++) {\r\n const index = randomBuffer[i] % charactersLength\r\n code += characters.charAt(index)\r\n }\r\n\r\n return `${options?.prefix ?? ''}${code}${options?.suffix ?? ''}`\r\n}\r\n\r\n/**\r\n * actualizar cache de apollo\r\n * @param {{ cache: object, query: object, nameFun: string, dataNew: object, type: number, id: string }} params Parámetros para actualizar el cachet de apollo\r\n * @returns {null} no hay retorno\r\n */\r\nexport interface UpdateCacheModParams {\r\n cache: any;\r\n query: any;\r\n nameFun: string;\r\n dataNew?: any;\r\n type: number;\r\n id?: string;\r\n}\r\n\r\nexport const updateCacheMod = async ({ cache, query, nameFun, dataNew, type, id }: UpdateCacheModParams): Promise<any> => {\r\n return cache.modify({\r\n fields: {\r\n [nameFun](dataOld = []) {\r\n if (type === 1) return cache.writeQuery({ query, data: [...(dataOld || []), { ...(dataNew || {}) }] })\r\n if (type === 2) return cache.writeQuery({ query, data: { ...(dataOld || {}), ...(dataNew || {}) } })\r\n if (type === 3) return cache.writeQuery({ query, data: dataOld.filter(x => { return x === id }) })\r\n }\r\n }\r\n })\r\n}\r\n/**\r\n * Formatea un valor como un número siguiendo el formato de Colombia.\r\n * Si el valor no es un número válido, lo devuelve tal como está.\r\n *\r\n * @param {string|number} value - El valor a formatear.\r\n * @returns {string} El valor formateado como número o el valor original si no es numérico.\r\n */\r\nexport const numberFormat = (value: string | number) => {\r\n // Verifica si el valor es nulo o indefinido, devolviendo el mismo valor.\r\n if (value === null || value === undefined) {\r\n return value\r\n }\r\n\r\n // Convierte el valor a string y elimina puntos.\r\n const stringValue = `${value}`.replace(/\\./g, '')\r\n\r\n // Intenta convertir a número y formatear si es posible.\r\n const numberValue = parseFloat(stringValue)\r\n if (!isNaN(numberValue)) {\r\n return new Intl.NumberFormat('es-CO', {\r\n minimumFractionDigits: 2,\r\n style: 'decimal',\r\n maximumFractionDigits: 2\r\n }).format(numberValue)\r\n }\r\n\r\n // Devuelve el valor original si no es un número.\r\n return value\r\n}\r\n/**\r\n *\r\n * @param {Object} data objeto a filtrar\r\n * @param {Array} filters array a comparar o claves del objeto a excluir\r\n * @param {boolean} dataFilter booleano para devolver los datos filtrados o no\r\n * @returns {Object} devuelve el objeto filtrado segun los parametros\r\n */\r\nexport const filterKeyObject = (data: Record<string, unknown>, filters: string[], dataFilter: boolean) => {\r\n let values = {}; let valuesFilter = {}\r\n for (const elem in data) {\r\n let coincidence = false\r\n for (let i = 0; i < filters.length; i++) {\r\n if (elem === filters[i]) coincidence = true\r\n else valuesFilter = filters[i]\r\n }\r\n\r\n if (!coincidence) values = { ...values, [elem]: data[elem] }\r\n else valuesFilter = { ...valuesFilter, [elem]: data[elem] }\r\n }\r\n if (!dataFilter) return values\r\n if (dataFilter) return { values, valuesFilter }\r\n}\r\n\r\nexport const MONTHS: readonly string[] = [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December'\r\n] as const\r\n\r\nexport const SPANISH_MONTHS: Readonly<Record<number, string>> = {\r\n 0: 'Enero',\r\n 1: 'Febrero',\r\n 2: 'Marzo',\r\n 3: 'Abril',\r\n 4: 'Mayo',\r\n 5: 'Junio',\r\n 6: 'Julio',\r\n 7: 'Augosto',\r\n 8: 'Septiembre',\r\n 9: 'Octubre',\r\n 10: 'Noviembre ',\r\n 11: 'Diciembre'\r\n} as const\r\n\r\nexport const days: Readonly<Record<number, string>> = {\r\n 1: 'Lunes',\r\n 2: 'Martes',\r\n 3: 'Miércoles',\r\n 4: 'Jueves',\r\n 5: 'Viernes',\r\n 6: 'Sábado',\r\n 0: 'Domingo'\r\n} as const\r\n\r\nexport const convertBase64 = (file: File): Promise<string | ArrayBuffer | null> => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n if (file) {\r\n reader.readAsDataURL(file)\r\n }\r\n reader.onload = () => {\r\n resolve(reader.result)\r\n }\r\n reader.onerror = error => {\r\n reject(error)\r\n }\r\n })\r\n}\r\n\r\nexport const validationImg = (file: File): boolean => { return (/\\.(jpg|png|gif|jpeg)$/i).test(file.name) }\r\n\r\nexport const SERVICES = Object.freeze({\r\n WEB_SOCKET_CHAT: 'web-socket-chat',\r\n ADMIN_SERVER: 'admin-server',\r\n ADMIN_STORE: 'admin-store',\r\n MAIN: 'main'\r\n})\r\n\r\nexport const paymentMethodCards = [\r\n {\r\n name: 'Visa',\r\n icon: 'IconVisa'\r\n },\r\n {\r\n name: 'MasterCard',\r\n icon: 'IconMasterCard'\r\n }\r\n]\r\n\r\nexport const CATEGORY_EMPTY = 'NINGUNO'\r\n\r\n\r\ninterface CleanValueOptions {\r\n value: string;\r\n decimalSeparator?: string;\r\n groupSeparator?: string;\r\n allowDecimals?: boolean;\r\n decimalsLimit?: number;\r\n allowNegativeValue?: boolean;\r\n disableAbbreviations?: boolean;\r\n}\r\n\r\nconst cleanValue = ({\r\n value,\r\n decimalSeparator,\r\n groupSeparator,\r\n allowDecimals,\r\n decimalsLimit,\r\n allowNegativeValue,\r\n disableAbbreviations\r\n}: CleanValueOptions): string | null => {\r\n if (typeof value !== 'string') return null\r\n\r\n // Remove currency symbols and whitespace\r\n let cleaned = value.replace(/[$€£¥]/g, '').trim()\r\n\r\n // Handle abbreviations like K, M, B\r\n if (!disableAbbreviations) {\r\n cleaned = cleaned.replace(/([kmb])\\b/i, (match) => {\r\n const multipliers: Record<string, number> = { k: 1e3, m: 1e6, b: 1e9 }\r\n const key = match.toLowerCase()\r\n return multipliers[key] ? `*${multipliers[key]}` : ''\r\n })\r\n }\r\n\r\n // Replace group separator with empty string\r\n if (groupSeparator) {\r\n cleaned = cleaned.replace(new RegExp(`\\\\${groupSeparator}`, 'g'), '')\r\n }\r\n\r\n // Replace decimal separator with a dot\r\n if (decimalSeparator) {\r\n cleaned = cleaned.replace(new RegExp(`\\\\${decimalSeparator}`, 'g'), '.')\r\n }\r\n\r\n // Remove any non-numeric characters except for the decimal point\r\n cleaned = cleaned.replace(/[^0-9.-]/g, '')\r\n\r\n // Limit decimals if specified\r\n if (allowDecimals && typeof decimalsLimit === 'number' && decimalsLimit > 0) {\r\n const parts = cleaned.split('.')\r\n if (parts.length > 1) {\r\n parts[1] = parts[1].slice(0, decimalsLimit)\r\n cleaned = parts.join('.')\r\n }\r\n }\r\n\r\n // Handle negative values\r\n if (!allowNegativeValue) {\r\n cleaned = cleaned.replace(/-/g, '')\r\n }\r\n\r\n return cleaned\r\n}\r\n/**\r\n * Converts a formatted string with group and decimal separators into a float number.\r\n *\r\n * @param value - The formatted string input, e.g., \"$ 1.234,56\"\r\n * @param decimalSeparator - The character used as decimal separator, e.g., ','\r\n * @param groupSeparator - The character used as group/thousands separator, e.g., '.'\r\n * @returns The parsed float value or null if input is invalid\r\n */\r\nexport function parseFormattedFloat(value: string): number {\r\n if (!value) return 0\r\n const options = {\r\n decimalSeparator: ',',\r\n groupSeparator: '.',\r\n allowDecimals: true,\r\n decimalsLimit: 20,\r\n allowNegativeValue: true,\r\n disableAbbreviations: false\r\n }\r\n const cleaned = cleanValue({ value, ...options })\r\n\r\n // If cleaned is null/undefined/empty, return 0 to avoid calling replace on null\r\n if (cleaned === null || cleaned === undefined || cleaned === '') return 0\r\n\r\n const normalized = (typeof options.decimalSeparator === 'string' && options.decimalSeparator !== '')\r\n // Replace the decimal separator with a dot for parsing\r\n ? cleaned.replace(options.decimalSeparator, '.')\r\n : cleaned\r\n\r\n const num = Number.parseFloat(normalized)\r\n return Number.isNaN(num) ? 0 : num\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CREATE_SCHEDULE_STORE = gql`\r\n mutation setStoreSchedule($input: IsStoreSchedule!) {\r\n setStoreSchedule(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const GET_SCHEDULE_STORE = gql`\r\n query getStoreSchedules($schDay: Int, $idStore: ID) {\r\n getStoreSchedules(schDay: $schDay, idStore: $idStore) {\r\n schId\r\n idStore\r\n schDay\r\n schHoSta\r\n schHoEnd\r\n schState\r\n }\r\n }\r\n`\r\nexport const GET_ONE_SCHEDULE_STORE = gql`\r\n query getOneStoreSchedules($schDay: Int, $idStore: ID) {\r\n getOneStoreSchedules(schDay: $schDay, idStore: $idStore) {\r\n schId\r\n schDay\r\n schHoSta\r\n schHoEnd\r\n schState\r\n }\r\n }\r\n`\r\nexport const GET_CAT_OF_PRODUCTS = gql`\r\n query getAllCatOfProducts($idStore: ID) {\r\n getAllCatOfProducts(idStore: $idStore) {\r\n id\r\n cpId\r\n catName\r\n catDescription\r\n schState\r\n }\r\n }\r\n`\r\nexport const REGISTER_CAT_OF_PRODUCTS = gql`\r\n mutation updatedProducts($input: InputCatProducts) {\r\n updatedProducts(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const REGISTER_CONTRACT_STORE = gql`\r\n mutation createOneContract($input: InputContractType) {\r\n createOneContract(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const GET_ALL_EMPLOYEE_STORE = gql`\r\n query employees($umId: ID, $cId: ID, $aId: ID) {\r\n employees(umId: $umId, cId: $cId, aId: $aId) {\r\n eId\r\n idStore\r\n id\r\n idEmployee\r\n eSalary\r\n typeContract\r\n uEmail\r\n termContract\r\n eDatAdm\r\n eState\r\n }\r\n }\r\n`\r\n\r\nexport const GET_ALL_PRODUCT_STORE = gql`\r\nquery productFoodsAll(\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $gender: [String]\r\n $pState: Int\r\n $desc: [String]\r\n $categories: [ID]\r\n $fromDate: DateTime\r\n $toDate: DateTime\r\n $page: Int\r\n) {\r\n productFoodsAll(\r\n search: $search\r\n min: $min\r\n max: $max\r\n gender: $gender\r\n desc: $desc\r\n pState: $pState\r\n categories: $categories\r\n toDate: $toDate\r\n fromDate: $fromDate\r\n page: $page\r\n ) {\r\n success\r\n message\r\n pagination {\r\n totalRecords\r\n totalPages\r\n currentPage\r\n __typename\r\n }\r\n data {\r\n pId\r\n sizeId #Talla\r\n colorId #Color\r\n stock\r\n manageStock\r\n carProId #Categoria a la cual pertenece el producto\r\n caId\r\n cId #Country\r\n dId #Department\r\n ctId #Cuidad\r\n fId #Características\r\n pName\r\n getOneTags {\r\n tgId\r\n idUser\r\n idStore\r\n pId\r\n nameTag\r\n }\r\n ProPrice\r\n ProDescuento\r\n free\r\n ProUniDisponibles\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ValueDelivery\r\n ProStar\r\n sTateLogistic\r\n ProImage\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n createdAt\r\n updatedAt\r\n ProDelivery\r\n ProVoltaje\r\n pState\r\n feat {\r\n fId\r\n thpId\r\n hpqrQuestion\r\n }\r\n area {\r\n aId\r\n aName\r\n }\r\n }\r\n }\r\n}\r\n`\r\nexport const GET_ALL_RATING_START_STORE = gql`\r\n query getAllRatingStar($idStore: ID) {\r\n getAllRatingStar(idStore: $idStore) {\r\n rSId\r\n rScore\r\n idStore\r\n createAt\r\n }\r\n }\r\n`\r\nexport const GET_ALL_VISITOR_STORE = gql`\r\n query getAllVisitorStore(\r\n $idStore: ID\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $fromDate: DateTime\r\n $toDate: DateTime\r\n ) {\r\n getAllVisitorStore(\r\n idStore: $idStore\r\n search: $search\r\n min: $min\r\n max: $max\r\n fromDate: $fromDate\r\n toDate: $toDate\r\n ) {\r\n visitStoreId\r\n id\r\n idStore\r\n createAt\r\n updateAt\r\n }\r\n }\r\n`\r\nexport const GET_MIN_PEDIDO = gql`\r\n query getMinPrice($idStore: ID) {\r\n getMinPrice(idStore: $idStore)\r\n }\r\n`\r\n\r\n \r\nexport const GET_All_RATING_STORE = gql`\r\n query getAllRating($idStore: ID) {\r\n getAllRating(idStore: $idStore) {\r\n idStore\r\n rId\r\n id\r\n rAppearance\r\n rTasty\r\n rGoodTemperature\r\n rGoodCondition\r\n rState\r\n createAt\r\n updateAt\r\n }\r\n }\r\n`\r\nexport const CREATE_LOGO = gql`\r\n mutation registerLogo($logo: Upload, $idStore: ID) {\r\n registerLogo(logo: $logo, idStore: $idStore) {\r\n success\r\n message \r\n data\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n __typename\r\n }\r\n }\r\n }\r\n }\r\n`\r\nexport const CREATE_BANNER_STORE = gql`\r\n mutation registerBanner($input: IBanner) {\r\n registerBanner(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const DELETE_ONE_LOGO_STORE = gql`\r\n mutation deleteALogoStore($idStore: ID, $Image: String) {\r\n deleteALogoStore(idStore: $idStore, Image: $Image) {\r\n message\r\n success\r\n }\r\n }\r\n`\r\nexport const GET_ONE_BANNER_STORE = gql`\r\n query getOneBanners($idStore: ID, $id: ID) {\r\n getOneBanners(idStore: $idStore, id: $id) {\r\n bnId\r\n id\r\n path\r\n bnImageFileName\r\n idStore\r\n bnState\r\n createAt\r\n updateAt\r\n }\r\n }\r\n`\r\nexport const DELETE_ONE_BANNER_STORE = gql`\r\n mutation deleteOneBanner(\r\n $bnState: Int\r\n $idStore: ID\r\n $bnId: ID\r\n $bnImage: String\r\n $bnImageFileName: String\r\n ) {\r\n deleteOneBanner(\r\n bnState: $bnState\r\n idStore: $idStore\r\n bnId: $bnId\r\n bnImage: $bnImage\r\n bnImageFileName: $bnImageFileName\r\n ) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\n\r\nexport const GET_ALL_PQR = gql`\r\n query getOnePqr($hpqrId: ID, $thpId: ID) {\r\n getOnePqr(hpqrId: $hpqrId, thpId: $thpId) {\r\n hpqrId\r\n thpId\r\n hpqrQuestion\r\n }\r\n }\r\n`\r\nexport const GET_ONE_COLOR = gql`\r\n query getAllColor {\r\n getAllColor {\r\n colorId\r\n colorName\r\n colorState\r\n }\r\n }\r\n`\r\nexport const UPDATE = gql`\r\n mutation updateProducts($input: InputProduct) {\r\n updateProducts(input: $input) {\r\n pId\r\n sizeId #Talla\r\n colorId #Color\r\n cId #Country\r\n dId #Department\r\n ctId #Cuidad\r\n fId #Características\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProUniDisponibles\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ProStar\r\n pState\r\n ProImage\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n ProDelivery\r\n ProVoltaje\r\n }\r\n }\r\n`\r\n\r\nexport const UPDATE_PRODUCT_FOOD = gql`\r\n mutation updateProductFoods($input: InputProductFood) {\r\n updateProductFoods(input: $input) {\r\n \tsuccess\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n data {\r\n pId\r\n sizeId #Talla\r\n colorId #Color\r\n cId #Country\r\n dId #Department\r\n ctId #Cuidad\r\n fId #Características\r\n pName\r\n pCode\r\n ProPrice\r\n carProId\r\n ProDescuento\r\n ProUniDisponibles\r\n ValueDelivery\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ProStar\r\n pState\r\n ProImage\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n ProDelivery\r\n ProVoltaje\r\n }\r\n }\r\n }\r\n`\r\n// UPDATE EXTRAS\r\nexport const UPDATE_EXTRAS_PRODUCT_FOOD = gql`\r\n mutation updateExtProductFoods($input: InputExtProductFood) {\r\n updateExtProductFoods(input: $input) {\r\n pId\r\n exPid\r\n exState\r\n extraName\r\n extraPrice\r\n state\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n`\r\n// EXTRA PRODUCTS\r\nexport const UPDATE_EXTRAS_PRODUCT_FOOD_OPTIONAL = gql`\r\n mutation updateExtProductOptional($input: InputExtProductFoodOptional) {\r\n updateExtProductOptional(input: $input) {\r\n success,\r\n message\r\n }\r\n }\r\n`\r\nexport const GET_EXTRAS_PRODUCT_FOOD_OPTIONAL = gql`\r\n query ExtProductFoodsOptionalAll(\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $pId: ID\r\n ) {\r\n ExtProductFoodsOptionalAll(\r\n search: $search\r\n min: $min\r\n max: $max\r\n pId: $pId\r\n ) {\r\n pId\r\n opExPid\r\n OptionalProName\r\n state\r\n code\r\n numbersOptionalOnly\r\n createdAt\r\n required\r\n updatedAt\r\n ExtProductFoodsSubOptionalAll {\r\n pId\r\n opExPid\r\n idStore\r\n opSubExPid\r\n OptionalSubProName\r\n exCodeOptionExtra\r\n exCode\r\n state\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n }\r\n`\r\nexport const GET_EXTRAS_PRODUCT_FOOD_SUB_OPTIONAL = gql`\r\nmutation updateExtProductSubOptional(\r\n $input: InputExtProductFoodSubOptional\r\n) {\r\n updateExtProductSubOptional(input: $input) {\r\n success\r\n message\r\n data {\r\n pId\r\n opExPid\r\n idStore\r\n opSubExPid\r\n OptionalSubProName\r\n exCodeOptionExtra\r\n exCode\r\n state\r\n createdAt\r\n updatedAt\r\n }\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n __typename\r\n }\r\n }\r\n }\r\n}\r\n`\r\n\r\nexport const DELETE_ONE_PRODUCT = gql`\r\n mutation deleteProducts($input: IDeleteProduct) {\r\n deleteProducts(input: $input) {\r\n pId\r\n }\r\n }\r\n`\r\nexport const GET_ALL_PRODUCTS = gql`\r\n query productsAll(\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $gender: [String]\r\n $desc: [String]\r\n $categories: [ID]\r\n ) {\r\n productsAll(\r\n search: $search\r\n min: $min\r\n max: $max\r\n gender: $gender\r\n desc: $desc\r\n categories: $categories\r\n ) {\r\n pId\r\n sizeId #Talla\r\n colorId #Color\r\n cId #Country\r\n dId #Department\r\n ctId #Cuidad\r\n fId #Características\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProUniDisponibles\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ProStar\r\n sTateLogistic\r\n ProImage\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n ProDelivery\r\n ProVoltaje\r\n pState\r\n feat {\r\n fId\r\n thpId\r\n hpqrQuestion\r\n }\r\n area {\r\n aId\r\n aName\r\n }\r\n }\r\n }\r\n`\r\nexport const GET_ALL_FOOD_PRODUCTS = gql`\r\n query getFoodAllProduct(\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $gender: [String]\r\n $desc: [String]\r\n $categories: [ID]\r\n ) {\r\n getFoodAllProduct(\r\n search: $search\r\n min: $min\r\n max: $max\r\n gender: $gender\r\n desc: $desc\r\n categories: $categories\r\n ) {\r\n id\r\n pfId\r\n idStore\r\n ProPrice\r\n ProDescuento\r\n ProDescription\r\n pName\r\n pState\r\n sTateLogistic\r\n ProStar\r\n ProImage\r\n ProHeight\r\n ProWeight\r\n ProOutstanding\r\n ProDelivery\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n`\r\n\r\nexport const EDIT_PRODUCT = gql`\r\n mutation editProductFoods($input: InputProductFood) {\r\n editProductFoods(input: $input) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n }\r\n }\r\n`\r\nexport const SET_EDIT_STORE_NAME = gql`\r\n mutation setEditNameStore($StoreName: String) {\r\n setEditNameStore(StoreName: $StoreName) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const GET_ONE_PRODUCTS_FOOD = gql`\r\n query productFoodsOne($pId: ID) {\r\n productFoodsOne(pId: $pId) {\r\n pId\r\n carProId\r\n pCode\r\n sizeId\r\n colorId\r\n idStore\r\n cId\r\n caId\r\n stock\r\n manageStock\r\n dId\r\n ctId\r\n tpId\r\n fId\r\n \ttgId\r\n pName\r\n ProPrice\r\n ProBarCode\r\n ProDescuento\r\n ValueDelivery\r\n ProUniDisponibles\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ProImage\r\n ProStar\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n ProDelivery\r\n ProVoltaje\r\n pState\r\n sTateLogistic\r\n createdAt\r\n updatedAt\r\n getOneTags {\r\n tgId\r\n idUser\r\n idStore\r\n pId\r\n nameTag\r\n aName\r\n }\r\n getAllAvailableProduct {\r\n availableProductId\r\n idStore\r\n pId\r\n dayAvailable\r\n createdAt\r\n updatedAt\r\n }\r\n ExtProductFoodsAll {\r\n pId\r\n exPid\r\n exState\r\n extraName\r\n extraPrice\r\n state\r\n createdAt\r\n updatedAt\r\n }\r\n getStore {\r\n idStore\r\n cId\r\n id\r\n dId\r\n ctId\r\n catStore\r\n neighborhoodStore\r\n Viaprincipal\r\n storeOwner\r\n storeName\r\n emailStore\r\n storePhone\r\n socialRaz\r\n Image\r\n banner\r\n documentIdentifier\r\n uPhoNum\r\n ULocation\r\n upLat\r\n upLon\r\n uState\r\n siteWeb\r\n description\r\n NitStore\r\n typeRegiments\r\n typeContribute\r\n secVia\r\n addressStore\r\n createdAt\r\n department {\r\n dId\r\n cId\r\n dName\r\n dDatCre\r\n dDatMod\r\n dState\r\n }\r\n pais {\r\n cId\r\n cName\r\n cCalCod\r\n cState\r\n }\r\n city {\r\n ctId\r\n dId\r\n cName\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n }\r\n }\r\n }\r\n`\r\n\r\nexport const CREATE_FOOD_PRODUCT = gql`\r\n mutation newRegisterFoodProduct($input: FoodProductInput) {\r\n newRegisterFoodProduct(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const GET_BANNER_PROMO_DASHBOARD = gql`\r\n query getPromoStoreAdmin($min: Int, $max: Int) {\r\n getPromoStoreAdmin(min: $min, max: $max) {\r\n pSoId\r\n comments\r\n mainName\r\n metaTags\r\n urlImage\r\n bPromoState\r\n createAt\r\n updateAt\r\n }\r\n }\r\n`\r\n\r\nexport const CREATE_STORE_CALENDAR = gql`\r\n mutation setStoreSchedule($input: ITstoreSchedule!) {\r\n setStoreSchedule(input: $input) {\r\n message\r\n success\r\n }\r\n }\r\n`\r\nexport const DELETE_ONE_CAT_PRODUCTS = gql`\r\n mutation deleteCatOfProducts($idPc: ID!, $pState: Int) {\r\n deleteCatOfProducts(idPc: $idPc, pState: $pState) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const DELETE_ONE_CAT_PRODUCTS_FINAL = gql`\r\n mutation deleteCatFinalOfProducts($idPc: ID, $withProduct: Boolean) {\r\n deleteCatFinalOfProducts(idPc: $idPc, withProduct: $withProduct) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const DELETE_EXTRA_PRODUCTS = gql`\r\n mutation deleteExtraProduct($id: ID, $state: Int) {\r\n deleteExtraProduct(id: $id, state: $state) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const EDIT_EXTRA_PRODUCTS = gql`\r\n mutation editExtProductFoods($input: InputExtProductFood!) {\r\n editExtProductFoods(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const DELETE_CAT_EXTRA_PRODUCTS = gql`\r\n mutation DeleteExtProductFoodsOptional($opExPid: ID, $state: Int) {\r\n DeleteExtProductFoodsOptional(opExPid: $opExPid, state: $state) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const DELETE_CAT_EXTRA_SUB_OPTIONAL_PRODUCTS = gql`\r\n mutation DeleteExtFoodSubsOptional($opSubExPid: ID, $state: Int) {\r\n DeleteExtFoodSubsOptional(opSubExPid: $opSubExPid, state: $state) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const UPDATE_CAT_IN_PRODUCT = gql`\r\n mutation updatedCatWithProducts($input: LineItemsIdPro) {\r\n updatedCatWithProducts(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const GET_ULTIMATE_CATEGORY_PRODUCTS = gql`\r\n query catProductsAll(\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $gender: [String]\r\n $desc: [String]\r\n $categories: [ID]\r\n ) {\r\n catProductsAll(\r\n search: $search\r\n min: $min\r\n max: $max\r\n gender: $gender\r\n desc: $desc\r\n categories: $categories\r\n ) {\r\n carProId\r\n idStore\r\n pName\r\n ProDescription\r\n ProImage\r\n pState\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n`\r\nexport const GET_ALL_EXTRA_PRODUCT = gql`\r\n query ExtProductFoodsAll($search: String, $min: Int, $max: Int, $pId: ID) {\r\n ExtProductFoodsAll(search: $search, min: $min, max: $max, pId: $pId) {\r\n pId\r\n exPid\r\n exState\r\n extraName\r\n extraPrice\r\n state\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n`\r\nexport const GET_ALL_CATEGORIES_WITH_PRODUCT = gql`\r\n query getCatProductsWithProduct(\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $gender: [String]\r\n $desc: [String]\r\n $categories: [ID]\r\n ) {\r\n getCatProductsWithProduct(\r\n search: $search\r\n min: $min\r\n max: $max\r\n gender: $gender\r\n desc: $desc\r\n categories: $categories\r\n ) {\r\n carProId\r\n pState\r\n pState\r\n ProImage\r\n idStore\r\n pName\r\n ProDescription\r\n ProImage\r\n pState\r\n pDatCre\r\n pDatMod\r\n productFoodsAll {\r\n pId\r\n sizeId\r\n colorId\r\n stock\r\n carProId\r\n manageStock\r\n cId\r\n dId\r\n ctId\r\n idStore\r\n caId\r\n fId\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProUniDisponibles\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ProImage\r\n ProStar\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n ProDelivery\r\n ProVoltaje\r\n pState\r\n sTateLogistic\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n }\r\n`\r\n\r\nexport const REGISTER_TAGS_PRODUCT = gql`\r\n mutation registerTag($input: ITag) {\r\n registerTag(input: $input) {\r\n data {\r\n tgId\r\n idUser\r\n idStore\r\n pId\r\n nameTag\r\n aName\r\n }\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type \r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n }\r\n }\r\n`\r\n","const data = [\r\n { x: '2021-10-17T14:38:45.540Z', y: 2 }\r\n]\r\nexport const getDateParts = (isString: string) => {\r\n const [year, month, day, hr, min, sec] = isString.split(/\\D/g)\r\n return { year, month, day, hr, min, sec }\r\n}\r\n/**\n *\n * @param arr\n */\nexport function groupDates(arr: Array<{ x: string; y: number }>) {\r\n const total = arr.reduce((a: number, b: { x: string; y: number }) => {\r\n const { hr } = getDateParts(b.x)\r\n return a + Number.parseInt(hr || '0', 10)\r\n }, 0)\r\n return total\r\n}\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ONE_BANNER_STORE } from '../useProductsFood/queriesStore'\r\nimport { useStore } from '../useStore'\r\n\r\nexport const useBanner = () => {\r\n const [store, { loading: loaStore }] = useStore()\r\n\r\n const {\r\n data,\r\n loading,\r\n error\r\n } = useQuery(GET_ONE_BANNER_STORE, {\r\n context: { clientName: 'admin-server' },\r\n variables: {\r\n idStore: !loaStore && store?.idStore\r\n }\r\n })\r\n return [data?.getOneBanners, { loading, error }]\r\n}\r\n","import { useApolloClient, useQuery } from '@apollo/client'\r\nimport { useState, useEffect } from 'react'\n\r\n\r\nimport { errorHandler } from '../../config/client'\r\nimport { useLogout } from '../useLogout'\n\r\nimport { GET_ONE_STORE, GET_ONE_STORE_BY_ID } from './queries' // Reemplaza con la importación correcta de tu consulta\n\r\nexport const useStore = ({\r\n isClient = false,\r\n idStore = null,\r\n callback = () => { }\r\n} = {}) => {\r\n const client = useApolloClient()\r\n const [onClickLogout, { loading: load }] = useLogout()\r\n\r\n // Variables para almacenar los datos del store\r\n const [store, setStore] = useState({})\r\n const [loading, setLoading] = useState(false)\r\n const [error, setError] = useState(null)\r\n\r\n // Intentar leer los datos de la caché\r\n const cachedData = client.readQuery({ query: GET_ONE_STORE })\r\n\r\n useEffect(() => {\r\n if (cachedData) {\r\n const array = store ? Object.keys(store) : []\r\n // Comprobar si los datos de la caché ya están establecidos en el estado\r\n if ((!store || Array.isArray(array)) && array?.length === 0) {\r\n setStore(cachedData.getStore)\r\n }\r\n }\r\n callback(store)\r\n }, [cachedData, store])\r\n\r\n if (isClient && Boolean(idStore)) {\r\n const {\r\n data,\r\n refetch,\r\n loading: loadingClient,\r\n error: errorStoreClient\r\n } = useQuery(GET_ONE_STORE_BY_ID, {\r\n skip: !isClient,\r\n variables: {\r\n idStore\r\n }\r\n })\r\n\r\n const dataOneStoreClient = !loadingClient ? data?.getOneStore : {}\r\n\r\n return [dataOneStoreClient, {\r\n refetch,\r\n loading: loadingClient,\r\n error: errorStoreClient\r\n }]\r\n } \r\n const { loading: loadingServer } = useQuery(GET_ONE_STORE, {\r\n skip: isClient && !idStore,\r\n variables: {\r\n idStore\r\n },\r\n fetchPolicy: 'cache-first',\r\n onCompleted: (data) => {\r\n const { getStore } = data || {}\r\n setStore(getStore)\r\n setLoading(false)\r\n },\r\n onError: (err) => {\r\n if (err.networkError && err.networkError.result) {\r\n const response = errorHandler(err.networkError.result)\r\n if (response) {\r\n onClickLogout()\r\n }\r\n }\r\n setError(err)\r\n setLoading(false)\r\n }\r\n })\r\n\r\n return [store, { loading: load || loadingServer || loading, error }]\r\n \r\n}\r\n","import { onError } from '@apollo/client/link/error'\r\n\r\ninterface GraphQLErrorExtension {\r\n code?: string\r\n message?: string\r\n}\r\n\r\ninterface GraphQLErrorItem {\r\n extensions?: GraphQLErrorExtension\r\n}\r\n\r\ninterface ErrorWithErrors {\r\n errors?: GraphQLErrorItem[]\r\n}\r\n\r\nexport const errorHandler = (error: ErrorWithErrors | null | undefined): boolean | null => {\r\n let logout: boolean | null = null\r\n if (error && Array.isArray(error?.errors)) {\r\n error.errors?.length && error?.errors?.forEach((err: GraphQLErrorItem) => {\r\n if (err?.extensions) {\r\n const { code, message }: GraphQLErrorExtension = err?.extensions || {}\r\n if (code === 'UNAUTHENTICATED' || code === 'FORBIDDEN') {\r\n logout = true\r\n return {\r\n status: 'FORBIDDEN',\r\n message\r\n }\r\n }\r\n }\r\n })\r\n }\r\n return logout\r\n}\r\n\r\nexport const errorLink = onError(({ graphQLErrors, networkError }) => {\r\n if (graphQLErrors)graphQLErrors.map(({ message, path }) => { return console.log(`[GraphQL error]: Message: ${message}, Path: ${path}`) })\r\n\r\n if (networkError) console.log(`[Network error]: ${networkError}`)\r\n})\r\n","import { useApolloClient } from '@apollo/client'\r\nimport { useState } from 'react'\r\n\r\nimport { Cookies } from '../../cookies/index'\r\nimport { getCurrentDomain } from '../../utils'\r\nimport { signOutAuth } from './helpers'\r\n\r\n\r\ninterface UseLogoutOptions {\r\n setAlertBox?: (options: { message: string }) => { message: string }\r\n}\r\nexport const useLogout = ({\r\n setAlertBox = ({\r\n message\r\n }) => { return { message } }\r\n}: UseLogoutOptions = {}) => {\r\n const [loading, setLoading] = useState<boolean>(false)\r\n const [error, setError] = useState(false)\r\n const client = useApolloClient()\r\n\r\n const eliminarCookie = async (nombreCookie: string) => {\r\n try {\r\n let domain = getCurrentDomain() as string | undefined\r\n\r\n // Si estás en entorno local, usa 'localhost' como dominio\r\n if (domain === 'localhost') {\r\n domain = undefined // Esto permitirá la cookie en 'localhost'\r\n }\r\n\r\n const expirationTime = new Date()\r\n expirationTime.setTime(expirationTime.getTime() - 1000) // Establece una fecha de expiración en el pasado\r\n\r\n const formattedDomain: string | undefined = typeof domain === 'string' ? domain : undefined\r\n\r\n Cookies.remove(nombreCookie, { domain: formattedDomain, path: '/', secure: process.env.NODE_ENV === 'production' })\r\n\r\n console.log('Cookie eliminada correctamente.')\r\n } catch (error) {\r\n console.error('Error al eliminar la cookie:', error)\r\n throw new Error('Error al eliminar la cookie. ')\r\n }\r\n }\r\n const deleteCookie = async () => {\r\n await eliminarCookie(String(process.env.NEXT_PUBLIC_SESSION_NAME))\r\n await eliminarCookie(String(process.env.NEXT_LOCAL_SALES_STORE))\r\n await eliminarCookie('restaurant')\r\n await eliminarCookie('usuario')\r\n await eliminarCookie('session')\r\n }\r\n const onClickLogout = async (params?: { redirect?: boolean }) => {\r\n const redirect = params?.redirect ?? true\r\n try {\r\n if (redirect) {\r\n setLoading(true)\r\n } else {\r\n return await deleteCookie()\r\n }\r\n await deleteCookie()\r\n // Logout from the server\r\n const port = globalThis.location.port ? `:${globalThis.location.port}` : ''\r\n const baseUrl = `${globalThis.location.protocol}//${globalThis.location.hostname}${port}`\r\n const logoutResponse = await fetch(`${baseUrl}/api/auth/signout/`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n credentials: 'include'\r\n })\r\n\r\n if (!logoutResponse.ok) {\r\n setLoading(false)\r\n return\r\n }\r\n\r\n await logoutResponse.json()\r\n console.log('Intentando borrar cookies...')\r\n\r\n // Eliminar la cookie process.env.NEXT_PUBLIC_SESSION_NAME\r\n await eliminarCookie(String(process.env.NEXT_PUBLIC_SESSION_NAME))\r\n Cookies.remove(String(process.env.NEXT_LOCAL_SALES_STORE))\r\n Cookies.remove('restaurant')\r\n Cookies.remove('usuario')\r\n Cookies.remove('session')\r\n\r\n // Clear Apollo Client cache\r\n client?.clearStore()\r\n\r\n setLoading(false)\r\n console.log('Cookies eliminadas y sesión cerrada con éxito')\r\n signOutAuth({ redirect: true, callbackUrl: '/' })\r\n .catch((err) => {\r\n setError(true)\r\n console.error('Error in signOutAuth:', err)\r\n setAlertBox({ message: 'Ocurrió un error al cerrar sesión' })\r\n })\r\n } catch (err) {\r\n setLoading(false)\r\n setError(true)\r\n console.error('Error al cerrar sesión:', err)\r\n setAlertBox({ message: 'Ocurrió un error al cerrar sesión' })\r\n }\r\n }\r\n\r\n return [onClickLogout, { loading, error }]\r\n}\r\n","import Cookies from 'js-cookie'\r\n\r\nexport { Cookies }\r\n","/**\n *\n * @param __NEXTAUTH\n */\nexport function apiBaseUrl (__NEXTAUTH) {\r\n if (typeof window === 'undefined') {\r\n // Return absolute path when called server side\r\n return `${__NEXTAUTH.baseUrlServer}${__NEXTAUTH.basePathServer}`\r\n }\r\n // Return relative path when called client side\r\n return __NEXTAUTH.basePath\r\n}\r\n","/**\r\n * Broadcast message shape\r\n */\r\nexport interface BroadcastMessage {\r\n event?: string\r\n data?: unknown\r\n [key: string]: unknown\r\n}\r\n\r\n/**\r\n * Receive callback type\r\n */\r\nexport type BroadcastReceiver = (message: BroadcastMessage) => void\r\n\r\n/**\r\n * BroadcastChannel utility based on localStorage events.\r\n * Keeps original behavior intact.\r\n *\r\n * @param {string} name - Channel name\r\n * @returns {{\r\n * receive: (onReceive: BroadcastReceiver) => () => void\r\n * post: (message: BroadcastMessage) => void\r\n * }}\r\n */\r\nfunction BroadcastChannel(name: string = 'nextauth.message') {\r\n return {\r\n /**\r\n * Listen for broadcast messages\r\n * @param onReceive\n */\r\n receive: function (onReceive: BroadcastReceiver): () => void {\r\n const handler = function (event: StorageEvent): void {\r\n if (event.key !== name) return\r\n\r\n const message: BroadcastMessage = JSON.parse(\r\n event.newValue ?? '{}'\r\n )\r\n\r\n if (message?.event !== 'session' || !message?.data) return\r\n\r\n onReceive(message)\r\n }\r\n\r\n window.addEventListener('storage', handler)\r\n\r\n return function (): void {\r\n window.removeEventListener('storage', handler)\r\n }\r\n },\r\n\r\n /**\r\n * Post a broadcast message\r\n * @param message\n */\r\n post: function (message: BroadcastMessage): void {\r\n if (typeof window === 'undefined') return\r\n\r\n try {\r\n localStorage.setItem(\r\n name,\r\n JSON.stringify({\r\n ...message,\r\n timestamp: Date.now()\r\n })\r\n )\r\n } catch {\r\n // localStorage may be unavailable (private mode, Safari < 11, etc.)\r\n // Messages are silently dropped to preserve original behavior.\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { BroadcastChannel }\r\n","import { apiBaseUrl } from './apiBaseUrl'\r\n\r\n/**\n *\n * @param path\n * @param __NEXTAUTH\n * @param logger\n * @param root0\n * @param root0.ctx\n * @param root0.req\n */\nasync function fetchData (path, __NEXTAUTH, logger, { ctx, req } = {}) {\r\n const url = `${apiBaseUrl(__NEXTAUTH)}/${path}`\r\n try {\r\n const options = {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...(req?.headers?.cookie ? { cookie: req.headers.cookie } : {})\r\n }\r\n }\r\n\r\n if (req?.body) {\r\n options.body = JSON.stringify(req.body)\r\n options.method = 'POST'\r\n }\r\n\r\n const res = await fetch(url, options)\r\n const data = await res.json()\r\n if (!res.ok) throw data\r\n return Object.keys(data).length > 0 ? data : null // Return null if data is empty\r\n } catch (error) {\r\n logger.error('CLIENT_FETCH_ERROR', { error, url })\r\n return null\r\n }\r\n}\r\n\r\nexport { fetchData }\r\n","/**\n *\n * @param o\n */\nfunction formatError (o) {\r\n if (hasErrorProperty(o)) {\r\n o.error = formatError(o.error)\r\n o.message = o.message ?? o.error.message\r\n }\r\n return o\r\n}\r\n\r\n/**\n *\n * @param x\n */\nfunction hasErrorProperty (x) {\r\n return Boolean(x?.error)\r\n}\r\n\r\nconst _logger = {\r\n error (code, metadata) {\r\n metadata = formatError(metadata)\r\n console.error(\r\n `[next-auth][error][${code}]`,\r\n `\\nhttps://next-auth.js.org/errors#${code.toLowerCase()}`,\r\n metadata.message,\r\n metadata\r\n )\r\n },\r\n warn (code) {\r\n console.warn(\r\n `[next-auth][warn][${code}]`,\r\n `\\nhttps://next-auth.js.org/warnings#${code.toLowerCase()}`\r\n )\r\n },\r\n debug (code, metadata) {\r\n console.log(`[next-auth][debug][${code}]`, metadata)\r\n }\r\n}\r\n\r\n/**\n *\n * @param newLogger\n * @param debug\n */\nexport function setLogger (newLogger = {}, debug) {\r\n if (!debug) _logger.debug = () => { }\r\n\r\n if (newLogger.error) _logger.error = newLogger.error\r\n if (newLogger.warn) _logger.warn = newLogger.warn\r\n if (newLogger.debug) _logger.debug = newLogger.debug\r\n}\r\n\r\n/**\n *\n * @param logger\n * @param basePath\n */\nexport function proxyLogger (logger = _logger, basePath) {\r\n try {\r\n if (typeof window === 'undefined') {\r\n return logger\r\n }\r\n\r\n const clientLogger = {}\r\n for (const level in logger) {\r\n clientLogger[level] = (code, metadata) => {\r\n _logger[level](code, metadata)\r\n\r\n if (level === 'error') {\r\n metadata = formatError(metadata)\r\n }\r\n metadata.client = true\r\n const url = `${basePath}/_log`\r\n const body = new URLSearchParams({ level, code, ...metadata })\r\n if (navigator.sendBeacon) {\r\n return navigator.sendBeacon(url, body)\r\n }\r\n return fetch(url, { method: 'POST', body, keepalive: true })\r\n }\r\n }\r\n return clientLogger\r\n } catch {\r\n return _logger\r\n }\r\n}\r\nexport { _logger as default }\r\n","/** Interface for the internal URL structure */\r\nconst InternalUrl = {\r\n origin: 'http://localhost:3000',\r\n host: 'localhost:3000',\r\n path: '/api/auth',\r\n base: 'http://localhost:3000/api/auth',\r\n toString: function () {\r\n return this.base\r\n }\r\n}\r\n\r\n/**\n * Function to parse a URL-like object for server-side requests/redirects\n * @param url\n */\r\nfunction parseUrl (url: string | undefined) {\r\n const defaultUrl = new URL('http://localhost:3000/api/auth')\r\n\r\n if (url && !url.startsWith('http')) {\r\n url = `https://${url}`\r\n }\r\n\r\n const _url = new URL(url || defaultUrl)\r\n const path = (_url.pathname === '/' ? defaultUrl.pathname : _url.pathname).replace(/\\/$/, '')\r\n\r\n const base = `${_url.origin}${path}`\r\n\r\n return {\r\n origin: _url.origin,\r\n host: _url.host,\r\n path,\r\n base,\r\n toString: function () {\r\n return base\r\n }\r\n }\r\n}\r\n\r\nexport { InternalUrl, parseUrl }\r\n","import { fetchData } from './fetchData'\r\nimport _logger, { proxyLogger } from './logger'\r\nimport { parseUrl } from './parseUrl'\r\n\r\nconst __NEXTAUTH = {\r\n baseUrl: parseUrl(process.env.NEXTAUTH_URL || process.env.VERCEL_URL).origin,\r\n basePath: parseUrl(process.env.NEXTAUTH_URL).path,\r\n baseUrlServer: parseUrl(\r\n process.env.NEXTAUTH_URL_INTERNAL ||\r\n process.env.NEXTAUTH_URL ||\r\n process.env.VERCEL_URL\r\n ).origin,\r\n basePathServer: parseUrl(\r\n process.env.NEXTAUTH_URL_INTERNAL || process.env.NEXTAUTH_URL\r\n ).path,\r\n _lastSync: 0,\r\n _session: undefined,\r\n _getSession: () => {}\r\n}\r\nconst logger = proxyLogger(_logger, __NEXTAUTH.basePath)\r\n\r\n/**\n *\n * @param params\n * @param params.callbackUrl\n */\nexport async function getCsrfToken (params: {\r\n callbackUrl?: string\r\n} = {}): Promise<string | undefined> {\r\n const response = await fetchData(\r\n 'csrf',\r\n __NEXTAUTH,\r\n logger,\r\n params\r\n )\r\n return response?.csrfToken\r\n}\r\n","import { apiBaseUrl } from './apiBaseUrl'\r\nimport { BroadcastChannel } from './BroadcastChannel'\r\nimport { getCsrfToken } from './getCsrfToken'\r\nimport { parseUrl } from './parseUrl'\r\n\r\nconst broadcast = BroadcastChannel()\r\n\r\nexport const __NEXTAUTH = {\r\n baseUrl: parseUrl(process.env.NEXTAUTH_URL || process.env.VERCEL_URL).origin,\r\n basePath: parseUrl(process.env.NEXTAUTH_URL).path,\r\n baseUrlServer: parseUrl(\r\n process.env.NEXTAUTH_URL_INTERNAL ||\r\n process.env.NEXTAUTH_URL ||\r\n process.env.VERCEL_URL\r\n ).origin,\r\n basePathServer: parseUrl(\r\n process.env.NEXTAUTH_URL_INTERNAL || process.env.NEXTAUTH_URL\r\n ).path,\r\n _lastSync: 0,\r\n _session: undefined,\r\n _getSession: ({ ...args }) => { }\r\n}\r\n\r\n/**\n *\n * @param options\n */\nexport async function signOutAuth(options: {\r\n callbackUrl?: string\r\n redirect?: boolean\r\n reload?: boolean\r\n} | undefined = undefined\r\n): Promise<{ url: string } | void> {\r\n const { callbackUrl = window.location.href, reload = true } = options ?? {}\r\n const baseUrl = apiBaseUrl(__NEXTAUTH)\r\n const fetchOptions = {\r\n method: 'post',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n },\r\n // @ts-expect-error\r\n body: new URLSearchParams({\r\n csrfToken: await getCsrfToken(),\r\n callbackUrl,\r\n json: true\r\n })\r\n }\r\n const res = await fetch(`${baseUrl}/signout`, fetchOptions)\r\n const data = await res.json()\r\n\r\n broadcast.post({ event: 'session', data: { trigger: 'signout' } })\r\n if (!reload) {\r\n await __NEXTAUTH._getSession({ event: 'storage' })\r\n return data\r\n }\r\n if (options?.redirect ?? true) {\r\n const url = data.url ?? callbackUrl\r\n window.location.href = url\r\n // If url contains a hash, the browser does not reload the page. We reload manually\r\n if (url.includes('#') && !reload) window.location.reload()\r\n return\r\n }\r\n await __NEXTAUTH._getSession({ event: 'storage' })\r\n return data\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CREATE_ONE_STORE = gql`\r\nmutation newRegisterStore($input: IStore){\r\n newRegisterStore(input: $input){\r\n success\r\n message\r\n idStore\r\n }\r\n}\r\n`\r\n\r\nexport const GET_ONE_STORE = gql`\r\nquery getStore($id: ID, $idStore: ID) {\r\n getStore(id: $id, idStore: $idStore) {\r\n cId\r\n id\r\n deliveryTimeMinutes\r\n scheduleOpenAll\r\n dId\r\n idStore\r\n ctId\r\n neighborhoodStore\r\n Viaprincipal\r\n catStore\r\n storeOwner\r\n storeName\r\n ImageName\r\n emailStore\r\n storePhone\r\n socialRaz\r\n Image\r\n banner\r\n\r\n documentIdentifier\r\n uPhoNum\r\n storeName\r\n ULocation\r\n upLat\r\n upLon\r\n uState\r\n siteWeb\r\n dailyGoal\r\n description\r\n createdAt\r\n secVia\r\n NitStore\r\n typeRegiments\r\n typeContribute\r\n addressStore\r\n pais {\r\n cId\r\n cName\r\n cCalCod\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n city {\r\n ctId\r\n dId\r\n cName\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n department {\r\n dId\r\n cId\r\n dName\r\n dState\r\n dDatCre\r\n dDatMod\r\n }\r\n getStoreSchedules {\r\n idStore\r\n schId\r\n id\r\n schDay\r\n schHoSta\r\n schHoEnd\r\n schState\r\n }\r\n cateStore {\r\n catStore\r\n cName\r\n cState\r\n createdAt\r\n updatedAt\r\n csDescription\r\n }\r\n }\r\n}\r\n`\r\nexport const GET_ONE_STORE_BY_ID = gql`\r\nquery getOneStore($StoreName: String, $idStore: ID){\r\n getOneStore(idStore: $idStore, StoreName: $StoreName) {\r\n idStore\r\n cId\r\n id\r\n dId\r\n ctId\r\n catStore\r\n neighborhoodStore \r\n Viaprincipal\r\n storeOwner\r\n storeName\r\n emailStore\r\n storePhone\r\n socialRaz\r\n Image\r\n banner\r\n documentIdentifier\r\n uPhoNum\r\n ULocation\r\n upLat\r\n upLon\r\n uState\r\n siteWeb\r\n description\r\n NitStore\r\n typeRegiments\r\n typeContribute\r\n secVia\r\n addressStore\r\n createdAt\r\n pais{\r\n cId\r\n cName\r\n cCalCod\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n city {\r\n ctId\r\n dId\r\n cName\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n department {\r\n dId\r\n cId\r\n dName\r\n dState\r\n dDatCre\r\n dDatMod\r\n }\r\n cateStore {\r\n catStore\r\n idUser\r\n cName\r\n cState\r\n cDatCre\r\n cDatMod\r\n csDescription\r\n \r\n }\r\n }\r\n}\r\n`\r\n","import { useMutation, useQuery, ApolloError } from '@apollo/client'\r\nimport { useState } from 'react'\n\r\nimport {\r\n DELETE_ONE_CAT_PRODUCTS,\r\n GET_ULTIMATE_CATEGORY_PRODUCTS,\r\n UPDATE_CAT_IN_PRODUCT\r\n} from '../useProductsFood/queriesStore'\n\r\nimport { GET_ONE_STORE_IN_CATEGORY } from './queries'\r\n\r\n/**\r\n * Generic alert box handler\r\n */\r\ninterface AlertBoxPayload {\r\n title?: string\r\n message: string\r\n color: 'error' | 'success' | 'warning' | 'info'\r\n}\r\n\r\ntype SetAlertBox = (payload: AlertBoxPayload) => void\r\n\r\n/**\r\n * Category entity\r\n */\r\ninterface Category {\r\n idPc: string\r\n pState: string\r\n [key: string]: unknown\r\n}\r\n\r\n/**\r\n * Hook params\r\n */\r\ninterface UseCategoryInStoreParams {\r\n catStoreId?: string\r\n setAlertBox?: SetAlertBox\r\n}\r\n\r\n/**\r\n * Hook return shape\r\n */\r\ninterface UseCategoryInStoreResult {\r\n categories: Category[]\r\n data: Category[]\r\n loading: boolean\r\n error?: ApolloError\r\n handlerDeleteCategoryInStore: (category?: Category) => Promise<unknown> | void\r\n handleUpdateCatInProduct: (params: { data?: Array<{ pId: string }> }) => Promise<void>\r\n}\r\n\r\n/**\r\n * Custom hook to manage categories in store\r\n * @param root0\n * @param root0.catStoreId\n * @param root0.setAlertBox\n */\r\nexport const useCategoryInStore = ({\r\n catStoreId,\r\n setAlertBox = () => {}\r\n}: UseCategoryInStoreParams = {}): UseCategoryInStoreResult => {\r\n const [categories, setOneCategoryInStore] = useState<Category[]>([])\r\n\r\n const [deleteCatOfProducts] = useMutation(DELETE_ONE_CAT_PRODUCTS, {\r\n onError: (e: ApolloError) => {\r\n setAlertBox({\r\n title: '',\r\n message: e.graphQLErrors?.[0]?.message || 'Unexpected error',\r\n color: 'error'\r\n })\r\n },\r\n update: (cache) => {\r\n cache.modify({\r\n fields: {\r\n catProductsAll (dataOld = []) {\r\n return cache.writeQuery({\r\n query: GET_ULTIMATE_CATEGORY_PRODUCTS,\r\n data: dataOld\r\n })\r\n }\r\n }\r\n })\r\n }\r\n })\r\n\r\n const [updatedCatWithProducts] = useMutation(UPDATE_CAT_IN_PRODUCT, {\r\n onError: (e: ApolloError) => {\r\n console.error({\r\n message: e.graphQLErrors?.[0]?.message || 'Unexpected error',\r\n color: 'error'\r\n })\r\n },\r\n update: (cache) => {\r\n cache.modify({\r\n fields: {\r\n catProductsAll (dataOld = []) {\r\n return cache.writeQuery({\r\n query: GET_ULTIMATE_CATEGORY_PRODUCTS,\r\n data: dataOld\r\n })\r\n }\r\n }\r\n })\r\n }\r\n })\r\n\r\n const { data } = useQuery(GET_ULTIMATE_CATEGORY_PRODUCTS)\r\n\r\n const { loading, error } = useQuery(GET_ONE_STORE_IN_CATEGORY, {\r\n variables: {\r\n catStore: catStoreId\r\n },\r\n skip: !catStoreId,\r\n onError: () => {\r\n console.warn({ message: 'Failed loading category store', duration: 5000 })\r\n },\r\n onCompleted: (response) => {\r\n if (response?.getOneCatStore) {\r\n setOneCategoryInStore(response.getOneCatStore)\r\n }\r\n }\r\n })\r\n\r\n /**\r\n * Delete category from products\r\n * @param category\n */\r\n const handlerDeleteCategoryInStore = (category?: Category) => {\r\n const { pState, idPc } = category || {}\r\n if (!idPc || !pState) return\r\n\r\n return deleteCatOfProducts({\r\n variables: { idPc, pState }\r\n })\r\n }\r\n\r\n /**\r\n * Update category in products\r\n * @param root0\n * @param root0.data\n */\r\n const handleUpdateCatInProduct = async ({\r\n data\r\n }: {\r\n data?: Array<{ pId: string }>\r\n }): Promise<void> => {\r\n if (!data?.length) return\r\n\r\n await updatedCatWithProducts({\r\n variables: {\r\n input: {\r\n setData: data.map(({ pId }) => {return { idProduct: pId }}),\r\n idCat: ''\r\n }\r\n }\r\n })\r\n }\r\n\r\n return {\r\n categories,\r\n data: data?.catProductsAll ?? [],\r\n loading,\r\n error,\r\n handlerDeleteCategoryInStore,\r\n handleUpdateCatInProduct\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ONE_STORE_IN_CATEGORY = gql`\r\nquery getOneCatStore($catStore: ID){\r\ngetOneCatStore(catStore: $catStore){\r\n catStore\r\n idUser\r\n cName\r\n cState\r\n createdAt\r\n cPathImage\r\n updatedAt\r\n csDescription\r\n getAllStore {\r\n idStore\r\n cId\r\n id\r\n dId\r\n ctId\r\n catStore\r\n neighborhoodStore\r\n Viaprincipal\r\n storeOwner\r\n storeName\r\n emailStore\r\n storePhone\r\n socialRaz\r\n Image\r\n banner\r\n documentIdentifier\r\n uPhoNum\r\n ULocation\r\n upLat\r\n upLon\r\n uState\r\n siteWeb\r\n description\r\n NitStore\r\n typeRegiments\r\n typeContribute\r\n secVia\r\n addressStore\r\n createdAt\r\n pais {\r\n cId\r\n cName\r\n cCalCod\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n city {\r\n ctId\r\n dId\r\n cName\r\n cState\r\n cDatCre\r\n cDatMod\r\n } \r\n department {\r\n dId\r\n cId\r\n dName\r\n dState\r\n dDatCre\r\n dDatMod\r\n }\r\n getAllRatingStar {\r\n rSId\r\n rScore\r\n idStore\r\n createAt\r\n \r\n }\r\n }\r\n }\r\n}\r\n`\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_CAT_STORE } from './queries'\r\n\r\nexport const useCategoryStore = () => {\r\n const { data, loading } = useQuery(GET_ALL_CAT_STORE)\r\n return [data, { loading }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_CAT_STORE = gql`\r\nquery getAllCatStore{\r\ngetAllCatStore{\r\n catStore\r\n idUser\r\n cPathImage\r\n cName\r\n cState\r\n createdAt\r\n updatedAt\r\n csDescription\r\n }\r\n}\r\n`\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_CATEGORIES_WITH_PRODUCT } from './queries'\r\nimport { GetCatProductsWithProductResponse, ICatWithProduct } from './types'\r\n\r\nexport const useCatWithProduct = ({\r\n max = 400,\r\n min = 0,\r\n search = null,\r\n productName = null,\r\n searchFilter = {},\r\n callback = () => {}\r\n}: ICatWithProduct) => {\r\n const {\r\n gender,\r\n desc,\r\n speciality\r\n } = searchFilter ?? {\r\n gender: [],\r\n desc: null,\r\n speciality: []\r\n }\r\n const {\r\n data,\r\n loading,\r\n error,\r\n fetchMore\r\n } = useQuery(GET_ALL_CATEGORIES_WITH_PRODUCT, {\r\n onCompleted: (data) => {\r\n callback(data as GetCatProductsWithProductResponse)\r\n },\r\n fetchPolicy: 'network-only',\r\n variables:\r\n {\r\n search,\r\n productName,\r\n gender,\r\n min,\r\n max,\r\n desc,\r\n categories: speciality\r\n }\r\n })\r\n const totalCount = data?.getCatProductsWithProduct?.totalCount\r\n return [\r\n data?.getCatProductsWithProduct?.catProductsWithProduct,\r\n {\r\n loading,\r\n error,\r\n fetchMore,\r\n totalCount\r\n }\r\n ]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CREATE_FOOD_PRODUCT = gql`\r\n mutation newRegisterFoodProduct($input: FoodProductInput){\r\n newRegisterFoodProduct(input: $input){\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const GET_BANNER_PROMO_DASHBOARD = gql`\r\nquery getPromoStoreAdmin($min: Int, $max: Int){\r\ngetPromoStoreAdmin(min: $min, max: $max){\r\n pSoId\r\n comments\r\n mainName\r\n metaTags\r\n urlImage\r\n bPromoState\r\n createAt\r\n updateAt\r\n }\r\n}\r\n`\r\n\r\nexport const CREATE_STORE_CALENDAR = gql`\r\nmutation setStoreSchedule($input: ITstoreSchedule!){\r\n setStoreSchedule(input: $input){\r\n message\r\n success\r\n }\r\n}\r\n`\r\nexport const DELETE_ONE_CAT_PRODUCTS = gql`\r\n mutation deleteCatOfProducts($idPc: ID!, $pState: Int){\r\n deleteCatOfProducts(idPc: $idPc, pState: $pState){\r\n success\r\n message\r\n }\r\n}\r\n`\r\nexport const DELETE_ONE_CAT_PRODUCTS_FINAL = gql`\r\n\r\nmutation deleteCatFinalOfProducts($idPc: ID, $withProduct: Boolean) {\r\n deleteCatFinalOfProducts(idPc: $idPc, withProduct: $withProduct) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const DELETE_EXTRA_PRODUCTS = gql`\r\n mutation deleteExtraProduct($id: ID, $state: Int){\r\n deleteExtraProduct(id: $id, state: $state){\r\n success, \r\n message\r\n }\r\n}\r\n`\r\nexport const EDIT_EXTRA_PRODUCTS = gql`\r\nmutation editExtProductFoods($input: InputExtProductFood!) {\r\n editExtProductFoods(input: $input) {\r\n success\r\n message\r\n }\r\n}\r\n`\r\nexport const DELETE_CAT_EXTRA_PRODUCTS = gql`\r\n mutation DeleteExtProductFoodsOptional($opExPid: ID, $state: Int){\r\n DeleteExtProductFoodsOptional(opExPid: $opExPid, state: $state){\r\n success, \r\n message\r\n }\r\n}\r\n`\r\nexport const DELETE_CAT_EXTRA_SUB_OPTIONAL_PRODUCTS = gql`\r\n mutation DeleteExtFoodSubsOptional($opSubExPid: ID, $state: Int){\r\n DeleteExtFoodSubsOptional(opSubExPid: $opSubExPid, state: $state){\r\n success, \r\n message\r\n }\r\n}\r\n`\r\nexport const UPDATE_CAT_IN_PRODUCT = gql`\r\nmutation updatedCatWithProducts($input: LineItemsIdPro){\r\n updatedCatWithProducts(input: $input){\r\n success\r\n message\r\n }\r\n}\r\n`\r\nexport const GET_ULTIMATE_CATEGORY_PRODUCTS = gql`\r\nquery catProductsAll($search: String, $min: Int, $max: Int, $gender: [String], $desc: [String], $categories: [ID], ) {\r\n catProductsAll(search: $search, min: $min, max: $max, gender: $gender, desc: $desc, categories: $categories,) {\r\n carProId\r\n idStore\r\n pName\r\n ProDescription\r\n ProImage\r\n pState\r\n pDatCre\r\n pDatMod\r\n }\r\n}\r\n`\r\nexport const GET_ALL_EXTRA_PRODUCT = gql`\r\nquery ExtProductFoodsAll($search: String, $min: Int, $max: Int, $pId: ID) {\r\n ExtProductFoodsAll(search: $search, min: $min, max: $max, pId: $pId) {\r\n pId\r\n exPid\r\n exState\r\n extraName\r\n extraPrice\r\n state\r\n pDatCre\r\n pDatMod\r\n }\r\n}\r\n`\r\nexport const GET_ALL_CATEGORIES_WITH_PRODUCT = gql`\r\nquery getCatProductsWithProduct(\r\n $search: String\r\n $productName: String\r\n $min: Int\r\n $max: Int\r\n $gender: [String]\r\n $desc: [String]\r\n $categories: [ID]\r\n) {\r\n getCatProductsWithProduct(\r\n search: $search\r\n min: $min\r\n productName: $productName\r\n max: $max\r\n gender: $gender\r\n desc: $desc\r\n categories: $categories\r\n ) {\r\n totalCount\r\n catProductsWithProduct {\r\n carProId\r\n pState\r\n pState\r\n ProImage\r\n idStore\r\n pName\r\n totalCount\r\n ProDescription\r\n ProImage\r\n pState\r\n createdAt\r\n updatedAt\r\n productFoodsAll {\r\n pId\r\n stock\r\n manageStock\r\n sizeId\r\n colorId\r\n carProId\r\n cId\r\n dId\r\n ctId\r\n idStore\r\n caId\r\n fId\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProUniDisponibles\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ProImage\r\n ProStar\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n ProDelivery\r\n ProVoltaje\r\n pState\r\n sTateLogistic\r\n createdAt\r\n updatedAt\r\n product_availables {\r\n availableProductId\r\n pId\r\n idStore\r\n dayAvailable\r\n startDate\r\n endDate\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n }\r\n }\r\n}\r\n`\r\n","'use client'\r\n\r\nimport { useRouter, useSearchParams, useParams } from 'next/navigation'\r\n\r\n/**\r\n * Generic query params map\r\n */\r\nexport type QueryParams = Record<string, string>\r\n\r\n/**\r\n * Custom location interface (useful for testing or external routers)\r\n */\r\nexport interface CustomLocation {\r\n query?: QueryParams\r\n push?: (url: string) => void\r\n}\r\n\r\n/**\r\n * Hook options\r\n */\r\nexport interface UseManageQueryParamsOptions {\r\n location?: CustomLocation\r\n}\r\n\r\n/**\r\n * Params getter options\r\n */\r\nexport interface GetParamsOptions {\r\n param: string\r\n callback?: (value: string) => void\r\n}\r\n\r\n/**\r\n * Hook return type\r\n */\r\nexport interface UseManageQueryParamsResult {\r\n getQuery: (name: string) => string\r\n handleQuery: (name: string, value?: string) => void\r\n handleCleanQuery: (name: string) => void\r\n getParams: (options: GetParamsOptions) => string\r\n}\r\n\r\n/**\r\n * Hook to manage query parameters in Next.js 13+ (App Router)\r\n * Supports dependency injection for router/query (testing-friendly).\r\n *\r\n * @param {UseManageQueryParamsOptions} options\r\n * @returns {UseManageQueryParamsResult}\r\n */\r\nexport const useManageQueryParams = (\r\n { location }: UseManageQueryParamsOptions = {}\r\n): UseManageQueryParamsResult => {\r\n const router = useRouter()\r\n const searchParams = useSearchParams()\r\n const params = useParams()\r\n\r\n const activeQuery: QueryParams =\r\n location?.query ??\r\n Object.fromEntries(searchParams.entries())\r\n\r\n const pushFn = location?.push ?? ((url: string) => {return router.push(url)})\r\n\r\n /**\r\n * Set or update a query param\r\n * @param name\n * @param value\n */\r\n const handleQuery = (name: string, value = ''): void => {\r\n if (!name) return\r\n\r\n const query = new URLSearchParams(activeQuery)\r\n query.set(name, value)\r\n\r\n pushFn(`?${query.toString()}`)\r\n }\r\n\r\n /**\r\n * Remove a query param\r\n * @param name\n */\r\n const handleCleanQuery = (name: string): void => {\r\n if (!name) return\r\n\r\n const query = new URLSearchParams(activeQuery)\r\n query.delete(name)\r\n\r\n pushFn(`?${query.toString()}`)\r\n }\r\n\r\n /**\r\n * Get a query param value\r\n * @param name\n */\r\n const getQuery = (name: string): string => {\r\n if (!name) return ''\r\n return activeQuery?.[name] ?? ''\r\n }\r\n\r\n /**\r\n * Get a dynamic route param from Next.js\r\n * @param root0\n * @param root0.param\n * @param root0.callback\n */\r\n const getParams = ({ param, callback }: GetParamsOptions): string => {\r\n if (!param) return ''\r\n\r\n const value = String(params?.[param] ?? '')\r\n callback?.(value)\r\n\r\n return value\r\n }\r\n\r\n return {\r\n getQuery,\r\n handleQuery,\r\n handleCleanQuery,\r\n getParams\r\n }\r\n}\r\n","import { useEffect, useState } from 'react'\r\n\r\n/**\r\n * Custom hook to handle delivery time input validation and formatting.\r\n * @param root0\n * @param root0.initialTime\n * @returns {Object} An object containing state and functions for handling delivery time.\r\n */\r\nexport const useDeliveryTime = ({ initialTime = '' }) => {\r\n const [deliveryTime, setDeliveryTime] = useState(initialTime)\r\n useEffect(() => {\r\n if (initialTime) {\r\n setDeliveryTime(initialTime)\r\n }\r\n }, [initialTime])\r\n\r\n /**\r\n * Handles changes to the delivery time input.\r\n * @param {String} value - The input change value.\r\n */\r\n const handleDeliveryTimeChange = (value: string) => {\r\n setDeliveryTime(value)\r\n }\r\n\r\n return {\r\n deliveryTime,\r\n handleDeliveryTimeChange\r\n }\r\n}\r\n","import { gql, useQuery } from '@apollo/client'\n\r\nimport { validateModules } from './helpers/validateModules'\r\n\r\n/**\r\n * GraphQL query to get modules and submodules\r\n */\r\nconst GET_MODULES = gql`\r\n query GetModules {\r\n modules {\r\n mName\r\n mId\r\n mPath\r\n mPriority\r\n mIcon\r\n view\r\n subModules {\r\n smId\r\n smName\r\n smPath\r\n view\r\n smIcon\r\n smState\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * SubModule entity\r\n */\r\nexport interface SubModule {\r\n smId: string\r\n smName: string\r\n smPath: string\r\n smIcon?: string | null\r\n smState?: boolean | null\r\n view?: boolean | null\r\n}\r\n\r\n/**\r\n * Module entity\r\n */\r\nexport interface Module {\r\n mId: string\r\n mName: string\r\n mPath: string\r\n mPriority?: number | null\r\n mIcon?: string | null\r\n view?: boolean | null\r\n subModules?: SubModule[]\r\n}\r\n\r\n/**\r\n * Permissions map\r\n */\r\nexport type Permissions = Record<string, boolean>\r\n\r\n/**\r\n * User role structure\r\n */\r\nexport interface Role {\r\n permissions?: Permissions\r\n}\r\n\r\n/**\r\n * User data structure\r\n */\r\nexport interface UserData {\r\n role?: Role\r\n}\r\n\r\n/**\r\n * Hook params\r\n */\r\nexport interface UseModulesParams {\r\n dataUser?: UserData\r\n callback?: (modules: Module[]) => void\r\n}\r\n\r\n/**\r\n * Hook return type\r\n */\r\nexport interface UseModulesResult {\r\n loading: boolean\r\n error?: Error\r\n modules: Module[]\r\n}\r\n\r\n/**\r\n * Custom hook to fetch and validate modules based on user permissions\r\n *\r\n * @param {UseModulesParams} params - Hook parameters\r\n * @returns {UseModulesResult}\r\n */\r\nexport const useModules = ({\r\n dataUser = {},\r\n callback = () => {}\r\n}: UseModulesParams = {}): UseModulesResult => {\r\n const permissions: Permissions = dataUser?.role?.permissions ?? {}\r\n\r\n const { loading, error, data } = useQuery<{ modules: Module[] }>(GET_MODULES, {\r\n fetchPolicy: 'cache-and-network',\r\n onCompleted: (response) => {\r\n if (Array.isArray(response?.modules)) {\r\n callback(response.modules)\r\n }\r\n },\r\n onError: (err) => {\r\n console.error('Error fetching modules:', err)\r\n }\r\n })\r\n\r\n const safeModules: Module[] = Array.isArray(data?.modules) ? data.modules : []\r\n\r\n // cast to any to work around a too-narrow parameter type in the helper\r\n const filteredModules: Module[] = validateModules(safeModules as any, permissions)\r\n\r\n return {\r\n loading,\r\n error: error ?? undefined,\r\n modules: filteredModules\r\n }\r\n}\r\n","/**\r\n * Validates and filters modules based on the \"read\" permission.\r\n * If a module's view does not have \"read\" permission in the permissions object, the module is removed.\r\n */\r\ntype PermissionMap = Record<string, string[]>\r\n\r\ninterface SubModule {\r\n view: string\r\n [key: string]: any\r\n}\r\n\r\ninterface Module {\r\n view: string\r\n subModules?: SubModule[]\r\n [key: string]: any\r\n}\r\n\r\nexport const validateModules = (\r\n modules: Module[] = [],\r\n permissions: PermissionMap = {}\r\n): Module[] => {\r\n if (!Array.isArray(modules) || modules.length <= 0) return []\r\n return modules\r\n .map((module) => {\r\n // Check if the main module's view has \"read\" permission\r\n const hasReadPermission = permissions[module.view]?.includes('read')\r\n\r\n // Validate and filter subModules if they exist\r\n const validSubModules =\r\n module.subModules?.filter((subModule: SubModule) =>\r\n permissions[subModule.view]?.includes('read')\r\n ) || []\r\n\r\n // If the module or its subModules don't have read permission, exclude it\r\n if (!hasReadPermission && validSubModules.length === 0) {\r\n return null\r\n }\r\n\r\n // Return the module with its valid subModules\r\n return { ...module, subModules: validSubModules }\r\n })\r\n .filter(Boolean) as Module[] // Remove null values\r\n}\r\n","/**\r\n * Schedule day structure\r\n */\r\nexport interface ScheduleDay {\r\n schHoSta?: string\r\n schHoEnd?: string\r\n}\r\n\r\n/**\r\n * Calculate total worked hours from a list of days.\r\n * Keeps original behavior and edge cases intact.\r\n *\r\n * @param {ScheduleDay[]} days - Array of days with start and end times\r\n * @returns {string} Total time formatted as HH:MM\r\n */\r\nexport const getTotalHours = (days: ScheduleDay[] = []): string => {\r\n const totalMinutesArray: number[] = days.map((day) => {\r\n const { schHoSta, schHoEnd } = day\r\n\r\n // Handle potential invalid time strings\r\n if (!isValidTimeString(schHoSta) || !isValidTimeString(schHoEnd)) {\r\n return 0\r\n }\r\n\r\n const [startHours, startMinutes] = schHoSta.split(':')\r\n const [endHours, endMinutes] = schHoEnd.split(':')\r\n\r\n // Convert hours and minutes to integers for calculations\r\n let totalHoursInt =\r\n parseInt(endHours, 10) - parseInt(startHours, 10)\r\n\r\n const totalMinutesInt =\r\n parseInt(endMinutes, 10) - parseInt(startMinutes, 10)\r\n\r\n // Handle negative total minutes\r\n let totalMinutes = totalMinutesInt\r\n if (totalMinutes < 0) {\r\n totalHoursInt--\r\n totalMinutes += 60\r\n }\r\n\r\n // Calculate total time in minutes\r\n return totalHoursInt * 60 + totalMinutes\r\n })\r\n\r\n // Sum all minutes\r\n const totalMinutes: number = totalMinutesArray.reduce(\r\n (acc, curr) => {return acc + curr},\r\n 0\r\n )\r\n\r\n // Convert to hours and minutes\r\n const totalHours: number = Math.floor(totalMinutes / 60)\r\n const remainingMinutes: number = totalMinutes % 60\r\n\r\n // Format HH:MM\r\n const formattedHours = totalHours.toString().padStart(2, '0')\r\n const formattedMinutes = remainingMinutes.toString().padStart(2, '0')\r\n\r\n return `${formattedHours}:${formattedMinutes}`\r\n}\r\n\r\n/**\r\n * Validate time string format (HH:MM)\r\n *\r\n * @param {string | undefined} timeString\r\n * @returns {boolean}\r\n */\r\nexport const isValidTimeString = (\r\n timeString?: string\r\n): timeString is string => {\r\n if (!timeString) return false\r\n\r\n const timeRegex = /^([0-1][0-9]|2[0-3]):([0-5][0-9])$/\r\n return timeRegex.test(timeString)\r\n}\r\n","import { useMutation } from '@apollo/client'\n\r\nimport { CATEGORY_EMPTY } from '../../utils/index'\r\nimport { useCategoriesProduct } from '../useCategoriesProduct'\n\r\nimport { UPDATE_MULTIPLE_PRODUCTS } from './queries'\r\n\r\ninterface UpdateMultipleProductsProps {\r\n sendNotification?: (notification: Notification) => void;\r\n}\r\n\r\ninterface Product {\r\n PRECIO_AL_PUBLICO: number;\r\n DESCRIPCION: string;\r\n NOMBRE: string;\r\n pCode: string;\r\n CANTIDAD?: number;\r\n 'IMPUESTO (%)': number;\r\n CODIGO_DE_BARRAS: string | null;\r\n}\r\n\r\ninterface Notification {\r\n backgroundColor: string;\r\n description: string;\r\n title: string;\r\n}\r\n\r\nexport const useUpdateMultipleProducts = ({\r\n sendNotification = () => {}\r\n}: UpdateMultipleProductsProps): {\r\n updateProducts: (products: Product[]) => Promise<any[]>;\r\n data: any; \r\n loading: boolean; \r\n error: any; \r\n} => {\r\n \r\n const [updateMultipleProducts, {\r\n data,\r\n loading,\r\n error\r\n }] = useMutation(UPDATE_MULTIPLE_PRODUCTS)\r\n\r\n const [dataCategoriesProducts] = useCategoriesProduct()\r\n \r\n const findEmptyCategory = dataCategoriesProducts?.find(({ pName }: { pName: string }) => {return pName === CATEGORY_EMPTY})\r\n \r\n const updateProducts = async (products: Product[]): Promise<any[]> => {\r\n \r\n const newProducts = products.map(product => {\r\n const {\r\n PRECIO_AL_PUBLICO: ProPrice,\r\n DESCRIPCION: ProDescription,\r\n NOMBRE: pName,\r\n pCode,\r\n CANTIDAD: stock = 0,\r\n 'IMPUESTO (%)': vat,\r\n CODIGO_DE_BARRAS: ProBarCode\r\n } = product\r\n\r\n return {\r\n idStore: '',\r\n ProPrice,\r\n ProDescuento: 0,\r\n ValueDelivery: 0,\r\n ProDescription,\r\n pName,\r\n pCode,\r\n carProId: findEmptyCategory?.carProId ?? null,\r\n pState: 1,\r\n sTateLogistic: 1,\r\n ProStar: 0,\r\n stock,\r\n ProImage: '/images/placeholder-image.webp',\r\n vat,\r\n ProBarCode: String(ProBarCode) || '',\r\n ProHeight: null,\r\n ProWeight: '',\r\n ProOutstanding: 0,\r\n ProDelivery: 0\r\n }\r\n })\r\n\r\n try {\r\n const response = await updateMultipleProducts({ variables: { input: newProducts } })\r\n \r\n for (const { errors } of response.data.updateMultipleProducts) {\r\n \r\n if (errors) {\r\n sendNotification({\r\n backgroundColor:'error',\r\n description : errors[0].message ,\r\n title : 'Error'\r\n })\r\n }\r\n }\r\n \r\n return response.data.updateMultipleProducts\r\n\r\n } catch (e) {\r\n sendNotification({\r\n backgroundColor:'error',\r\n description :'Ocurrió un error al actualizar los productos',\r\n title :'Error'\r\n })\r\n \r\n return []\r\n }\r\n \r\n }\r\n\r\n return {\r\n updateProducts, \r\n data, \r\n loading, \r\n error\r\n }\r\n}","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ULTIMATE_CATEGORY_PRODUCTS } from './queries'\r\n\r\nexport const useCategoriesProduct = () => {\r\n const {\r\n data,\r\n loading,\r\n error,\r\n networkStatus\r\n } = useQuery(GET_ULTIMATE_CATEGORY_PRODUCTS)\r\n\r\n return [data?.catProductsAll, { loading, error, networkStatus }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ULTIMATE_CATEGORY_PRODUCTS = gql`\r\nquery catProductsAll($search: String, $min: Int, $max: Int, $gender: [String], $desc: [String], $categories: [ID], ) {\r\n catProductsAll(search: $search, min: $min, max: $max, gender: $gender, desc: $desc, categories: $categories,) {\r\n carProId\r\n idStore\r\n pName\r\n ProDescription\r\n ProImage\r\n pState\r\n createdAt\r\n updatedAt\r\n }\r\n}\r\n`\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const UPDATE_MULTIPLE_PRODUCTS = gql`\r\n mutation updateMultipleProducts($input: [InputProductFood]) {\r\n updateMultipleProducts(input: $input) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n data {\r\n pId\r\n sizeId\r\n colorId\r\n cId\r\n dId\r\n ctId\r\n fId\r\n pName\r\n pCode\r\n ProPrice\r\n carProId\r\n ProDescuento\r\n ProUniDisponibles\r\n ValueDelivery\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ProStar\r\n pState\r\n ProImage\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n ProDelivery\r\n ProVoltaje\r\n }\r\n }\r\n }\r\n`\r\n","import { useState } from 'react'\r\n\r\nexport const useTokenCards = () => {\r\n const [loading, setLoading] = useState(false)\r\n const [error, setError] = useState<string | null>(null)\r\n const [responseData, setResponseData] = useState(null)\r\n\r\n const handleTokenCardsSubmit = async (postData: any) => {\r\n setLoading(true)\r\n setError(null)\r\n try {\r\n const headers = {\r\n 'Content-Type': 'application/json'\r\n }\r\n const url = 'http://localhost:3000/api/v1/wompi/transaction/tokens/cards'\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(postData)\r\n })\r\n\r\n const responseData = await response.json()\r\n\r\n if (!response.ok) {\r\n throw new Error(responseData.message || 'Something went wrong')\r\n }\r\n setResponseData(responseData)\r\n return responseData\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n setError(String(error.message))\r\n } else {\r\n setError(String(error))\r\n }\r\n return {\r\n\r\n }\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n return { loading, error, responseData, handleTokenCardsSubmit }\r\n}\r\n","import { useMutation } from '@apollo/client'\r\nimport { useState } from 'react'\n\r\nimport { CREATE_TABLE_MUTATION } from './queries'\r\n\r\n/**\r\n * Custom hook to handle table creation with validation and mutation logic\r\n * @param {string} tableName Name of the table\r\n * @param {number} seats Number of seats at the table\r\n * @param {string} section Section where the table is located\r\n * @param {number} tableState Current state of the table (e.g., Active, Occupied)\r\n * @returns {Object} The state of the mutation including success, message, errors, and data\r\n */\r\nexport const useStoreTableCreate = ({\r\n sendNotification = () => {}\r\n} = {}) => {\r\n const [loading, setLoading] = useState(false)\r\n const [createTableMutation] = useMutation(CREATE_TABLE_MUTATION)\r\n /**\r\n * Function to create a table with validation and mutation\r\n * @param {string} tableName Table name\r\n * @param {number} seats Number of seats\r\n * @param {string} section Table section\r\n * @param {number} tableState Table state (e.g., 0 = Unavailable, 1 = Active, 2 = Occupied)\r\n */\r\n const storeTableCreate = async (tableName, seats, section, tableState) => {\r\n setLoading(true) // Start loading\r\n try {\r\n // Call the mutation to create the table\r\n const result = await createTableMutation({\r\n variables: {\r\n tableName,\r\n seats,\r\n section,\r\n tableState\r\n },\r\n update (cache, { data: { storeTableCreate } }) {\r\n if (storeTableCreate.success) {\r\n // Actualizar la lista de mesas en la caché\r\n cache.modify({\r\n fields: {\r\n storeTables (existingTables = []) {\r\n const newTableRef = {\r\n tableId: null,\r\n tableName,\r\n seats,\r\n section,\r\n tableState: 1\r\n }\r\n return [...existingTables, newTableRef]\r\n }\r\n }\r\n })\r\n }\r\n }\r\n })\r\n\r\n sendNotification({\r\n backgroundColor: result.data.storeTableCreate.success ? 'success' : 'error',\r\n description: result.data.storeTableCreate.message || '',\r\n title: result.data.storeTableCreate.success ? 'Success' : 'Error'\r\n })\r\n return result\r\n } catch (error) {\r\n sendNotification({\r\n backgroundColor: 'error',\r\n description: error.message || 'Error occurred while creating the table.',\r\n title: 'Creation Failed'\r\n })\r\n return { success: false, message: error.message }\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n return [storeTableCreate, { loading }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL Mutation for creating a store table\r\n */\r\nexport const CREATE_TABLE_MUTATION = gql`\r\n mutation storeTableCreate($tableName: String!, $seats: Int, $section: String, $tableState: Int) {\r\n storeTableCreate(tableName: $tableName, seats: $seats, section: $section, tableState: $tableState) {\r\n success\r\n message\r\n errors {\r\n message\r\n path\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n data {\r\n tableId\r\n tableName\r\n seats\r\n section\r\n tableState\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n }\r\n`\r\n\r\nexport const STORE_TABLES_QUERY = gql`\r\n query {\r\n storeTables {\r\n tableId\r\n tableName\r\n seats\r\n section\r\n tableState\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n`\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { STORE_TABLES_QUERY } from './queries' // Ajusta la ruta a tu archivo de queries\r\n\r\n/**\r\n * Custom hook to fetch store tables data\r\n * @param {Object} args - Arguments for fetching store tables, e.g., info field.\r\n * @param {Object} ctx - Context that provides restaurant-related information.\r\n * @returns {Object} - Object containing tables data, loading state, and error.\r\n */\r\nexport const useStoreTables = () => {\r\n const { data, loading, error } = useQuery(STORE_TABLES_QUERY)\r\n\r\n return [data, { loading, error }]\r\n}\r\n","import { gql, useQuery } from '@apollo/client'\r\nimport { useEffect, useState } from 'react'\r\n\r\n/**\r\n * GraphQL query to validate free subscription\r\n */\r\nconst VALIDATE_SUBSCRIPTION_QUERY = gql`\r\n query validateFreeSubscription($idStore: ID) {\r\n validateFreeSubscription(idStore: $idStore) {\r\n subscriptionId\r\n status\r\n businessName\r\n currentPeriodEnd\r\n currentPeriodStart\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Subscription entity returned by the API\r\n */\r\nexport interface SubscriptionData {\r\n subscriptionId: string\r\n status: string\r\n businessName: string\r\n currentPeriodEnd: string\r\n currentPeriodStart: string\r\n}\r\n\r\n/**\r\n * GraphQL query response shape\r\n */\r\ninterface ValidateSubscriptionResponse {\r\n validateFreeSubscription: SubscriptionData\r\n}\r\n\r\n/**\r\n * Hook return type\r\n */\r\nexport interface UseSubscriptionValidationResult {\r\n loading: boolean\r\n error?: Error\r\n subscriptionData?: SubscriptionData\r\n daysRemaining: number | null\r\n daysElapsed: number | null\r\n}\r\n\r\n/**\r\n * Hook to validate store subscription and calculate elapsed/remaining days.\r\n * Keeps original behavior and calculations intact.\r\n *\r\n * @param {string} idStore - Store identifier\r\n * @returns {UseSubscriptionValidationResult}\r\n */\r\nexport const useSubscriptionValidation = (\r\n idStore: string\r\n): UseSubscriptionValidationResult => {\r\n const { loading, error, data } = useQuery<ValidateSubscriptionResponse>(\r\n VALIDATE_SUBSCRIPTION_QUERY,\r\n {\r\n variables: { idStore }\r\n }\r\n )\r\n\r\n const [daysRemaining, setDaysRemaining] = useState<number | null>(null)\r\n const [daysElapsed, setDaysElapsed] = useState<number | null>(null)\r\n\r\n useEffect(() => {\r\n if (data?.validateFreeSubscription) {\r\n const { currentPeriodEnd, currentPeriodStart } =\r\n data.validateFreeSubscription\r\n\r\n const currentDate = new Date()\r\n const endOfPeriod = new Date(parseInt(currentPeriodEnd, 10))\r\n const startOfPeriod = new Date(parseInt(currentPeriodStart, 10))\r\n\r\n const differenceInTimeUntilEnd =\r\n endOfPeriod.getTime() - currentDate.getTime()\r\n\r\n const differenceInDaysUntilEnd = Math.ceil(\r\n differenceInTimeUntilEnd / (1000 * 3600 * 24)\r\n )\r\n\r\n setDaysRemaining(\r\n isNaN(differenceInDaysUntilEnd)\r\n ? 0\r\n : differenceInDaysUntilEnd\r\n )\r\n\r\n const differenceInTimeSinceStart =\r\n currentDate.getTime() - startOfPeriod.getTime()\r\n\r\n const differenceInDaysSinceStart = Math.ceil(\r\n differenceInTimeSinceStart / (1000 * 3600 * 24)\r\n )\r\n\r\n setDaysElapsed(\r\n isNaN(differenceInDaysSinceStart)\r\n ? 0\r\n : differenceInDaysSinceStart\r\n )\r\n }\r\n }, [data])\r\n\r\n return {\r\n loading,\r\n error: error ?? undefined,\r\n subscriptionData: data?.validateFreeSubscription,\r\n daysRemaining,\r\n daysElapsed\r\n }\r\n}\r\n","/**\n *\n * @param time12Hour\n */\nexport function convertToMilitaryTime(time12Hour: string): string {\r\n const [time, period]: [string, string] = time12Hour.split(' ') as [string, string]\r\n let [hours, minutes]: [string, string] = time.split(':') as [string, string]\r\n\r\n if (period === 'PM' && hours !== '12') {\r\n hours = String(Number(hours) + 12)\r\n }\r\n\r\n if (period === 'AM' && hours === '12') {\r\n hours = '00'\r\n }\r\n\r\n return `${hours}:${minutes}`\r\n}","import { useMutation } from '@apollo/client'\n\r\nimport { CREATE_ROLE_MUTATION } from './queries'\r\n/**\r\n * Custom hook para crear un nuevo rol\r\n * @param root0\n * @param root0.sendNotification\n * @returns {Object} - Estado de la mutación, incluyendo loading, error, data y la función createRoleMutation\r\n */\r\nexport const useCreateRole = ({\r\n sendNotification = () => {\r\n return {\r\n title: '',\r\n description: '',\r\n backgroundColor: ''\r\n }\r\n }\r\n} = {\r\n sendNotification: () => {\r\n }\r\n}) => {\r\n const [createRoleMutation, { loading, error, data }] = useMutation(CREATE_ROLE_MUTATION, {\r\n onError: () => {\r\n sendNotification({\r\n title: 'Error',\r\n description: 'Ocurrió un error inesperado',\r\n backgroundColor: 'error'\r\n })\r\n },\r\n onCompleted: () => {\r\n return null\r\n }\r\n })\r\n\r\n return [createRoleMutation, {\r\n loading,\r\n error,\r\n data: data?.createRoleMutation ?? null\r\n }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_ROLES = gql`\r\nquery getRoles($idStore: ID, $search: String, $min: Int, $max: Int, $fromDate: DateTime, $toDate: DateTime, $page: Int) {\r\n getRoles(idStore: $idStore, search: $search, min: $min, max: $max, fromDate: $fromDate, toDate: $toDate, page: $page) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n __typename\r\n }\r\n pagination {\r\n totalRecords\r\n totalPages\r\n currentPage\r\n __typename\r\n }\r\n data { \r\n idRole\r\n name\r\n priority\r\n description\r\n permissions\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n}\r\n`\r\n\r\n/**\r\n * Mutación para crear un nuevo rol\r\n */\r\nexport const CREATE_ROLE_MUTATION = gql`\r\nmutation createRoleMutation($input: IRole!) {\r\n createRoleMutation(input: $input) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n __typename\r\n }\r\n data { \r\n idRole\r\n name\r\n priority\r\n description\r\n permissions\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n}\r\n`\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_ROLES } from './queries'\r\n\r\nexport const useGetRoles = ({\r\n max,\r\n order = 'DESC',\r\n search,\r\n sendNotification = () => { }\r\n} = {}) => {\r\n const {\r\n loading,\r\n error,\r\n called,\r\n data,\r\n refetch\r\n } = useQuery(GET_ALL_ROLES, {\r\n onError: () => {\r\n sendNotification({\r\n title: 'Error',\r\n description: 'Algo salió mal',\r\n backgroundColor: 'error'\r\n })\r\n },\r\n variables: {\r\n search,\r\n max: max || 25,\r\n order\r\n }\r\n })\r\n return [data?.getRoles, {\r\n loading: called ? false : loading,\r\n buttonLoading: loading,\r\n error,\r\n refetch\r\n }]\r\n}\r\n","import { useMutation, gql } from '@apollo/client'\r\n\r\n// Define the mutation\r\nconst UPDATE_ROLES_PRIORITY = gql`\r\n mutation updateRolesPriority($roles: [IParamsPriority]!) {\r\n updateRolesPriority(roles: $roles) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to update roles priority\r\n * @returns {Object} - Returns the mutation function and the mutation state\r\n */\r\nexport const useUpdateRolesPriority = () => {\r\n const [updateRolesPriority, { data, loading, error }] = useMutation(UPDATE_ROLES_PRIORITY)\r\n\r\n /**\r\n * Function to update the priority of roles\r\n * @param {Array} roles - The array of roles with their priorities to be updated\r\n * @returns {Promise<void>}\r\n */\r\n const handleUpdateRolesPriority = async (roles) => {\r\n try {\r\n const response = await updateRolesPriority({\r\n variables: { roles }\r\n })\r\n\r\n // You can handle the response or any additional logic here\r\n return response\r\n } catch (err) {\r\n // Handle the error as needed\r\n console.error('Error updating roles priority:', err)\r\n }\r\n }\r\n\r\n return [handleUpdateRolesPriority, {\r\n data,\r\n loading,\r\n error\r\n }]\r\n}\r\n","import { useMutation, gql } from '@apollo/client'\r\n\r\n// Define the GraphQL mutation\r\nconst REMOVE_ROLES_MUTATION = gql`\r\n mutation removeRoles($roleIds: [ID!]!) {\r\n removeRoles(roleIds: $roleIds) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to call removeRoles mutation.\r\n *\r\n * @returns {Object} An object containing the mutation function and the loading/error state.\r\n */\r\nexport function useRemoveRoles () {\r\n const [removeRoles, { loading, error, data }] = useMutation(REMOVE_ROLES_MUTATION, {\r\n onError: (err) => {\r\n console.error('Error removing roles:', err)\r\n }\r\n })\r\n\r\n const removeRolesHandler = async ({ roleIds = [] }) => {\r\n try {\r\n const { data } = await removeRoles({ variables: { roleIds } })\r\n return data.removeRoles\r\n } catch (err) {\r\n console.error('Error removing roles:', err)\r\n throw err\r\n }\r\n }\r\n\r\n return [removeRolesHandler, {\r\n loading,\r\n error,\r\n data\r\n }]\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL query to get the local IP of the backend server.\r\n */\r\nconst GET_LOCAL_BACKEND_IP = gql`\r\n query GetLocalBackendIp {\r\n getLocalBackendIp\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch the local IP address of the backend server.\r\n *\r\n * @returns {Object} - Contains the IP string, loading state, and error.\r\n */\r\nexport const useLocalBackendIp = () => {\r\n const {\r\n data,\r\n loading,\r\n error\r\n } = useQuery(GET_LOCAL_BACKEND_IP)\r\n const port = process.env.URL_ADMIN_SERVER?.split(':')?.[2]\r\n const buildUrlBackend = data?.getLocalBackendIp\r\n ? `http://${data.getLocalBackendIp}:${port}`\r\n : null\r\n\r\n return {\r\n urlBackend: buildUrlBackend,\r\n ip: data?.getLocalBackendIp || null,\r\n loading,\r\n error\r\n }\r\n}\r\n","export const getDayFromOpeningKey = (key) => {\r\n const days = {\r\n openingSun: 0,\r\n openingMon: 1,\r\n openingTue: 2,\r\n openingWed: 3,\r\n openingThu: 4,\r\n openingFri: 5,\r\n openingSat: 6\r\n }\r\n return days[key] !== undefined ? days[key] : -1\r\n}\r\n\r\n// Función para convertir el objeto de tiempo en una cadena de tiempo\r\n/**\n *\n * @param timeStr\n */\nexport function getTimeString (timeStr) {\r\n return timeStr || '00:00' // Return '00:00' for empty time strings\r\n}\r\n\r\n/**\n *\n */\nexport function getCurrentDayAndTime () {\r\n try {\r\n const date = new Date()\r\n const currentTime = date.getHours() * 60 + date.getMinutes()\r\n const currentDayOfWeek = date.getDay()\r\n return { currentTime, currentDayOfWeek }\r\n } catch (error) {\r\n return {\r\n\r\n }\r\n }\r\n}\r\n\r\n/**\n *\n * @param timeStr\n */\nexport function getTimeObject (timeStr) {\r\n try {\r\n if (!timeStr || !/\\d{2}:\\d{2}/.test(timeStr)) {\r\n return { hours: 0, minutes: 0 } // Return default values for invalid input\r\n }\r\n const [hours, minutes] = timeStr.split(':').map(str => {return parseInt(str)})\r\n return { hours, minutes }\r\n } catch (e) {\r\n return { hours: 0, minutes: 0 } // Return default values on error\r\n }\r\n}\r\n\r\n/**\n *\n * @param openings\n */\nexport function sortOpeningsByDay (openings) {\r\n const days = [\r\n 'openingSun',\r\n 'openingMon',\r\n 'openingTue',\r\n 'openingWed',\r\n 'openingThu',\r\n 'openingFri',\r\n 'openingSat'\r\n ]\r\n const sortedOpenings = {}\r\n\r\n days.forEach((day) => {\r\n sortedOpenings[day] = openings[day] || '00:00 - 00:00' // Agregar horario vacío para los días faltantes\r\n })\r\n\r\n return sortedOpenings\r\n}\r\n\r\n// Función para obtener la clave de openings a partir del día de la semana\r\n/**\n *\n * @param day\n */\nexport function getOpeningKeyFromDay (day) {\r\n const days = {\r\n 0: 'openingSun',\r\n 1: 'openingMon',\r\n 2: 'openingTue',\r\n 3: 'openingWed',\r\n 4: 'openingThu',\r\n 5: 'openingFri',\r\n 6: 'openingSat'\r\n }\r\n return days[day]\r\n}\r\n\r\nexport const weekDays = [\r\n 'Domingo',\r\n 'Lunes',\r\n 'Martes',\r\n 'Miércoles',\r\n 'Jueves',\r\n 'Viernes',\r\n 'Sábado'\r\n]\r\n\r\n/**\n *\n * @param text\n */\nexport function timeToInt (text) {\r\n const hour = parseInt(text.substring(0, 2))\r\n const minute = parseInt(text.substring(3))\r\n return hour * 60 + minute\r\n}\r\n\r\nexport const days = {\r\n Monday: 'Lunes',\r\n Tuesday: 'Martes',\r\n Wednesday: 'Miércoles',\r\n Thursday: 'Jueves',\r\n Friday: 'Viernes',\r\n Saturday: 'Sábado',\r\n Sunday: 'Domingo'\r\n}\r\n","import {\r\n getCurrentDayAndTime,\r\n getOpeningKeyFromDay,\r\n getTimeString,\r\n sortOpeningsByDay,\r\n weekDays,\r\n timeToInt,\r\n days\r\n} from './helpers'\r\n\r\n/**\r\n * Store schedule structure\r\n */\r\nexport interface StoreSchedule {\r\n schDay: number\r\n schHoSta?: string\r\n schHoEnd?: string\r\n}\r\n\r\n/**\r\n * Openings object structure\r\n */\r\nexport type OpeningsMap = Record<string, string>\r\n\r\n/**\r\n * Store opening status result\r\n */\r\nexport interface OpeningStatus {\r\n message: string\r\n open: boolean\r\n}\r\n\r\n/**\r\n * Hook-like utility to calculate store open status\r\n *\r\n * @param {Object} params\r\n * @param {StoreSchedule[]} params.dataSchedules\r\n * @returns {OpeningStatus}\r\n */\r\nexport const statusOpenStores = (\r\n { dataSchedules = [] }: { dataSchedules?: StoreSchedule[] } = {}\r\n): OpeningStatus => {\r\n const handleHourPmAM = (hour?: string): string => {\r\n if (!hour) return ''\r\n return new Date(`1/1/1999 ${hour}`).toLocaleString('en-US', {\r\n hour: 'numeric',\r\n minute: 'numeric',\r\n hour12: true\r\n })\r\n }\r\n\r\n const handleState = (message: string, open: boolean): OpeningStatus => {return {\r\n message,\r\n open\r\n }}\r\n\r\n const getNextDaySchedule = (\r\n schedules: StoreSchedule[],\r\n currentDayOfWeek: number\r\n ) => {\r\n const today = new Date()\r\n const tomorrow = new Date(today)\r\n tomorrow.setDate(today.getDate() + 1)\r\n\r\n const dayOfWeekTomorrow = tomorrow.getDay()\r\n\r\n const findNextDay = schedules?.length\r\n ? schedules.some(\r\n (schedule) => {return schedule?.schDay === dayOfWeekTomorrow}\r\n )\r\n : false\r\n\r\n const findDataNextDay =\r\n schedules?.find(\r\n (schedule) => {return schedule?.schDay === dayOfWeekTomorrow}\r\n ) ?? { schDay: dayOfWeekTomorrow }\r\n\r\n return { findNextDay, findDataNextDay, dayOfWeekTomorrow }\r\n }\r\n\r\n const getOpeningStatus = (\r\n openings: OpeningsMap,\r\n currentTime: number,\r\n currentDayOfWeek: number\r\n ): OpeningStatus => {\r\n const weekDayLookup = [\r\n 'Sunday',\r\n 'Monday',\r\n 'Tuesday',\r\n 'Wednesday',\r\n 'Thursday',\r\n 'Friday',\r\n 'Saturday'\r\n ]\r\n\r\n const ceroHours = '00:00 - 00:00'\r\n let dayOfWeek = currentDayOfWeek\r\n\r\n for (let i = 0; i < 7; i++) {\r\n const dayName = weekDayLookup[dayOfWeek % 7]\r\n const opening =\r\n openings && openings[`opening${dayName.substring(0, 3)}`]\r\n\r\n const timeSpans = opening\r\n ?.split(';')\r\n .map((item) => {return item.trim()})\r\n\r\n for (const span of timeSpans ?? []) {\r\n const hours = span.split('-').map((item) => {return item.trim()})\r\n const openTime = timeToInt(hours[0])\r\n const closeTime = timeToInt(hours[1])\r\n\r\n if (currentTime >= openTime && currentTime <= closeTime) {\r\n return handleState(\r\n `Abierto Ahora - Cierra a las: ${handleHourPmAM(hours[1])}`,\r\n true\r\n )\r\n }\r\n\r\n if (\r\n currentTime < openTime &&\r\n dayOfWeek === currentDayOfWeek\r\n ) {\r\n return handleState(\r\n `Aun temprano - Abre hoy a las: ${handleHourPmAM(hours[0])}`,\r\n false\r\n )\r\n }\r\n\r\n if (\r\n currentTime >= closeTime - 30 * 60000 &&\r\n currentTime < closeTime &&\r\n dayOfWeek === currentDayOfWeek\r\n ) {\r\n return handleState(\r\n `Pronto por cerrar - Cierra hoy a las: ${handleHourPmAM(hours[1])}`,\r\n true\r\n )\r\n }\r\n\r\n const {\r\n findNextDay,\r\n findDataNextDay,\r\n dayOfWeekTomorrow\r\n } = getNextDaySchedule(dataSchedules, currentDayOfWeek)\r\n\r\n if (findNextDay && findDataNextDay?.schHoSta) {\r\n const nameOfDayTomorrow = weekDays[dayOfWeekTomorrow]\r\n return handleState(\r\n `Cerrado abre - Mañana ${nameOfDayTomorrow} a las ${\r\n findDataNextDay.schHoSta\r\n }`,\r\n false\r\n )\r\n }\r\n\r\n const nextDayName =\r\n weekDayLookup[(dayOfWeek + 1) % 7]\r\n\r\n const nextOpening =\r\n openings &&\r\n openings[`opening${nextDayName.substring(0, 3)}`]\r\n\r\n const nextHours = nextOpening\r\n ?.split(';')\r\n ?.map((item) => {return item.trim()})\r\n\r\n if (nextHours?.[0] !== ceroHours) {\r\n return handleState(\r\n `Cerrado - Abre el ${days[nextDayName as keyof typeof days]} a las ${nextHours?.[0]}`,\r\n false\r\n )\r\n }\r\n }\r\n\r\n dayOfWeek++\r\n }\r\n\r\n return handleState('Cerrado', false)\r\n }\r\n\r\n const getIsOpening = (openings: OpeningsMap): OpeningStatus => {\r\n const { currentTime, currentDayOfWeek } =\r\n getCurrentDayAndTime()\r\n\r\n return getOpeningStatus(\r\n openings,\r\n currentTime ?? 0,\r\n currentDayOfWeek ?? 0\r\n )\r\n }\r\n\r\n const createOpeningsObject = (\r\n schedules: StoreSchedule[]\r\n ): OpeningsMap => {\r\n const openings: OpeningsMap = {}\r\n const existStoreSchedule = schedules || []\r\n\r\n existStoreSchedule.forEach((schedule) => {\r\n const openingKey = getOpeningKeyFromDay(schedule.schDay)\r\n const schHoSta = getTimeString(schedule?.schHoSta)\r\n const schHoEnd = getTimeString(schedule?.schHoEnd)\r\n\r\n openings[openingKey] = `${schHoSta} - ${schHoEnd}`\r\n })\r\n\r\n for (let i = 0; i < 7; i++) {\r\n const openingKey = getOpeningKeyFromDay(i)\r\n if (!(openingKey in openings)) {\r\n openings[openingKey] = '00:00 - 00:00'\r\n }\r\n }\r\n\r\n return openings\r\n }\r\n\r\n const openings = createOpeningsObject(dataSchedules)\r\n const sortedOpenings = sortOpeningsByDay(openings)\r\n\r\n return getIsOpening(sortedOpenings)\r\n}\r\n","export const completeSchedules = (dataSchedules: { schDay: number; schHoSta: string; schHoEnd: string }[]) => {\r\n // Días de la semana\r\n const daysSemana = ['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado', 'Domingo']\r\n\r\n // Mapear los horarios existentes para crear un mapa por día\r\n const horariosPorDia = dataSchedules.reduce((mapa, horario) => {\r\n const day = daysSemana[horario.schDay]\r\n if (!mapa[day]) {\r\n mapa[day] = []\r\n }\r\n mapa[day].push({ horaInicio: horario.schHoSta, horaFin: horario.schHoEnd })\r\n return mapa\r\n }, {} as Record<string, { horaInicio: string; horaFin: string }[]>)\r\n\r\n // Completar los días que faltan y formatear el objeto\r\n const horariosFormateados = daysSemana.map((day, index) => {return {\r\n day,\r\n horarios: horariosPorDia[day] || [{ horaInicio: '', horaFin: '' }]\r\n }})\r\n\r\n return horariosFormateados\r\n}\r\n","export const getCardType = (cardNum: string) => {\r\n let payCardType = ''\r\n\r\n if (cardNum.startsWith('4')) {\r\n payCardType = 'VISA'\r\n } else if (cardNum.startsWith('5')) {\r\n payCardType = 'MASTERCARD'\r\n } else {\r\n const regexMap = [\r\n { regEx: /^4[0-9]{5}/gi, cardType: 'VISA' },\r\n { regEx: /^5[1-5][0-9]{4}/gi, cardType: 'MASTERCARD' },\r\n { regEx: /^(5[06-8]\\d{4}|6\\d{5})/gi, cardType: 'MAESTRO' }\r\n ]\r\n\r\n for (const { regEx, cardType } of regexMap) {\r\n if (cardNum.match(regEx)) {\r\n payCardType = cardType\r\n break\r\n }\r\n }\r\n }\r\n\r\n return payCardType\r\n}\r\n","import { gql, useMutation } from '@apollo/client'\r\n\r\nconst LOGIN_EMPLOYEE_IN_STORE = gql`\r\n mutation loginEmployeeInStore($eId: ID, $tenantId: String, $idStore: ID, $idUser: ID, $eEmail: String) {\r\n loginEmployeeInStore(eId: $eId, tenantId: $tenantId, idStore: $idStore, idUser: $idUser, eEmail: $eEmail) {\r\n success\r\n message\r\n token\r\n idStore\r\n }\r\n }\r\n`\r\n\r\nexport const useLoginEmployeeInStore = () => {\r\n const [loginEmployeeInStore, { data, loading, error }] = useMutation(LOGIN_EMPLOYEE_IN_STORE)\r\n\r\n const loginEmployee = async (idStore: string, eEmail: string) => {\r\n try {\r\n const response = await loginEmployeeInStore({\r\n variables: {\r\n idStore,\r\n eEmail\r\n }\r\n })\r\n return response.data.loginEmployeeInStore\r\n } catch (err) {\r\n console.error('Error during loginEmployeeInStore mutation:', err)\r\n throw err\r\n }\r\n }\r\n\r\n return {\r\n loginEmployee,\r\n data,\r\n loading,\r\n error\r\n }\r\n}\r\n","import { useState } from 'react'\r\nimport * as XLSX from 'xlsx'\r\n\r\nimport { RandomCode } from '../../utils'\r\n\r\nimport { validateProductDataExcel } from './helpers/validateProductDataExcel'\r\n\r\nconst STEPS = {\r\n UPLOAD_FILE: 0,\r\n UPLOAD_PRODUCTS: 1\r\n}\r\n\r\ninterface UseUploadProductsProps {\r\n sendNotification?: (notification: {\r\n title: string\r\n description: string\r\n backgroundColor: 'success' | 'error' | 'info' | 'warning'\r\n }) => void\r\n}\r\nexport const useUploadProducts = ({\r\n sendNotification = () => { return null }\r\n}: UseUploadProductsProps) => {\r\n const [data, setData] = useState([])\r\n const [isLoading, setIsLoading] = useState(false)\r\n const [active, setActive] = useState(STEPS.UPLOAD_FILE)\r\n const [overActive, setOverActive] = useState(STEPS.UPLOAD_FILE)\r\n\r\n const handleOverActive = (index: number) => {\r\n setOverActive(index)\r\n }\r\n const readExcelFile = (file: File) => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onload = (e) => {\r\n if (!e.target || !(e.target.result instanceof ArrayBuffer)) {\r\n return reject(new Error('Failed to read file as ArrayBuffer.'))\r\n }\r\n const data = new Uint8Array(e.target.result)\r\n const workbook = XLSX.read(data, { type: 'array' })\r\n const sheetName = workbook.SheetNames[0]\r\n const worksheet = workbook.Sheets[sheetName]\r\n const json = XLSX.utils.sheet_to_json(worksheet)\r\n resolve(json)\r\n }\r\n reader.onerror = (error) => {return reject(error)}\r\n reader.readAsArrayBuffer(file)\r\n })\r\n }\r\n\r\n const onChangeFiles = async (files: FileList) => {\r\n setIsLoading(true) // Activa el loader al inicio\r\n try {\r\n const filePromises = Array.from(files).map(file => {return readExcelFile(file)})\r\n const newData = await Promise.all(filePromises)\r\n\r\n const newProducts = newData.flat().map((product, index) => {\r\n // Assert product as a record to access its properties\r\n const prod = product as Record<string, any>\r\n const PRECIO_AL_PUBLICO = Number.isNaN(prod.PRECIO_AL_PUBLICO) ? 0 : prod.PRECIO_AL_PUBLICO\r\n const VALOR_DE_COMPRA = Number.isNaN(prod.VALOR_DE_COMPRA) ? 0 : prod.VALOR_DE_COMPRA\r\n const validationErrors = validateProductDataExcel(prod, index)\r\n\r\n const code = RandomCode(9)\r\n return {\r\n ...prod,\r\n CANTIDAD: Number.isNaN(prod.CANTIDAD) ? 1 : prod.CANTIDAD,\r\n ORIGINAL_CANTIDAD: Number.isNaN(prod.CANTIDAD) ? 1 : prod.CANTIDAD,\r\n free: false,\r\n product: prod?.DESCRIPCION,\r\n pCode: code,\r\n editing: false,\r\n PRECIO_AL_PUBLICO,\r\n ProImage: '/images/placeholder-image.webp',\r\n VALOR_DE_COMPRA,\r\n manageStock: true,\r\n errors: validationErrors.length > 0 ? validationErrors : null\r\n }\r\n })\r\n\r\n // Notificación de errores\r\n newProducts.forEach(product => {\r\n if (product.errors) {\r\n // Enviar una notificación por cada error encontrado\r\n product.errors.forEach(error => {\r\n sendNotification({\r\n description: error,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n })\r\n }\r\n })\r\n\r\n // Validar el número total de productos antes de actualizar el estado\r\n setData(prevData => {\r\n const currentLength = prevData.length\r\n const totalProducts = currentLength + newProducts.length\r\n\r\n if (totalProducts > 100) {\r\n sendNotification({\r\n description: 'Cannot add more products. You have reached the 100-product limit.',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n\r\n // Calcular la cantidad de productos que se pueden agregar sin exceder el límite\r\n const remainingSlots = 100 - currentLength\r\n const productsToAdd = newProducts.slice(0, remainingSlots)\r\n return [...prevData, ...productsToAdd]\r\n } \r\n // Agregar todos los nuevos productos si no se excede el límite\r\n return [...prevData, ...newProducts]\r\n \r\n })\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n sendNotification({\r\n description: error.message,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n return\r\n }\r\n sendNotification({\r\n description: 'Un error ha ocurrido mientras se cargaba el archivo de productos.',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n } finally {\r\n setIsLoading(false)\r\n }\r\n }\r\n\r\n const handleSetActive = (index) => {\r\n if (typeof index !== 'number' || index < 0 || index >= Object.keys(STEPS).length) {\r\n sendNotification({\r\n description: 'Invalid step index',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n return\r\n }\r\n if (active === STEPS.UPLOAD_FILE) {\r\n setActive(data.length ? STEPS.UPLOAD_PRODUCTS : 0)\r\n }\r\n }\r\n\r\n const updateProductQuantity = (index: number, quantityChange: number) => {\r\n // Validar el índice\r\n if (index < 0 || index >= data.length) {\r\n console.warn('Invalid product index:', index)\r\n return\r\n }\r\n\r\n const newData = [...data]\r\n const newQuantity = newData[index].CANTIDAD + quantityChange\r\n\r\n // Actualizar la cantidad solo si es mayor o igual a 0\r\n if (newQuantity < 0) {\r\n console.warn('Quantity cannot be negative, no update performed.')\r\n return // No permitir cantidades negativas\r\n }\r\n\r\n // Actualizar la cantidad\r\n newData[index].CANTIDAD = newQuantity\r\n newData[index].ORIGINAL_CANTIDAD = newQuantity\r\n // Eliminar el producto si la nueva cantidad es 0\r\n if (newData[index].CANTIDAD === 0) {\r\n newData.splice(index, 1)\r\n\r\n // Verificar si no quedan más productos\r\n if (newData.length === 0) {\r\n setActive(STEPS.UPLOAD_FILE) // Restablecer el estado activo a 0 si no hay productos\r\n }\r\n }\r\n\r\n setData(newData)\r\n }\r\n /**\r\n * Toggle the 'free' status of a specific product in the data array.\r\n * Performs validation to ensure the product index is valid.\r\n *\r\n * @param {number} productIndex - The index of the product to update.\r\n */\r\n const handleCheckFree = (productIndex: number) => {\r\n setData((prevData) => {\r\n // Validar que el índice es un número válido\r\n if (typeof productIndex !== 'number' || productIndex < 0 || productIndex >= prevData.length) {\r\n console.warn('Invalid product index:', productIndex)\r\n return prevData // Retorna el estado anterior si el índice es inválido\r\n }\r\n\r\n // Validar que el producto existe y que tiene la propiedad 'free'\r\n const product = prevData[productIndex]\r\n if (!product || typeof product.free === 'undefined') {\r\n console.warn('Product or \"free\" property not found for index:', productIndex)\r\n return prevData // Retorna el estado anterior si no se encuentra el producto\r\n }\r\n\r\n // Evitar cambios innecesarios si el estado de 'free' no cambia\r\n const updatedFreeStatus = !product.free\r\n if (product.free === updatedFreeStatus) {\r\n console.info('Product \"free\" status is already:', updatedFreeStatus)\r\n return prevData // No actualiza si el estado es el mismo\r\n }\r\n\r\n // Crear una nueva copia de los datos actualizando solo el producto específico\r\n return prevData.map((product, index) =>\r\n {return index === productIndex\r\n ? {\r\n ...product,\r\n free: updatedFreeStatus,\r\n PRECIO_AL_PUBLICO: updatedFreeStatus ? 0 : product.oldPrice,\r\n oldPrice: product.PRECIO_AL_PUBLICO\r\n }\r\n : product}\r\n )\r\n })\r\n }\r\n const handleCleanAllProducts = () => {\r\n setData([])\r\n setActive(STEPS.UPLOAD_FILE)\r\n }\r\n /**\r\n * Toggle the 'editing' status of a specific product in the data array.\r\n * Validates the product index and only updates if necessary.\r\n *\r\n * @param {number} productIndex - The index of the product to update.\r\n */\r\n const handleToggleEditingStatus = (productIndex) => {\r\n setData((prevData) => {\r\n // Validar que el índice es un número válido\r\n if (typeof productIndex !== 'number' || productIndex < 0 || productIndex >= prevData.length) {\r\n sendNotification({\r\n description: `Invalid product index: ${productIndex}`,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n return prevData // Retorna el estado anterior si el índice es inválido\r\n }\r\n\r\n // Validar que el producto existe y tiene la propiedad 'editing'\r\n const product = prevData[productIndex]\r\n if (!product || typeof product.editing === 'undefined') {\r\n sendNotification({\r\n description: `Product or \"editing\" property not found for index: ${productIndex}`,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n return prevData // Retorna el estado anterior si no se encuentra el producto\r\n }\r\n\r\n // Evitar cambios innecesarios si el estado de 'editing' no cambia\r\n const updatedEditingStatus = !product.editing\r\n if (product.editing === updatedEditingStatus) {\r\n sendNotification({\r\n description: `Product \"editing\" status is already: ${updatedEditingStatus}`,\r\n title: 'Info',\r\n backgroundColor: 'info'\r\n })\r\n return prevData // No actualiza si el estado es el mismo\r\n }\r\n\r\n // Crear una nueva copia de los datos actualizando solo el producto específico\r\n return prevData.map((product, index) => {\r\n return index === productIndex\r\n ? {\r\n ...product,\r\n editing: updatedEditingStatus\r\n }\r\n : product\r\n }\r\n )\r\n })\r\n }\r\n\r\n /**\r\n * Confirm and update the quantity of a product in the data array.\r\n * Only updates when the button is clicked.\r\n *\r\n * @param {number} productIndex - The index of the product to update.\r\n */\r\n const handleSuccessUpdateQuantity = (productIndex) => {\r\n const product = data[productIndex]\r\n setData((prevData) => {\r\n // Validar que `CANTIDAD` sea un número entero\r\n const product = prevData[productIndex]\r\n if (!Number.isInteger(product?.CANTIDAD)) {\r\n sendNotification({\r\n description: 'La cantidad debe ser un valor entero.',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n return prevData // Retorna el estado anterior si `CANTIDAD` no es entero\r\n }\r\n\r\n // Crear una copia actualizada de prevData donde se actualiza `CANTIDAD` si es necesario\r\n const updatedData = prevData.map((product, index) =>\r\n {return index === productIndex\r\n ? { ...product, editing: false, ORIGINAL_CANTIDAD: product.CANTIDAD } // Actualización o cambio de estado\r\n : product}\r\n )\r\n\r\n // Filtrar productos con CANTIDAD mayor a 0\r\n const filteredData = updatedData.filter(product => {return product.CANTIDAD > 0})\r\n\r\n // Cambiar el estado a `STEPS.UPLOAD_FILE` si no quedan productos\r\n if (filteredData.length === 0) {\r\n setActive(STEPS.UPLOAD_FILE)\r\n }\r\n\r\n return filteredData\r\n })\r\n if (product.CANTIDAD !== data[productIndex].ORIGINAL_CANTIDAD) {\r\n sendNotification({\r\n description: `Cantidad actualizada con éxito para el producto ${product.NOMBRE} #${productIndex}.`,\r\n title: 'Éxito',\r\n backgroundColor: 'success'\r\n })\r\n }\r\n }\r\n\r\n const handleChangeQuantity = (event, productIndex) => {\r\n const { value } = event.target\r\n setData((prevData) => {\r\n if (typeof productIndex !== 'number' || productIndex < 0 || productIndex >= prevData.length) {\r\n console.warn('Invalid product index:', productIndex)\r\n return prevData // Retorna el estado anterior si el índice es inválido\r\n }\r\n\r\n // Obtener la cantidad temporal para el producto\r\n const newQuantity = value\r\n if (isNaN(newQuantity) || newQuantity < 0) {\r\n console.warn('Quantity must be a valid non-negative number.')\r\n return prevData // Retorna sin cambios si la cantidad no es válida\r\n }\r\n\r\n // Actualiza el array `data` con la nueva cantidad\r\n return prevData.map((product, index) =>\r\n {return index === productIndex\r\n ? { ...product, CANTIDAD: newQuantity }\r\n : product}\r\n )\r\n })\r\n }\r\n /**\r\n * Restore the 'CANTIDAD' value to 'ORIGINAL_CANTIDAD' for a specific product.\r\n * Validates the product index and only updates if necessary.\r\n *\r\n * @param {number} productIndex - The index of the product to restore quantity for.\r\n */\r\n const handleCancelUpdateQuantity = (productIndex) => {\r\n setData((prevData) => {\r\n // Validar que el índice es un número válido\r\n if (typeof productIndex !== 'number' || productIndex < 0 || productIndex >= prevData.length) {\r\n console.warn('Invalid product index:', productIndex)\r\n return prevData // Retorna el estado anterior si el índice es inválido\r\n }\r\n\r\n // Validar que el producto existe y tiene las propiedades 'CANTIDAD' y 'ORIGINAL_CANTIDAD'\r\n const product = prevData[productIndex]\r\n if (!product || typeof product.ORIGINAL_CANTIDAD === 'undefined') {\r\n console.warn('Product or \"ORIGINAL_CANTIDAD\" property not found for index:', productIndex)\r\n return prevData // Retorna el estado anterior si no se encuentra el producto o propiedad\r\n }\r\n\r\n // Crear una nueva copia de los datos actualizando solo el producto específico\r\n return prevData.map((product, index) =>\r\n {return index === productIndex\r\n ? { ...product, CANTIDAD: product.ORIGINAL_CANTIDAD, editing: false }\r\n : product}\r\n )\r\n })\r\n }\r\n /**\r\n * Filters products with a quantity of 0 or less from the data array.\r\n * Sends a notification if any products are found with invalid quantities.\r\n */\r\n const filterInvalidQuantityProducts = () => {\r\n setData((prevData) => {\r\n // Filtrar productos con `CANTIDAD` mayor a 0\r\n const validProducts = prevData.filter(product => {return product.CANTIDAD > 0})\r\n\r\n // Notificar si hubo productos con cantidad no válida\r\n if (validProducts.length < prevData.length) {\r\n sendNotification({\r\n description: 'Some products had a quantity of 0 or less and were removed.',\r\n title: 'Invalid Products Removed',\r\n backgroundColor: 'warning'\r\n })\r\n }\r\n\r\n return validProducts\r\n })\r\n }\r\n\r\n /**\r\n * Compares uploaded products against response data to determine which were successfully uploaded.\r\n * @param {Array} data - Original array of products with their details.\r\n * @param {Array} response - Array of response objects from the `updateProducts` function.\r\n * @returns {Object} Object containing arrays of successfully and unsuccessfully uploaded products.\r\n */\r\n const getUploadResults = (data, response) => {\r\n const uploadedCodes = new Set(\r\n response\r\n .filter((product) => {return product.success})\r\n .map((product) => {return product.data.pCode})\r\n )\r\n\r\n const successfullyUploaded = data.filter((product) =>\r\n {return uploadedCodes.has(product.pCode)}\r\n )\r\n\r\n const failedUploads = data.filter(\r\n (product) => {return !uploadedCodes.has(product.pCode)}\r\n )\r\n\r\n return {\r\n successfullyUploaded,\r\n failedUploads\r\n }\r\n }\r\n return {\r\n active,\r\n STEPS,\r\n isLoading,\r\n data,\r\n overActive,\r\n handleOverActive,\r\n handleCheckFree,\r\n getUploadResults,\r\n onChangeFiles,\r\n handleChangeQuantity,\r\n handleCancelUpdateQuantity,\r\n handleToggleEditingStatus,\r\n filterInvalidQuantityProducts,\r\n handleSuccessUpdateQuantity,\r\n updateProductQuantity,\r\n handleCleanAllProducts,\r\n setActive: handleSetActive\r\n }\r\n}\r\n","export const validateProductDataExcel = (product, productIndex) => {\r\n const expectedHeaders = [\r\n {\r\n name: 'NOMBRE',\r\n required: true,\r\n types: ['string']\r\n },\r\n {\r\n name: 'PRECIO_AL_PUBLICO',\r\n required: false,\r\n types: ['number', 'string']\r\n },\r\n {\r\n name: 'VALOR_DE_COMPRA',\r\n required: false,\r\n types: ['number', 'string']\r\n },\r\n {\r\n name: 'CANTIDAD',\r\n required: true,\r\n types: ['number']\r\n },\r\n {\r\n name: 'DESCRIPCION',\r\n required: true,\r\n types: ['string']\r\n },\r\n {\r\n name: 'DESCUENTO',\r\n required: false,\r\n types: ['number', 'string']\r\n },\r\n {\r\n name: 'CATEGORIA',\r\n required: false,\r\n types: ['string']\r\n },\r\n {\r\n name: 'CODIGO_DE_BARRAS',\r\n required: false,\r\n types: ['string', 'number']\r\n },\r\n {\r\n name: 'IMPUESTO (%)',\r\n required: false,\r\n types: ['number', 'string']\r\n }\r\n ]\r\n\r\n const errors = []\r\n\r\n // Validar encabezados requeridos y tipos\r\n expectedHeaders.forEach(({ name, required, types }) => {\r\n const value = product[name]\r\n\r\n if (required && (value === undefined || value === null)) {\r\n errors.push(`Producto ${productIndex + 1}: Falta la columna requerida: ${name}.`)\r\n } else if (value !== undefined && value !== null) {\r\n const isValidType = types.some(type => {\r\n if (type === 'number') {\r\n return typeof value === 'number' && !isNaN(value)\r\n }\r\n return typeof value === type\r\n })\r\n\r\n if (!isValidType) {\r\n errors.push(`Producto ${productIndex + 1}: El campo ${name} debe ser de tipo ${types.join(' o ')}.`)\r\n }\r\n }\r\n })\r\n\r\n return errors // Retorna todos los errores encontrados\r\n}\r\n","import { useState } from 'react'\r\n\r\nconst formatCurrency = (\r\n prefix: string,\r\n amountValue: string,\r\n number: number,\r\n groupSeparator: string,\r\n decimalSeparator: string,\r\n allowDecimals: boolean = false,\r\n decimalsLimit: number = 0\r\n): string => {\r\n if (Number.isNaN(number)) {\r\n return prefix + '0'\r\n }\r\n\r\n const amountWithoutDecimals = Number.parseInt(number.toString())\r\n const decimalIdx = amountValue.indexOf(decimalSeparator)\r\n const notAllowedChars = new RegExp(String.raw`[^${decimalSeparator}\\d]`, 'g')\r\n const decimalsWithSeparator =\r\n decimalIdx >= 0\r\n ? amountValue\r\n .slice(decimalIdx, amountValue.length)\r\n .replace(notAllowedChars, '')\r\n .slice(0, decimalsLimit + 1)\r\n : ''\r\n\r\n return (\r\n prefix +\r\n amountWithoutDecimals\r\n .toString()\r\n .replaceAll(/\\B(?=(\\d{3}){1,5}(?!\\d))/g, groupSeparator) +\r\n decimalsWithSeparator\r\n )\r\n}\r\n\r\nconst processInputValue = (input: string, decimalSeparator: string): number => {\r\n const decimalRegex = new RegExp('[' + decimalSeparator + ']', 'g')\r\n const notAllowedChars = new RegExp(String.raw`[^${decimalSeparator}\\d¬]`, 'g')\r\n\r\n return Number.parseFloat(\r\n input\r\n .replaceAll(decimalRegex, '¬')\r\n .replaceAll(notAllowedChars, '')\r\n .replaceAll('¬', '.')\r\n )\r\n}\r\n/**\r\n * Truncate excess decimals from a number based on a limit.\r\n *\r\n * @param number The number to truncate.\r\n * @param decimalsLimit The maximum number of decimal places allowed.\r\n * @returns The number with truncated decimals.\r\n */\r\nconst truncateDecimals = (number: number, decimalsLimit: number): number => {\r\n if (Number.isNaN(number)) {\r\n return 0\r\n }\r\n\r\n const multiplier = Math.pow(10, decimalsLimit)\r\n return Math.floor(number * multiplier) / multiplier\r\n}\r\nexport interface UseAmountInputProps {\r\n onChange?: (value: number) => void\r\n prefix?: string\r\n groupSeparator?: string\r\n decimalSeparator?: string\r\n allowDecimals?: boolean\r\n decimalsLimit?: number\r\n defaultValue?: string\r\n}\r\n\r\nexport const useAmountInput = (props: UseAmountInputProps) => {\r\n const {\r\n onChange = () => {},\r\n prefix = '$',\r\n groupSeparator = '.',\r\n decimalSeparator = ',',\r\n allowDecimals = false,\r\n decimalsLimit = 0,\r\n defaultValue\r\n } = props\r\n\r\n const inputVal = defaultValue ?? ''\r\n const [inputValue, setInputValue] = useState(inputVal)\r\n\r\n const preProcess = (amount: string) => {\r\n const amountValue = amount.trim()\r\n const oldInputValue = inputValue\r\n\r\n if (oldInputValue !== amountValue) {\r\n const amountFloatValue = processInputValue(amount, decimalSeparator)\r\n let inputValue = ''\r\n // This allows for people to use `.` but still input decimals\r\n const isAboutToIntroduceDecimals =\r\n oldInputValue + decimalSeparator === amountValue ||\r\n oldInputValue + '.' === amountValue\r\n if (allowDecimals === true && isAboutToIntroduceDecimals) {\r\n inputValue = oldInputValue + decimalSeparator\r\n } else if (\r\n (allowDecimals === false || allowDecimals === undefined) &&\r\n isAboutToIntroduceDecimals\r\n ) {\r\n inputValue = oldInputValue\r\n } else {\r\n inputValue = formatCurrency(\r\n prefix,\r\n amountValue,\r\n amountFloatValue,\r\n groupSeparator,\r\n decimalSeparator,\r\n allowDecimals,\r\n decimalsLimit\r\n )\r\n }\r\n setInputValue(inputValue)\r\n\r\n const callbackValue = Number.isNaN(amountFloatValue) ? 0 : amountFloatValue\r\n if (typeof onChange === 'function') {\r\n onChange(truncateDecimals(callbackValue, decimalsLimit))\r\n }\r\n }\r\n }\r\n return {\r\n inputValue,\r\n preProcess\r\n }\r\n}\r\n","/**\n *\n */\nclass AleaGen {\r\n /**\n *\n * @param seed\n */\n constructor (seed) {\r\n if (seed == null) { seed = +(new Date()) }\r\n let n = 0xefc8249d\r\n // Apply the seeding algorithm from Baagoe.\r\n this.c = 1\r\n this.s0 = mash(' ')\r\n this.s1 = mash(' ')\r\n this.s2 = mash(' ')\r\n this.s0 -= mash(seed)\r\n if (this.s0 < 0) {\r\n this.s0 += 1\r\n }\r\n this.s1 -= mash(seed)\r\n if (this.s1 < 0) {\r\n this.s1 += 1\r\n }\r\n this.s2 -= mash(seed)\r\n if (this.s2 < 0) {\r\n this.s2 += 1\r\n }\r\n /**\n *\n * @param data\n */\n function mash (data) {\r\n data = String(data)\r\n for (let i = 0; i < data.length; i++) {\r\n n += data.charCodeAt(i)\r\n let h = 0.02519603282416938 * n\r\n n = h >>> 0\r\n h -= n\r\n h *= n\r\n n = h >>> 0\r\n h -= n\r\n n += h * 0x100000000 // 2^32\r\n }\r\n return (n >>> 0) * 2.3283064365386963e-10 // 2^-32\r\n }\r\n }\r\n\r\n /**\n *\n */\n next () {\r\n const { c, s0, s1, s2 } = this\r\n const t = 2091639 * s0 + c * 2.3283064365386963e-10 // 2^-32\r\n this.s0 = s1\r\n this.s1 = s2\r\n return this.s2 = t - (this.c = t | 0)\r\n }\r\n\r\n /**\n *\n * @param f\n * @param t\n */\n copy (f, t) {\r\n t.c = f.c\r\n t.s0 = f.s0\r\n t.s1 = f.s1\r\n t.s2 = f.s2\r\n return t\r\n }\r\n}\r\nexport default AleaGen\r\n","const MersenneTwister = function (seed) {\r\n if (seed === undefined) {\r\n // kept random number same size as time used previously to ensure no unexpected results downstream\r\n seed = Math.floor(Math.random() * Math.pow(10, 13))\r\n }\r\n /* Period parameters */\r\n this.N = 624\r\n this.M = 397\r\n this.MATRIX_A = 0x9908b0df /* constant vector a */\r\n this.UPPER_MASK = 0x80000000 /* most significant w-r bits */\r\n this.LOWER_MASK = 0x7fffffff /* least significant r bits */\r\n this.mt = new Array(this.N) /* the array for the state vector */\r\n this.mti = this.N + 1 /* mti==N + 1 means mt[N] is not initialized */\r\n this.init_genrand(seed)\r\n}\r\n/* initializes mt[N] with a seed */\r\nMersenneTwister.prototype.init_genrand = function (s) {\r\n this.mt[0] = s >>> 0\r\n for (this.mti = 1; this.mti < this.N; this.mti++) {\r\n s = this.mt[this.mti - 1] ^ (this.mt[this.mti - 1] >>> 30)\r\n this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) + this.mti\r\n /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\r\n /* In the previous versions, MSBs of the seed affect */\r\n /* only MSBs of the array mt[]. */\r\n /* 2002/01/09 modified by Makoto Matsumoto */\r\n this.mt[this.mti] >>>= 0\r\n /* for >32 bit machines */\r\n }\r\n}\r\n/* initialize by an array with array-length */\r\n/* init_key is the array for initializing keys */\r\n/* key_length is its length */\r\n/* slight change for C++, 2004/2/26 */\r\nMersenneTwister.prototype.init_by_array = function (init_key, key_length) {\r\n let i = 1; let j = 0; let k; let s\r\n this.init_genrand(19650218)\r\n k = (this.N > key_length ? this.N : key_length)\r\n for (; k; k--) {\r\n s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30)\r\n this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) + init_key[j] + j /* non linear */\r\n this.mt[i] >>>= 0 /* for WORDSIZE > 32 machines */\r\n i++\r\n j++\r\n if (i >= this.N) {\r\n this.mt[0] = this.mt[this.N - 1]\r\n i = 1\r\n }\r\n if (j >= key_length) {\r\n j = 0\r\n }\r\n }\r\n for (k = this.N - 1; k; k--) {\r\n s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30)\r\n this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) - i /* non linear */\r\n this.mt[i] >>>= 0 /* for WORDSIZE > 32 machines */\r\n i++\r\n if (i >= this.N) {\r\n this.mt[0] = this.mt[this.N - 1]\r\n i = 1\r\n }\r\n }\r\n this.mt[0] = 0x80000000 /* MSB is 1; assuring non-zero initial array */\r\n}\r\n/* generates a random number on [0,0xffffffff]-interval */\r\nMersenneTwister.prototype.genrand_int32 = function () {\r\n let y\r\n const mag01 = [0x0, this.MATRIX_A]\r\n /* mag01[x] = x * MATRIX_A for x=0,1 */\r\n if (this.mti >= this.N) { /* generate N words at one time */\r\n let kk\r\n if (this.mti === this.N + 1) { /* if init_genrand() has not been called, */\r\n this.init_genrand(5489) /* a default initial seed is used */\r\n }\r\n for (kk = 0; kk < this.N - this.M; kk++) {\r\n y = (this.mt[kk] & this.UPPER_MASK) | (this.mt[kk + 1] & this.LOWER_MASK)\r\n this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1]\r\n }\r\n for (; kk < this.N - 1; kk++) {\r\n y = (this.mt[kk] & this.UPPER_MASK) | (this.mt[kk + 1] & this.LOWER_MASK)\r\n this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1]\r\n }\r\n y = (this.mt[this.N - 1] & this.UPPER_MASK) | (this.mt[0] & this.LOWER_MASK)\r\n this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1]\r\n this.mti = 0\r\n }\r\n y = this.mt[this.mti++]\r\n /* Tempering */\r\n y ^= (y >>> 11)\r\n y ^= (y << 7) & 0x9d2c5680\r\n y ^= (y << 15) & 0xefc60000\r\n y ^= (y >>> 18)\r\n return y >>> 0\r\n}\r\n/* generates a random number on [0,0x7fffffff]-interval */\r\nMersenneTwister.prototype.genrand_int31 = function () {\r\n return (this.genrand_int32() >>> 1)\r\n}\r\n/* generates a random number on [0,1]-real-interval */\r\nMersenneTwister.prototype.genrand_real1 = function () {\r\n return this.genrand_int32() * (1.0 / 4294967295.0)\r\n /* divided by 2^32-1 */\r\n}\r\n/* generates a random number on [0,1)-real-interval */\r\nMersenneTwister.prototype.random = function () {\r\n return this.genrand_int32() * (1.0 / 4294967296.0)\r\n /* divided by 2^32 */\r\n}\r\n/* generates a random number on (0,1)-real-interval */\r\nMersenneTwister.prototype.genrand_real3 = function () {\r\n return (this.genrand_int32() + 0.5) * (1.0 / 4294967296.0)\r\n /* divided by 2^32 */\r\n}\r\n/* generates a random number on [0,1) with 53-bit resolution */\r\nMersenneTwister.prototype.genrand_res53 = function () {\r\n const a = this.genrand_int32() >>> 5; const b = this.genrand_int32() >>> 6\r\n return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0)\r\n}\r\nexport default MersenneTwister\r\n","import AleaGen from './alea'\r\nimport MersenneTwister from './mersenne_twister'\r\n\r\n/**\r\n *\r\n * @param opts\r\n */\r\nfunction minMax (opts: { random: number; min: number; max: number }): number {\r\n const { random, min, max } = opts\r\n return Math.floor(random * (max - min + 1) + min)\r\n}\r\n\r\nexport const randomNumber = (opts: { value: string; min: number; max: number }): number => {\r\n const { value, min, max } = opts\r\n\r\n const prepareSeed = new AleaGen(value)\r\n // @ts-ignore\r\n const seedOutput = prepareSeed.s1 * 10000000\r\n \r\n // @ts-ignore\r\n const mersenne = new MersenneTwister(seedOutput)\r\n\r\n return minMax({ random: mersenne.random(), min, max })\r\n}\r\n","export const BACKGROUND_COLORS = [\r\n '#F7F9FC',\r\n '#EEEDFD',\r\n '#FFEBEE',\r\n '#FDEFE2',\r\n '#E7F9F3',\r\n '#EDEEFD',\r\n '#ECFAFE',\r\n '#F2FFD1',\r\n '#FFF7E0',\r\n '#FDF1F7',\r\n '#EAEFE6',\r\n '#E0E6EB',\r\n '#E4E2F3',\r\n '#E6DFEC',\r\n '#E2F4E8',\r\n '#E6EBEF',\r\n '#EBE6EF',\r\n '#E8DEF6',\r\n '#D8E8F3',\r\n '#ECE1FE'\r\n]\r\n\r\nexport const TEXT_COLORS = [\r\n '#060A23',\r\n '#4409B9',\r\n '#BD0F2C',\r\n '#C56511',\r\n '#216E55',\r\n '#05128A',\r\n '#1F84A3',\r\n '#526E0C',\r\n '#935F10',\r\n '#973562',\r\n '#69785E',\r\n '#2D3A46',\r\n '#280F6D',\r\n '#37364F',\r\n '#363548',\r\n '#4D176E',\r\n '#AB133E',\r\n '#420790',\r\n '#222A54',\r\n '#192251'\r\n]\r\n","import { randomNumber } from './helpers'\r\nimport { BACKGROUND_COLORS, TEXT_COLORS } from './helpers/colors'\r\n\r\nexport const useColorByLetters = (params?: { value?: string }) => {\r\n const value = params?.value ?? '';\r\n const key = randomNumber({ value, min: 0, max: 19 })\r\n\r\n const getCustomColors = (text: string) => {\r\n const key = randomNumber({ text, min: 0, max: 19 })\r\n return {\r\n key,\r\n color: TEXT_COLORS[key],\r\n borderColor: TEXT_COLORS[key],\r\n bgColor: BACKGROUND_COLORS[key]\r\n }\r\n }\r\n return {\r\n key,\r\n color: TEXT_COLORS[key],\r\n borderColor: TEXT_COLORS[key],\r\n bgColor: BACKGROUND_COLORS[key],\r\n getCustomColors\r\n }\r\n}\r\n","import { useSubscription, gql } from '@apollo/client'\r\n\r\nconst NEW_MESSAGE_SUBSCRIPTION = gql`\r\n subscription NewMessage($idStore: String!) {\r\n newMessage(idStore: $idStore) {\r\n uuid\r\n content\r\n aDatCre\r\n from\r\n to\r\n }\r\n }\r\n`\r\n\r\nexport const newMessageSubscription = (idStore, onMessageReceived) => {\r\n const subscription = useSubscription(NEW_MESSAGE_SUBSCRIPTION, {\r\n variables: { idStore },\r\n onSubscriptionData: ({ client, subscriptionData }) => {\r\n if (subscriptionData.data && subscriptionData.data.newMessage) {\r\n // Llama a la función proporcionada cuando se recibe un nuevo mensaje\r\n onMessageReceived(subscriptionData.data.newMessage)\r\n }\r\n }\r\n })\r\n\r\n // Puedes ajustar lo que devuelve el hook según tus necesidades\r\n return subscription\r\n}\r\n","import { useState, useEffect } from 'react'\r\n\r\nexport const usePWAInstall = () => {\r\n const [deferredPrompt, setDeferredPrompt] = useState(null)\r\n const [isInstallable, setIsInstallable] = useState(false)\r\n\r\n useEffect(() => {\r\n const handleBeforeInstallPrompt = (e) => {\r\n e.preventDefault() // Evita que el navegador muestre el diálogo automáticamente\r\n setDeferredPrompt(e) // Almacena el evento para que puedas llamarlo más tarde\r\n setIsInstallable(true) // Marca que la PWA es instalable\r\n }\r\n\r\n window.addEventListener('beforeinstallprompt', handleBeforeInstallPrompt)\r\n\r\n return () => {\r\n window.removeEventListener('beforeinstallprompt', handleBeforeInstallPrompt)\r\n }\r\n }, [])\r\n\r\n const installPWA = () => {\r\n if (deferredPrompt) {\r\n deferredPrompt.prompt()\r\n\r\n deferredPrompt.userChoice.then((choiceResult) => {\r\n if (choiceResult.outcome === 'accepted') {\r\n console.log('User accepted the install prompt')\r\n } else {\r\n console.log('User dismissed the install prompt')\r\n }\r\n setDeferredPrompt(null) // Limpia el evento después de usarlo\r\n setIsInstallable(false) // Oculta el botón de instalación\r\n })\r\n }\r\n }\r\n\r\n return { isInstallable, installPWA }\r\n}\r\n","import Cookies from 'js-cookie'\r\n\r\nexport const useGetCookies = () => {\r\n const getCookies = (cookieNames) => {\r\n try {\r\n if (!Array.isArray(cookieNames)) {\r\n throw new Error('Input cookie names should be an array.')\r\n }\r\n\r\n const cookiesData = []\r\n\r\n for (const cookieName of cookieNames) {\r\n const cookieValue = Cookies.get(cookieName)\r\n if (cookieValue) {\r\n cookiesData.push({ name: cookieName, value: cookieValue })\r\n }\r\n }\r\n return cookiesData\r\n } catch (error) {\r\n console.error('Error al traer las cookies:', error)\r\n return []\r\n }\r\n }\r\n\r\n const getCookie = (cookieName) => {\r\n try {\r\n if (typeof cookieName !== 'string') {\r\n throw new Error('Input cookie name should be a string.')\r\n }\r\n\r\n const cookieValue = Cookies.get(cookieName)\r\n if (cookieValue) {\r\n return { name: cookieName, value: cookieValue }\r\n }\r\n return null\r\n } catch (error) {\r\n console.error('Error al traer la cookie:', error)\r\n return null\r\n }\r\n }\r\n\r\n return { getCookies, getCookie }\r\n}\r\n","import { saveAs } from 'file-saver'\r\nimport * as Excel from 'xlsx'\r\n\r\n/**\r\n * Class to generate Excel reports.\r\n */\r\nexport class GenerateReport {\r\n /**\r\n * Generates an Excel report from given data and type.\r\n * @param {Array<object>} data - The data to be included in the Excel report.\r\n * @param {number} type - The type of report to generate.\r\n * @throws Will throw an error if data is not an array or type is not a valid number.\r\n */\r\n GenExcelReport(data: object[], type: number): void {\r\n if (!Array.isArray(data)) {\r\n throw new TypeError('Data must be an array of objects.')\r\n }\r\n\r\n if (typeof type !== 'number') {\r\n throw new TypeError('Type must be a valid number.')\r\n }\r\n\r\n const ws = Excel.utils.json_to_sheet(data)\r\n\r\n // Apply bold font to the header row\r\n const ref = ws['!ref']\r\n if (!ref) {\r\n throw new TypeError('Worksheet reference is undefined.')\r\n }\r\n const range = Excel.utils.decode_range(ref)\r\n for (let C = range.s.c; C <= range.e.c; ++C) {\r\n const cell = ws[Excel.utils.encode_cell({ r: 0, c: C })]\r\n if (cell) {\r\n cell.s = {\r\n font: {\r\n bold: true\r\n }\r\n }\r\n }\r\n }\r\n\r\n const wb = Excel.utils.book_new()\r\n Excel.utils.book_append_sheet(wb, ws, 'Hoja1')\r\n const excelBuffer = Excel.write(wb, { bookType: 'xlsx', type: 'array' })\r\n const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })\r\n const fileName = this.GenExcelReportFileName(type)\r\n if (fileName) {\r\n saveAs(blob, String(fileName))\r\n } else {\r\n throw new TypeError('Invalid report type provided.')\r\n }\r\n }\r\n\r\n /**\r\n * Generates the file name for the Excel report based on the type.\r\n * @param {number} type - The type of report.\r\n * @returns {string | null} The file name for the report, or null if type is invalid.\r\n */\r\n GenExcelReportFileName(type: number): string | null {\r\n const fileNames: { [key: number]: string } = {\r\n 1: `report_${new Date().toISOString().replace(':', '-').replace('.', '-')}.xlsx`\r\n }\r\n\r\n return fileNames[type] ?? null\r\n }\r\n}\r\n","/**\r\n * Verifica si un token JWT ha expirado.\r\n * @param {string} token El token JWT a verificar.\r\n * @param {string} [expField='exp'] El nombre del campo que contiene la fecha de expiración en el token.\r\n * @returns {boolean} True si el token ha expirado, false de lo contrario.\r\n */\r\nexport const isTokenExpired = (token, expField = 'exp') => {\r\n try {\r\n const [, payloadBase64] = token.split('.')\r\n const decodedJson = Buffer.from(payloadBase64, 'base64').toString()\r\n const decoded = JSON.parse(decodedJson)\r\n const exp = decoded[expField] * 1000 // Convertir segundos a milisegundos\r\n return Date.now() >= exp\r\n } catch (error) {\r\n return true\r\n }\r\n}\r\n","import { useMutation, gql } from '@apollo/client'\r\n\r\nconst CREATE_DELIVERY_TIME = gql`\r\n mutation CreateDeliveryTime($minutes: Int!) {\r\n createDeliveryTime(minutes: $minutes) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\n\r\nexport const useCreateDeliveryTime = ({\r\n sendNotification = ({ description, title, backgroundColor }) => {\r\n return { description, title, backgroundColor }\r\n }\r\n}) => {\r\n const [createDeliveryTimeMutation, { loading, error }] =\r\n useMutation(CREATE_DELIVERY_TIME)\r\n\r\n const createDeliveryTime = async (minutes) => {\r\n try {\r\n if (!minutes) {\r\n sendNotification({\r\n backgroundColor: 'error',\r\n title: 'Error',\r\n description: 'The delivery time is required.'\r\n })\r\n return\r\n }\r\n const { data } = await createDeliveryTimeMutation({\r\n variables: { minutes: parseInt(minutes) }\r\n })\r\n if (data?.createDeliveryTime?.success) {\r\n sendNotification({\r\n title: 'Delivery Time Created',\r\n description: data.createDeliveryTime.message,\r\n backgroundColor: 'success'\r\n })\r\n }\r\n return data.createDeliveryTime\r\n } catch (error) {\r\n sendNotification({\r\n backgroundColor: 'error',\r\n title: 'Error',\r\n description: 'An error occurred while creating the delivery time.'\r\n })\r\n }\r\n }\r\n\r\n return { createDeliveryTime, loading, error }\r\n}\r\n","/**\r\n * Function that adds 10 to a given number representing minutes.\r\n * @param {number} num - The number of minutes (between 1 and 60).\r\n * @returns {string} A string indicating the original number and the result of adding 10 minutes.\r\n */\r\nexport const addTenMinutes = (num: number) => {\r\n if (num > 60) return ''\r\n if (num >= 50) {\r\n const newNum = num - 10\r\n return `${newNum} - ${60} min`\r\n } \r\n return `${num} - ${num + 10} min`\r\n \r\n}\r\n","import { useEffect, useReducer } from 'react'\r\n\r\nimport { Cookies } from '../../cookies'\r\nimport { getCurrentDomain } from '../../utils'\r\n\r\ntype Product = {\r\n pId: string;\r\n ProQuantity: number;\r\n [key: string]: any;\r\n};\r\n\r\ntype State = {\r\n PRODUCT: Product[];\r\n counter: number;\r\n};\r\n\r\ntype Action =\r\n | { type: 'REMOVE_PRODUCT_TO_CART'; payload: Product }\r\n | { type: 'ADD_PRODUCT_TO_CART'; payload: Product }\r\n | { type: 'UPDATE_PRODUCT_IN_CART'; payload: Product }\r\n | { type: string; payload?: any };\r\n\r\nexport const useUpdateCartCookie = () => {\r\n const keyToSaveData = process.env.NEXT_LOCAL_SALES_STORE\r\n const domain = getCurrentDomain()\r\n\r\n const PRODUCT = (state: State, action: Action): State => {\r\n switch (action.type) {\r\n case 'REMOVE_PRODUCT_TO_CART':\r\n return {\r\n ...state,\r\n PRODUCT: state?.PRODUCT?.filter((t: Product) => {\r\n return t.pId !== action?.payload.pId\r\n }),\r\n counter: state.counter - action.payload.ProQuantity\r\n }\r\n case 'ADD_PRODUCT_TO_CART':\r\n // Add code for 'ADD_PRODUCT_TO_CART' case\r\n return state\r\n case 'UPDATE_PRODUCT_IN_CART':\r\n // Add code for 'UPDATE_PRODUCT_IN_CART' case\r\n return state\r\n default:\r\n return state\r\n }\r\n }\r\n const [data, dispatch] = useReducer(PRODUCT, { PRODUCT: [], counter: 0 })\r\n\r\n const handleRemoveProductToCookieCart = (product: Product) => {\r\n dispatch({ type: 'REMOVE_PRODUCT_TO_CART', payload: product })\r\n }\r\n useEffect(() => {\r\n // @ts-ignore\r\n Cookies.set(keyToSaveData, JSON.stringify(data), { domain, path: '/' })\r\n }, [data, domain])\r\n\r\n return {\r\n handleRemoveProductToCookieCart\r\n }\r\n}\r\n","import { useEffect, useState } from 'react'\r\n\r\nimport { days as NameDays } from '../../utils'\r\nimport { convertToMilitaryTime } from '../convertToMilitaryTime'\r\nimport { useSchedules, useCreateSchedules } from '../useSchedule'\r\nimport { GET_ONE_SCHEDULE_STORE, GET_SCHEDULE_STORE } from '../useSchedule/queries'\r\n\r\nimport {\r\n dateEnum,\r\n initialDays,\r\n timeSuggestions\r\n} from './helpers'\r\nexport * from './helpers/index'\r\n\r\nexport const useSetupSchedule = ({\r\n idStore = null, sendNotification = (args) => {\r\n return args\r\n }\r\n} = {}) => {\r\n const [days, setDays] = useState(initialDays === null ? [] : initialDays)\r\n const [alertModal, setAlertModal] = useState(false)\r\n const [selectedDay, setSelectedDay] = useState({})\r\n const [setStoreSchedule] = useCreateSchedules()\r\n\r\n const onCompleted = (data: any) => {\r\n if (Array.isArray(data) && data?.length > 0) {\r\n // Mapeamos los datos recibidos y los convertimos en un objeto con la estructura deseada\r\n const newSchedules = data.map((day) => {return {\r\n day: day.schDay,\r\n name: NameDays[day.schDay],\r\n selected: day.schHoEnd !== '00:00' || day.schHoSta !== '00:00',\r\n ...day\r\n }})\r\n\r\n // Actualizamos el estado days\r\n setDays(prevDays => {\r\n // Creamos un nuevo array combinando los elementos existentes en days con los nuevos datos\r\n const updatedDays = prevDays?.map(existingDay => {\r\n // Buscamos si hay un elemento con el mismo día en los nuevos datos\r\n const newData = newSchedules.find(newDay => {return newDay.day === existingDay.day})\r\n // Si encontramos el día en los nuevos datos, lo fusionamos con el día existente\r\n if (newData) {\r\n return { ...existingDay, ...newData }\r\n }\r\n // Si no encontramos el día en los nuevos datos, simplemente devolvemos el día existente\r\n return existingDay\r\n })\r\n\r\n // Ahora, buscamos los nuevos días que no están en days y los agregamos al array\r\n newSchedules.forEach(newDay => {\r\n if (!updatedDays.some(existingDay => {return existingDay.day === newDay.day})) {\r\n updatedDays.push(newDay)\r\n }\r\n })\r\n\r\n // Devolvemos el nuevo array actualizado\r\n return updatedDays\r\n })\r\n }\r\n }\r\n\r\n const [data, { loading: lsc }] = useSchedules({ schDay: 1 })\r\n\r\n const toggleCheck = (index) => {\r\n const updatedDays = [...days]\r\n updatedDays[index].checked = !updatedDays[index].checked\r\n setDays(updatedDays)\r\n }\r\n\r\n const duplicateDay = (index) => {\r\n const selectedDay = days[index]\r\n // Lógica para desplegar el modal y seleccionar los días donde se replicará\r\n const selectedDaysToDuplicate = days.filter((day) => {return day.checked})\r\n const updatedDays = [...days]\r\n selectedDaysToDuplicate.forEach((dayToDuplicate) => {\r\n const duplicatedDay = { ...selectedDay, checked: false }\r\n updatedDays.push(duplicatedDay)\r\n })\r\n setDays(updatedDays)\r\n }\r\n\r\n const handleSelectedDay = (day) => {\r\n const isSaved = days.find((data) => {\r\n return data.day === day\r\n })\r\n if (isSaved?.schId && isSaved?.selected) {\r\n setSelectedDay(isSaved)\r\n return setAlertModal(true)\r\n }\r\n const updatedDays = days?.map((d) => {\r\n if (d.day === day) {\r\n return { ...d, selected: !d.selected }\r\n } \r\n return { ...d }\r\n \r\n })\r\n setDays(updatedDays)\r\n }\r\n const selectedDays = days?.filter((day) => {return Boolean(day.selected)}).map((day) => {\r\n return day.day\r\n })\r\n /**\r\n *\r\n * @param hora1\r\n * @param hora2\r\n */\r\n function sumHours (hora1, hora2) {\r\n const [hora1Horas, hora1Minutos] = hora1.split(':').map(Number)\r\n const [hora2Horas, hora2Minutos] = hora2.split(':').map(Number)\r\n\r\n let sumaHour = hora1Horas + hora2Horas\r\n let sumMinutes = hora1Minutos + hora2Minutos\r\n\r\n if (sumMinutes >= 60) {\r\n sumMinutes -= 60\r\n sumaHour++\r\n }\r\n\r\n if (sumaHour >= 24) {\r\n sumaHour -= 24\r\n }\r\n\r\n const horaSumada = `${String(sumaHour).padStart(2, '0')}:${String(sumMinutes).padStart(2, '0')}`\r\n return horaSumada\r\n }\r\n /**\r\n *\r\n * @param hora1\r\n * @param hora2\r\n */\r\n function isLessThanOneHour (hora1, hora2) {\r\n const suma = sumHours(hora1, hora2)\r\n const [sumaHour, sumMinutes] = suma.split(':').map(Number)\r\n const totalMinutos = (sumaHour * 60) + sumMinutes\r\n\r\n if (totalMinutos < 60) {\r\n return true // La suma de las horas es menor a una hora\r\n }\r\n return false // La suma de las horas es igual o mayor a una hora\r\n }\r\n const onChangeSaveHour = async ({ time, name, day }) => {\r\n setDays(prevDays => {\r\n const updatedDays = prevDays?.map((d) => {\r\n if (d.day === day) {\r\n return { ...d, [name]: time, loading: Boolean(name === dateEnum.schHoEnd) }\r\n } \r\n return { ...d }\r\n \r\n })\r\n\r\n if (name === dateEnum.schHoEnd) {\r\n const findHour = updatedDays.find((d) => {\r\n return d.day === day\r\n })\r\n const schHoSta = findHour?.schHoSta\r\n const schHoEnd = findHour?.schHoEnd\r\n const startHour = convertToMilitaryTime(schHoSta)\r\n const endHour = convertToMilitaryTime(schHoEnd)\r\n if (isLessThanOneHour(startHour, endHour)) {\r\n \r\n sendNotification({\r\n description: 'Error, el horario debe ser mayor a una hora',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n // Comparar solo las horas y minutos\r\n if (startHour === endHour) {\r\n \r\n sendNotification({\r\n description: 'Error, la hora de salida no debe ser igual a la hora final',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n if (startHour > endHour) {\r\n \r\n sendNotification({\r\n description: 'Error, la hora de salida debe ser mayor que la de entrada',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n\r\n if (startHour !== endHour && startHour < endHour && !isLessThanOneHour(startHour, endHour)) {\r\n setStoreSchedule({\r\n variables: {\r\n input: {\r\n schHoSta: schHoSta ?? '00:00',\r\n schHoEnd: schHoEnd ?? '00:00',\r\n schState: 1,\r\n schDay: day\r\n }\r\n },\r\n update (cache) {\r\n cache.modify({\r\n fields: {\r\n getStoreSchedules (dataOld = []) {\r\n return cache.writeQuery({ query: GET_SCHEDULE_STORE, data: dataOld })\r\n },\r\n getOneStoreSchedules (dataOld = []) {\r\n return cache.writeQuery({ query: GET_ONE_SCHEDULE_STORE, data: dataOld })\r\n }\r\n }\r\n })\r\n }\r\n })\r\n }\r\n const newUpdatedDays = updatedDays.map((d) => {\r\n if (d.day === day) {\r\n return { ...d, loading: false }\r\n } \r\n return { ...d }\r\n \r\n })\r\n // Devolver el nuevo estado actualizado\r\n return newUpdatedDays\r\n }\r\n // Devolver el nuevo estado\r\n return updatedDays\r\n })\r\n }\r\n\r\n const handleDeleteSchedule = async (day) => {\r\n await setStoreSchedule({\r\n variables: {\r\n input: {\r\n schHoSta: '00:00',\r\n schHoEnd: '00:00',\r\n schState: 1,\r\n schDay: day,\r\n idStore\r\n }\r\n },\r\n update (cache) {\r\n cache.modify({\r\n fields: {\r\n getStoreSchedules (dataOld = []) {\r\n return cache.writeQuery({ query: GET_SCHEDULE_STORE, data: dataOld })\r\n },\r\n getOneStoreSchedules (dataOld = []) {\r\n return cache.writeQuery({ query: GET_ONE_SCHEDULE_STORE, data: dataOld })\r\n }\r\n }\r\n })\r\n }\r\n })\r\n setDays(prevDays => {\r\n if (!prevDays) return []\r\n const updatedDays = prevDays?.map((d) => {\r\n if (d.day === day) {\r\n return {\r\n ...d,\r\n [dateEnum.schHoEnd]: dateEnum?.schHoEnd,\r\n [dateEnum.schHoSta]: dateEnum?.schHoSta,\r\n selected: false\r\n }\r\n } \r\n return { ...d }\r\n \r\n })\r\n return updatedDays\r\n })\r\n setAlertModal(false)\r\n }\r\n useEffect(() => {\r\n onCompleted(data)\r\n }, [data])\r\n\r\n return {\r\n duplicateDay,\r\n toggleCheck,\r\n handleSelectedDay,\r\n onChangeSaveHour,\r\n handleDeleteSchedule,\r\n setAlertModal,\r\n days,\r\n selectedDays,\r\n selectedDay,\r\n alertModal,\r\n loading: lsc,\r\n times: timeSuggestions\r\n }\r\n}\r\n","import { useMutation, useQuery } from '@apollo/client'\n\r\nimport { GET_ONE_SCHEDULE_STORE, GET_SCHEDULE_STORE } from '../useProductsFood/queriesStore'\r\nimport { CREATE_STORE_CALENDAR } from '../useSchedule/queries'\r\nexport * from './schedule'\r\n\r\nexport const useSchedule = ({ day = null, idStore = '' }) => {\r\n const {\r\n data,\r\n loading,\r\n error\r\n } = useQuery(GET_ONE_SCHEDULE_STORE, { variables: { schDay: day, idStore } })\r\n\r\n return [data?.getOneStoreSchedules, { loading, error }]\r\n}\r\n\r\nexport const useSchedules = ({ schDay = 1, idStore = '' }) => {\r\n const {\r\n data,\r\n loading,\r\n error\r\n } = useQuery(GET_SCHEDULE_STORE, { variables: { schDay, idStore } })\r\n\r\n return [data?.getStoreSchedules, { loading, error }]\r\n}\r\n\r\nexport const useCreateSchedules = () => {\r\n const [setStoreSchedule, { loading, error }] = useMutation(CREATE_STORE_CALENDAR, {\r\n onError: (e) => {\r\n console.error(e)\r\n }\r\n })\r\n\r\n return [setStoreSchedule, { loading, error }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CREATE_STORE_CALENDAR = gql`\r\nmutation setStoreSchedule($input: ITstoreSchedule!){\r\n setStoreSchedule(input: $input){\r\n message\r\n success\r\n }\r\n}\r\n`\r\nexport const GET_SCHEDULE_STORE = gql`\r\n query getStoreSchedules($schDay: Int, $idStore: ID) {\r\n getStoreSchedules(schDay: $schDay, idStore: $idStore) {\r\n schId\r\n idStore\r\n schDay\r\n schHoSta\r\n schHoEnd\r\n schState\r\n }\r\n }\r\n`\r\n\r\nexport const GET_ONE_SCHEDULE_STORE = gql`\r\n query getOneStoreSchedules($schDay: Int, $idStore: ID) {\r\n getOneStoreSchedules(schDay: $schDay, idStore: $idStore) {\r\n schId\r\n schDay\r\n schHoSta\r\n schHoEnd\r\n schState\r\n }\r\n }\r\n`\r\n\r\nexport const SET_STATUS_ALL_SCHEDULE_STORE = gql`\r\nmutation setScheduleOpenAll($scheduleOpenAll: Boolean!) {\r\n setScheduleOpenAll(scheduleOpenAll: $scheduleOpenAll) {\r\n success\r\n message\r\n }\r\n}\r\n`\r\n","import { useQuery, useMutation } from '@apollo/client'\n\r\nimport {\r\n GET_ONE_SCHEDULE_STORE,\r\n GET_SCHEDULE_STORE,\r\n CREATE_STORE_CALENDAR,\r\n SET_STATUS_ALL_SCHEDULE_STORE\r\n} from './queries'\r\n\r\nexport const useSchedule = ({ day = null, idStore = '' }) => {\r\n const {\r\n data,\r\n loading,\r\n error\r\n } = useQuery(GET_ONE_SCHEDULE_STORE, { variables: { schDay: day, idStore } })\r\n\r\n return [data?.getOneStoreSchedules, { loading, error }]\r\n}\r\n\r\nexport const useSetScheduleOpenAll = () => {\r\n const [setStoreSchedule, { loading, error }] = useMutation(SET_STATUS_ALL_SCHEDULE_STORE, {\r\n onError: (e) => {\r\n console.error(e)\r\n }\r\n })\r\n\r\n const handleSetStoreSchedule = (scheduleOpenAll) => {\r\n setStoreSchedule({\r\n variables: {\r\n scheduleOpenAll\r\n },\r\n update: (cache, { data }) => {\r\n const success = data?.setScheduleOpenAll?.success\r\n if (success) {\r\n cache.modify({\r\n fields: {\r\n getStore (_, { readField }) {\r\n const store = readField('getStore')\r\n const updatedCart = {\r\n ...store,\r\n scheduleOpenAll\r\n }\r\n return updatedCart\r\n }\r\n }\r\n })\r\n }\r\n }\r\n })\r\n }\r\n\r\n return [handleSetStoreSchedule, { loading, error }]\r\n}\r\n\r\nexport const useSchedules = ({ schDay = 1, idStore = '', onCompleted = (data) => { return data } }) => {\r\n const {\r\n data,\r\n loading,\r\n error\r\n } = useQuery(GET_SCHEDULE_STORE, {\r\n variables: { schDay, idStore },\r\n onCompleted: (data) => {\r\n onCompleted(data)\r\n }\r\n }\r\n )\r\n\r\n return [data?.getStoreSchedules, { loading, error }]\r\n}\r\n\r\nexport const useCreateSchedules = () => {\r\n const [setStoreSchedule, { loading, error }] = useMutation(CREATE_STORE_CALENDAR, {\r\n onError: (e) => {\r\n console.error(e)\r\n }\r\n })\r\n\r\n return [setStoreSchedule, { loading, error }]\r\n}\r\n","export const dateEnum = {\r\n schHoEnd: 'schHoEnd',\r\n schHoSta: 'schHoSta'\r\n\r\n}\r\nexport const initialDays = [\r\n {\r\n name: 'Lunes',\r\n day: 1,\r\n checked: false,\r\n schHoSta: '00:00',\r\n schHoEnd: '00:00',\r\n selected: false,\r\n loading: false\r\n },\r\n {\r\n name: 'Martes',\r\n day: 2,\r\n checked: false,\r\n schHoSta: '00:00',\r\n schHoEnd: '00:00',\r\n selected: false,\r\n loading: false\r\n },\r\n {\r\n name: 'Miércoles',\r\n day: 3,\r\n checked: false,\r\n schHoSta: '00:00',\r\n schHoEnd: '00:00',\r\n selected: false,\r\n loading: false\r\n },\r\n {\r\n name: 'Jueves',\r\n day: 4,\r\n checked: false,\r\n schHoSta: '00:00',\r\n schHoEnd: '00:00',\r\n selected: false,\r\n loading: false\r\n },\r\n {\r\n name: 'Viernes',\r\n day: 5,\r\n checked: false,\r\n schHoSta: '00:00',\r\n schHoEnd: '00:00',\r\n selected: false,\r\n loading: false\r\n },\r\n {\r\n name: 'Sábado',\r\n day: 6,\r\n checked: false,\r\n schHoSta: '00:00',\r\n schHoEnd: '00:00',\r\n selected: false,\r\n loading: false\r\n },\r\n {\r\n name: 'Domingo',\r\n day: 0,\r\n checked: false,\r\n schHoSta: '00:00',\r\n schHoEnd: '00:00',\r\n selected: false,\r\n loading: false\r\n }\r\n]\r\n\r\nexport const timeSuggestions = [\r\n '00:00', '00:15', '00:30', '00:45', '01:00', '01:15', '01:30', '01:45',\r\n '02:00', '02:15', '02:30', '02:45', '03:00', '03:15', '03:30', '03:45',\r\n '04:00', '04:15', '04:30', '04:45', '05:00', '05:15', '05:30', '05:45',\r\n '06:00', '06:15', '06:30', '06:45', '07:00', '07:15', '07:30', '07:45',\r\n '08:00', '08:15', '08:30', '08:45', '09:00', '09:15', '09:30', '09:45',\r\n '10:00', '10:15', '10:30', '10:45', '11:00', '11:15', '11:30', '11:45',\r\n '12:00', '12:15', '12:30', '12:45', '13:00', '13:15', '13:30', '13:45',\r\n '14:00', '14:15', '14:30', '14:45', '15:00', '15:15', '15:30', '15:45',\r\n '16:00', '16:15', '16:30', '16:45', '17:00', '17:15', '17:30', '17:45',\r\n '18:00', '18:15', '18:30', '18:45', '19:00', '19:15', '19:30', '19:45',\r\n '20:00', '20:15', '20:30', '20:45', '21:00', '21:15', '21:30', '21:45',\r\n '22:00', '22:15', '22:30', '22:45', '23:00', '23:15', '23:30', '23:45'\r\n]\r\n","import { useEffect, useRef, useState } from 'react'\r\n\r\n/**\n *\n * @param options\n * @param options.resetOnExit\n */\nexport function useMouse(\r\n options: { resetOnExit } = { resetOnExit: false }\r\n) {\r\n const [position, setPosition] = useState({ x: 0, y: 0 })\r\n\r\n const ref = useRef()\r\n\r\n const setMousePosition = (event) => {\r\n if (ref.current) {\r\n const rect = event.currentTarget.getBoundingClientRect()\r\n\r\n const x = Math.max(\r\n 0,\r\n Math.round(\r\n event.pageX - rect.left - (window.pageXOffset || window.scrollX)\r\n )\r\n )\r\n\r\n const y = Math.max(\r\n 0,\r\n Math.round(\r\n event.pageY - rect.top - (window.pageYOffset || window.scrollY)\r\n )\r\n )\r\n\r\n setPosition({ x, y })\r\n } else {\r\n setPosition({ x: event.clientX, y: event.clientY })\r\n }\r\n }\r\n\r\n const resetMousePosition = () => {return setPosition({ x: 0, y: 0 })}\r\n\r\n useEffect(() => {\r\n const element = ref?.current ? ref.current : document\r\n element.addEventListener('mousemove', setMousePosition)\r\n if (options.resetOnExit)\r\n {element.addEventListener('mouseleave', resetMousePosition)}\r\n\r\n return () => {\r\n element.removeEventListener('mousemove', setMousePosition)\r\n if (options.resetOnExit)\r\n {element.removeEventListener('mouseleave', resetMousePosition)}\r\n }\r\n }, [ref.current])\r\n\r\n return { ref, ...position }\r\n}\r\n","import { useEffect, useState } from 'react'\n\r\nimport { useFormatDate } from '../useFormatDate'\n\r\nimport {\r\n getDayFromOpeningKey,\r\n getCurrentDayAndTime,\r\n getOpeningKeyFromDay,\r\n getTimeString,\r\n sortOpeningsByDay,\r\n weekDays,\r\n timeToInt,\r\n days,\r\n getTimeObject\r\n} from './helpers'\r\n\r\nexport const useStatusOpenStore = ({ dataSchedules = [] } = {}) => {\r\n const [open, setOpen] = useState('')\r\n const [openNow, setOpenNow] = useState(false)\r\n const { handleHourPmAM } = useFormatDate({\r\n date: null\r\n })\r\n\r\n const handleMessageHour = (message, open) => {\r\n setOpen(message)\r\n setOpenNow(open)\r\n }\r\n\r\n /**\n *\n * @param dataSchedules\n * @param currentDayOfWeek\n */\n function getNextDaySchedule (dataSchedules, currentDayOfWeek) {\r\n const today = new Date()\r\n const tomorrow = new Date(today)\r\n tomorrow.setDate(today.getDate() + 1)\r\n const dayOfWeekTomorrow = tomorrow.getDay()\r\n\r\n const findNextDay = dataSchedules?.length\r\n ? dataSchedules?.some((schedule) => {return schedule?.schDay === dayOfWeekTomorrow})\r\n : false\r\n\r\n const findDataNextDay = dataSchedules?.length\r\n ? dataSchedules?.find((schedule) => {return schedule?.schDay === dayOfWeekTomorrow})\r\n : {}\r\n\r\n return { findNextDay, findDataNextDay, dayOfWeekTomorrow }\r\n }\r\n\r\n /**\n *\n * @param openings\n * @param currentTime\n * @param currentDayOfWeek\n */\n function getOpeningStatus (openings, currentTime, currentDayOfWeek) {\r\n const weekDayLookup = [\r\n 'Sunday',\r\n 'Monday',\r\n 'Tuesday',\r\n 'Wednesday',\r\n 'Thursday',\r\n 'Friday',\r\n 'Saturday'\r\n ]\r\n\r\n const ceroHours = '00:00 - 00:00'\r\n let dayOfWeek = currentDayOfWeek\r\n\r\n for (let i = 0; i < 7; i++) {\r\n const dayName = weekDayLookup[dayOfWeek % 7]\r\n const opening = openings && openings['opening' + dayName.substring(0, 3)]\r\n const timeSpans = opening?.split(';').map((item) => {return item.trim()})\r\n\r\n for (const span of timeSpans) {\r\n const hours = span.split('-').map((item) => {return item.trim()})\r\n const openTime = timeToInt(hours[0])\r\n const closeTime = timeToInt(hours[1])\r\n\r\n if (currentTime >= openTime && currentTime <= closeTime) {\r\n return handleMessageHour(\r\n 'Abierto Ahora - Cierra a las: ' + handleHourPmAM(hours[1]),\r\n true\r\n )\r\n }\r\n\r\n if (currentTime < openTime && dayOfWeek === currentDayOfWeek) {\r\n return handleMessageHour(\r\n 'Aun temprano - Abre hoy a las: ' + handleHourPmAM(hours[0]),\r\n false\r\n )\r\n }\r\n\r\n if (currentTime >= closeTime - 30 * 60000 && currentTime < closeTime && dayOfWeek === currentDayOfWeek) {\r\n return handleMessageHour(\r\n 'Pronto por cerrar - Cierra hoy a las: ' + handleHourPmAM(hours[1]),\r\n true\r\n )\r\n }\r\n\r\n const {\r\n findNextDay,\r\n findDataNextDay,\r\n dayOfWeekTomorrow\r\n } = getNextDaySchedule(\r\n dataSchedules,\r\n currentDayOfWeek\r\n )\r\n\r\n if (findNextDay && findDataNextDay?.schHoSta) {\r\n const nameOfDayTomorrow = weekDays[dayOfWeekTomorrow]\r\n return handleMessageHour(\r\n `Cerrado abre Mañana ${nameOfDayTomorrow} ${Boolean(findDataNextDay?.schHoSta) && 'a las'} ${\r\n handleHourPmAM(findDataNextDay?.schHoSta) ?? ''\r\n }`,\r\n false\r\n )\r\n }\r\n\r\n const nextDayName = weekDayLookup[(dayOfWeek + 1) % 7]\r\n const nextOpening = openings?.['opening' + nextDayName.substring(0, 3)]\r\n const nextHours = nextOpening?.split(';')?.map((item) => {return item?.trim()})\r\n\r\n if (nextHours[0] !== ceroHours) {\r\n return handleMessageHour(\r\n 'Cerrado - Abre el ' + days[nextDayName] + ' a las ' + nextHours[0],\r\n false\r\n )\r\n }\r\n }\r\n\r\n dayOfWeek++\r\n }\r\n\r\n return handleMessageHour('Cerrado', false)\r\n }\r\n\r\n /**\n *\n * @param openings\n */\n function getIsOpening (openings) {\r\n const { currentTime, currentDayOfWeek } = getCurrentDayAndTime()\r\n return getOpeningStatus(openings, currentTime, currentDayOfWeek)\r\n }\r\n\r\n useEffect(() => {\r\n (() => {\r\n // Crear el objeto openings a partir del existStoreSchedule\r\n const openings = {}\r\n const existStoreSchedule = dataSchedules || []\r\n existStoreSchedule?.forEach((schedule) => {\r\n const day = schedule.schDay\r\n const openingKey = getOpeningKeyFromDay(day)\r\n const schHoSta = getTimeString(schedule?.schHoSta)\r\n const schHoEnd = getTimeString(schedule?.schHoEnd)\r\n openings[openingKey] = `${schHoSta} - ${schHoEnd}`\r\n })\r\n\r\n for (let i = 0; i < 7; i++) {\r\n const openingKey = getOpeningKeyFromDay(i)\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (!openings.hasOwnProperty(openingKey)) {\r\n openings[openingKey] = '00:00 - 00:00' // Horario vacío para el día faltante\r\n }\r\n }\r\n\r\n // Ejemplo de uso con el objeto proporcionado\r\n const sortedOpenings = sortOpeningsByDay(openings)\r\n\r\n // Crear el array completo con objetos de tiempo\r\n \r\n const fullArray = Object.keys(sortedOpenings).map((key) => {\r\n const day = getDayFromOpeningKey(key)\r\n const [schHoSta, schHoEnd] = openings[key].split(' - ').map(timeStr => {return getTimeObject(timeStr)})\r\n return {\r\n __typename: 'StoreSchedule',\r\n schId: '',\r\n idStore: '',\r\n schDay: day,\r\n schHoSta: `${schHoSta?.hours?.toString().padStart(2, '0')}:${schHoSta?.minutes?.toString().padStart(2, '0')}`,\r\n schHoEnd: `${schHoEnd?.hours?.toString().padStart(2, '0')}:${schHoEnd?.minutes?.toString().padStart(2, '0')}`,\r\n schState: 1\r\n }\r\n })\r\n getIsOpening(sortedOpenings)\r\n })()\r\n }, [dataSchedules])\r\n\r\n return {\r\n open,\r\n openNow\r\n }\r\n}\r\n","interface UseFormatDateProps {\r\n date?: string | number | Date;\r\n local?: string;\r\n}\r\n\r\nexport const useFormatDate = ({\r\n date,\r\n local = 'ES-CO'\r\n}: UseFormatDateProps = {}) => {\r\n const dateToFormat = new Date(date ?? Date.now())\r\n const fullDate = dateToFormat.toLocaleDateString(local, { year: 'numeric', month: '2-digit', day: '2-digit' })\r\n const day = fullDate.split('/')[0]\r\n const month = fullDate.split('/')[1]\r\n const year = fullDate.split('/')[2]\r\n const yearMonthDay = dateToFormat.toLocaleDateString('ES-CO')\r\n const numberDay = dateToFormat.getDay()\r\n const shortDayName = dateToFormat.toLocaleDateString(local, { weekday: 'short' })\r\n const longDayName = dateToFormat.toLocaleDateString(local, { weekday: 'long' })\r\n const hourMinutes12 = dateToFormat.toLocaleTimeString('ES-CO', { hour: '2-digit', minute: '2-digit' })\r\n const hourMinutes24 = dateToFormat.toLocaleTimeString('ES-CO', { hour: '2-digit', minute: '2-digit', hour12: false })\r\n const handleHourPmAM = (hour: string) => {\r\n const hourPmAm = new Date(`1/1/1999 ${hour}`).toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })\r\n return hour ? hourPmAm : ''\r\n }\r\n /**\r\n * Formats a date into Colombian time zone and Spanish locale for POS display.\r\n * Example output: \"15 de mayo de 2025 a las 14:23\"\r\n *\r\n * @param {string | number | Date} dateInput - Date to format (ISO string, timestamp or Date object)\r\n * @returns {string} - Formatted date string in Colombian time\r\n */\r\n function formatDateInTimeZone (dateInput : string | number | Date): string {\r\n const timeZone = 'America/Bogota'\r\n const locale = 'es-CO'\r\n const options: Intl.DateTimeFormatOptions = {\r\n timeZone,\r\n year: 'numeric',\r\n month: 'long',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n hour12: false\r\n }\r\n\r\n const date = new Date(dateInput)\r\n const formatted = new Intl.DateTimeFormat(locale, options).format(date)\r\n\r\n // Cambiar coma por \"a las\" para mejor legibilidad\r\n return formatted.replace(',', ' a las')\r\n }\r\n /**\r\n * Formats a date into YYYY-MM-DD using a given IANA timezone.\r\n *\r\n * @param {string | number | Date} inputDate - The date to format.\r\n * @param {string} timeZone - IANA timezone string (default is \"America/Bogota\").\r\n * @returns {string} Formatted date string in YYYY-MM-DD.\r\n * @throws {Error} If the input date is invalid.\r\n */\r\n const formatToLocalDateYMD = (inputDate: string | number | Date, timeZone = 'America/Bogota') => {\r\n const date = new Date(inputDate)\r\n\r\n if (isNaN(date.getTime())) {\r\n throw new Error('Invalid date input provided to formatToLocalDateYMD')\r\n }\r\n\r\n const localDateStr = date.toLocaleString('en-US', { timeZone })\r\n const localDate = new Date(localDateStr)\r\n\r\n const year = localDate.getFullYear()\r\n const month = String(localDate.getMonth() + 1).padStart(2, '0')\r\n const day = String(localDate.getDate()).padStart(2, '0')\r\n\r\n return `${year}-${month}-${day}`\r\n }\r\n\r\n return {\r\n day,\r\n fullDate,\r\n formatToLocalDateYMD,\r\n hourMinutes12,\r\n numberDay,\r\n yearMonthDay,\r\n hourMinutes24,\r\n longDayName,\r\n shortDayName,\r\n month,\r\n year,\r\n handleHourPmAM,\r\n formatDateInTimeZone\r\n }\r\n}\r\n","export const getDayFromOpeningKey = (key) => {\r\n const days = {\r\n openingSun: 0,\r\n openingMon: 1,\r\n openingTue: 2,\r\n openingWed: 3,\r\n openingThu: 4,\r\n openingFri: 5,\r\n openingSat: 6\r\n }\r\n return days[key] !== undefined ? days[key] : -1\r\n}\r\n\r\n// Función para convertir el objeto de tiempo en una cadena de tiempo\r\n/**\n *\n * @param timeStr\n */\nexport function getTimeString (timeStr) {\r\n return timeStr || '00:00' // Return '00:00' for empty time strings\r\n}\r\n\r\n/**\n *\n */\nexport function getCurrentDayAndTime () {\r\n try {\r\n const date = new Date()\r\n const currentTime = date.getHours() * 60 + date.getMinutes()\r\n const currentDayOfWeek = date.getDay()\r\n return { currentTime, currentDayOfWeek }\r\n } catch (error) {\r\n return {\r\n\r\n }\r\n }\r\n}\r\n\r\n/**\n *\n * @param timeStr\n */\nexport function getTimeObject (timeStr) {\r\n try {\r\n if (!timeStr || !/\\d{2}:\\d{2}/.test(timeStr)) {\r\n return { hours: 0, minutes: 0 } // Return default values for invalid input\r\n }\r\n const [hours, minutes] = timeStr.split(':').map(str => {return parseInt(str)})\r\n return { hours, minutes }\r\n } catch (e) {\r\n return { hours: 0, minutes: 0 } // Return default values on error\r\n }\r\n}\r\n\r\n/**\n *\n * @param openings\n */\nexport function sortOpeningsByDay (openings) {\r\n const days = [\r\n 'openingSun',\r\n 'openingMon',\r\n 'openingTue',\r\n 'openingWed',\r\n 'openingThu',\r\n 'openingFri',\r\n 'openingSat'\r\n ]\r\n const sortedOpenings = {}\r\n\r\n days.forEach((day) => {\r\n sortedOpenings[day] = openings[day] || '00:00 - 00:00' // Agregar horario vacío para los días faltantes\r\n })\r\n\r\n return sortedOpenings\r\n}\r\n\r\n// Función para obtener la clave de openings a partir del día de la semana\r\n/**\n *\n * @param day\n */\nexport function getOpeningKeyFromDay (day) {\r\n const days = {\r\n 0: 'openingSun',\r\n 1: 'openingMon',\r\n 2: 'openingTue',\r\n 3: 'openingWed',\r\n 4: 'openingThu',\r\n 5: 'openingFri',\r\n 6: 'openingSat'\r\n }\r\n return days[day]\r\n}\r\n\r\nexport const weekDays = [\r\n 'Domingo',\r\n 'Lunes',\r\n 'Martes',\r\n 'Miércoles',\r\n 'Jueves',\r\n 'Viernes',\r\n 'Sábado'\r\n]\r\n\r\n/**\n *\n * @param text\n */\nexport function timeToInt (text) {\r\n const hour = parseInt(text.substring(0, 2))\r\n const minute = parseInt(text.substring(3))\r\n return hour * 60 + minute\r\n}\r\n\r\nexport const days = {\r\n Monday: 'Lunes',\r\n Tuesday: 'Martes',\r\n Wednesday: 'Miércoles',\r\n Thursday: 'Jueves',\r\n Friday: 'Viernes',\r\n Saturday: 'Sábado',\r\n Sunday: 'Domingo'\r\n}\r\n","import { useMutation, gql } from '@apollo/client'\r\n\r\n// Define el mutation GraphQL\r\nconst PUSH_NOTIFICATION_ORDER = gql`\r\n mutation PushNotificationOrder($pCodeRef: String!, $idStore: ID!) {\r\n pushNotificationOrder(pCodeRef: $pCodeRef, idStore: $idStore) {\r\n pdpId\r\n id\r\n idStore\r\n pId\r\n ppState\r\n pCodeRef\r\n pPDate\r\n pSState\r\n pPStateP\r\n payId\r\n pPRecoger\r\n totalProductsPrice\r\n unidProducts\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n`\r\n\r\n// Definir el hook personalizado\r\nexport const usePushNotificationOrder = ({ client }) => {\r\n // Usar el hook useMutation para ejecutar el mutation\r\n const [pushNotificationOrderMutation] = useMutation(PUSH_NOTIFICATION_ORDER, {\r\n context: { clientName: client }\r\n })\r\n\r\n // Función para ejecutar el mutation\r\n const pushNotificationOrder = async (pCodeRef, idStore) => {\r\n try {\r\n // Ejecutar el mutation con los parámetros proporcionados\r\n const { data } = await pushNotificationOrderMutation({\r\n variables: { pCodeRef, idStore }\r\n })\r\n\r\n // Devolver los datos de la orden recibidos del servidor\r\n return data.pushNotificationOrder\r\n } catch (error) {\r\n // Manejar cualquier error que ocurra durante la ejecución del mutation\r\n console.error('Error al ejecutar el mutation pushNotificationOrder:', error)\r\n throw new Error('Error al publicar la nueva orden de tienda. Por favor, vuelve a intentarlo.')\r\n }\r\n }\r\n\r\n // Devolver la función pushNotificationOrder para ser utilizada por el componente\r\n return pushNotificationOrder\r\n}\r\n","import { useSubscription, gql } from '@apollo/client'\r\n\r\nconst NEW_STORE_ORDER_SUBSCRIPTION = gql`\r\n subscription NewStoreOrder($idStore: String!) {\r\n newStoreOrder(idStore: $idStore) {\r\n id\r\n idStore\r\n pCodeRef\r\n }\r\n }\r\n`\r\n\r\nexport const newStoreOrderSubscription = (idStore, onOrderReceived) => {\r\n const subscription = useSubscription(NEW_STORE_ORDER_SUBSCRIPTION, {\r\n variables: { idStore },\r\n onSubscriptionData: ({ client, subscriptionData }) => {\r\n if (subscriptionData.data && subscriptionData.data.newStoreOrder) {\r\n // Llama a la función proporcionada cuando se recibe una nueva orden\r\n onOrderReceived(subscriptionData.data.newStoreOrder)\r\n }\r\n }\r\n })\r\n\r\n // Puedes ajustar lo que devuelve el hook según tus necesidades\r\n return subscription\r\n}\r\n","import { useSubscription, gql } from '@apollo/client'\r\n\r\nconst NEW_CHAT_ROOM_MESSAGE_SUBSCRIPTION = gql`\r\n subscription NewChatRoomMessage($codeRoom: String!) {\r\n newChatRoomMessage(codeRoom: $codeRoom) {\r\n uuid\r\n content\r\n aDatCre\r\n from\r\n to\r\n }\r\n }\r\n`\r\n\r\nexport const chatRoomSubscription = (codeRoom, onMessageReceived) => {\r\n const subscription = useSubscription(NEW_CHAT_ROOM_MESSAGE_SUBSCRIPTION, {\r\n variables: { codeRoom },\r\n onSubscriptionData: ({ client, subscriptionData }) => {\r\n if (subscriptionData.data && subscriptionData.data.newChatRoomMessage) {\r\n // Llama a la función proporcionada cuando se recibe un nuevo mensaje\r\n onMessageReceived(subscriptionData.data.newChatRoomMessage)\r\n }\r\n }\r\n })\r\n\r\n // Puedes ajustar lo que devuelve el hook según tus necesidades\r\n return subscription\r\n}\r\n","/**\n *\n * @param data\n */\nexport function useScheduleData (data) {\r\n const days = {\r\n 1: 'Lunes',\r\n 2: 'Martes',\r\n 3: 'Miércoles',\r\n 4: 'Jueves',\r\n 5: 'Viernes',\r\n 6: 'Sabado',\r\n 0: 'Domingo'\r\n }\r\n\r\n const daysArray = [\r\n { day: 0, schHoSta: '', schHoEnd: '' },\r\n { day: 1, schHoSta: '', schHoEnd: '' },\r\n { day: 2, schHoSta: '', schHoEnd: '' },\r\n { day: 3, schHoSta: '', schHoEnd: '' },\r\n { day: 4, schHoSta: '', schHoEnd: '' },\r\n { day: 5, schHoSta: '', schHoEnd: '' },\r\n { day: 6, schHoSta: '', schHoEnd: '' }\r\n ]\r\n\r\n const combinedArray = daysArray.map((dayObj) => {\r\n const originalObj = data?.find((item) => {return item.schDay === dayObj.day})\r\n return originalObj || { ...dayObj }\r\n })\r\n\r\n // Encontrar la hora de inicio más temprana en combinedArray\r\n const earliestStartTime = Math.min(\r\n ...combinedArray.map((item) => {\r\n const time = new Date(`2023-08-01 ${item.schHoSta}`)\r\n return time.getTime()\r\n })\r\n )\r\n\r\n const calculateYPosition = (start) => {\r\n const time = new Date(`2023-08-01 ${start}`)\r\n const differenceInMinutes = (time.getTime() - earliestStartTime) / (1000 * 40)\r\n return differenceInMinutes / 40 // Ajusta el valor para adaptarse a la posición deseada en el eje Y\r\n }\r\n\r\n /**\r\n * Calcula la duración en horas entre dos horas de inicio y final.\r\n * @param {string} startTime - Hora de inicio en formato 'HH:mm'.\r\n * @param {string} endTime - Hora de fin en formato 'HH:mm'.\r\n * @returns {number|string} Duración en horas con dos decimales.\r\n */\r\n\r\n // Función para calcular la duración en horas de un horario\r\n /**\n *\n * @param startTime\n * @param endTime\n */\n function calculateDurationInHours (startTime, endTime) {\r\n const startHour = new Date(`2000-01-01T${startTime}`)\r\n const endHour = new Date(`2000-01-01T${endTime}`)\r\n const duration = (endHour - startHour) / (1000 * 40 * 40) // Convertir la diferencia en horas\r\n return duration.toFixed(2) // Redondear a 2 decimales\r\n }\r\n\r\n // Variables para controlar la posición en el eje X\r\n const columnIndex = 0\r\n const lastDay = -1\r\n const uniqueHoursSet = new Set([\r\n ...combinedArray.map((item) => {return item.schHoSta}),\r\n ...combinedArray.map((item) => {return item.schHoEnd})\r\n ])\r\n\r\n const uniqueHours = []\r\n for (const hour of uniqueHoursSet) {\r\n const time = new Date(`2023-08-01 ${hour}`)\r\n const formattedHour = time.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false })\r\n uniqueHours.push(formattedHour)\r\n }\r\n\r\n uniqueHours.sort((a, b) => {\r\n const timeA = new Date(`2023-08-01 ${a}`)\r\n const timeB = new Date(`2023-08-01 ${b}`)\r\n return timeA - timeB\r\n })\r\n\r\n // Agregar las horas que faltan al final del día\r\n if (uniqueHours.length > 0) {\r\n const lastHour = new Date(`2023-08-01 ${uniqueHours[uniqueHours.length - 1]}`)\r\n const endTime = new Date(`2023-08-01 ${combinedArray[0].schHoEnd}`)\r\n const hoursDifference = (endTime - lastHour) / (1000 * 60 * 60)\r\n\r\n for (let i = 1; i <= hoursDifference; i++) {\r\n const newHour = new Date(lastHour.getTime() + i * 60 * 60 * 1000)\r\n const formattedNewHour = newHour.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false })\r\n uniqueHours.push(formattedNewHour)\r\n }\r\n }\r\n\r\n const dayWidth = 120\r\n const daysWithHours = Array.from(new Set(combinedArray.map((item) => {return (item.schDay !== undefined ? item.schDay : item.day)})))\r\n const totalDays = daysWithHours.length\r\n const totalWidth = totalDays * dayWidth\r\n\r\n const sortedUniqueHours = Array.from(uniqueHoursSet)\r\n .sort((a, b) => {\r\n const timeA = new Date(`2023-08-01 ${a}`)\r\n const timeB = new Date(`2023-08-01 ${b}`)\r\n return timeA - timeB\r\n })\r\n\r\n const formattedHours = sortedUniqueHours\r\n\r\n /**\n *\n */\n function calculateTimeLinesHeight () {\r\n const totalHours = uniqueHours.length\r\n return totalHours * 60 // Cada hora ocupa 60 píxeles de altura\r\n }\r\n return {\r\n columnIndex,\r\n combinedArray,\r\n days,\r\n daysArray,\r\n daysWithHours,\r\n dayWidth,\r\n lastDay,\r\n totalWidth,\r\n sortedUniqueHours,\r\n uniqueHours: formattedHours,\r\n calculateDurationInHours,\r\n calculateTimeLinesHeight,\r\n calculateYPosition\r\n }\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\n\r\n// Define la consulta GraphQL\r\nconst GET_MESSAGES = gql`\r\n query getMessages($codeRoom: String!, $id: String!) {\r\n getMessages(codeRoom: $codeRoom, id: $id) {\r\n uuid\r\n content\r\n from\r\n to\r\n aDatCre\r\n }\r\n }\r\n`\r\n\r\nexport const useGetMessagesToRoom = (codeRoom, id) => {\r\n const { loading, error, data } = useQuery(GET_MESSAGES, {\r\n context: { clientName: 'web-socket-chat' },\r\n variables: { codeRoom, id }\r\n })\r\n\r\n return [data?.getMessages ?? [], { loading, error }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CHANGE_STATE_STORE_ORDER = gql`\r\nmutation changePPStateOrder($pPStateP: Int, $pCodeRef: String, $pDatMod: String) {\r\n changePPStateOrder(pPStateP: $pPStateP, pCodeRef: $pCodeRef, pDatMod: $pDatMod){\r\n success\r\n message\r\n }\r\n}\r\n\r\n`\r\nexport const GET_ALL_ORDER = gql`\r\nquery getAllOrderStoreFinal($idStore: ID, $search: String, $min: Int, $max: Int, $statusOrder: Int, $fromDate: DateTime, $toDate: DateTime) {\r\n getAllOrderStoreFinal(idStore: $idStore, search: $search, min: $min, max: $max, statusOrder: $statusOrder, toDate: $toDate,fromDate: $fromDate ) {\r\n pdpId\r\n idStore\r\n pCodeRef\r\n payId\r\n pPRecoger\r\n totalProductsPrice\r\n pSState\r\n pDatCre\r\n channel\r\n locationUser\r\n pDatMod\r\n getAllPedidoStore{\r\n pdpId\r\n pId\r\n idStore\r\n ShoppingCard\r\n pCodeRef\r\n pPStateP\r\n payId\r\n pPRecoger\r\n pDatCre\r\n pDatMod\r\n getAllShoppingCard {\r\n ShoppingCard\r\n comments\r\n cantProducts\r\n pId\r\n productFood{\r\n pId\r\n carProId\r\n colorId\r\n idStore\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProDescription\r\n ValueDelivery\r\n ProImage\r\n ProStar\r\n pState\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n }\r\n }\r\n}\r\n`\r\n\r\nexport const GET_ALL_ORDER_FROM_STORE = gql`\r\nquery getAllSalesStore {\r\n getAllSalesStore {\r\n change\r\n channel\r\n status\r\n createdAt\r\n pCodeRef\r\n idStore\r\n pdpId\r\n locationUser\r\n shoppingCartRefCode\r\n statusOrder {\r\n idStatus\r\n name\r\n description\r\n color\r\n backgroundColor\r\n priority\r\n state\r\n createdAt\r\n updatedAt\r\n }\r\n updatedAt\r\n totalProductsPrice\r\n unidProducts\r\n getUser {\r\n associateStore\r\n avatar\r\n createdAt\r\n id\r\n email\r\n }\r\n }\r\n}\r\n`\r\n","import { gql, useApolloClient, useMutation } from '@apollo/client'\n\r\nimport { SendNotificationFn } from '../../useImageUploaderProduct'\r\nimport { updateExistingOrders } from '../../useUpdateExistingOrders'\r\n/**\r\n * GraphQL mutation to change the state of a store order (pedido).\r\n */\r\nconst CHANGE_STATE_STORE_ORDER = gql`\r\n mutation changePPStateOrder($idStatus: ID, $pCodeRef: String, $pDatMod: String) {\r\n changePPStateOrder(idStatus: $idStatus, pCodeRef: $pCodeRef, pDatMod: $pDatMod) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n }\r\n data {\r\n pdpId\r\n id\r\n idStore\r\n pPStateP\r\n pSState\r\n \r\n ppState\r\n pCodeRef\r\n }\r\n }\r\n }\r\n`\r\n\r\ninterface IUseChangeStateOrder {\r\n sendNotification: SendNotificationFn\r\n}\r\n/**\r\n * Hook to trigger the `changePPStateOrder` mutation.\r\n * @param root0\n * @param root0.sendNotification\n * @returns {Object} Contains the mutation function, loading and error state.\r\n */\r\nexport const useChangeStateOrder = ({\r\n sendNotification\r\n}: IUseChangeStateOrder) => {\r\n const client = useApolloClient()\r\n\r\n const [changeState, { loading, error, data }] = useMutation(CHANGE_STATE_STORE_ORDER, {\r\n onCompleted: (res) => {\r\n if (!res || !res.changePPStateOrder) {\r\n return\r\n }\r\n const { success, data } = res?.changePPStateOrder || {}\r\n if (success) {\r\n const { pCodeRef, pSState } = data ?? {\r\n pCodeRef: null,\r\n pSState: null\r\n }\r\n if (!pCodeRef || !pSState) {\r\n return\r\n }\r\n // client.cache.modify({\r\n // fields: {\r\n // getAllOrdersFromStore(existingOrders = []) {\r\n // try {\r\n // // return \r\n // console.log({ cache: updateExistingOrders(existingOrders, pCodeRef, pSState) })\r\n // } catch (e) {\r\n // return existingOrders\r\n // }\r\n // }\r\n // }\r\n // })\r\n }\r\n }\r\n })\r\n\r\n /**\r\n * Triggers the mutation to update the pedido state.\r\n * @param {Object} params\r\n * @param {number} params.idStatus - New state of the pedido (required).\r\n * @param {string} params.pCodeRef - Reference code for the pedido (required).\r\n * @param {string} params.pDatMod - Modification date in ISO format (required).\r\n * @returns {Promise<Object>} Response from the mutation.\r\n */\r\n const changeStateOrder = async ({\r\n idStatus,\r\n pCodeRef,\r\n pDatMod\r\n }: {\r\n idStatus: string\r\n pCodeRef: string\r\n pDatMod: string\r\n }) => {\r\n try {\r\n const response = await changeState({\r\n variables:\r\n {\r\n idStatus,\r\n pCodeRef,\r\n pDatMod\r\n }\r\n })\r\n const { success, message } = response?.data?.changePPStateOrder ?? {\r\n success: false,\r\n message: ''\r\n }\r\n sendNotification({\r\n title: success ? 'Exitoso' : 'Error',\r\n description: message,\r\n backgroundColor: success ? 'success' : 'error'\r\n })\r\n return response?.data?.changePPStateOrder ?? {\r\n success: false,\r\n message\r\n }\r\n } catch (err) {\r\n return {\r\n success: false,\r\n message: err.message || 'Unexpected error occurred'\r\n }\r\n }\r\n }\r\n\r\n return [changeStateOrder, {\r\n loading,\r\n error,\r\n data\r\n }]\r\n}\r\n","import { useQuery } from '@apollo/client'\r\nimport groupBy from 'lodash/groupBy'\r\nimport { GET_ALL_ORDER, GET_ALL_ORDER_FROM_STORE } from '../queries'\r\n\r\nexport const useOrders = ({\r\n refetchWritePolicy = 'merge',\r\n refetchReadPolicy,\r\n refetch,\r\n statusOrder,\r\n fromDate,\r\n toDate,\r\n nextFetchPolicy = 'cache-first',\r\n fetchPolicy = 'cache-and-network',\r\n pollInterval = 60000,\r\n onError\r\n}) => {\r\n const { data, loading, error, fetchMore } = useQuery(GET_ALL_ORDER, {\r\n notifyOnNetworkStatusChange: true,\r\n refetchWritePolicy,\r\n pollInterval,\r\n fetchPolicy,\r\n refetch,\r\n refetchReadPolicy,\r\n nextFetchPolicy,\r\n onError: onError || (() => {\r\n\r\n }),\r\n variables: {\r\n statusOrder,\r\n fromDate,\r\n toDate\r\n }\r\n })\r\n\r\n return [\r\n data?.getAllOrderStoreFinal,\r\n { loading, error, data, fetchMore }\r\n ]\r\n}\r\n\r\nexport const useOrdersFromStore = ({\r\n idStore,\r\n cId,\r\n dId,\r\n ctId,\r\n search = '',\r\n min,\r\n fromDate,\r\n toDate,\r\n max,\r\n statusOrder,\r\n callback = (data) => {\r\n return data\r\n }\r\n}) => {\r\n const key = 'status'\r\n const {\r\n data,\r\n loading,\r\n refetch,\r\n error,\r\n called\r\n } = useQuery(GET_ALL_ORDER_FROM_STORE, {\r\n notifyOnNetworkStatusChange: true,\r\n fetchPolicy: 'network-only',\r\n onCompleted: (data) => {\r\n if (typeof callback === 'function') {\r\n callback(data)\r\n }\r\n }\r\n })\r\n const grouped = groupBy(data?.getAllSalesStore ?? [], key)\r\n \r\n\r\n return [grouped, { refetch, loading: called ? false : loading, error }]\r\n}\r\n\r\n","/* eslint-disable no-console */\r\nimport { useState, useEffect } from 'react'\n\r\nimport {\r\n isPushNotificationSupported,\r\n post,\r\n get,\r\n askUserPermission,\r\n registerServiceWorker,\r\n createNotificationSubscription,\r\n getUserSubscription\r\n} from './helpers'\r\n// import all the function created to manage the push notifications\r\n\r\nconst pushNotificationSupported = isPushNotificationSupported()\r\n// first thing to do: check if the push notifications are supported by the browser\r\n\r\nexport const usePushNotifications = () => {\r\n const [userConsent, setSuserConsent] = useState()\r\n useEffect(() => {\r\n if (typeof Notification !== 'undefined') {\r\n setSuserConsent(Notification.permission)\r\n }\r\n }, [])\r\n\r\n // to manage the user consent: Notification.permission is a JavaScript native function that return the current state of the permission\r\n // We initialize the userConsent with that value\r\n const [userSubscription, setUserSubscription] = useState(null)\r\n // to manage the use push notification subscription\r\n const [pushServerSubscriptionId, setPushServerSubscriptionId] = useState()\r\n // to manage the push server subscription\r\n const [error, setError] = useState(null)\r\n // to manage errors\r\n const [loading, setLoading] = useState(true)\r\n // to manage async actions\r\n\r\n useEffect(() => {\r\n if (pushNotificationSupported) {\r\n setLoading(true)\r\n setError(false)\r\n registerServiceWorker().then(() => {\r\n setLoading(false)\r\n })\r\n }\r\n }, [])\r\n // if the push notifications are supported, registers the service worker\r\n // this effect runs only the first render\r\n\r\n useEffect(() => {\r\n setLoading(true)\r\n setError(false)\r\n const getExixtingSubscription = async () => {\r\n const existingSubscription = await getUserSubscription()\r\n setUserSubscription(existingSubscription)\r\n setLoading(false)\r\n }\r\n getExixtingSubscription()\r\n }, [])\r\n // Retrieve if there is any push notification subscription for the registered service worker\r\n // this use effect runs only in the first render\r\n\r\n /**\r\n * define a click handler that asks the user permission,\r\n * it uses the setSuserConsent state, to set the consent of the user\r\n * If the user denies the consent, an error is created with the setError hook\r\n */\r\n const onClickAskUserPermission = () => {\r\n setLoading(true)\r\n setError(false)\r\n askUserPermission().then(consent => {\r\n setSuserConsent(consent)\r\n if (consent !== 'granted') {\r\n setError({\r\n name: 'consentimiento denegado',\r\n message: 'Negaste el consentimiento para recibir notificaciones',\r\n code: 0\r\n })\r\n }\r\n setLoading(false)\r\n })\r\n }\r\n //\r\n\r\n /**\r\n * define a click handler that creates a push notification subscription.\r\n * Once the subscription is created, it uses the setUserSubscription hook\r\n */\r\n const onClickSusbribeToPushNotification = () => {\r\n setLoading(true)\r\n setError(false)\r\n createNotificationSubscription()\r\n .then(function (subscrition) {\r\n setUserSubscription(subscrition)\r\n setLoading(false)\r\n })\r\n .catch(err => {\r\n console.error(\"Couldn't create the notification subscription\", err, 'name:', err.name, 'message:', err.message, 'code:', err.code)\r\n setError(err)\r\n setLoading(false)\r\n })\r\n }\r\n\r\n /**\r\n * define a click handler that sends the push susbcribtion to the push server.\r\n * Once the subscription ics created on the server, it saves the id using the hook setPushServerSubscriptionId\r\n */\r\n const onClickSendSubscriptionToPushServer = () => {\r\n setLoading(true)\r\n setError(false)\r\n post('/subscription2', userSubscription)\r\n .then(function (response) {\r\n setPushServerSubscriptionId(response.id)\r\n setLoading(false)\r\n })\r\n .catch(err => {\r\n setLoading(false)\r\n setError(err)\r\n })\r\n }\r\n\r\n /**\r\n * define a click handler that request the push server to send a notification, passing the id of the saved subscription\r\n */\r\n const onClickSendNotification = async () => {\r\n setLoading(true)\r\n setError(false)\r\n console.log(pushServerSubscriptionId)\r\n await get(`/subscription/${pushServerSubscriptionId}`).catch(err => {\r\n setLoading(false)\r\n setError(err)\r\n })\r\n setLoading(false)\r\n }\r\n\r\n /**\r\n * returns all the stuff needed by a Component\r\n */\r\n return {\r\n onClickAskUserPermission,\r\n onClickSusbribeToPushNotification,\r\n onClickSendSubscriptionToPushServer,\r\n pushServerSubscriptionId,\r\n onClickSendNotification,\r\n userConsent,\r\n pushNotificationSupported,\r\n userSubscription,\r\n error,\r\n loading\r\n }\r\n}\r\n","/* eslint-disable consistent-return */\r\nconst pushServerPublicKey = 'BIN2Jc5Vmkmy-S3AUrcMlpKxJpLeVRAfu9WBqUbJ70SJOCWGCGXKY-Xzyh7HDr6KbRDGYHjqZ06OcS3BjD7uAm8'\r\n\r\n/**\r\n * checks if Push notification and service workers are supported by your browser\r\n */\r\nfunction isPushNotificationSupported () {\r\n if (typeof window !== 'undefined' && window.Notification && window.ServiceWorker) {\r\n return 'serviceWorker' in navigator && 'PushManager' in window\r\n }\r\n}\r\n\r\n/**\r\n * asks user consent to receive push notifications and returns the response of the user, one of granted, default, denied\r\n */\r\nasync function askUserPermission () {\r\n return await Notification.requestPermission()\r\n}\r\n/**\r\n * shows a notification\r\n */\r\nfunction sendNotification () {\r\n const img = '/images/jason-leung-HM6TMmevbZQ-unsplash.jpg'\r\n const text = 'Take a look at this brand new t-shirt!'\r\n const title = 'New Product Available'\r\n const options = {\r\n body: text,\r\n icon: '/images/jason-leung-HM6TMmevbZQ-unsplash.jpg',\r\n vibrate: [200, 100, 200],\r\n tag: 'new-product',\r\n image: img,\r\n badge: 'https://spyna.it/icons/android-icon-192x192.png',\r\n actions: [{ action: 'Detail', title: 'View', icon: 'https://via.placeholder.com/128/ff0000' }]\r\n }\r\n navigator.serviceWorker.ready.then(function (serviceWorker) {\r\n serviceWorker.showNotification(title, options)\r\n })\r\n}\r\n\r\n/**\r\n *\r\n */\r\nfunction registerServiceWorker () {\r\n return navigator.serviceWorker.register('/sw.js')\r\n}\r\n\r\n/**\r\n *\r\n * using the registered service worker creates a push notification subscription and returns it\r\n *\r\n */\r\nasync function createNotificationSubscription () {\r\n // wait for service worker installation to be ready\r\n const serviceWorker = await navigator.serviceWorker.ready\r\n // subscribe and return the subscription\r\n return await serviceWorker.pushManager.subscribe({\r\n userVisibleOnly: true,\r\n applicationServerKey: pushServerPublicKey\r\n })\r\n}\r\n\r\n/**\r\n * returns the subscription if present or nothing\r\n */\r\nfunction getUserSubscription () {\r\n // wait for service worker installation to be ready, and then\r\n return navigator.serviceWorker.ready\r\n .then(function (serviceWorker) {\r\n return serviceWorker.pushManager.getSubscription()\r\n })\r\n .then(function (pushSubscription) {\r\n return pushSubscription\r\n })\r\n}\r\n\r\nconst host = process.env.NODE_ENV === 'production' ? 'http://localhost:4000' : 'http://localhost:4000'\r\n\r\n/**\n *\n * @param path\n * @param body\n */\nfunction post (path, body) {\r\n return fetch(`${host}${path}`, {\r\n body: JSON.stringify(body),\r\n method: 'POST',\r\n mode: 'cors'\r\n })\r\n .then(function (response) {\r\n return response.json()\r\n })\r\n .then(function (data) {\r\n return data\r\n })\r\n}\r\n\r\n/**\n *\n * @param path\n */\nfunction get (path) {\r\n return fetch(`${host}${path}`, {\r\n method: 'GET',\r\n mode: 'cors'\r\n })\r\n .then(function (response) {\r\n return response.json()\r\n })\r\n .then(function (data) {\r\n return data\r\n })\r\n}\r\n\r\nexport {\r\n isPushNotificationSupported,\r\n askUserPermission,\r\n post,\r\n get,\r\n registerServiceWorker,\r\n sendNotification,\r\n createNotificationSubscription,\r\n getUserSubscription\r\n}\r\n","import { useState } from 'react'\r\n\r\n/**\r\n * Hook para gestionar la lógica de ubicaciones, valores y errores.\r\n *\r\n * @param {Function} getDepartments - Función para obtener los departamentos basado en el ID de país.\r\n * @param {Function} getCities - Función para obtener las ciudades basado en el ID de departamento.\r\n *\r\n * @returns {Object} - Retorna los estados y funciones de manejo asociados.\r\n */\r\nexport function useLocationManager (getDepartments, getCities) {\r\n const [values, setValues] = useState({})\r\n console.log('🚀 ~ useLocationManager ~ values:', values)\r\n const [errors, setErrors] = useState({})\r\n const [showLocation, setShowLocation] = useState(true)\r\n\r\n const handleUpdateValues = (name, value) => {\r\n setValues(prevValues => {return { ...prevValues, [name]: value }})\r\n }\r\n\r\n const handleUpdateErrors = (name, error) => {\r\n setErrors(prevErrors => {return { ...prevErrors, [name]: error }})\r\n }\r\n\r\n const handleCountrySearch = (value) => {\r\n getDepartments({ variables: { cId: value } })\r\n }\r\n\r\n const handleDepartmentSearch = (value) => {\r\n setValues(prevValues => {return { ...prevValues, ctId: '' }})\r\n getCities({ variables: { dId: value } })\r\n }\r\n\r\n const handleChangeLocation = (e, error) => {\r\n const { name, value } = e.target\r\n handleUpdateValues(name, value)\r\n handleUpdateErrors(name, error)\r\n }\r\n\r\n const handleChangeSearch = (e) => {\r\n const { name, value } = e.target\r\n switch (name) {\r\n case 'countryId':\r\n handleCountrySearch(value)\r\n break\r\n case 'code_dId':\r\n handleDepartmentSearch(value)\r\n break\r\n default:\r\n break\r\n }\r\n handleChangeLocation(e)\r\n }\r\n\r\n return {\r\n values,\r\n errors,\r\n showLocation,\r\n setShowLocation,\r\n handleChangeSearch,\r\n setValues\r\n }\r\n}\r\n","import { useLazyQuery } from '@apollo/client'\n\r\nimport { GET_ONE_COUNTRY, GET_ONE_DEPARTMENT, GET_ONE_CITY } from './queries'\r\n\r\nconst useGetOneCountry = () => {\r\n const [getOneCountry, { data: dataCountry }] = useLazyQuery(GET_ONE_COUNTRY)\r\n return { getOneCountry, dataCountry }\r\n}\r\n\r\nconst useGetOneDepartment = () => {\r\n const [getOneDepartment, { data: dataDepartment }] = useLazyQuery(GET_ONE_DEPARTMENT)\r\n return { getOneDepartment, dataDepartment }\r\n}\r\n\r\nconst useGetOneCity = () => {\r\n const [getOneCities, { data: dataGetOneCity }] = useLazyQuery(GET_ONE_CITY)\r\n return { getOneCities, dataGetOneCity }\r\n}\r\n\r\nexport { useGetOneCountry, useGetOneDepartment, useGetOneCity }\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ONE_COUNTRY = gql`\r\nquery getOneCountry($cId: ID){\r\n getOneCountry(cId: $cId) {\r\n cId\r\n cName\r\n cName\r\n cDatCre\r\n cCalCod\r\n cState\r\n cDatMod\r\n\r\n }\r\n}\r\n`\r\nexport const GET_ONE_DEPARTMENT = gql`\r\nquery getOneDepartment($dId: ID){\r\n getOneDepartment(dId: $dId) {\r\n dId\r\n cId\r\n dName\r\n dState\r\n dDatCre\r\n dDatMod\r\n }\r\n}\r\n`\r\nexport const GET_ONE_CITY = gql`\r\nquery getOneCities($ctId: ID){\r\n getOneCities(ctId: $ctId) {\r\n ctId\r\n dId\r\n cName\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n}\r\n`\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_LOCATIONS } from './queries'\r\n\r\n/**\r\n * useGetAllLocationUser\r\n * @returns {any}\r\n */\r\nexport const useGetAllLocationUser = () => {\r\n const { data, loading } = useQuery(GET_ALL_LOCATIONS)\r\n\r\n return [data, { loading }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_LOCATIONS = gql`\r\n\r\nquery getUserLocations {\r\n getUserLocations {\r\n locationId\r\n # id\r\n cId\r\n dId\r\n ctId\r\n uLatitud\r\n uLongitude\r\n uLocationKnow\r\n uPiso\r\n DatCre\r\n DatMod\r\n pais {\r\n cId\r\n cName\r\n cCalCod\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n city {\r\n ctId\r\n dId\r\n cName\r\n cState\r\n cDatCre\r\n cDatMod\r\n } \r\n department {\r\n dId\r\n cId\r\n dName\r\n dState\r\n dDatCre\r\n dDatMod\r\n }\r\n }\r\n}\r\n`\n","// import md5 from 'md5'\r\n\r\n/**\n *\n */\nasync function getCPUInfo () {\r\n if (navigator.hardwareConcurrency) {\r\n try {\r\n const logicalCores = navigator.hardwareConcurrency\r\n const agent = window.navigator.userAgent\r\n const hyperThreaded = /Intel|Apple/.test(agent) && /Win64|Linux x86_64|MacIntel/.test(agent)\r\n\r\n // Ajustar el número de núcleos lógicos si se sospecha hiperprocesamiento\r\n const physicalCores = hyperThreaded ? logicalCores / 2 : logicalCores\r\n\r\n const cpuInfo = {\r\n logicalCores,\r\n physicalCores,\r\n hyperThreaded\r\n }\r\n return JSON.stringify(cpuInfo)\r\n } catch (error) {\r\n console.error('Error al obtener información de la CPU:', error)\r\n return 'cpu-info-error'\r\n }\r\n } else {\r\n return 'cpu-info-not-available'\r\n }\r\n}\r\n\r\n/**\n *\n */\nasync function generateFingerprint () {\r\n const canvas = document.createElement('canvas')\r\n const audioContext = new (window.AudioContext || window.webkitAudioContext)()\r\n\r\n const userAgent = navigator.userAgent\r\n const language = navigator.language\r\n const colorDepth = window.screen.colorDepth\r\n const availableScreenHeight = window.screen.availHeight\r\n const platform = navigator.platform\r\n const cpuClass = navigator.cpuClass || 'unknown'\r\n\r\n const canvasFingerprint = await generateCanvasFingerprint(canvas)\r\n const audioFingerprint = await generateAudioFingerprint(audioContext)\r\n\r\n const cpuInfo = await getCPUInfo()\r\n const webGLInfo = await getWebGLInfo()\r\n const fonts = getInstalledFonts()\r\n const touchscreenInfo = getTouchscreenInfo()\r\n\r\n const fingerprintData = {\r\n browser: {\r\n userAgent,\r\n language,\r\n colorDepth,\r\n availableScreenHeight,\r\n plugins: Array.from(navigator.plugins).map(plugin => {return plugin.name}).join(','),\r\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n hardwareConcurrency: cpuInfo.logicalCores || 'unknown',\r\n platformVersion: navigator.platformVersion || 'unknown'\r\n },\r\n device: {\r\n platform,\r\n cpuClass\r\n },\r\n canvas: canvasFingerprint,\r\n audio: audioFingerprint,\r\n cpu: cpuInfo,\r\n webgl: webGLInfo,\r\n fonts,\r\n touchscreen: touchscreenInfo\r\n }\r\n\r\n const fingerprint = JSON.stringify(fingerprintData)\r\n // const uniqueID = md5(fingerprint)\r\n return fingerprint\r\n}\r\n\r\n// Función para generar huella digital del audio\r\n/**\n *\n * @param audioContext\n */\nasync function generateAudioFingerprint (audioContext) {\r\n if (audioContext) {\r\n try {\r\n await audioContext.resume()\r\n\r\n // Obtén propiedades del audio que puedas obtener en modo incógnito\r\n const audioProperties = {\r\n isAudioContextAvailable: true\r\n // Agrega más propiedades relevantes aquí\r\n }\r\n\r\n return audioProperties\r\n } catch (error) {\r\n console.error('Error al generar huella digital de audio:', error)\r\n }\r\n }\r\n\r\n return { isAudioContextAvailable: false }\r\n}\r\n\r\n// Función para generar huella digital del canvas\r\n/**\n *\n * @param canvas\n */\nasync function generateCanvasFingerprint (canvas) {\r\n if (canvas) {\r\n try {\r\n canvas.width = 200\r\n canvas.height = 200\r\n const context = canvas.getContext('2d')\r\n context.clearRect(0, 0, canvas.width, canvas.height)\r\n context.fillStyle = '#f60'\r\n context.fillRect(125, 1, 62, 20)\r\n context.fillStyle = '#069'\r\n context.font = '16pt Arial'\r\n context.fillText('Cwm fjordbank glyphs vext quiz', 125, 20)\r\n\r\n // Obtén más propiedades del canvas que puedas obtener en modo incógnito\r\n const canvasProperties = {\r\n width: canvas.width,\r\n height: canvas.height\r\n // Agrega más propiedades relevantes aquí\r\n }\r\n\r\n return canvasProperties\r\n } catch (error) {\r\n console.error('Error al generar huella digital del canvas:', error)\r\n }\r\n }\r\n\r\n return { width: 0, height: 0 }\r\n}\r\n\r\n/**\n *\n */\nasync function getWebGLInfo () {\r\n if ('WebGLRenderingContext' in window) {\r\n const canvas = document.createElement('canvas')\r\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl')\r\n\r\n if (gl) {\r\n const renderer = gl.getParameter(gl.RENDERER)\r\n const version = gl.getParameter(gl.VERSION)\r\n\r\n // Obtener más información sobre las capacidades WebGL si es necesario\r\n\r\n return `${renderer}-${version}`\r\n }\r\n }\r\n\r\n return 'webgl-info-not-supported'\r\n}\r\n\r\n/**\n *\n */\nfunction getInstalledFonts () {\r\n const fonts = []\r\n\r\n if ('fonts' in document) {\r\n document.fonts.forEach(font => {\r\n fonts.push(font.family)\r\n })\r\n }\r\n\r\n return fonts.join(',')\r\n}\r\n\r\n/**\n *\n */\nfunction getTouchscreenInfo () {\r\n if ('maxTouchPoints' in navigator) {\r\n const maxTouchPoints = navigator.maxTouchPoints\r\n const touchEvent = 'ontouchstart' in window ? 'true' : 'false'\r\n\r\n return `${maxTouchPoints}-${touchEvent}`\r\n }\r\n\r\n return 'touchscreen-info-not-supported'\r\n}\r\n\r\n/**\n *\n */\nexport async function fingerprintJs () {\r\n const fingerprint = await generateFingerprint()\r\n // const uniqueID = md5(fingerprint)\r\n return fingerprint\r\n}\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_COUNTRIES } from './queries'\r\n/**\r\n\r\n * Hook personalizado para obtener todos los países.\r\n *\r\n * @returns {Object} - Retorna un objeto con la data de los países y cualquier otro estado/error relacionado con la consulta.\r\n */\r\nexport function useCountries () {\r\n const { data, loading, error } = useQuery(GET_ALL_COUNTRIES)\r\n\r\n // Aquí puedes manejar la lógica adicional que necesites, como mapear la data, manejar errores, etc.\r\n\r\n return {\r\n data: data ? data.countries : [],\r\n loading,\r\n error\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_COUNTRIES = gql`\r\n query countries {\r\n countries {\r\n cId\r\n cName\r\n cCalCod\r\n cState\r\n }\r\n }\r\n`\r\n","import { useMutation } from '@apollo/client'\r\nimport {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n createRef\r\n} from 'react'\n\r\nimport { useDeleteExtraProductFoods } from '../useDeleteExtraProductFoods'\r\nimport { useUpdateMultipleExtProduct } from '../useUpdateMultipleExtProduct'\n\r\nimport { findNumbersExceedingRange, transformData, updateErrorFieldByIndex } from './helpers'\nimport { EDIT_EXTRA_PRODUCT_FOODS } from './queries'\r\n\r\n\r\nexport const useDessertWithPrice = ({\r\n dataExtra = [],\r\n sendNotification = ({\r\n title,\r\n description,\r\n backgroundColor\r\n }) => {\r\n return {\r\n title,\r\n description,\r\n backgroundColor\r\n }\r\n },\r\n setAlertBox = ({ message, duration = 10000, success = true }) => { return { message, duration, success } }\r\n} = {}) => {\r\n const [selected, setSelected] = useState({\r\n loading: false,\r\n exPid: null\r\n })\r\n const [editExtraProductFoods] = useMutation(EDIT_EXTRA_PRODUCT_FOODS)\r\n\r\n const initialLine = useMemo(() => {\r\n return {\r\n extraName: '',\r\n extraPrice: '',\r\n exState: false\r\n }\r\n }, [])\r\n\r\n const initialLineItems = useMemo(() => {\r\n return {\r\n Lines: [\r\n {\r\n extraName: '',\r\n extraPrice: '',\r\n exState: false\r\n },\r\n (initialLine)\r\n ]\r\n }\r\n }, [initialLine])\r\n const transformedData = transformData(dataExtra)\r\n\r\n const [LineItems, setLine] = useState(\r\n Array.isArray(dataExtra) && dataExtra.length > 0 ? { Lines: transformedData } : initialLineItems\r\n )\r\n\r\n const inputRefs = useRef(LineItems.Lines.map(() => {return createRef()}))\r\n\r\n const handleSelect = (item, index) => {\r\n try {\r\n const { exPid } = item || {}\r\n setSelected({ exPid, loading: false })\r\n if (inputRefs?.current[index]) {\r\n inputRefs.current[index].current.focus()\r\n }\r\n } catch (error) {\r\n return null\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n // Asegurándote de que las referencias se actualicen si LineItems cambia\r\n inputRefs.current = LineItems.Lines.map((_, i) => {return inputRefs.current[i] || createRef()})\r\n }, [LineItems])\r\n\r\n const handleCleanLines = useCallback(() => {\r\n setLine(Array.isArray(dataExtra) && dataExtra.length > 0 ? { Lines: transformedData } : initialLineItems)\r\n }, [initialLineItems])\r\n\r\n const [updateMultipleExtProduct, { loading }] = useUpdateMultipleExtProduct({\r\n handleCleanLines: () => { },\r\n sendNotification\r\n })\r\n /**\r\n * Handles the addition of two new lines to the Lines array in LineItems state.\r\n */\r\n const handleAdd = useCallback(() => {\r\n try {\r\n // Ensure that LineItems and initialLine are not null or undefined\r\n if (!LineItems || !initialLine) {\r\n throw new Error('Han ocurrido un error.')\r\n }\r\n\r\n // Ensure that LineItems.Lines is an array\r\n if (!Array.isArray(LineItems.Lines)) {\r\n throw new Error('Han ocurrido un error.')\r\n }\r\n\r\n // Clone the existing Lines array and add two new objects (clones of initialLine) to it\r\n const Lines = [...LineItems.Lines, { ...initialLine }]\r\n\r\n // Update the LineItems state with the new Lines array\r\n setLine((prevLineItems) => { return { ...prevLineItems, Lines } })\r\n } catch (error) {\r\n sendNotification({\r\n title: error.message,\r\n description: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n }, [LineItems, initialLine, setLine])\r\n\r\n const handleFocusChange = (index) => {\r\n const lastItem = LineItems.Lines.length - 1\r\n if (lastItem === index) {\r\n handleAdd()\r\n }\r\n }\r\n\r\n /**\r\n * Handles changes in line items, updating the state accordingly.\r\n * @param {number} index - The index of the line item being updated.\r\n * @param {string} name - The name of the attribute being changed.\r\n * @param {any} value - The new value of the attribute.\r\n */\r\n const handleLineChange = (index, name, value) => {\r\n const newLines = LineItems.Lines.map((line, i) => {\r\n if (i !== index) return { ...line }\r\n\r\n const newLine = { ...line }\r\n\r\n if (name === 'extraName' || name === 'extraPrice') {\r\n newLine[name] = value\r\n } else if (name === 'exState') {\r\n newLine[name] = value.target.checked\r\n } else {\r\n newLine[name] = value\r\n }\r\n\r\n return newLine\r\n })\r\n\r\n setLine({ ...LineItems, Lines: newLines })\r\n }\r\n const { deleteExtraProductFoods } = useDeleteExtraProductFoods()\r\n\r\n /**\r\n * Filter out a specific line from the LineItems array.\r\n * @param {number} index - Index of the line to be filtered out.\r\n */\r\n const filterOneLine = (index) => {\r\n // Use optional chaining to safely access nested properties.\r\n const Lines = LineItems?.Lines?.filter((_, i) => { return i !== index })\r\n // Use spread operator to create a new object with the filtered Lines array.\r\n return setLine({ ...LineItems, Lines })\r\n }\r\n\r\n /**\r\n * Removes a product extra by index or external product ID.\r\n *\r\n * @param {number} i - Index of the item in the list.\r\n * @param {string} [exPid] - External product ID to remove (optional).\r\n * @returns {Promise<void>}\r\n */\r\n const handleRemove = async (i, exPid) => {\r\n try {\r\n if (!exPid) {\r\n return filterOneLine(i)\r\n }\r\n\r\n const findDataExtra = dataExtra?.find(x => {return x?.exPid === exPid})\r\n if (!findDataExtra) return\r\n\r\n await deleteExtraProductFoods({\r\n variables: {\r\n state: 1,\r\n id: exPid\r\n },\r\n update: (cache, { data }) => {\r\n const res = data?.deleteExtraProduct\r\n const success = res?.success\r\n const message = res?.message || ''\r\n\r\n if (!success) {\r\n return sendNotification({\r\n title: 'Error',\r\n description: message,\r\n backgroundColor: 'error'\r\n })\r\n }\r\n\r\n sendNotification({\r\n title: 'Producto eliminado',\r\n description: message,\r\n backgroundColor: 'success'\r\n })\r\n\r\n cache.modify({\r\n fields: {\r\n ExtProductFoodsAll: (dataOld = []) => {\r\n if (!Array.isArray(dataOld)) return dataOld\r\n\r\n const transformedData = transformData(dataOld)\r\n const Lines = transformedData.filter((_, index) => {return index !== i})\r\n const newCache = dataOld.filter((_, index) => {return index !== i})\r\n\r\n setLine(prev => {return {\r\n ...prev,\r\n Lines\r\n }})\r\n\r\n return newCache\r\n }\r\n }\r\n })\r\n }\r\n })\r\n } catch (error) {\r\n console.log('🚀 ~ handleRemove ~ error:', error)\r\n sendNotification({\r\n title: 'Error',\r\n description: 'Ocurrió un error al eliminar el producto',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n setLine(Array.isArray(dataExtra) && dataExtra.length > 0 ? { Lines: transformedData } : initialLineItems)\r\n }, [dataExtra.length])\r\n\r\n const prepareAndValidateData = useCallback((pId) => {\r\n const dataArr = LineItems?.Lines?.map(({ extraPrice, exState, extraName }) => {return {\r\n extraPrice,\r\n exState: exState === true ? 1 : 0,\r\n extraName,\r\n pId\r\n }})\r\n console.log(dataArr)\r\n const message = 'Complete los campos vacíos'\r\n const findInputEmpty = dataArr?.find(({ extraName }) => {return extraName === ''})\r\n const findInputEmptyPrice = dataArr?.find(({ extraPrice }) => {return isNaN(extraPrice) || extraPrice === ''})\r\n\r\n if (findInputEmpty || findInputEmptyPrice) {\r\n setAlertBox({ message })\r\n return null\r\n }\r\n return dataArr\r\n }, [LineItems])\r\n\r\n const handleEdit = async (i, exPid) => {\r\n setSelected({ exPid: null, loading: true })\r\n const findOneExtra = LineItems?.Lines?.find((x, i) => { return x?.exPid === exPid })\r\n const { extraName, extraPrice: price } = findOneExtra || {}\r\n const extraPrice = price\r\n const { data } = await editExtraProductFoods({\r\n variables: {\r\n exPid,\r\n extraName,\r\n extraPrice\r\n },\r\n update: (cache) => {\r\n cache.modify({\r\n fields: {\r\n ExtProductFoodsAll: () => {\r\n return LineItems?.Lines || []\r\n }\r\n }\r\n })\r\n }\r\n })\r\n if (!data?.editExtraProductFoods?.success) {\r\n return sendNotification({\r\n title: 'Error',\r\n description: data?.editExtraProductFoods?.message || '',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n\r\n if (data?.editExtraProductFoods?.success) {\r\n return sendNotification({\r\n title: 'Producto actualizado',\r\n description: data?.editExtraProductFoods?.message || '',\r\n backgroundColor: 'success'\r\n })\r\n }\r\n }\r\n\r\n /**\n *\n * @param items\n * @param pId\n */\n function filterItemsWithValidExPid (items, pId) {\r\n // Primero, filtrar los elementos basados en exPid\r\n const filteredItems = items.filter(({ exPid }) => {\r\n const isExPidValid = !exPid\r\n return isExPidValid\r\n })\r\n\r\n // Luego, transformar los elementos filtrados\r\n return filteredItems.map(({ exPid, extraPrice, exState, extraName }) => {return {\r\n exPid,\r\n extraPrice,\r\n exState: exState === true ? 1 : 0,\r\n extraName,\r\n pId\r\n }})\r\n }\r\n\r\n const handleSubmit = ({ pId }) => {\r\n try {\r\n const checkNumberRange = findNumbersExceedingRange(LineItems?.Lines)\r\n updateErrorFieldByIndex({ checkNumberRange, setLine })\r\n if (checkNumberRange?.length > 0) {\r\n return setAlertBox({ message: 'El precio no puede ser tan alto', duration: 10000 })\r\n }\r\n\r\n if (!prepareAndValidateData(pId)) return\r\n const dataArr = LineItems?.Lines?.map(x => {\r\n const extraPrice = x.extraPrice\r\n const extraName = x.extraName\r\n return {\r\n extraPrice,\r\n exState: x.exState === true ? 1 : 0,\r\n extraName,\r\n pId\r\n }\r\n })\r\n const filteredItems = filterItemsWithValidExPid(LineItems?.Lines, pId)\r\n\r\n return updateMultipleExtProduct({\r\n variables: {\r\n inputLineItems: {\r\n setData: filteredItems\r\n }\r\n },\r\n update: (cache) => {\r\n cache.modify({\r\n fields: {\r\n ExtProductFoodsAll: () => {\r\n return dataArr\r\n }\r\n }\r\n })\r\n }\r\n }).then((res) => {\r\n setAlertBox({ message: 'Se ha creado correctamente', duration: 7000, success: true })\r\n })\r\n } catch (error) {\r\n setAlertBox({ message: `${error}`, duration: 7000 })\r\n }\r\n }\r\n const isLoading = loading\r\n\r\n return {\r\n initialLine,\r\n inputRefs,\r\n selected,\r\n loading: isLoading,\r\n initialLineItems,\r\n LineItems,\r\n handleCleanLines,\r\n handleLineChange,\r\n handleSelect,\r\n handleFocusChange,\r\n setLine,\r\n handleEdit,\r\n handleRemove,\r\n handleAdd,\r\n handleSubmit\r\n }\r\n}\r\n","import { useMutation } from '@apollo/client'\n\r\nimport { DELETE_EXTRA_PRODUCTS } from '../useDessertWithPrice/queries'\r\n\r\nexport const useDeleteExtraProductFoods = () => {\r\n const [deleteExtraProductFoods, { loading, error }] = useMutation(DELETE_EXTRA_PRODUCTS)\r\n\r\n return {\r\n deleteExtraProductFoods,\r\n loading,\r\n error\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const DELETE_EXTRA_PRODUCTS = gql`\r\n mutation deleteExtraProduct($id: ID, $state: Int){\r\n deleteExtraProduct(id: $id, state: $state){\r\n success,\r\n message\r\n }\r\n}\r\n`\r\nexport const EDIT_EXTRA_PRODUCT_FOODS = gql`\r\n mutation EditExtraProductFoods($exPid: ID, $state: Int, $extraName: String, $extraPrice: Float) {\r\n editExtraProductFoods(exPid: $exPid, state: $state, extraName: $extraName, extraPrice: $extraPrice) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\n","import { useMutation } from '@apollo/client'\n\r\nimport { UPDATE_MULTI_EXTRAS_PRODUCT_FOOD } from './queries'\r\n\r\n/**\r\n * Custom hook para manejar la actualización de múltiples extras de productos alimenticios.\r\n * @param {Function} cleanLines - Función para limpiar líneas después de completar la mutación.\r\n * @param {Function} handleCleanLines - Función.\r\n * @returns {Array} Retorna un array con la función de mutación y el estado de carga.\r\n */\r\nexport const useUpdateMultipleExtProduct = ({\r\n cleanLines = () => { },\r\n handleCleanLines = () => { },\r\n sendNotification = () => { }\r\n} = {\r\n cleanLines: () => { },\r\n handleCleanLines: () => { },\r\n sendNotification: () => { }\r\n}) => {\r\n const [updateMultipleExtProduct, { loading }] = useMutation(UPDATE_MULTI_EXTRAS_PRODUCT_FOOD, {\r\n onCompleted: (data) => {\r\n const { updateMultipleExtProduct: result } = data\r\n const { success, message } = result ?? {}\r\n sendNotification({\r\n title: message,\r\n description: success ? 'Operación exitosa' : 'Error',\r\n backgroundColor: success ? 'success' : 'error'\r\n })\r\n cleanLines()\r\n }\r\n })\r\n\r\n return [updateMultipleExtProduct, { loading }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\n// CREATE EXTRAS PRODUCT\r\nexport const UPDATE_MULTI_EXTRAS_PRODUCT_FOOD = gql`\r\nmutation updateMultipleExtProduct($inputLineItems: ILineItemsExtraFinal) {\r\n updateMultipleExtProduct(inputLineItems: $inputLineItems) {\r\n success\r\n message\r\n data {\r\n pId\r\n exPid\r\n exState\r\n extraName\r\n extraPrice\r\n state\r\n createdAt\r\n updatedAt\r\n }\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n __typename\r\n }\r\n }\r\n }\r\n}\r\n`\r\n","export const transformData = (dataExtra) => {\r\n const transformedData = dataExtra?.map(item => {return {\r\n extraName: item.extraName || '',\r\n extraPrice: item?.extraPrice?.toString() || '',\r\n exState: Boolean(item.exState),\r\n forEdit: true,\r\n ...item\r\n }})\r\n\r\n return transformedData\r\n}\r\n\r\nexport const MAX_INTEGER = 999999999999.99\r\n/**\r\n * Validate if a number is within a specified range.\r\n * @param {number} num - The number to validate.\r\n * @returns {boolean} - True if the number is within the range, false otherwise.\r\n */\r\nexport const isWithinRange = (num) => {\r\n // Verificar si el número está dentro del rango permitido.\r\n return num >= MAX_INTEGER\r\n}\r\n\r\n/**\r\n * Find objects in the array where the value of 'extraPrice' exceeds the specified range.\r\n * @param {array} arr - The array to search.\r\n * @returns {array} - An array containing the indices and objects of the items exceeding the range.\r\n */\r\nexport const findNumbersExceedingRange = (arr) => {\r\n return arr.reduce((acc, item, index) => {\r\n const extraPrice = typeof item.extraPrice === 'number' ? item.extraPrice : parseFloat(item.extraPrice.replace(/\\./g, ''))\r\n if (isWithinRange(extraPrice)) {\r\n acc.push({ index, item })\r\n }\r\n return acc\r\n }, [])\r\n}\r\n\r\nexport const updateErrorFieldByIndex = ({\r\n setLine = (array) => {\r\n return array\r\n },\r\n checkNumberRange = []\r\n} = {\r\n setLine: (array) => {\r\n return array\r\n },\r\n checkNumberRange: []\r\n}) => {\r\n setLine(prevLineItems => {\r\n // Crea una copia del estado anterior de LineItems\r\n const updatedLineItems = { ...prevLineItems }\r\n\r\n // Utiliza map para iterar sobre cada elemento en checkNumberRange\r\n const updatedLines = updatedLineItems.Lines.map((line, index) => {\r\n // Verifica si el índice está dentro del rango de LineItems.Lines\r\n if (checkNumberRange.some(item => {return item.index === index})) {\r\n // Crea una copia del elemento actual\r\n const updatedLine = { ...line }\r\n\r\n // Actualiza el campo 'error' del elemento a true\r\n updatedLine.error = true\r\n updatedLine.messageError = 'El precio no puede ser mayor a 999999999999.99'\r\n\r\n // Devuelve el elemento actualizado\r\n return updatedLine\r\n }\r\n\r\n // Si el índice no está en checkNumberRange, devuelve el elemento sin cambios\r\n return line\r\n })\r\n\r\n // Actualiza el array Lines en el estado de LineItems con los elementos actualizados\r\n return { ...updatedLineItems, Lines: updatedLines }\r\n })\r\n}\r\n","/**\r\n * Generate the store URL based on given parameters.\r\n * @returns The generated URL or '/' if any field is missing.\r\n */\r\ntype City = { cName: string };\r\ntype Department = { dName: string };\r\n\r\ninterface GenerateStoreURLParams {\r\n city: City;\r\n department: Department;\r\n storeName: string;\r\n idStore: string;\r\n rootMainPath?: string;\r\n}\r\n\r\nexport const generateStoreURL = ({\r\n city,\r\n department,\r\n storeName,\r\n idStore,\r\n rootMainPath = 'delivery'\r\n}: GenerateStoreURLParams): string => {\r\n // Validate all necessary fields\r\n if (\r\n !process.env.MAIN_URL_BASE ||\r\n !city?.cName ||\r\n !department?.dName ||\r\n !storeName ||\r\n !idStore\r\n ) {\r\n return '/' // Return '/' or any default case you'd prefer\r\n }\r\n\r\n const cityName = city.cName.toLocaleLowerCase()\r\n const departmentName = department.dName.toLocaleLowerCase()\r\n\r\n // Replace spaces in storeName with hyphens\r\n const formattedStoreName = storeName.replace(/ /g, '-')\r\n\r\n return `${process.env.MAIN_URL_BASE}/${rootMainPath}/${cityName}-${departmentName}/${formattedStoreName}/${idStore}`\r\n}\r\n","import { useMutation } from '@apollo/client'\n\r\nimport { CREATE_STORE_PENDING_TO_REGISTER } from './queries'\r\n\r\n/**\n *\n */\nexport function useCreateStorePendingToRegister () {\r\n const [createStorePendingToRegister, { data, loading, error }] = useMutation(CREATE_STORE_PENDING_TO_REGISTER)\r\n\r\n return {\r\n createStorePendingToRegister,\r\n data,\r\n loading,\r\n error\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CREATE_STORE_PENDING_TO_REGISTER = gql`\r\n mutation createStorePendingToRegister($input: StorePendingToRegisterInput) {\r\n createStorePendingToRegister(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\n","import { useLazyQuery } from '@apollo/client'\n\r\nimport { GET_ALL_DEPARTMENTS } from './queries'\r\n\r\n/**\r\n * Custom hook to fetch departments lazily based on the provided company ID.\r\n *\r\n * @returns {Array} - Returns an array containing a function to execute the query, and an object containing data and any associated query state/error.\r\n */\r\nexport function useDepartments () {\r\n const [getDepartments, { data, loading, error }] = useLazyQuery(GET_ALL_DEPARTMENTS)\r\n\r\n return [getDepartments, { data: data ? data?.departments : [], loading, error }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_DEPARTMENTS = gql`\r\n query getAllDepartments($cId: ID!) {\r\n departments(cId: $cId) {\r\n dId\r\n cId\r\n dName\r\n dState\r\n code_dId\r\n }\r\n }\r\n`\r\n","import { useMutation } from '@apollo/client'\n\r\nimport { SAVE_LOCATION_USER } from './queries'\r\n\r\nexport const useSaveLocation = () => {\r\n const [updateUserLocations, { loading, error, data }] =\r\n useMutation(SAVE_LOCATION_USER)\r\n\r\n return [\r\n updateUserLocations,\r\n {\r\n loading,\r\n error,\r\n data\r\n }\r\n ]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const SAVE_LOCATION_USER = gql`\r\nmutation updateUserLocations($input: InputUserLocation) {\r\n updateUserLocations(input: $input) {\r\n locationId\r\n id\r\n cId\r\n dId\r\n ctId\r\n uLatitud\r\n uLongitude\r\n uLocationKnow\r\n uPiso\r\n DatCre\r\n DatMod\r\n }\r\n}\r\n`\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_ROAD } from './queries'\r\n\r\n/**\r\n * Custom hook to fetch all roads.\r\n *\r\n * @returns {Object} - Returns an object containing road data and any associated query state/error.\r\n */\r\nexport function useRoads () {\r\n const { data, loading, error } = useQuery(GET_ALL_ROAD)\r\n\r\n // Here, you can handle any additional logic you might need, like mapping data, handling errors, etc.\r\n\r\n return {\r\n data: data || [],\r\n loading,\r\n error\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_ROAD = gql`\r\nquery getTypeRoad {\r\n road{\r\n rId\r\n rName\r\n rState\r\n rDatCre\r\n rDatMod\r\n }\r\n}\r\n`\r\n","import { useLazyQuery } from '@apollo/client'\n\r\nimport { GET_ALL_CITIES } from './queries'\r\n\r\n/**\r\n * Custom hook to fetch cities lazily based on the provided department ID.\r\n *\r\n * @returns {Array} - Returns an array containing a function to execute the query, and an object containing data and any associated query state/error.\r\n */\r\nexport function useCities () {\r\n const [getCities, { data, loading, error }] = useLazyQuery(GET_ALL_CITIES)\r\n\r\n return [getCities, { data: data ? data?.cities : [], loading, error }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_CITIES = gql`\r\n query getAllCities($dId: ID!) {\r\n cities(dId: $dId) {\r\n ctId\r\n dId\r\n cName\r\n cState\r\n }\r\n }\r\n`\r\n","import { gql, useMutation } from '@apollo/client'\r\n\r\nconst EDIT_CATEGORY_PRODUCT = gql`\r\n mutation EditOneCategoryProduct($pName: String!, $ProDescription: String, $carProId: ID!) {\r\n editOneCategoryProduct(pName: $pName, ProDescription: $ProDescription, carProId: $carProId) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\n\r\nexport const useEditCategoryProduct = ({ sendNotification = () => { } } = {}) => {\r\n const [editCategoryProductMutation] = useMutation(EDIT_CATEGORY_PRODUCT)\r\n\r\n const editCategoryProduct = async (pName, ProDescription, carProId) => {\r\n try {\r\n const { data } = await editCategoryProductMutation({\r\n variables: { pName, ProDescription, carProId }\r\n })\r\n\r\n if (data.editOneCategoryProduct.success) {\r\n return {\r\n success: true,\r\n message: 'Categoría de producto editada correctamente'\r\n }\r\n } \r\n return {\r\n success: false,\r\n message: data.editOneCategoryProduct.message || 'Error al editar la categoría de producto'\r\n }\r\n \r\n } catch (error) {\r\n return {\r\n success: false,\r\n message: error.message || 'Error al editar la categoría de producto'\r\n }\r\n }\r\n }\r\n\r\n return { editCategoryProduct }\r\n}\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_EMPLOYEES } from './queries'\r\n\r\nexport const useEmployee = () => {\r\n const {\r\n data,\r\n loading,\r\n error,\r\n fetchMore\r\n } = useQuery(GET_EMPLOYEES)\r\n return [data?.employees?.data ?? [], {\r\n loading,\r\n error,\r\n fetchMore,\r\n pagination: data?.employees?.pagination ?? {}\r\n }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_EMPLOYEES = gql`\r\nquery employees {\r\n employees {\r\n data {\r\n eId\r\n idStore\r\n idRole\r\n eEmail\r\n eState\r\n status\r\n user {\r\n id\r\n name\r\n username\r\n lastName\r\n email\r\n avatar\r\n uToken\r\n uPhoNum\r\n ULocation\r\n upLat\r\n uState\r\n upLon\r\n upIdeDoc\r\n siteWeb\r\n description\r\n createAt\r\n associateStore\r\n }\r\n roles {\r\n idRole\r\nname\r\npriority\r\ndescription\r\npermissions\r\ncreatedAt\r\nupdatedAt\r\n }\r\n }\r\n success\r\n message\r\n pagination {\r\n totalRecords\r\n totalPages\r\n currentPage\r\n }\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n \r\n }\r\n}\r\n`\r\n/**\r\n * GraphQL mutation for creating an employee, store, and user.\r\n */\r\nexport const CREATE_ONE_EMPLOYEE_STORE_AND_USER = gql`\r\n mutation createOneEmployeeStoreAndUser($input: IEmployeeStore!) {\r\n createOneEmployeeStoreAndUser(input: $input) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n }\r\n }\r\n`\n","import { useMutation } from '@apollo/client'\r\nimport { useState } from 'react'\n\r\nimport { CREATE_ONE_EMPLOYEE_STORE_AND_USER } from './queries'\r\n\r\n/**\r\n * Custom hook to handle the createOneEmployeeStoreAndUser mutation.\r\n *\r\n * @param root0\n * @param {Object}\r\n * @param root0.sendNotification\n * @param root0.onCompleted\n * @param root0.onError\n * @returns {{\r\n * createEmployeeStoreAndUser: (input: IEmployeeStore) => Promise<void>,\r\n * loading: boolean,\r\n * error: Error | null,\r\n * data: Object | null\r\n * }} An object containing the mutation function, loading status, error, and data.\r\n */\r\nexport const useCreateEmployeeStoreAndUser = ({\r\n sendNotification = () => {\r\n return {\r\n description: '',\r\n title: '',\r\n backgroundColor: ''\r\n }\r\n },\r\n onCompleted = () => {\r\n return {\r\n }\r\n },\r\n onError = () => {\r\n return {\r\n }\r\n }\r\n} = {}) => {\r\n const [createEmployeeStoreAndUserMutation, { loading, error, data }] = useMutation(CREATE_ONE_EMPLOYEE_STORE_AND_USER, {\r\n onError: () => {\r\n sendNotification({\r\n description: 'Error creando empleado',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n },\r\n onCompleted: (response) => {\r\n console.log(response)\r\n const { createOneEmployeeStoreAndUser } = response ?? {}\r\n const { message, success } = createOneEmployeeStoreAndUser ?? {}\r\n if (success === false) {\r\n onError(response)\r\n }\r\n if (success) {\r\n onCompleted(response)\r\n }\r\n sendNotification({\r\n description: message,\r\n title: success ? 'Exito' : 'Error',\r\n backgroundColor: success ? 'success' : 'error'\r\n })\r\n }\r\n })\r\n const [errors, setErrors] = useState([])\r\n\r\n /**\r\n * Calls the createOneEmployeeStoreAndUser mutation.\r\n *\r\n * @param {Object} input - The input data for the mutation.\r\n * @returns {Promise<void>}\r\n */\r\n const createEmployeeStoreAndUser = async (input) => {\r\n try {\r\n const response = await createEmployeeStoreAndUserMutation({ variables: { input } })\r\n if (response.data.createOneEmployeeStoreAndUser.errors) {\r\n setErrors(response.data.createOneEmployeeStoreAndUser.errors)\r\n } else {\r\n setErrors([])\r\n }\r\n } catch (err) {\r\n setErrors([{ message: err.message }])\r\n }\r\n }\r\n\r\n return [createEmployeeStoreAndUser, {\r\n loading,\r\n error,\r\n data,\r\n errors\r\n }]\r\n}\r\n","import { useCallback, useState } from 'react'\r\n\r\n/**\r\n * Hook for managing multiple checkbox states\r\n *\r\n * @param {Array<String | Number>} elem - list of all elem\r\n * @param {Array<String | Number>} selectedIds - list of selected elem (optional)\r\n *\r\n * @returns {Object}\r\n * - checkboxStates (state object),\r\n * - numSelectedItems (number),\r\n * - handleChangeCheck (callback),\r\n * - toggleAll (callback),\r\n * - selectAll (callback),\r\n * - clearAll (callback)\r\n */\r\n\r\nexport const useCheckboxState = (elem, selectedIds = [], disabledIds = [], setArray = () => { }) => {\r\n const numTotalItems = elem?.length\r\n const [checkedItems, setCheckedItems] = useState(new Set(selectedIds))\r\n const [disabledItems, setDisabledItems] = useState(new Set(disabledIds))\r\n\r\n const handleChangeCheck = useCallback((event, id) => {\r\n const target = event.target\r\n setCheckedItems(prevState => {\r\n const newState = new Set(prevState)\r\n if (target.checked) {\r\n newState.add(id)\r\n } else {\r\n newState.delete(id)\r\n }\r\n return newState\r\n })\r\n }, [])\r\n\r\n const setAll = useCallback(\r\n isChecked => {\r\n setCheckedItems(prevState => {\r\n const newState = new Set(prevState)\r\n for (const id of elem) {\r\n if (disabledItems.has(id)) {\r\n continue\r\n }\r\n if (isChecked) {\r\n newState.add(id)\r\n } else {\r\n newState.delete(id)\r\n }\r\n }\r\n return newState\r\n })\r\n },\r\n [elem, disabledItems]\r\n )\r\n\r\n const selectAll = useCallback(() => {\r\n if (checkedItems.size === numTotalItems) {\r\n return\r\n }\r\n setAll(true)\r\n }, [checkedItems, numTotalItems, setAll])\r\n\r\n const clearAll = useCallback(() => {\r\n if (checkedItems.size === 0) {\r\n return\r\n }\r\n setAll(false)\r\n }, [checkedItems, setAll])\r\n\r\n const toggleAll = useCallback(() => {\r\n const numDisabledAndChecked = [...disabledItems].reduce((count, id) => {\r\n if (checkedItems.has(id)) {\r\n return count + 1\r\n }\r\n return count\r\n }, 0)\r\n if (checkedItems.size - numDisabledAndChecked === 0) {\r\n selectAll()\r\n } else {\r\n clearAll()\r\n }\r\n }, [checkedItems, disabledItems, selectAll, clearAll])\r\n\r\n const enableCheckboxes = useCallback((...elem) => {\r\n setDisabledItems(prevState => {\r\n const newState = new Set(prevState)\r\n for (const id of elem) {\r\n newState.delete(id)\r\n }\r\n return newState\r\n })\r\n }, [])\r\n\r\n const disableCheckboxes = useCallback((...elem) => {\r\n setDisabledItems(prevState => {\r\n const newState = new Set(prevState)\r\n for (const id of elem) {\r\n newState.add(id)\r\n }\r\n return newState\r\n })\r\n }, [])\r\n\r\n return {\r\n checkedItems,\r\n disabledItems,\r\n handleChangeCheck,\r\n toggleAll,\r\n selectAll,\r\n clearAll,\r\n setCheckedItems,\r\n enableCheckboxes,\r\n disableCheckboxes\r\n }\r\n}\r\n","import { useMutation } from '@apollo/client'\n\r\nimport { DELETE_CAT_EXTRA_PRODUCTS } from './queries'\r\n\r\nexport const useRemoveExtraProductFoodsOptional = () => {\r\n const [DeleteExtProductFoodsOptional, { loading, error }] = useMutation(DELETE_CAT_EXTRA_PRODUCTS)\r\n\r\n const handleDeleteOptional = async elem => {\r\n const { state, opExPid } = elem || {}\r\n DeleteExtProductFoodsOptional({\r\n variables: {\r\n state,\r\n opExPid,\r\n isCustomOpExPid: true\r\n }\r\n })\r\n }\r\n return {\r\n handleDeleteOptional,\r\n DeleteExtProductFoodsOptional,\r\n loading,\r\n error\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const DELETE_CAT_EXTRA_PRODUCTS = gql`\r\n mutation DeleteExtProductFoodsOptional($opExPid: ID, $state: Int, $isCustomOpExPid: Boolean) {\r\n DeleteExtProductFoodsOptional(opExPid: $opExPid, state: $state, isCustomOpExPid: $isCustomOpExPid) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\n\r\nexport const GET_EXTRAS_PRODUCT_FOOD_OPTIONAL = gql`\r\n query ExtProductFoodsOptionalAll(\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $pId: ID\r\n ) {\r\n ExtProductFoodsOptionalAll(\r\n search: $search\r\n min: $min\r\n max: $max\r\n pId: $pId\r\n ) {\r\n pId\r\n opExPid\r\n OptionalProName\r\n state\r\n code\r\n numbersOptionalOnly\r\n createdAt\r\n required\r\n updatedAt\r\n ExtProductFoodsSubOptionalAll {\r\n pId\r\n opExPid\r\n idStore\r\n opSubExPid\r\n OptionalSubProName\r\n exCodeOptionExtra\r\n exCode\r\n state\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n }\r\n`\r\n","import { useMutation } from '@apollo/client'\n\r\nimport { updateCacheMod } from '../../utils'\r\nimport { GET_EXTRAS_PRODUCT_FOOD_OPTIONAL } from '../useRemoveExtraProductFoodsOptional/queries'\n\r\nimport { DELETE_CAT_EXTRA_SUB_OPTIONAL_PRODUCTS } from './queries'\r\n\r\nexport const useDeleteSubProductOptional = ({ setAlertBox = () => { } } = {}) => {\r\n const [DeleteExtFoodSubsOptional, {\r\n loading,\r\n error,\r\n called\r\n }] = useMutation(DELETE_CAT_EXTRA_SUB_OPTIONAL_PRODUCTS)\r\n\r\n const handleRemoveSubProductOptional = ({ state, opSubExPid }) => {\r\n DeleteExtFoodSubsOptional({\r\n variables: {\r\n state,\r\n opSubExPid\r\n },\r\n update: (cache, { data: { ExtProductFoodsOptionalAll } }) => {\r\n return updateCacheMod({\r\n cache,\r\n query: GET_EXTRAS_PRODUCT_FOOD_OPTIONAL,\r\n nameFun: 'ExtProductFoodsOptionalAll',\r\n dataNew: ExtProductFoodsOptionalAll\r\n })\r\n }\r\n }).then(res => { return setAlertBox({ message: res?.message?.DeleteExtFoodSubsOptional?.message }) })\r\n }\r\n return [DeleteExtFoodSubsOptional, handleRemoveSubProductOptional, { loading, error, called }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const DELETE_CAT_EXTRA_SUB_OPTIONAL_PRODUCTS = gql`\r\nmutation DeleteExtFoodSubsOptional($opSubExPid: ID, $state: Int, $isCustomSubOpExPid: Boolean){\r\n DeleteExtFoodSubsOptional(opSubExPid: $opSubExPid, state: $state, isCustomSubOpExPid: $isCustomSubOpExPid){\r\n success, \r\n message\r\n}\r\n}\r\n`\r\n","import { useLazyQuery } from '@apollo/client'\r\nimport { useState } from 'react'\n\r\nimport { GET_ONE_RATING_STORE } from './queries'\r\n\r\nexport const useGetOneStoreRating = () => {\r\n const [ratings, setRatings] = useState({\r\n rGoodTemperature: 0,\r\n rGoodCondition: 0,\r\n rTasty: 0,\r\n appearance: 0\r\n })\r\n\r\n const [getOneRating] = useLazyQuery(GET_ONE_RATING_STORE, {\r\n onCompleted: res => {\r\n if (res) {\r\n setRatings((prevState) => {\r\n const {\r\n rGoodTemperature,\r\n rGoodCondition,\r\n rTasty,\r\n rAppearance\r\n } = res.getOneRating || {}\r\n return {\r\n ...prevState,\r\n rGoodTemperature: rGoodTemperature || 0,\r\n rGoodCondition: rGoodCondition || 0,\r\n rTasty: rTasty || 0,\r\n appearance: rAppearance || 0\r\n }\r\n })\r\n }\r\n }\r\n })\r\n\r\n return {\r\n ratings,\r\n setRatings,\r\n getOneRating\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ONE_RATING_STORE = gql`\r\nquery getOneRating($idStore: ID){\r\ngetOneRating(idStore: $idStore){\r\n idStore\r\n rId\r\n id\r\n rAppearance\r\n rTasty\r\n rGoodTemperature\r\n rGoodCondition\r\n rState\r\n createAt\r\n updateAt\r\n }\r\n}\r\n`\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { filterAndSortByDate } from '../useRestaurant/helpers'\r\nimport { getStatusForStores } from '../useRestaurant/helpers/manageStatusOpen'\n\r\nimport { GET_ALL_FAV_STORE } from './queries'\r\n\r\nexport const useFavoriteStores = () => {\r\n const {\r\n data,\r\n loading,\r\n error\r\n } = useQuery(GET_ALL_FAV_STORE, {\r\n fetchPolicy: 'cache-and-network',\r\n onError: () => {\r\n console.log('')\r\n }\r\n })\r\n const newArray = data?.getFavorite?.map(store => {\r\n return {\r\n ...store.getOneStore\r\n }\r\n }) || []\r\n const dataSort = filterAndSortByDate(newArray)\r\n\r\n const statuses = getStatusForStores(dataSort)\r\n\r\n const favoriteStores = statuses || []\r\n\r\n return [loading ? [] : favoriteStores, { loading, error }]\r\n}\r\n","/**\n *\n * @param array\n */\nexport function filterAndSortByDate (array = []) {\r\n const isError = !Array.isArray(array) || !array.length\r\n try {\r\n if (isError) return []\r\n\r\n const currentDate = new Date()\r\n const sevenDaysAgo = currentDate.getTime() - 7 * 24 * 60 * 60 * 1000\r\n\r\n const filteredAndSorted = array.map(item => {\r\n const createdAtDate = new Date(item.createdAt)\r\n const isNew = (createdAtDate.getTime() <= sevenDaysAgo)\r\n return { ...item, isNew }\r\n }).sort((a, b) => {\r\n const dateA = new Date(a.createdAt).getTime()\r\n const dateB = new Date(b.createdAt).getTime()\r\n return dateB - dateA\r\n })\r\n\r\n return filteredAndSorted\r\n } catch (error) {\r\n if (isError) return []\r\n if (Array.isArray(array)) return array\r\n }\r\n}\r\n","import { addTenMinutes } from '../../addTenMinutes'\r\nimport { statusOpenStores } from '../../statusOpenStores'\r\n\r\nexport const getStatusForStores = (stores = []) => {\r\n return stores.map((store) => {\r\n const min = addTenMinutes(store?.deliveryTimeMinutes)\r\n if (store?.scheduleOpenAll) {\r\n return {\r\n ...store,\r\n status: { message: '', open: true },\r\n open: 1,\r\n min: min ?? ''\r\n }\r\n }\r\n const dataSchedules =\r\n (store?.getStoreSchedules?.length > 0 && store.getStoreSchedules) || []\r\n const status = statusOpenStores({ dataSchedules })\r\n\r\n return {\r\n ...store,\r\n status,\r\n min: min ?? '',\r\n open: status?.open ? 1 : 0\r\n }\r\n }).sort((a, b) => {return b.open - a.open})\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_FAV_STORE = gql`\r\n query getFavorite {\r\n getFavorite {\r\n fIStoreId\r\n fState\r\n createAt\r\n updateAt\r\n idStore\r\n\r\n getOneStore {\r\n getStoreSchedules {\r\n schId\r\n idStore\r\n schDay\r\n schHoSta\r\n schHoEnd\r\n schState\r\n }\r\n deliveryTimeMinutes\r\n scheduleOpenAll\r\n idStore\r\n cId\r\n id\r\n Image\r\n open\r\n cateStore {\r\n catStore\r\n cName\r\n }\r\n ctId\r\n catStore\r\n dId\r\n storeName\r\n Image\r\n city {\r\n ctId\r\n dId\r\n cName\r\n }\r\n department {\r\n dId\r\n cId\r\n dName\r\n }\r\n pais {\r\n cId\r\n cName\r\n }\r\n }\r\n }\r\n }\r\n`\r\n","import { useMutation } from '@apollo/client'\r\nimport {\r\n useState,\r\n useEffect,\r\n useMemo\r\n} from 'react'\n\r\nimport { statusOpenStores } from '../statusOpenStores'\r\nimport { useCart, useGetCart } from '../useCart'\nimport { useManageQueryParams } from '../useManageQueryParams'\n\r\nimport { calculateTotalPrice } from './helpers'\nimport { DELETE_ONE_ITEM_SHOPPING_PRODUCT } from './queries'\n\r\n\r\nexport const useAsideCart = ({\r\n openModalProduct = false,\r\n location = {\r\n pathname: '',\r\n push: (props, state, { shallow }) => {\r\n return { ...props, state, shallow }\r\n },\r\n query: {\r\n plato: ''\r\n }\r\n },\r\n setCountItemProduct = (number) => { return number },\r\n setAlertBox = (args) => { return args },\r\n setOpenModalProduct = () => { },\r\n handleMenu = (boolean) => { return boolean }\r\n} = {\r\n openModalProduct: false,\r\n location: {\r\n pathname: '',\r\n push: (props, state, { shallow }) => {\r\n return { ...props, state, shallow }\r\n },\r\n query: {\r\n plato: ''\r\n }\r\n },\r\n setCountItemProduct: (number) => { return number },\r\n setAlertBox: () => { },\r\n setOpenModalProduct: () => { },\r\n handleMenu: () => { }\r\n}) => {\r\n const { getOneProduct } = useCart({\r\n handleMenu,\r\n openModalProduct,\r\n location,\r\n setOpenModalProduct\r\n })\r\n\r\n const { handleQuery } = useManageQueryParams({\r\n location\r\n })\r\n\r\n const [totalProductPrice, setTotalProductPrice] = useState(0)\r\n\r\n const [dataShoppingCard, { loading }] = useGetCart({ setCountItemProduct })\r\n\r\n // Lógica de transformación de los datos\r\n const result2 = useMemo(() => {\r\n if (!loading && dataShoppingCard) {\r\n return dataShoppingCard.reduce((r, a) => {\r\n const storeName = a.getStore?.storeName\r\n if (storeName) {\r\n r[storeName] = r[storeName] || []\r\n r[storeName].push(a)\r\n }\r\n return r\r\n }, {})\r\n }\r\n return {}\r\n }, [loading, dataShoppingCard])\r\n\r\n // Obtener dataProduct2 directamente\r\n const key = useMemo(() => {\r\n return Object.keys(result2)\r\n }, [result2])\r\n\r\n useEffect(() => {\r\n const totalPrice = calculateTotalPrice(dataShoppingCard)\r\n setTotalProductPrice(Math.abs(totalPrice))\r\n }, [dataShoppingCard])\r\n\r\n const [deleteOneItem] = useMutation(DELETE_ONE_ITEM_SHOPPING_PRODUCT, {\r\n onCompleted: data => {\r\n setAlertBox({ message: data?.deleteOneItem?.message })\r\n\r\n if (dataShoppingCard?.length === 1 && data?.deleteOneItem?.success) {\r\n setAlertBox({ message: 'Tu carrito está vacío' }) // Ajusta el mensaje en español\r\n handleMenu(false) // Oculta el menú del carrito\r\n }\r\n }\r\n })\r\n\r\n const handleEditProduct = async (item) => {\r\n const pId = item?.pId || null\r\n if (pId) handleQuery('plato', pId)\r\n if (pId) {\r\n const product = { pId, intoCart: true }\r\n getOneProduct(product)\r\n }\r\n }\r\n /**\r\n * Handle the deletion of a shopping cart item.\r\n * @param {Object} item - The item to be deleted from the shopping cart.\r\n */\r\n const handleDeleteItemShopping = async (item) => {\r\n if (!item) {\r\n return setAlertBox({\r\n message: 'Error borrando el producto. Por favor intenta nuevamente.',\r\n color: 'error'\r\n })\r\n }\r\n\r\n try {\r\n const { cState, ShoppingCard } = item\r\n await deleteOneItem({\r\n variables: { cState, ShoppingCard },\r\n update: (cache) => {\r\n cache.modify({\r\n fields: {\r\n getAllShoppingCard (existingCart, { readField }) {\r\n if (!Array.isArray(existingCart)) return []\r\n\r\n const filteredCart = existingCart.filter(product =>\r\n {return readField('ShoppingCard', product) !== ShoppingCard}\r\n )\r\n\r\n // Actualizar el contador de productos\r\n setCountItemProduct(filteredCart.length)\r\n\r\n return filteredCart?.length > 0 ? filteredCart : []\r\n }\r\n }\r\n })\r\n }\r\n })\r\n } catch (error) {\r\n setAlertBox({ message: 'Error borrando el producto. Por favor intenta nuevamente.', color: 'error' })\r\n }\r\n }\r\n\r\n /**\r\n * Calculate the total price of a product.\r\n * @param {number} ProPrice - The price of the product.\r\n * @param {number} ProDelivery - The delivery cost of the product.\r\n * @param {number} cant - The quantity of the product.\r\n * @returns {number} The calculated total price.\r\n */\r\n const sumProduct = (ProPrice, ProDelivery, cant) => {\r\n // Convertir a números, con manejo de posibles errores\r\n const price = ProPrice\r\n const delivery = ProDelivery || 0\r\n const quantity = cant\r\n\r\n // Verificar si las conversiones fueron exitosas\r\n if (isNaN(price) || isNaN(delivery) || isNaN(quantity)) {\r\n throw new Error('Los valores proporcionados no son números válidos.')\r\n }\r\n\r\n // Calcular el precio final\r\n const priceFinal = quantity * price\r\n\r\n // Devolver la suma total, incluyendo el costo de entrega si es aplicable\r\n return delivery ? priceFinal + delivery : priceFinal\r\n }\r\n console.log(dataShoppingCard)\r\n\r\n /**\r\n * Verifica el estado de apertura de la tienda.\r\n *\r\n * @returns {Object|null} Objeto con el estado de apertura de la tienda o null en caso de error.\r\n * @throws {Error} Si ocurre un error durante la verificación del estado de la tienda.\r\n */\r\n const handleVerifyStoreOpenStatus = () => {\r\n /**\r\n * @type {Array} dataShoppingCard - El array de la tarjeta de compras.\r\n */\r\n if (!Array.isArray(dataShoppingCard)) {\r\n return { open: false } // Retorna un objeto indicando que la tienda no está abierta\r\n }\r\n\r\n /**\r\n * @type {Object} store - La primera tienda en el array de la tarjeta de compras.\r\n */\r\n const store = dataShoppingCard[0] || {}\r\n /**\r\n * @type {Object} getStore - El objeto que contiene información de la tienda.\r\n */\r\n const { getStore } = store\r\n\r\n /**\r\n * @type {Array} storeSchedules - El array de horarios de la tienda.\r\n */\r\n const storeSchedules = Array.isArray(getStore?.getStoreSchedules) ? getStore?.getStoreSchedules : []\r\n try {\r\n const status = getStore?.scheduleOpenAll ? { open: true } : statusOpenStores({ dataSchedules: storeSchedules })\r\n return status\r\n } catch (error) {\r\n return null\r\n }\r\n }\r\n\r\n return {\r\n key,\r\n totalProductPrice,\r\n result2,\r\n dataShoppingCard,\r\n handleDeleteItemShopping,\r\n handleEditProduct,\r\n handleVerifyStoreOpenStatus,\r\n sumProduct\r\n }\r\n}\r\n","import { useMutation } from '@apollo/client'\r\nimport { useState, useCallback, useEffect } from 'react'\n\r\nimport { RandomCode, updateCacheMod, numberFormat } from '../../../utils'\r\nimport { useGetExtProductFoodsSubOptionalAll } from '../../useGetExtProductFoodsSubOptionalAll'\r\nimport { useManageQueryParams } from '../../useManageQueryParams'\r\nimport { useExtProductFoodsAll, useGetOneProductsFood } from '../../useProductsFood'\r\nimport { CREATE_SHOPPING_CARD, GET_ALL_SHOPPING_CARD } from '../queries'\r\nimport { useGetCart } from '../useGetCart'\n\r\nimport {\r\n filterDataOptional,\r\n filterExtra,\r\n validateExtraProducts,\r\n validateRequirements\r\n} from './helpers'\n\r\n\r\nexport const useCart = ({\r\n location = {\r\n push: (props, state, { shallow }) => {\r\n return { ...props, state, shallow }\r\n },\r\n query: {\r\n plato: ''\r\n }\r\n },\r\n openModalProduct = false,\r\n handleMenu = (number) => { return number },\r\n setOpenModalProduct = (boolean) => { return boolean },\r\n setAlertBox = (args) => { return args }\r\n} = {}) => {\r\n // sub products\r\n const { handleCleanQuery } = useManageQueryParams({\r\n location\r\n })\r\n const [loadingButton, setLoadingButton] = useState(false)\r\n const [dataOptional, setDataOptional] = useState([])\r\n const [dataExtra, setDataExtra] = useState([])\r\n const [quantity, setQuantity] = useState(1)\r\n const [comments, setComments] = useState('')\r\n const queryParamProduct = location.query.plato\r\n const [registerShoppingCard] = useMutation(CREATE_SHOPPING_CARD, {\r\n onError: (error) => {\r\n console.error('Error registering shopping card:', error)\r\n }\r\n })\r\n // CUSTOM HOOKS\r\n const [dataShoppingCard, { loading }] = useGetCart()\r\n const [handleExtProductFoodsAll] = useExtProductFoodsAll()\r\n\r\n const [ExtProductFoodsSubOptionalAll] = useGetExtProductFoodsSubOptionalAll()\r\n const [dataOneProduct, setDataOneProduct] = useState({})\r\n const [handleGetOneProduct,\r\n {\r\n loading: loadingProduct\r\n }\r\n ] = useGetOneProductsFood({ fetchOnlyProduct: true })\r\n\r\n const getOneProduct = async food => {\r\n const { pId } = food || {}\r\n\r\n if (!pId) return {}\r\n setOpenModalProduct(true)\r\n const product = await handleGetOneProduct({ variables: { pId } })\r\n const productFoodsOne = product?.data?.productFoodsOne || {}\r\n setDataOneProduct(productFoodsOne)\r\n\r\n const matchingItemInShoppingCart = dataShoppingCard?.find((item) => {\r\n return item?.productFood && item?.productFood?.pId === pId\r\n })\r\n const matchingItemInShoppingCartOptional = matchingItemInShoppingCart?.salesExtProductFoodOptional || []\r\n if (matchingItemInShoppingCart && queryParamProduct) {\r\n setDataOneProduct({\r\n ...productFoodsOne,\r\n intoCart: true\r\n })\r\n const comments = matchingItemInShoppingCart?.comments\r\n if (comments) {\r\n setComments(comments)\r\n }\r\n const quantityProduct = matchingItemInShoppingCart?.cantProducts\r\n if (quantityProduct) {\r\n setQuantity(quantityProduct || 1)\r\n }\r\n }\r\n const optionalAll = await ExtProductFoodsSubOptionalAll({\r\n variables: { pId }\r\n })\r\n const optionalFetch = optionalAll?.data?.ExtProductFoodsOptionalAll\r\n const shoppingCartOptionalAll = matchingItemInShoppingCart?.ExtProductFoodsAll || []\r\n if (Array.isArray(optionalFetch)) {\r\n // Filtra y procesa los objetos de optionalFetch\r\n const filteredDataOptional = optionalFetch\r\n .map((obj) => {\r\n const filteredSubOptions = (obj.ExtProductFoodsSubOptionalAll || []).filter(\r\n (subObj) => {return subObj.check !== false}\r\n )\r\n\r\n if (filteredSubOptions.length === 0) {\r\n return null\r\n }\r\n\r\n return {\r\n ...obj,\r\n ExtProductFoodsSubOptionalAll: filteredSubOptions\r\n }\r\n })\r\n .filter((obj) => {return obj !== null})\r\n\r\n if (matchingItemInShoppingCartOptional?.length === 0) {\r\n setDataOptional(filteredDataOptional || [])\r\n }\r\n\r\n if (matchingItemInShoppingCartOptional?.length) {\r\n // Actualiza los objetos de filteredDataOptional con información de matchingItemInShoppingCartOptional\r\n const updateOption = filteredDataOptional?.map((obj) => {\r\n const matchingArray = matchingItemInShoppingCartOptional?.find(\r\n (o) => {return o && o.opExPid === obj.opExPid}\r\n )\r\n\r\n if (!matchingArray) {\r\n return obj\r\n }\r\n\r\n // Actualiza las propiedades específicas\r\n const updatedExtProductFoodsSubOptionalAll = (obj.ExtProductFoodsSubOptionalAll || []).map((subObj) => {\r\n const newItem = matchingArray.saleExtProductFoodsSubOptionalAll?.find((newItem) => {return newItem && newItem.opSubExPid === subObj.opSubExPid})\r\n\r\n if (newItem) {\r\n return {\r\n ...subObj,\r\n check: true\r\n }\r\n }\r\n\r\n return subObj\r\n })\r\n\r\n return {\r\n ...obj,\r\n ExtProductFoodsSubOptionalAll: updatedExtProductFoodsSubOptionalAll\r\n }\r\n }).filter((obj) => {return obj})\r\n\r\n setDataOptional(updateOption || [])\r\n }\r\n }\r\n if (!pId || pId === '') return\r\n const resultExtra = await handleExtProductFoodsAll(pId)\r\n const originalArray = resultExtra?.data?.ExtProductFoodsAll\r\n\r\n if (Array.isArray(originalArray) && originalArray?.length) {\r\n const fetchedDataExtra = originalArray?.map(extra => {\r\n const updatedExtra = shoppingCartOptionalAll?.find(updatedItem => {return updatedItem.exPid === extra.exPid})\r\n if (updatedExtra) {\r\n return {\r\n ...extra,\r\n quantity: updatedExtra?.quantity || 0,\r\n newExtraPrice: updatedExtra?.newExtraPrice || 0\r\n }\r\n }\r\n return {\r\n ...extra,\r\n quantity: 0\r\n }\r\n })\r\n\r\n setDataExtra(fetchedDataExtra)\r\n }\r\n }\r\n\r\n /**\r\n * The function `handleIncrementExtra` updates the quantity and price of a specific extra product in\r\n * an array based on the provided index and product ID.\r\n * @param root0\n * @param root0.extra\n * @param root0.index\n */\r\n function handleIncrementExtra ({ extra, index }) {\r\n // Desestructura las propiedades necesarias de dataOneProduct\r\n const { pId } = dataOneProduct || {}\r\n\r\n // Desestructura exPid de extra o establece un valor predeterminado si no existe\r\n const { exPid = null } = extra\r\n\r\n if (exPid && pId) {\r\n const newExtra = dataExtra.map((producto) => {\r\n if (exPid === producto.exPid) {\r\n // Desestructura la cantidad y el precio extra del producto o establece valores predeterminados\r\n const { quantity = 0, extraPrice = 0 } = producto\r\n\r\n // Calcula la nueva cantidad y el nuevo precio extra\r\n const newQuantity = quantity + 1\r\n const newExtraPrice = extraPrice * newQuantity\r\n\r\n return {\r\n ...producto,\r\n quantity: newQuantity,\r\n newExtraPrice\r\n }\r\n }\r\n return producto\r\n })\r\n\r\n // Actualiza el estado de dataExtra con el nuevo array\r\n setDataExtra(newExtra)\r\n }\r\n }\r\n\r\n /**\n *\n * @param root0\n * @param root0.extra\n * @param root0.index\n */\n function handleDecrementExtra ({ extra, index }) {\r\n // Desestructura las propiedades necesarias de dataOneProduct\r\n const { pId } = dataOneProduct || {}\r\n\r\n // Desestructura exPid de extra o establece un valor predeterminado si no existe\r\n const { exPid = null } = extra\r\n\r\n // Encuentra el índice del objeto extra en dataExtra\r\n const extraIndex = dataExtra.findIndex((item) => {return item.exPid === exPid})\r\n\r\n if (pId && exPid && extraIndex !== -1) {\r\n const newExtra = dataExtra.map((producto, i) => {\r\n if (exPid === producto.exPid) {\r\n // Desestructura la cantidad y el precio extra del producto o establece valores predeterminados\r\n const { quantity = 0, extraPrice = 0 } = producto\r\n\r\n // Calcula la nueva cantidad, evitando que sea negativa\r\n const newQuantity = Math.max(quantity - 1, 0)\r\n\r\n // Calcula el nuevo precio extra\r\n const newExtraPrice = newQuantity === 0 ? extraPrice : extraPrice * newQuantity\r\n\r\n return {\r\n ...producto,\r\n quantity: newQuantity,\r\n newExtraPrice\r\n }\r\n }\r\n return producto\r\n })\r\n\r\n // Actualiza el estado de dataExtra con el nuevo array\r\n setDataExtra(newExtra)\r\n }\r\n }\r\n\r\n const handleIncrease = () => {\r\n return setQuantity((prev) => { return prev + 1 })\r\n }\r\n\r\n const handleDecrease = () => {\r\n return setQuantity((prev) => { return prev - 1 })\r\n }\r\n\r\n const handleCountProducts = useCallback((ProPrice, quantity) => {\r\n if (!ProPrice || !quantity) {\r\n return 0 // Manejo de valores nulos o no numéricos\r\n }\r\n\r\n const price = parseFloat(ProPrice)\r\n const numericQuantity = parseInt(quantity, 10)\r\n\r\n if (isNaN(price) || isNaN(numericQuantity)) {\r\n return 0 // Manejo de valores no numéricos\r\n }\r\n\r\n if (numericQuantity <= 0 || price <= 0) {\r\n return price // Manejo de cantidades o precios no positivos\r\n }\r\n\r\n const totalPrice = Math.abs(numericQuantity * price)\r\n return numberFormat(totalPrice) // Si es necesario, aplicar formateo aquí\r\n }, [dataOneProduct])\r\n\r\n const handleAddOptional = ({ exOptional = null, codeCategory = null }) => {\r\n if (!exOptional || !codeCategory) return\r\n const item = dataOptional.find((item) => {return item.code === codeCategory})\r\n if (!item) return\r\n const idx = item.ExtProductFoodsSubOptionalAll.findIndex(\r\n (el) => {return el.opSubExPid === exOptional}\r\n )\r\n if (item && idx !== -1) {\r\n const updatedItem = {\r\n ...item,\r\n ExtProductFoodsSubOptionalAll: [\r\n ...item.ExtProductFoodsSubOptionalAll.slice(0, idx),\r\n {\r\n ...item.ExtProductFoodsSubOptionalAll[idx],\r\n check: !item.ExtProductFoodsSubOptionalAll[idx].check\r\n },\r\n ...item.ExtProductFoodsSubOptionalAll.slice(idx + 1)\r\n ]\r\n }\r\n const newData = dataOptional.map((el) =>\r\n {return el.code === codeCategory ? updatedItem : el}\r\n )\r\n setDataOptional((prevData) => {return [...newData]})\r\n }\r\n }\r\n\r\n const isValidDataExtra = (!dataExtra.length && !dataOneProduct?.pId) ? false : !validateExtraProducts(dataExtra)\r\n\r\n const isValid = (!dataOptional.length && !dataOneProduct?.pId) ? false : validateRequirements(dataOptional)\r\n\r\n const disabled = isValid || isValidDataExtra\r\n\r\n /**\r\n * Handles the addition of products to the cart.\r\n *\r\n * @param {Object} food - The selected food item.\r\n */\r\n const handleAddProducts = async (food) => {\r\n if (!food) return\r\n const idStore = food?.getStore?.idStore\r\n if (!idStore) {\r\n return\r\n }\r\n setLoadingButton(true)\r\n const isExistItemInShoppingCart = dataShoppingCard?.find((item) => {\r\n return item?.productFood && item?.productFood?.pId === food.pId\r\n }) ?? null\r\n if (!isExistItemInShoppingCart) handleMenu(1)\r\n const filteredDataOptional = filterDataOptional(dataOptional)\r\n\r\n const dataExtraFiltered = filterExtra(dataExtra)\r\n\r\n const refCodePid = RandomCode(20)\r\n\r\n const idShoppingCart = isExistItemInShoppingCart?.ShoppingCard\r\n try {\r\n const idStore = food?.getStore?.idStore\r\n const response = await registerShoppingCard({\r\n variables: {\r\n input: {\r\n ShoppingCard: idShoppingCart ?? null,\r\n cState: 1,\r\n pId: food.pId,\r\n idStore,\r\n refCodePid: idShoppingCart ? null : refCodePid,\r\n comments,\r\n cName: '',\r\n cantProducts: quantity,\r\n csDescription: '',\r\n dataExtra: dataExtraFiltered || [],\r\n dataOptional: filteredDataOptional || []\r\n },\r\n idSubArray: {\r\n setID: []\r\n }\r\n },\r\n update: (cache, { data: { getAllShoppingCard } }) => {\r\n return updateCacheMod({\r\n cache,\r\n query: GET_ALL_SHOPPING_CARD,\r\n nameFun: 'getAllShoppingCard',\r\n dataNew: getAllShoppingCard\r\n })\r\n }\r\n })\r\n\r\n if (response?.data) {\r\n if (!idShoppingCart) {\r\n setAlertBox({ message: 'producto agregado al carrito' })\r\n }\r\n if (idShoppingCart) {\r\n setAlertBox({ message: 'producto actualizado' })\r\n }\r\n // Perform actions after adding products to cart\r\n }\r\n } catch (error) {\r\n setAlertBox({ message: 'Ocurrió un error al añadir el producto al carrito' })\r\n }\r\n setLoadingButton(false)\r\n }\r\n\r\n const handleShowModalProduct = () => {\r\n if (openModalProduct) {\r\n setDataExtra([])\r\n setDataOneProduct({})\r\n setQuantity(1)\r\n setComments('')\r\n setDataOptional([])\r\n }\r\n if (queryParamProduct && openModalProduct) {\r\n handleCleanQuery('plato')\r\n }\r\n return setOpenModalProduct(!openModalProduct)\r\n }\r\n\r\n useEffect(() => {\r\n if (queryParamProduct) {\r\n const product = { pId: queryParamProduct }\r\n getOneProduct(product)\r\n }\r\n }, [queryParamProduct])\r\n\r\n return {\r\n quantity,\r\n disabled,\r\n comments,\r\n loading: loadingProduct || loading,\r\n dataOneProduct,\r\n loadingButton,\r\n dataExtra,\r\n dataOptional,\r\n setQuantity,\r\n handleShowModalProduct,\r\n handleDecrease,\r\n handleIncrease,\r\n getOneProduct,\r\n handleIncrementExtra,\r\n handleDecrementExtra,\r\n handleAddOptional,\r\n setComments,\r\n handleCountProducts,\r\n handleAddProducts\r\n }\r\n}\r\n","import { useLazyQuery } from '@apollo/client'\n\r\nimport { GET_EXTRAS_PRODUCT_FOOD_OPTIONAL } from '../useProductsFood/queriesStore'\r\n\r\nexport const useGetExtProductFoodsSubOptionalAll = ({ setDataOptional = () => { } } = {}) => {\r\n const [ExtProductFoodsSubOptionalAll] = useLazyQuery(\r\n GET_EXTRAS_PRODUCT_FOOD_OPTIONAL,\r\n {\r\n onError: () => {\r\n setDataOptional([])\r\n }\r\n }\r\n )\r\n return [ExtProductFoodsSubOptionalAll]\r\n}\r\n","import {\r\n useApolloClient,\r\n useLazyQuery,\r\n useMutation,\r\n useQuery\r\n} from '@apollo/client'\r\nimport { useCallback, useMemo, useState } from 'react'\n\r\nimport { useStockUpdatedAllSubscription } from '../useStock'\n\r\nimport {\r\n GET_ALL_EXTRA_PRODUCT,\r\n GET_ALL_PRODUCT_STORE,\r\n GET_EXTRAS_PRODUCT_FOOD_OPTIONAL,\r\n GET_ONE_PRODUCTS_FOOD,\r\n UPDATE_PRODUCT_FOOD\r\n} from './queriesStore'\r\nexport * from './useEditProduct'\r\n\r\ninterface UseProductsFoodOptions {\r\n idStore?: string | null\r\n categories?: string[]\r\n desc?: string[]\r\n fetchPolicy?: 'cache-first' | 'cache-and-network' | 'network-only' | 'no-cache'\r\n fromDate?: string | null\r\n gender?: string[]\r\n max?: number\r\n min?: number | null\r\n pState?: number\r\n search?: string | null\r\n toDate?: string | null\r\n dataSale?: Array<{ pId: string }>\r\n isShopppingCard?: boolean\r\n callback: (args: any) => void\r\n}\r\nexport const useProductsFood = ({\r\n idStore = null,\r\n categories = [],\r\n desc = [],\r\n fetchPolicy = 'cache-and-network',\r\n fromDate = null,\r\n gender = [],\r\n max = 100,\r\n min = null,\r\n pState,\r\n search = null,\r\n toDate = null,\r\n dataSale = [],\r\n isShopppingCard = false,\r\n callback\r\n}: UseProductsFoodOptions) => {\r\n const [showMore, setShowMore] = useState(500)\r\n const client = useApolloClient()\r\n const variables = useMemo(() => {return {\r\n categories,\r\n desc,\r\n gender,\r\n max,\r\n min,\r\n pState,\r\n search\r\n }}, [categories, desc, gender, max, min, pState, search, callback])\r\n\r\n const { data, loading, fetchMore, refetch, error, called } = useQuery(GET_ALL_PRODUCT_STORE, {\r\n onCompleted: (data) => {\r\n callback(data)\r\n },\r\n fetchPolicy,\r\n notifyOnNetworkStatusChange: true,\r\n nextFetchPolicy: 'cache-first',\r\n refetchWritePolicy: 'merge',\r\n variables\r\n })\r\n\r\n const productsFood = data?.productFoodsAll?.data ?? []\r\n /**\r\n * Callback when subscription emits a stock update.\r\n * Updates Apollo cache for GET_ALL_PRODUCT_STORE with same variables so UI updates reactively.\r\n */\r\n const onStockUpdated = useCallback(\r\n (payload: any) => {\r\n try {\r\n if (!payload || !payload.pId) return\r\n\r\n // Try to read current query result from cache (may throw if not present)\r\n const cached = client.readQuery({\r\n query: GET_ALL_PRODUCT_STORE,\r\n variables\r\n })\r\n\r\n if (!cached?.productFoodsAll?.data) return\r\n\r\n const updatedData = cached.productFoodsAll.data.map((prod: any) => {\r\n if (!prod || prod.pId !== payload.pId) return prod\r\n\r\n // update stock in-place preserving other fields; prefer 'stock' field name but keep others\r\n return {\r\n ...prod,\r\n // if your product model uses another field name replace 'stock' accordingly\r\n stock: payload.newStock,\r\n previousStock: payload.previousStock ?? prod.previousStock ?? null,\r\n // keep a meta object with event info for UI if needed\r\n lastStockEvent: {\r\n event: payload.event,\r\n meta: payload.meta\r\n }\r\n }\r\n })\r\n\r\n // Write back to cache so queries using GET_ALL_PRODUCT_STORE update automatically\r\n client.writeQuery({\r\n query: GET_ALL_PRODUCT_STORE,\r\n variables,\r\n data: {\r\n ...cached,\r\n productFoodsAll: {\r\n ...cached.productFoodsAll,\r\n data: updatedData\r\n }\r\n }\r\n })\r\n } catch (err) {\r\n // be silent but log for debugging\r\n // (don't throw — subscription should not break the app)\r\n \r\n console.error('useProductsFood: failed updating cache from subscription', err)\r\n }\r\n },\r\n // include all variables that affect the cache key\r\n [client, JSON.stringify(variables)]\r\n )\r\n // Attach subscription only if idStore is provided (the subscription hook internally skips when idStore is falsy)\r\n useStockUpdatedAllSubscription(idStore ?? '', onStockUpdated)\r\n\r\n if (!isShopppingCard) {\r\n return [\r\n productsFood, {\r\n pagination: data?.productFoodsAll?.pagination || {},\r\n loading: called ? false : loading,\r\n error,\r\n showMore,\r\n fetchMore,\r\n refetch,\r\n setShowMore\r\n }\r\n ]\r\n }\r\n\r\n const updatedProductsFood = productsFood.map((product: any) => {return {\r\n ...product,\r\n existsInSale: Array.isArray(dataSale) && dataSale.some(item => {return item.pId === product.pId})\r\n }})\r\n\r\n return [\r\n updatedProductsFood,\r\n {\r\n pagination: data?.productFoodsAll?.pagination || {},\r\n loading: called ? false : loading,\r\n error,\r\n showMore,\r\n fetchMore,\r\n refetch,\r\n setShowMore\r\n }\r\n ]\r\n}\r\n\r\nexport const useDeleteProductsFood = ({\r\n sendNotification = (arg) => { return arg },\r\n onSuccess = (arg) => { return arg }\r\n} = {\r\n sendNotification: (arg) => { return arg },\r\n onSuccess: (arg) => { return arg }\r\n}) => {\r\n const [updateProductFoods, { data, loading, error }] = useMutation(UPDATE_PRODUCT_FOOD)\r\n\r\n const handleDelete = async product => {\r\n const { pId, pState } = product || {}\r\n return await updateProductFoods({\r\n variables: {\r\n input: {\r\n pId,\r\n pState\r\n }\r\n },\r\n update(cache) {\r\n cache.modify({\r\n fields: {\r\n productFoodsAll(dataOld = []) {\r\n if (Array.isArray(dataOld) && dataOld?.length) {\r\n const product = dataOld?.find((product) => {\r\n return product.pId === pId\r\n })\r\n if (product) {\r\n const newProductList = dataOld?.filter((product) => {\r\n return product?.pId !== pId\r\n })\r\n return newProductList\r\n }\r\n return dataOld\r\n } \r\n return []\r\n \r\n }\r\n }\r\n })\r\n cache.modify({\r\n fields: {\r\n getCatProductsWithProduct(dataOld = []) {\r\n if (Array.isArray(dataOld?.catProductsWithProduct) && dataOld?.catProductsWithProduct?.length) {\r\n const newListCatProducts = dataOld?.catProductsWithProduct?.map((categories) => {\r\n return {\r\n ...categories,\r\n productFoodsAll: categories?.productFoodsAll?.length\r\n ? categories?.productFoodsAll?.filter((product) => {\r\n return product?.pId !== pId\r\n })\r\n : []\r\n }\r\n })\r\n return {\r\n catProductsWithProduct: newListCatProducts,\r\n totalCount: newListCatProducts?.length\r\n }\r\n }\r\n return dataOld\r\n }\r\n }\r\n })\r\n }\r\n }).then(() => {\r\n onSuccess()\r\n return sendNotification({\r\n title: 'Éxito',\r\n description: pState === 1 ? 'El producto se ha eliminado correctamente' : 'El producto se ha restaurando correctamente',\r\n backgroundColor: 'success'\r\n })\r\n }).catch((e) => {\r\n console.log(e)\r\n return sendNotification({\r\n title: 'Error',\r\n description: 'Ocurrió un error',\r\n backgroundColor: 'error'\r\n })\r\n })\r\n }\r\n return {\r\n handleDelete, data, loading, error\r\n }\r\n}\r\n\r\nexport const useExtProductFoodsAll = () => {\r\n const [ExtProductFoodsAll,\r\n {\r\n data,\r\n loading,\r\n error\r\n }\r\n ] = useLazyQuery(GET_ALL_EXTRA_PRODUCT)\r\n\r\n const handleExtProductFoodsAll = (pId) => {\r\n if (!pId) return\r\n return ExtProductFoodsAll({\r\n variables: {\r\n pId\r\n }\r\n })\r\n }\r\n return [handleExtProductFoodsAll,\r\n {\r\n data: data?.ExtProductFoodsAll || [],\r\n loading,\r\n error\r\n }\r\n ]\r\n}\r\n\r\nexport const useExtProductFoodsOptionalAll = () => {\r\n const [ExtProductFoodsOptionalAll,\r\n {\r\n data,\r\n loading,\r\n error\r\n }] = useLazyQuery(GET_EXTRAS_PRODUCT_FOOD_OPTIONAL)\r\n\r\n const handleGetExtProductFood = (pId) => {\r\n try {\r\n ExtProductFoodsOptionalAll({\r\n variables: {\r\n pId\r\n }\r\n })\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n }\r\n return [handleGetExtProductFood,\r\n {\r\n data: data?.ExtProductFoodsOptionalAll || [],\r\n loading,\r\n error\r\n }]\r\n}\r\n\r\ninterface UseGetOneProductsFoodOptions {\r\n fetchOnlyProduct?: boolean\r\n}\r\nexport const useGetOneProductsFood = ({ fetchOnlyProduct = false }: UseGetOneProductsFoodOptions = {}) => {\r\n const [productFoodsOne,\r\n {\r\n data,\r\n loading,\r\n error\r\n }] = useLazyQuery(GET_ONE_PRODUCTS_FOOD)\r\n\r\n const [handleGetExtProductFood, { data: dataOptional }] = useExtProductFoodsOptionalAll()\r\n const [handleExtProductFoodsAll, { data: dataExtra }] = useExtProductFoodsAll()\r\n const handleGetOneProduct = async (food: any) => {\r\n const { pId } = food\r\n try {\r\n const product = await productFoodsOne({\r\n variables: {\r\n pId\r\n }\r\n })\r\n if (!fetchOnlyProduct) handleGetExtProductFood(pId)\r\n if (!fetchOnlyProduct) handleExtProductFoodsAll(pId)\r\n return product\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n }\r\n const handleFunctionQuery = fetchOnlyProduct ? productFoodsOne : handleGetOneProduct\r\n return [handleFunctionQuery, {\r\n data: data?.productFoodsOne || {},\r\n dataExtra,\r\n dataOptional,\r\n loading,\r\n error\r\n }]\r\n}\r\n","\r\nimport { useSubscription, gql } from '@apollo/client'\r\n\r\nconst NEW_STORE_ORDER_SUBSCRIPTION = gql`\r\n subscription StockUpdatedAll($idStore: String) {\r\n StockUpdatedAll(idStore: $idStore) {\r\n pId\r\n newStock\r\n previousStock\r\n event\r\n meta\r\n }\r\n } \r\n`\r\n\r\ninterface StockUpdatedAllData {\r\n StockUpdatedAll: {\r\n pId: string\r\n newStock: number\r\n previousStock: number\r\n event: string\r\n meta: any\r\n }\r\n}\r\n\r\nexport const useStockUpdatedAllSubscription = (\r\n idStore: string,\r\n onStockUpdated: (data: StockUpdatedAllData['StockUpdatedAll']) => void\r\n) => {\r\n return useSubscription<StockUpdatedAllData>(NEW_STORE_ORDER_SUBSCRIPTION, {\r\n variables: { idStore },\r\n skip: !idStore,\r\n onSubscriptionData: ({ subscriptionData }) => {\r\n const data = subscriptionData.data?.StockUpdatedAll\r\n if (!data) return\r\n onStockUpdated(data)\r\n }\r\n })\r\n}\r\n\r\n","import { useMutation } from '@apollo/client'\n\r\nimport { EDIT_PRODUCT } from './queriesStore'\r\n\r\nexport const useEditProduct = ({\r\n sendNotification = () => {\r\n return null\r\n }\r\n} = {}) => {\r\n const [editProductFoods, { loading, error }] = useMutation(EDIT_PRODUCT, {\r\n onCompleted: (data) => {\r\n const { editProductFoods } = data\r\n const {\r\n success,\r\n message,\r\n errors\r\n } = editProductFoods || {\r\n success: false,\r\n message: '',\r\n errors: []\r\n }\r\n if (errors && errors.length > 0) {\r\n for (const error of errors) {\r\n sendNotification({\r\n title: 'Error',\r\n description: `${error.message}`,\r\n backgroundColor: 'error'\r\n })\r\n }\r\n }\r\n if (success) {\r\n sendNotification({\r\n title: 'Error',\r\n description: `${message}`,\r\n backgroundColor: 'error'\r\n })\r\n }\r\n },\r\n onError: (error) => {\r\n sendNotification({\r\n title: 'Error',\r\n description: error.message,\r\n backgroundColor: 'error'\r\n })\r\n }\r\n })\r\n\r\n return [editProductFoods, { loading, error }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CREATE_SHOPPING_CARD = gql`\r\n mutation registerShoppingCard(\r\n $input: IShoppingCard\r\n $idSubArray: IID_SUB_ITEMS\r\n ) {\r\n registerShoppingCard(input: $input, idSubArray: $idSubArray) {\r\n ShoppingCard\r\n id\r\n pId\r\n subProductsId\r\n ShoppingCardRefCode\r\n uuid\r\n discountCardProduct\r\n idUser\r\n cName\r\n idStore\r\n cState\r\n cDatCre\r\n cDatMod\r\n csDescription\r\n cantProducts\r\n comments\r\n }\r\n }\r\n`\r\n\r\nexport const GET_ALL_SHOPPING_CARD = gql`\r\n query getAllShoppingCard {\r\n getAllShoppingCard {\r\n ShoppingCard\r\n cState\r\n idStore\r\n refCodePid\r\n pId\r\n comments\r\n salesExtProductFoodOptional {\r\n pId\r\n opExPid\r\n OptionalProName\r\n state\r\n code\r\n required\r\n numbersOptionalOnly\r\n pDatCre\r\n pDatMod\r\n saleExtProductFoodsSubOptionalAll {\r\n pId\r\n opExPid\r\n idStore\r\n opSubExPid\r\n OptionalSubProName\r\n exCodeOptionExtra\r\n exCode\r\n state\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n ExtProductFoodsAll {\r\n pId\r\n exPid\r\n exState\r\n extraName\r\n extraPrice\r\n quantity\r\n newExtraPrice\r\n state\r\n pDatCre\r\n pDatMod\r\n }\r\n productFood {\r\n pId\r\n carProId\r\n sizeId\r\n colorId\r\n idStore\r\n cId\r\n caId\r\n dId\r\n ctId\r\n tpId\r\n fId\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProUniDisponibles\r\n ProDescription\r\n ValueDelivery\r\n ProProtegido\r\n ProAssurance\r\n ProImage\r\n ProStar\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n ProDelivery\r\n ProVoltaje\r\n pState\r\n sTateLogistic\r\n pDatCre\r\n pDatMod\r\n }\r\n cantProducts\r\n getStore {\r\n idStore\r\n cId\r\n scheduleOpenAll\r\n getStoreSchedules {\r\n schId\r\n idStore\r\n schDay\r\n schHoSta\r\n schHoEnd\r\n schState\r\n }\r\n id\r\n dId\r\n ctId\r\n scheduleOpenAll\r\n catStore\r\n neighborhoodStore\r\n Viaprincipal\r\n storeOwner\r\n storeName\r\n emailStore\r\n storePhone\r\n socialRaz\r\n Image\r\n banner\r\n documentIdentifier\r\n uPhoNum\r\n ULocation\r\n upLat\r\n upLon\r\n uState\r\n siteWeb\r\n description\r\n NitStore\r\n typeRegiments\r\n typeContribute\r\n secVia\r\n addressStore\r\n createdAt\r\n pais {\r\n cId\r\n cName\r\n cCalCod\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n city {\r\n ctId\r\n dId\r\n cName\r\n cState\r\n }\r\n department {\r\n dId\r\n cId\r\n dName\r\n dState\r\n dDatCre\r\n dDatMod\r\n }\r\n }\r\n }\r\n }\r\n`\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_SHOPPING_CARD } from '../queries'\r\n\r\nexport const useGetCart = ({\r\n setAlertBox = ({\r\n message\r\n }) => { return { message } },\r\n setCountItemProduct = (number) => { return number }\r\n} = {}) => {\r\n const {\r\n data,\r\n loading,\r\n error,\r\n called\r\n } = useQuery(GET_ALL_SHOPPING_CARD, {\r\n onCompleted: data => {\r\n if (Array.isArray(data?.getAllShoppingCard) && Number(data?.getAllShoppingCard?.length)) {\r\n setCountItemProduct(data?.getAllShoppingCard?.length)\r\n }\r\n },\r\n fetchPolicy: 'cache-and-network',\r\n onError: () => {\r\n setAlertBox({ message: 'No pudimos cargar el carrito...' })\r\n }\r\n })\r\n const cart = data?.getAllShoppingCard || []\r\n return [cart, {\r\n data,\r\n called,\r\n loading,\r\n error\r\n }]\r\n}\r\n","import { filterKeyObject } from '../../../../utils'\r\n\r\nconst filters = ['__typename']\r\n\r\nexport const filterDataOptional = (dataOptional) => {\r\n if (!Array.isArray(dataOptional)) {\r\n throw new Error('Input data is not an array')\r\n }\r\n\r\n try {\r\n const filteredDataOptional = dataOptional.map(item => {\r\n const checkedSubOptions = item?.ExtProductFoodsSubOptionalAll?.filter(subItem => {return subItem.check === true})\r\n const ExtProductFoodsSubOptionalAll = checkedSubOptions?.map(subItemsOptional => {\r\n return {\r\n ...filterKeyObject(subItemsOptional, filters)\r\n }\r\n })\r\n return {\r\n ...filterKeyObject(item, filters),\r\n ExtProductFoodsSubOptionalAll\r\n }\r\n }).filter(item => {return item?.ExtProductFoodsSubOptionalAll.length > 0})\r\n return filteredDataOptional\r\n } catch (error) {\r\n console.error('An error occurred while filtering data:', error.message)\r\n return []\r\n }\r\n}\r\n\r\n/**\r\n * Valida los requerimientos de elementos opcionales.\r\n * @param {Array} filteredDataOptional - El array de datos a validar.\r\n * @returns {boolean} Devuelve true si se cumplen los requerimientos, de lo contrario, false.\r\n */\r\nexport function validateRequirements (filteredDataOptional) {\r\n if (Array.isArray(filteredDataOptional)) {\r\n for (const item of filteredDataOptional) {\r\n if (item.required === 1) {\r\n const checkedSubOptions = item?.ExtProductFoodsSubOptionalAll.filter(subItem => {return subItem.check === true})\r\n if (checkedSubOptions.length !== item.numbersOptionalOnly) {\r\n return true\r\n }\r\n }\r\n }\r\n }\r\n return false\r\n}\r\n\r\n/**\n *\n * @param dataExtra\n */\nexport function validateExtraProducts (dataExtra) {\r\n const requiredItems = dataExtra.filter(item => {return item.exState === 1})\r\n\r\n if (requiredItems.length > 0) {\r\n const hasSelectedRequiredProduct = requiredItems.some(item => {return item.quantity > 0})\r\n return hasSelectedRequiredProduct\r\n }\r\n\r\n return true\r\n}\r\n\r\nexport const filterExtra = (dataExtra) => {\r\n if (!Array.isArray(dataExtra)) {\r\n throw new Error('Input data is not an array')\r\n }\r\n try {\r\n const dataExtraFiltered = dataExtra.filter(extra => {return extra.quantity !== 0})\r\n .map(extra => {\r\n return {\r\n ...filterKeyObject(extra, filters)\r\n }\r\n })\r\n return dataExtraFiltered\r\n } catch (error) {\r\n return []\r\n }\r\n}\r\n","export const calculateTotalPrice = (shoppingCardData) => {\r\n if (Array.isArray(shoppingCardData) && shoppingCardData.length) {\r\n return shoppingCardData.reduce((accumulator, currentItem) => {\r\n const { productFood = {}, cantProducts } = currentItem || {}\r\n const { ProPrice = 0, ValueDelivery = 0 } = productFood || {}\r\n\r\n const pricePerProduct = ProPrice * cantProducts\r\n const deliveryCost = ValueDelivery || 0\r\n const ExtProductFoodsAll = currentItem.ExtProductFoodsAll || []\r\n\r\n const extraPriceSum = ExtProductFoodsAll.reduce((extraAccumulator, extraFood) => {\r\n if (Number.isInteger(extraFood.newExtraPrice)) {\r\n return extraAccumulator + extraFood.newExtraPrice\r\n }\r\n return extraAccumulator\r\n }, 0)\r\n\r\n return accumulator + pricePerProduct + deliveryCost + extraPriceSum\r\n }, 0)\r\n }\r\n return 0\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const DELETE_ONE_ITEM_SHOPPING_PRODUCT = gql`\r\nmutation deleteOneItem($cState: Int, $ShoppingCard: ID) {\r\n deleteOneItem(cState: $cState, ShoppingCard: $ShoppingCard){\r\n success\r\n message\r\n }\r\n}\r\n`\r\n","import { useQuery } from '@apollo/client'\r\nimport { useState, useEffect } from 'react'\r\n \r\nimport { GET_All_RATING_STORE } from './queries'\r\n\r\nexport const useRatingArrayData = () => {\r\n const { data: dataRating } = useQuery(GET_All_RATING_STORE)\r\n\r\n const calculateTotalRatings = (ratings = []) => {\r\n return ratings.reduce(\r\n (total, rating) => {return {\r\n rAppearance: total?.rAppearance + rating?.rAppearance,\r\n rTasty: total?.rTasty + rating?.rTasty,\r\n rGoodCondition: total?.rGoodCondition + rating?.rGoodCondition,\r\n rGoodTemperature: total?.rGoodTemperature + rating?.rGoodTemperature\r\n }},\r\n {\r\n rAppearance: 0,\r\n rTasty: 0,\r\n rGoodCondition: 0,\r\n rGoodTemperature: 0\r\n }\r\n )\r\n }\r\n\r\n const [totalRatings, setTotalRatings] = useState(\r\n calculateTotalRatings(dataRating?.getAllRating || [])\r\n )\r\n\r\n useEffect(() => {\r\n setTotalRatings(calculateTotalRatings(dataRating?.getAllRating || []))\r\n }, [dataRating])\r\n\r\n const dataArr = [\r\n {\r\n name: 'Buena apariencia',\r\n value: totalRatings.rAppearance || 0\r\n },\r\n {\r\n name: 'Es deliciosa',\r\n value: totalRatings.rTasty || 0\r\n },\r\n {\r\n name: 'Buenas condiciones',\r\n value: totalRatings.rGoodCondition || 0\r\n },\r\n {\r\n name: 'Buena temperatura',\r\n value: totalRatings.rGoodTemperature || 0\r\n }\r\n ]\r\n\r\n return dataArr\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\n \r\nexport const GET_All_RATING_STORE = gql`\r\nquery getAllRating($idStore: ID){\r\n getAllRating(idStore: $idStore){\r\n idStore\r\n rId\r\n id\r\n rAppearance\r\n rTasty\r\n rGoodTemperature\r\n rGoodCondition\r\n rState\r\n createAt\r\n updateAt\r\n }\r\n}\r\n`\r\n","import { useQuery } from '@apollo/client'\r\nimport { useState } from 'react'\n\r\nimport { SPANISH_MONTHS } from '../../utils/index'\r\nimport { GET_ALL_SALES } from '../useReport/queries'\r\nexport * from './useChartDataAllOrders'\r\n\r\nexport const useChartData = ({ year }) => {\r\n const { data, loading } = useQuery(GET_ALL_SALES)\r\n const [chartType, setChartType] = useState('line')\r\n const [chartTypeYear, setChartTypeYear] = useState(new Date().getFullYear())\r\n const [asFilter, setFilter] = useState(false)\r\n const [newResult, setNewResult] = useState([])\r\n const result = []\r\n const sumByMonth = {}\r\n\r\n data?.getAllSalesStore?.forEach(function (value) {\r\n const month = new Date(value.pDatCre).getMonth()\r\n const year = new Date(value.pDatCre).getFullYear()\r\n const key = `${month}-${year}`\r\n\r\n if (!sumByMonth[key]) {\r\n sumByMonth[key] = {\r\n Mes: month,\r\n Year: year,\r\n totalProductsPrice: 0\r\n }\r\n\r\n result.push(sumByMonth[key])\r\n }\r\n\r\n sumByMonth[key].totalProductsPrice += value.totalProductsPrice\r\n })\r\n\r\n const allMonths = Array.from({ length: 12 }, (_, i) => { return i })\r\n const missingMonths = allMonths.filter(month => { return !result.some(data => { return data.Mes === month }) })\r\n\r\n for (const element of missingMonths) {\r\n result.push({\r\n Mes: element,\r\n totalProductsPrice: 0,\r\n Year: ''\r\n })\r\n }\r\n\r\n result.sort((a, b) => { return a.Mes - b.Mes })\r\n\r\n const labelTitle = `Ventas por meses del año ${asFilter ? chartTypeYear : ''}`\r\n // Resultado:\r\n const dataChart = {\r\n labels: asFilter\r\n ? newResult.map(data => {\r\n return SPANISH_MONTHS[data.Mes]\r\n })\r\n : result.map(data => {\r\n return SPANISH_MONTHS[data.Mes]\r\n }),\r\n datasets: [\r\n {\r\n label: labelTitle,\r\n data: asFilter ? newResult.map(data => { return data?.totalProductsPrice }) : result.map(data => { return data?.totalProductsPrice }),\r\n backgroundColor: [\r\n 'rgba(255, 99, 132, 0.2)',\r\n 'rgba(54, 162, 235, 0.2)',\r\n 'rgba(255, 206, 86, 0.2)',\r\n 'rgba(75, 192, 192, 0.2)',\r\n 'rgba(153, 102, 255, 0.2)',\r\n 'rgba(255, 159, 64, 0.2)'\r\n ],\r\n borderColor: chartType === 'bar'\r\n ? [\r\n 'rgba(255, 99, 132, 1)',\r\n 'rgba(54, 162, 235, 1)',\r\n 'rgba(255, 206, 86, 1)',\r\n 'rgba(75, 192, 192, 1)',\r\n 'rgba(153, 102, 255, 1)',\r\n 'rgba(255, 159, 64, 1)'\r\n ]\r\n : 'rgb(255 0 0)',\r\n tension: 0.6,\r\n fill: false,\r\n borderWidth: 1,\r\n barPercentage: 1,\r\n barThickness: 50,\r\n minBarLength: 3\r\n }\r\n ]\r\n }\r\n const options = {\r\n interaction: {\r\n mode: 'index',\r\n intersect: false\r\n },\r\n scales: {\r\n x: {\r\n stacked: true\r\n },\r\n y: {\r\n stacked: true\r\n }\r\n },\r\n plugins: {\r\n title: {\r\n display: true,\r\n text: labelTitle\r\n }\r\n }\r\n }\r\n const groupedData = {}\r\n\r\n Boolean(data?.getAllSalesStore?.length) && data?.getAllSalesStore?.forEach((item) => {\r\n const year = new Date(item.pDatCre).getFullYear()\r\n if (!groupedData[year]) {\r\n groupedData[year] = []\r\n }\r\n groupedData[year].push(item)\r\n })\r\n const years = []\r\n\r\n Boolean(data?.getAllSalesStore?.length) && data?.getAllSalesStore?.forEach((item) => {\r\n const y = new Date(item.pDatCre).getFullYear()\r\n if (!years.includes(y)) {\r\n years.push(y)\r\n }\r\n })\r\n const handleChangeYear = (value) => {\r\n setFilter(true)\r\n const currentYear = parseInt(value)\r\n setChartTypeYear(currentYear || '')\r\n if (result?.length > 0) {\r\n const filterToYear = result.filter((elem) => {\r\n return elem?.Year === currentYear\r\n })\r\n const missingNewMonths = allMonths.filter(month => { return !filterToYear.some(data => { return data.Mes === month }) })\r\n for (const element of missingNewMonths) {\r\n filterToYear.push({\r\n Mes: element,\r\n totalProductsPrice: 0,\r\n Year: ''\r\n })\r\n }\r\n filterToYear.sort((a, b) => { return a.Mes - b.Mes })\r\n setNewResult(filterToYear)\r\n return filterToYear\r\n }\r\n }\r\n const cleanFilter = () => {\r\n setFilter(false)\r\n setChartTypeYear(new Date().getFullYear())\r\n }\r\n const sortYear = () => {\r\n return years.sort((a, b) => { return b - a })\r\n }\r\n\r\n const organiceYears = sortYear()\r\n return {\r\n handleChangeYear,\r\n setFilter,\r\n cleanFilter,\r\n setChartType,\r\n years: organiceYears,\r\n asFilter,\r\n chartTypeYear,\r\n options,\r\n chartType,\r\n labelTitle,\r\n result,\r\n dataChart,\r\n loading\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_SALES = gql`\r\nquery getAllSalesStore($idStore: ID,$search: String, $min: Int, $max: Int $fromDate: String, $toDate: String ) {\r\n getAllSalesStore(idStore: $idStore, search: $search, min: $min, max: $max, toDate: $toDate, fromDate: $fromDate) {\r\n totalProductsPrice\r\n channel\r\n pDatCre\r\n pCodeRef\r\n }\r\n}\r\n`\r\n\r\nexport const GET_ALL_TOTAL_SALES = gql`\r\nquery getAllSalesStoreTotal($idStore: ID,$search: String, $min: Int, $max: Int $fromDate: String, $toDate: String) {\r\n getAllSalesStoreTotal(idStore: $idStore, search: $search, min: $min, max: $max, toDate: $toDate, fromDate: $fromDate) {\r\n restaurant\r\n delivery\r\n TOTAL\r\n }\r\n}\r\n`\r\nexport const GET_ALL_SALES_STATISTICS = gql`\r\nquery getAllSalesStoreStatistic($idStore: ID,$search: String, $min: Int, $max: Int $fromDate: DateTime, $toDate: DateTime ) {\r\n getAllSalesStoreStatistic(idStore: $idStore, search: $search, min: $min, max: $max, toDate: $toDate, fromDate: $fromDate) {\r\n pdpId\r\n idStore\r\n pCodeRef\r\n payId\r\n pPRecoger\r\n totalProductsPrice\r\n pSState\r\n pDatCre\r\n locationUser\r\n pDatMod\r\n getAllPedidoStore{\r\n pdpId\r\n pId\r\n idStore\r\n ShoppingCard\r\n pCodeRef\r\n pPStateP\r\n payId\r\n pPRecoger\r\n pDatCre\r\n pDatMod\r\n getAllShoppingCard {\r\n ShoppingCard\r\n comments\r\n cantProducts\r\n pId\r\n productFood{\r\n pId\r\n carProId\r\n colorId\r\n idStore\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProDescription\r\n ValueDelivery\r\n ProImage\r\n ProStar\r\n pState\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n }\r\n }\r\n}\r\n`\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_SALES_STATISTICS } from '../useSales/queries'\r\n\r\nexport const useGetAllSales = ({\r\n fromDate = '',\r\n toDate = ''\r\n} = {}) => {\r\n const {\r\n data,\r\n loading,\r\n error\r\n } = useQuery(GET_ALL_SALES_STATISTICS, {\r\n fetchPolicy: 'cache-first',\r\n variables: {\r\n fromDate,\r\n toDate\r\n }\r\n })\r\n\r\n return {\r\n data: data?.getAllSalesStoreStatistic || [],\r\n error,\r\n loading\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_SALES = gql`\r\nquery getAllSalesStore {\r\n getAllSalesStore {\r\n change\r\n channel\r\n status\r\n createdAt\r\n pCodeRef\r\n idStore\r\n pdpId\r\n locationUser\r\n shoppingCartRefCode\r\n statusOrder {\r\n idStatus\r\n name\r\n description\r\n color\r\n backgroundColor\r\n priority\r\n state\r\n createdAt\r\n updatedAt\r\n }\r\n updatedAt\r\n totalProductsPrice\r\n unidProducts\r\n getUser {\r\n associateStore\r\n avatar\r\n createdAt\r\n id\r\n email\r\n }\r\n }\r\n}\r\n\r\n`\r\n\r\nexport const GET_ALL_COUNT_SALES = gql`\r\n query getTodaySales {\r\n getTodaySales\r\n }\r\n`\r\nexport const GET_ALL_SALES_STATISTICS = gql`\r\n query getAllSalesStoreStatistic(\r\n $idStore: ID\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $fromDate: DateTime\r\n $toDate: DateTime\r\n ) {\r\n getAllSalesStoreStatistic(\r\n idStore: $idStore\r\n search: $search\r\n min: $min\r\n max: $max\r\n toDate: $toDate\r\n fromDate: $fromDate\r\n ) {\r\n pdpId\r\n idStore\r\n pCodeRef\r\n payId\r\n pPRecoger\r\n totalProductsPrice\r\n pSState\r\n pDatCre\r\n locationUser\r\n pDatMod\r\n getAllPedidoStore {\r\n pdpId\r\n pId\r\n idStore\r\n ShoppingCard\r\n pCodeRef\r\n pPStateP\r\n payId\r\n pPRecoger\r\n pDatCre\r\n pDatMod\r\n getAllShoppingCard {\r\n ShoppingCard\r\n comments\r\n cantProducts\r\n pId\r\n productFood {\r\n pId\r\n carProId\r\n colorId\r\n idStore\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProDescription\r\n ValueDelivery\r\n ProImage\r\n ProStar\r\n pState\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`\r\n\r\nexport const CREATE_CLIENTS = gql`\r\n mutation createClients($input: IClients) {\r\n createClients(input: $input) {\r\n cliId\r\n idStore\r\n idUser\r\n clState\r\n ClientAddress\r\n clientNumber\r\n ccClient\r\n gender\r\n clientLastName\r\n clientName\r\n createAt\r\n updateAt\r\n }\r\n }\r\n`\r\nexport const DELETE_ONE_CLIENTS = gql`\r\n mutation deleteClient($cliId: ID, $clState: Int!) {\r\n deleteClient(cliId: $cliId, clState: $clState) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const GET_ALL_CLIENTS = gql`\r\n query getAllClients(\r\n $idStore: ID\r\n $cId: ID\r\n $dId: ID\r\n $ctId: ID\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $fromDate: DateTime\r\n $toDate: DateTime\r\n ) {\r\n getAllClients(\r\n idStore: $idStore\r\n cId: $cId\r\n dId: $dId\r\n ctId: $ctId\r\n search: $search\r\n min: $min\r\n max: $max\r\n fromDate: $fromDate\r\n toDate: $toDate\r\n ) {\r\n cliId\r\n idStore\r\n gender\r\n # idUser\r\n clState\r\n clientNumber\r\n ccClient\r\n clientLastName\r\n clientName\r\n ClientAddress\r\n createAt\r\n updateAt\r\n }\r\n }\r\n`\r\nexport const GET_ONE_CLIENT = gql`\r\n query getOneClients($cliId: ID) {\r\n getOneClients(cliId: $cliId) {\r\n cliId\r\n idStore\r\n idUser\r\n clState\r\n clientNumber\r\n ClientAddress\r\n gender\r\n ccClient\r\n clientLastName\r\n clientName\r\n createAt\r\n updateAt\r\n }\r\n }\r\n`\r\n\r\nexport const CREATE_SHOPPING_CARD = gql`\r\n mutation registerShoppingCard(\r\n $input: IShoppingCard\r\n $idSubArray: IID_SUB_ITEMS\r\n ) {\r\n registerShoppingCard(input: $input, idSubArray: $idSubArray) {\r\n ShoppingCard\r\n id\r\n pId\r\n subProductsId\r\n ShoppingCardRefCode\r\n uuid\r\n discountCardProduct\r\n idUser\r\n cName\r\n idStore\r\n cState\r\n cDatCre\r\n cDatMod\r\n csDescription\r\n cantProducts\r\n comments\r\n # idSubArray\r\n }\r\n }\r\n`\r\nexport const GET_ONE_SALE = gql`\r\nquery getOneSalesStore($pCodeRef: String) {\r\n getOneSalesStore(pCodeRef: $pCodeRef) {\r\n message\r\n message\r\n errors {\r\n message\r\n path\r\n type\r\n context {\r\n key\r\n label\r\n limit\r\n value\r\n __typename\r\n }\r\n }\r\n data {\r\n statusOrder {\r\n idStatus\r\n name\r\n description\r\n color\r\n backgroundColor\r\n priority\r\n state\r\n createdAt\r\n updatedAt\r\n }\r\n paymentMethod {\r\n payId\r\n name\r\n icon\r\n state\r\n paymentPriority\r\n createdAt\r\n updatedAt\r\n }\r\n totals {\r\n name\r\n value\r\n }\r\n createdAt\r\n change\r\n channel\r\n pCodeRef\r\n id\r\n locationUser\r\n pCodeRef\r\n pdpId\r\n ppState\r\n ppState\r\n shoppingCartRefCode\r\n pSState\r\n totalProductsPrice\r\n unidProducts\r\n updatedAt\r\n createdAt\r\n store {\r\n addressStore\r\n banner\r\n cId\r\n createdAt\r\n dailyGoal\r\n description\r\n upLon\r\n upLat\r\n deliveryTimeMinutes\r\n emailStore\r\n documentIdentifier\r\n Viaprincipal\r\n uState\r\n }\r\n client {\r\n cliId\r\n idStore\r\n idUser\r\n clState\r\n clientNumber\r\n ClientAddress\r\n ccClient\r\n gender\r\n clientLastName\r\n clientName\r\n createAt\r\n updateAt\r\n }\r\n shoppingCarts {\r\n shoppingCartId\r\n id\r\n pId\r\n shoppingCartRefCode\r\n priceProduct\r\n comments\r\n cantProducts\r\n refCodePid\r\n idUser\r\n idStore\r\n sState\r\n createdAt\r\n updatedAt\r\n products {\r\n pId\r\n carProId\r\n sizeId\r\n colorId\r\n idStore\r\n cId\r\n caId\r\n dId\r\n ctId\r\n tpId\r\n fId\r\n pName\r\n pCode\r\n ProPrice\r\n free\r\n ProDescuento\r\n ProUniDisponibles\r\n ProDescription\r\n ValueDelivery\r\n ProProtegido\r\n ProAssurance\r\n ProImage\r\n ProStar\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n ProDelivery\r\n ProVoltaje\r\n pState\r\n tgId\r\n sTateLogistic\r\n ProBarCode\r\n stock\r\n manageStock\r\n vat\r\n ExtProductFoodOptional {\r\n pId\r\n opExPid\r\n OptionalProName\r\n state\r\n code\r\n required\r\n numbersOptionalOnly\r\n createdAt\r\n updatedAt\r\n ExtProductFoodsSubOptionalAll {\r\n pId\r\n opExPid\r\n idStore\r\n opSubExPid\r\n OptionalSubProName\r\n exCodeOptionExtra\r\n exCode\r\n state\r\n }\r\n }\r\n ExtProductFoodsAll {\r\n pId\r\n exPid\r\n exState\r\n extraName\r\n extraPrice\r\n quantity\r\n newExtraPrice\r\n state\r\n createdAt\r\n updatedAt\r\n }\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n __typename\r\n }\r\n }\r\n}\r\n`\r\nexport const CREATE_SHOPPING_CARD_TO_USER_STORE = gql`\r\nmutation registerSalesStore(\r\n $input: [IShoppingCart]\r\n $id: ID\r\n $tableId: ID\r\n $discount: DiscountInput\r\n $idStore: ID\r\n $pCodeRef: String\r\n $change: Float\r\n $shoppingCartRefCode: String\r\n $payId: ID\r\n $pickUp: Int\r\n $totalProductsPrice: Float\r\n $valueDelivery: Float\r\n $idSubArray: IID_SUB_ITEMS\r\n) {\r\n registerSalesStore(\r\n input: $input\r\n id: $id\r\n tableId: $tableId\r\n discount: $discount\r\n shoppingCartRefCode: $shoppingCartRefCode\r\n idStore: $idStore\r\n pCodeRef: $pCodeRef\r\n change: $change\r\n\r\n payId: $payId\r\n pickUp: $pickUp\r\n totalProductsPrice: $totalProductsPrice\r\n valueDelivery: $valueDelivery\r\n idSubArray: $idSubArray\r\n ) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n __typename\r\n }\r\n }\r\n data {\r\n pCodeRef\r\n idStore\r\n id\r\n channel\r\n payId\r\n pSState\r\n createdAt\r\n updatedAt\r\n unidProducts\r\n totalProductsPrice\r\n getOneStore {\r\n idStore\r\n cId\r\n dId\r\n catStore\r\n scheduleOpenAll\r\n dailyGoal\r\n deliveryTimeMinutes\r\n }\r\n getUser {\r\n id\r\n name\r\n email\r\n createdAt\r\n updatedAt\r\n __typename\r\n }\r\n }\r\n }\r\n}\r\n`\r\n\r\nexport const GET_ALL_ORDER = gql`\r\nquery getAllOrderStoreFinal($idStore: ID, $search: String, $min: Int, $max: Int, $statusOrder: Int) {\r\n getAllOrderStoreFinal(idStore: $idStore, search: $search, min: $min, max: $max, statusOrder: $statusOrder) {\r\n pdpId\r\n idStore\r\n pCodeRef\r\n payId\r\n pPRecoger\r\n totalProductsPrice\r\n pSState\r\n pDatCre\r\n channel\r\n locationUser\r\n pDatMod\r\n getAllPedidoStore{\r\n pdpId\r\n pId\r\n idStore\r\n ShoppingCard\r\n pCodeRef\r\n pPStateP\r\n payId\r\n pPRecoger\r\n pDatCre\r\n pDatMod\r\n getAllShoppingCard {\r\n ShoppingCard\r\n priceProduct\r\n comments\r\n cantProducts\r\n pId\r\n productFood{\r\n pId\r\n carProId\r\n colorId\r\n idStore\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProDescription\r\n ValueDelivery\r\n ProImage\r\n ProStar\r\n pState\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n }\r\n }\r\n}\r\n`\r\n","import { useGetAllSales } from '../../useGetAllSales'\r\n\r\nexport const useChartDataAllOrders = ({\r\n onScreen = false\r\n} = {}) => {\r\n const { data, loading } = useGetAllSales({\r\n onScreen\r\n })\r\n\r\n // Objeto para mapear los códigos de estado a sus nombres\r\n const statusMap = {\r\n 1: 'ACCEPT',\r\n 2: 'PROCESSING',\r\n 3: 'READY',\r\n 4: 'CONCLUDES',\r\n 5: 'REJECTED'\r\n }\r\n\r\n // Objeto para almacenar los totales por estado\r\n const totalsByStatus = {}\r\n\r\n // Inicializar totales en 0 para todos los estados\r\n for (const status in statusMap) {\r\n totalsByStatus[status] = 0\r\n }\r\n\r\n // Procesar los datos y acumular los totales por estado\r\n data?.forEach(item => {\r\n const status = item.pSState\r\n const totalPrice = item.totalProductsPrice\r\n totalsByStatus[status] += totalPrice\r\n })\r\n\r\n // Preparar los datos en el formato requerido por Chart.js\r\n const chartLabels = []\r\n const chartData = []\r\n\r\n // Iterar a través del statusMap para llenar los datos\r\n for (const status in statusMap) {\r\n const statusLabel = statusMap[status]\r\n chartLabels?.push(statusLabel)\r\n chartData?.push(totalsByStatus[status] || 0)\r\n }\r\n\r\n const chartJsData = {\r\n labels: chartLabels,\r\n datasets: [{\r\n tension: 2,\r\n fill: false,\r\n borderWidth: 1,\r\n barPercentage: 1,\r\n barThickness: 50,\r\n minBarLength: 3,\r\n label: '',\r\n data: chartData,\r\n backgroundColor: [\r\n '#FF5733', // Reddish color\r\n '#FFC300', // Yellowish color\r\n '#FF8C42', // Orange color\r\n '#138D75', // Gold color\r\n '#ff0000' // Tomato color\r\n ]\r\n }]\r\n }\r\n\r\n const defaultOptions = {\r\n animation: {\r\n animateRotate: true,\r\n animateScale: true\r\n },\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n legend: {\r\n position: 'bottom'\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: (tooltipItem, data) => {\r\n const dataset = data?.datasets[tooltipItem.datasetIndex]\r\n const total = dataset?.data?.reduce((previousValue, currentValue) => {return previousValue + currentValue})\r\n const currentValue = dataset?.data[tooltipItem?.index]\r\n const percentage = ((currentValue / total) * 100).toFixed(2)\r\n return `${data?.labels[tooltipItem?.index]}: ${currentValue} (${percentage}%)`\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n loading,\r\n data: loading ? [] : chartJsData,\r\n option: loading ? [] : defaultOptions\r\n }\r\n}\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_DEVICES } from './queries'\r\n\r\nexport const useDevices = () => {\r\n const { data, loading } = useQuery(GET_ALL_DEVICES, {\r\n onError: (error) => {\r\n console.error(error)\r\n }\r\n })\r\n\r\n // Función para formatear la fecha\r\n // const { formatDateInTimeZone } = useFormatDate({})\r\n\r\n const listDevices = Array.isArray(data?.getDeviceUsers)\r\n ? data?.getDeviceUsers.map((device) => {\r\n // const formattedDate = formatDateInTimeZone(device.createdAt)\r\n return {\r\n ...device\r\n // createdAt: formattedDate\r\n }\r\n })\r\n : []\r\n return {\r\n data: listDevices,\r\n loading\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\n/**\r\n * Query to fetch all device users with extended fields\r\n */\r\nexport const GET_ALL_DEVICES = gql`\r\n query getDeviceUsers {\r\n getDeviceUsers {\r\n dId\r\n id\r\n deviceId\r\n deviceName\r\n locationFormat\r\n type\r\n shortName\r\n platform\r\n version\r\n family\r\n os\r\n model\r\n ip\r\n isBot\r\n dState\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n`\r\n","import { useMutation, gql } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL mutation para registrar un nuevo dispositivo\r\n */\r\nconst REGISTER_DEVICE_USER = gql`\r\n mutation RegisterDeviceUser($input: DeviceUserInput!) {\r\n newRegisterDeviceUser(input: $input) {\r\n success\r\n message\r\n data {\r\n dId\r\n id\r\n deviceId\r\n deviceName\r\n locationFormat\r\n type\r\n shortName\r\n platform\r\n version\r\n dState\r\n createdAt\r\n dState\r\n }\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook para la mutación RegisterDeviceUser\r\n * @returns {Object} - Función para registrar el dispositivo y el estado de la operación\r\n */\r\nexport const useRegisterDeviceUser = () => {\r\n const [registerDeviceUser, { loading, error, data }] = useMutation(REGISTER_DEVICE_USER)\r\n\r\n /**\r\n * Función para manejar la mutación\r\n * @param {Object} input - Datos del dispositivo a registrar\r\n * @returns {Promise<Object>} - Resultado de la operación\r\n */\r\n const handleRegisterDeviceUser = async (input) => {\r\n try {\r\n const result = await registerDeviceUser({ variables: { input } })\r\n\r\n if (result.data?.newRegisterDeviceUser?.success) {\r\n return { success: true, data: result.data.newRegisterDeviceUser.data }\r\n } \r\n return {\r\n success: false,\r\n errors: result.data?.newRegisterDeviceUser?.errors || []\r\n }\r\n \r\n } catch (err) {\r\n console.error('Error while registering device user:', err)\r\n return { success: false, errors: [{ message: err.message }] }\r\n }\r\n }\r\n\r\n return [handleRegisterDeviceUser, {\r\n loading,\r\n error,\r\n data\r\n }]\r\n}\r\n","import {\r\n useQuery,\r\n useMutation,\r\n useLazyQuery\r\n} from '@apollo/client'\n\r\nimport {\r\n CREATE_CLIENTS,\r\n DELETE_ONE_CLIENTS,\r\n GET_ALL_CLIENTS,\r\n GET_ONE_CLIENT,\r\n EDIT_ONE_CLIENT\r\n} from './queries'\r\n\r\nexport const useGetClients = ({\r\n max,\r\n order = 'DESC',\r\n search,\r\n sendNotification = () => { }\r\n} = {}) => {\r\n const {\r\n loading,\r\n error,\r\n called,\r\n data,\r\n refetch\r\n } = useQuery(GET_ALL_CLIENTS, {\r\n onError: () => {\r\n sendNotification({\r\n title: 'Error',\r\n description: 'Algo salió mal',\r\n backgroundColor: 'error'\r\n })\r\n },\r\n variables: {\r\n search,\r\n max: max || 100,\r\n order\r\n }\r\n })\r\n return [data?.getAllClients || [], {\r\n loading: called ? false : loading,\r\n buttonLoading: loading,\r\n error,\r\n refetch\r\n }]\r\n}\r\n\r\nexport const useDeleteClients = ({ sendNotification = () => { } } = {}) => {\r\n const [deleteClient, { loading, error }] = useMutation(DELETE_ONE_CLIENTS)\r\n return [deleteClient, { loading, error }]\r\n}\r\n\r\nexport const useCreateClient = ({ sendNotification = () => { } } = {}) => {\r\n const [createClients, { loading, error }] = useMutation(CREATE_CLIENTS, {\r\n onError: (data) => {\r\n sendNotification({\r\n title: '',\r\n description: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n })\r\n\r\n return [createClients || [], { loading, error }]\r\n}\r\n\r\nexport const useEditClient = ({ sendNotification = () => { } } = {}) => {\r\n const [editOneClient, { loading, error, data }] = useMutation(EDIT_ONE_CLIENT, {\r\n onCompleted: (data) => {\r\n if (data?.editOneClient?.success) {\r\n return sendNotification({\r\n title: 'Éxito',\r\n description: data?.editOneClient?.message,\r\n backgroundColor: 'success'\r\n })\r\n }\r\n },\r\n onError: (data) => {\r\n if (data?.editOneClient) {\r\n return sendNotification({\r\n title: 'Error',\r\n description: data?.editOneClient?.message,\r\n backgroundColor: 'error'\r\n })\r\n }\r\n }\r\n })\r\n\r\n return [editOneClient, { loading, error, data }]\r\n}\r\n\r\nexport const useGetOneClient = ({ sendNotification = () => { } } = {}) => {\r\n const [getOneClients, { data, loading, error }] = useLazyQuery(GET_ONE_CLIENT)\r\n\r\n return [getOneClients || [], { loading, error, data }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CREATE_CLIENTS = gql`\r\nmutation createClients ($input: IClients) {\r\n createClients(input: $input) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n data {\r\n cliId\r\n idStore\r\n idUser\r\n clState\r\n ClientAddress\r\n clientNumber\r\n ccClient\r\n gender\r\n clientLastName\r\n clientName\r\n default\r\n createAt\r\n updateAt\r\n }\r\n }\r\n}\r\n`\r\nexport const DELETE_ONE_CLIENTS = gql`\r\nmutation deleteClient($cliId: ID, $clState: Int!) {\r\n deleteClient(cliId: $cliId, clState: $clState) {\r\n success\r\n message\r\n }\r\n}\r\n`\r\nexport const GET_ALL_CLIENTS = gql`\r\nquery getAllClients($idStore: ID, $search: String, $min: Int, $max: Int, $fromDate: DateTime, $toDate: DateTime, $page: Int) {\r\n getAllClients(idStore: $idStore, search: $search, min: $min, max: $max, fromDate: $fromDate, toDate: $toDate, page: $page) {\r\n success\r\n message\r\n data {\r\n cliId\r\n idStore\r\n gender\r\n clState\r\n clientNumber\r\n ccClient\r\n clientLastName\r\n \r\n clientName\r\n default\r\n createAt\r\n updateAt\r\n }\r\n pagination {\r\n totalRecords\r\n totalPages\r\n currentPage\r\n }\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n`\r\nexport const GET_ONE_CLIENT = gql`\r\nquery getOneClients($cliId: ID) {\r\n getOneClients(cliId: $cliId) {\r\n cliId\r\n idStore\r\n idUser\r\n clState\r\n clientNumber\r\n ClientAddress\r\n gender\r\n ccClient\r\n clientLastName\r\n clientName\r\n default\r\n createAt\r\n updateAt\r\n\r\n }\r\n}\r\n`\r\n\r\nexport const EDIT_ONE_CLIENT = gql`\r\nmutation editOneClient($input: IClients) {\r\n editOneClient(input: $input) {\r\n success\r\n message\r\n }\r\n}\r\n`\r\n\r\nexport const CREATE_SHOPPING_CARD = gql`\r\nmutation registerShoppingCard($input: IShoppingCard, $idSubArray: IID_SUB_ITEMS){\r\n registerShoppingCard(input: $input, idSubArray: $idSubArray){\r\n ShoppingCard\r\n id\r\n pId\r\n subProductsId\r\n ShoppingCardRefCode\r\n uuid\r\n discountCardProduct\r\n idUser\r\n cName\r\n idStore\r\n cState\r\n cDatCre\r\n cDatMod\r\n csDescription\r\n cantProducts\r\n comments\r\n # idSubArray\r\n }\r\n}\r\n`\r\nexport const CREATE_SHOPPING_CARD_TO_USER_STORE = gql`\r\nmutation registerSalesStore(\r\n $input: [IShoppingCart]\r\n $id: ID\r\n $tableId: ID\r\n $discount: DiscountInput\r\n $idStore: ID\r\n $pCodeRef: String\r\n $change: Float\r\n $shoppingCartRefCode: String\r\n $payId: ID\r\n $pickUp: Int\r\n $totalProductsPrice: Float\r\n $valueDelivery: Float\r\n $idSubArray: IID_SUB_ITEMS\r\n) {\r\n registerSalesStore(\r\n input: $input\r\n id: $id\r\n tableId: $tableId\r\n discount: $discount\r\n shoppingCartRefCode: $shoppingCartRefCode\r\n idStore: $idStore\r\n pCodeRef: $pCodeRef\r\n change: $change\r\n\r\n payId: $payId\r\n pickUp: $pickUp\r\n totalProductsPrice: $totalProductsPrice\r\n valueDelivery: $valueDelivery\r\n idSubArray: $idSubArray\r\n ) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n __typename\r\n }\r\n }\r\n data {\r\n pCodeRef\r\n idStore\r\n id\r\n channel\r\n payId\r\n pSState\r\n createdAt\r\n updatedAt\r\n unidProducts\r\n totalProductsPrice\r\n getOneStore {\r\n idStore\r\n cId\r\n dId\r\n catStore\r\n scheduleOpenAll\r\n dailyGoal\r\n deliveryTimeMinutes\r\n }\r\n getUser {\r\n id\r\n name\r\n email\r\n createdAt\r\n updatedAt\r\n __typename\r\n }\r\n }\r\n }\r\n}\r\n`\r\n","import { useEffect, useState } from 'react'\r\n\r\nexport const useScrollY = () => {\r\n // Función scroll Para mover verticalmente\r\n const [offsetY, setOffsetY] = useState(0)\r\n const handleScroll = () => { return setOffsetY(window.pageYOffset) }\r\n\r\n useEffect(() => {\r\n window.addEventListener('scroll', handleScroll)\r\n return () => { return window.removeEventListener('scroll', handleScroll) }\r\n }, [])\r\n return {\r\n offsetY\r\n }\r\n}\r\n\r\nexport const useScrollColor = () => {\r\n const [scrollNav, setScrollNav] = useState(false)\r\n const changeNav = () => {\r\n if (window?.scrollY >= 1) {\r\n setScrollNav(true)\r\n } else {\r\n setScrollNav(false)\r\n }\r\n }\r\n useEffect(() => {\r\n window.addEventListener('scroll', changeNav)\r\n }, [])\r\n return {\r\n scrollNav\r\n }\r\n}\r\n\r\nexport const useScrollHook = () => {\r\n const [style, setStyle] = useState({})\r\n\r\n useEffect(() => {\r\n let scrollPos = 0\r\n const handleChangeHeaderStyle = () => {\r\n if (document.body?.getBoundingClientRect && document.body.getBoundingClientRect().top > scrollPos) {\r\n setStyle({})\r\n } else {\r\n setStyle({ transform: 'translateY(-300%)' })\r\n }\r\n scrollPos = document.body.getBoundingClientRect().top\r\n }\r\n\r\n window.addEventListener('scroll', handleChangeHeaderStyle)\r\n\r\n return () => {\r\n window.removeEventListener('scroll', handleChangeHeaderStyle)\r\n }\r\n }, [])\r\n\r\n return style\r\n}\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { filterOrders } from './helpers'\r\nimport { GET_ALL_PEDIDOS_STATUS } from './queries'\r\n\r\nexport const useStatusOrdersClient = () => {\r\n const { data, loading, error } = useQuery(GET_ALL_PEDIDOS_STATUS, {\r\n pollInterval: 60000,\r\n fetchPolicy: 'cache-and-network',\r\n onError: () => {}\r\n })\r\n\r\n return {\r\n data: loading ? [] : filterOrders(data?.getAllPedidoUserFinal || []),\r\n loading,\r\n error\r\n }\r\n}\r\n","export const filterOrders = (orders = []) => {\r\n const filteredOrders = orders?.filter((order) => {\r\n if (order.pSState === 5) {\r\n const tenMinutesAgo = new Date()\r\n tenMinutesAgo.setMinutes(tenMinutesAgo.getMinutes() - 10)\r\n const pDatMod = new Date(order.pDatMod)\r\n\r\n return pDatMod > tenMinutesAgo\r\n }\r\n return true\r\n })\r\n\r\n return filteredOrders\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_PEDIDOS_STATUS = gql`\r\n query getAllPedidoUserFinal($id: ID) {\r\n getAllPedidoUserFinal(id: $id) {\r\n pdpId\r\n idStore\r\n pCodeRef\r\n payId\r\n pPRecoger\r\n totalProductsPrice\r\n pSState\r\n getOneStore {\r\n idStore\r\n cId\r\n id\r\n dId\r\n ctId\r\n neighborhoodStore\r\n Viaprincipal\r\n storeOwner\r\n storeName\r\n emailStore\r\n storePhone\r\n Image\r\n pais {\r\n cId\r\n cName\r\n }\r\n city {\r\n ctId\r\n cName\r\n dId\r\n }\r\n department {\r\n dId\r\n cId\r\n dName\r\n }\r\n }\r\n pDatCre\r\n locationUser\r\n pDatMod\r\n getAllPedidoStore {\r\n pdpId\r\n pId\r\n idStore\r\n ShoppingCard\r\n pCodeRef\r\n pPStateP\r\n payId\r\n pPRecoger\r\n pDatCre\r\n pDatMod\r\n getAllShoppingCard {\r\n ShoppingCard\r\n comments\r\n cantProducts\r\n pId\r\n productFood {\r\n pId\r\n carProId\r\n colorId\r\n idStore\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProDescription\r\n ValueDelivery\r\n ProImage\r\n ProStar\r\n pState\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`\r\n","export const isValidCodeRef = (codeRef) => {\r\n return typeof codeRef === 'string' && codeRef.trim() !== ''\r\n}\r\n\r\nexport const updateExistingOrders = (\r\n existingOrders,\r\n pCodeRef,\r\n pSState,\r\n objectToAdd\r\n) => {\r\n if (typeof existingOrders !== 'object' || existingOrders === null) {\r\n // existingOrders no es un objeto válido\r\n return existingOrders\r\n }\r\n if (typeof pCodeRef !== 'string') {\r\n // Los tipos de datos de pCodeRef\r\n return existingOrders\r\n }\r\n if (!isValidCodeRef(pCodeRef)) {\r\n // Valores de entrada no válidos, devuelve existingOrders sin cambios\r\n return existingOrders\r\n }\r\n\r\n const updatedExistingOrders = { ...existingOrders } // Copiar el objeto existente\r\n\r\n const statusKeys = {\r\n 1: 'ACCEPT',\r\n 2: 'PROCESSING',\r\n 3: 'READY',\r\n 4: 'CONCLUDES',\r\n 5: 'REJECTED'\r\n }\r\n const targetArray = statusKeys[pSState]\r\n\r\n if (!targetArray || !(targetArray in existingOrders)) {\r\n // El valor de pSState no está mapeado a ninguna propiedad existente en existingOrders\r\n return existingOrders\r\n }\r\n Object.keys(updatedExistingOrders).forEach((key) => {\r\n if (Array.isArray(updatedExistingOrders[key])) {\r\n const oneSale = updatedExistingOrders[key].find((order) => {\r\n return order.pCodeRef === pCodeRef\r\n })\r\n\r\n updatedExistingOrders[key] = updatedExistingOrders[key].filter(\r\n (order) => {\r\n return order.pCodeRef !== pCodeRef\r\n }\r\n )\r\n\r\n if (oneSale !== undefined && oneSale !== null) {\r\n const updatedOneSale = { ...oneSale, pSState }\r\n\r\n if (!Array.isArray(updatedExistingOrders[targetArray])) {\r\n updatedExistingOrders[targetArray] = []\r\n }\r\n\r\n updatedExistingOrders[targetArray] = [\r\n updatedOneSale,\r\n ...updatedExistingOrders[targetArray]\r\n ]\r\n }\r\n }\r\n })\r\n\r\n if (objectToAdd && objectToAdd.pCodeRef === pCodeRef) {\r\n if (!Array.isArray(updatedExistingOrders[targetArray])) {\r\n updatedExistingOrders[targetArray] = []\r\n }\r\n\r\n updatedExistingOrders[targetArray] = [\r\n objectToAdd,\r\n ...updatedExistingOrders[targetArray]\r\n ]\r\n }\r\n\r\n // Asegurar que todas las propiedades estén presentes\r\n Object.keys(statusKeys).forEach((statusKey) => {\r\n if (!(statusKeys[statusKey] in updatedExistingOrders)) {\r\n updatedExistingOrders[statusKeys[statusKey]] = []\r\n }\r\n })\r\n\r\n return updatedExistingOrders\r\n}\r\n","export const useConnection = ({ setConnectionStatus }) => {\r\n /**\n *\n */\n async function updateConnectionStatus () {\r\n if (navigator.onLine) {\r\n setConnectionStatus(navigator.onLine)\r\n } else {\r\n setConnectionStatus(navigator.onLine)\r\n }\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n // Attaching event handler for the online event\r\n window.addEventListener('online', function () {\r\n updateConnectionStatus()\r\n })\r\n\r\n // Attaching event handler for the offline event\r\n window.addEventListener('offline', function () {\r\n updateConnectionStatus()\r\n })\r\n }\r\n}\r\n","import { useEffect, useState } from 'react'\n\r\nimport {\r\n useGetSale,\r\n // updateExistingOrders,\r\n convertDateFormat,\r\n useOrdersFromStore\r\n} from '..'\n\r\nimport { findOrderByCodeRef, isDateInRange } from './helpers'\r\n\r\nexport const useManageNewOrder = ({\r\n client,\r\n idStore,\r\n setAlertBox = ({ message, duration }) => {\r\n return { message, duration }\r\n },\r\n playNotificationSound = () => {},\r\n setIsOpenOrder = (boolean) => { return boolean },\r\n setCountOrders = (number) => { return number },\r\n sendNotification = ({ title, description, backgroundColor }) => {\r\n return {\r\n title,\r\n description,\r\n backgroundColor\r\n }\r\n }\r\n}) => {\r\n const KEY_STATUS_ORDER = 'ACEPTA'\r\n const [orders, setOrders] = useState([])\r\n\r\n const [data] = useOrdersFromStore({\r\n idStore,\r\n search: '',\r\n fromDate: convertDateFormat({ start: true }),\r\n toDate: convertDateFormat({ start: false })\r\n })\r\n\r\n useEffect(() => {\r\n if (data) {\r\n const dataOrder = data[KEY_STATUS_ORDER]\r\n if (Array.isArray(dataOrder) && dataOrder) {\r\n const filteredOrders = dataOrder.filter(order =>\r\n {return isDateInRange(order?.pDatCre) && order?.pSState === 1}\r\n ) ?? []\r\n setOrders(filteredOrders)\r\n setCountOrders(filteredOrders.length)\r\n }\r\n }\r\n }, [data])\r\n\r\n const { getOneSalesStore } = useGetSale()\r\n\r\n const handleNewOrder = (order) => {\r\n const dataOrder = data[KEY_STATUS_ORDER]\r\n setOrders(dataOrder)\r\n const { pCodeRef } = order || {}\r\n if (pCodeRef) {\r\n const isCodeRefExists = findOrderByCodeRef(data, pCodeRef)\r\n if (isCodeRefExists) {\r\n return\r\n }\r\n setIsOpenOrder(true)\r\n getOneSalesStore({\r\n variables: {\r\n pCodeRef: pCodeRef ?? ''\r\n }\r\n }).then((response) => {\r\n console.log(response)\r\n // const currentSale = response?.data?.getOneSalesStore || {}\r\n client.cache.modify({\r\n fields: {\r\n // getAllOrdersFromStore (existingOrders = []) {\r\n // try {\r\n // const cache = updateExistingOrders(\r\n // existingOrders,\r\n // pCodeRef,\r\n // 1,\r\n // currentSale\r\n // )\r\n // const currentOrder = cache[KEY_STATUS_ORDER]\r\n // const filteredOrders = currentOrder.filter(order =>\r\n // isDateInRange(order.pDatCre)\r\n // )\r\n // setOrders(filteredOrders)\r\n // playNotificationSound()\r\n // return cache\r\n // } catch (e) {\r\n // return existingOrders\r\n // }\r\n // }\r\n }\r\n })\r\n })\r\n sendNotification({\r\n title: 'Pedido',\r\n description: 'Nuevo pedido',\r\n backgroundColor: 'success'\r\n })\r\n }\r\n }\r\n\r\n return [orders, { handleNewOrder }]\r\n}\r\n","/**\r\n * Busca un objeto dentro de un conjunto de columnas por su código de referencia.\r\n * @param {Object} data - El objeto que contiene las columnas.\r\n * @param {string} pCodeRef - El código de referencia a buscar.\r\n * @returns {Object|null} - El objeto encontrado o null si no se encuentra.\r\n */\r\nexport function findOrderByCodeRef (data, pCodeRef) {\r\n if (!data || typeof data !== 'object') {\r\n throw new Error('El parámetro \"data\" debe ser un objeto no nulo.')\r\n }\r\n\r\n if (typeof pCodeRef !== 'string') {\r\n throw new Error('El parámetro \"pCodeRef\" debe ser una cadena de texto.')\r\n }\r\n\r\n // Iterar sobre cada columna en el objeto data\r\n for (const columnKey in data) {\r\n if (Object.hasOwnProperty.call(data, columnKey)) {\r\n const column = data[columnKey]\r\n // Verificar si la columna es un array\r\n if (Array.isArray(column)) {\r\n // Buscar el objeto por pCodeRef dentro de la columna actual\r\n const foundOrder = column.find(\r\n (order) => {return order && order.pCodeRef === pCodeRef}\r\n )\r\n // Si se encuentra el objeto, devolverlo\r\n if (foundOrder) {\r\n return foundOrder\r\n }\r\n }\r\n }\r\n }\r\n // Si no se encuentra el objeto en ninguna columna, devolver null\r\n return null\r\n}\r\n\r\nexport const isDateInRange = (dateString) => {\r\n const currentDate = new Date()\r\n const todayStart = new Date(currentDate.setHours(0, 0, 0, 0))\r\n const tomorrowStart = new Date(todayStart)\r\n tomorrowStart.setDate(tomorrowStart.getDate() + 1)\r\n\r\n const date = new Date(dateString)\r\n return date >= todayStart && date < tomorrowStart\r\n}\r\n"," \r\nimport { useMutation } from '@apollo/client'\r\nimport { useRef, useState } from 'react'\n\r\nimport { RandomCode } from '../../utils'\r\nimport { useLocalStorage } from '../useLocalSorage'\r\nimport {\r\n UPDATE_PRODUCT_FOOD\r\n} from '../useProductsFood/queriesStore'\r\nimport { useTagsProducts } from '../useProductsFood/usetagsProducts'\r\nimport { useSetImageProducts } from '../useSetImageProducts'\r\nimport { UPDATE_IMAGE_PRODUCT_FOOD } from '../useSetImageProducts/queries'\r\nimport { useStore } from '../useStore'\n\r\nimport { getCatProductsWithProduct } from './helpers/manageCacheDataCatProduct'\nimport { useEditImageProduct } from './helpers/useEditImageProduct'\r\n\r\n\r\nexport const useCreateProduct = ({\r\n router,\r\n image,\r\n setAlertBox = (args) => { return args },\r\n sendNotification = (args) => { return args }\r\n}) => {\r\n const [errors, setErrors] = useState({\r\n names: false,\r\n ProPrice: false,\r\n ProDescuento: false,\r\n ProDescription: false,\r\n ProWeight: false,\r\n ProHeight: false,\r\n ValueDelivery: false\r\n })\r\n const [values, setValues] = useState({\r\n ProPrice: 0,\r\n ProDescuento: 0,\r\n ProDescription: '',\r\n ProWeight: '',\r\n ProHeight: '',\r\n ValueDelivery: 0,\r\n carProId: ''\r\n })\r\n const STEPS = Object.freeze({\r\n PRODUCT: 0,\r\n DESSERTS: 1,\r\n COMPLEMENTS: 2,\r\n DISPONIBILITY: 3\r\n })\r\n\r\n const [updateImageProducts] = useSetImageProducts()\r\n const [names, setName] = useLocalStorage('namefood', '')\r\n const [showMore, setShowMore] = useState(50)\r\n const [search, setSearch] = useState('')\r\n const [imageBase64, setImageBase64] = useState(null)\r\n const [active, setActive] = useState(STEPS.PRODUCT)\r\n const [pId, setPid] = useState(null)\r\n\r\n const [searchFilter, setSearchFilter] = useState({ gender: [], desc: [], speciality: [] })\r\n const [filter, setFilter] = useState({ gender: [], desc: [], speciality: [] })\r\n const initialState = { alt: '/ images/DEFAULTBANNER.png', src: '/images/DEFAULTBANNER.png' }\r\n const [{ alt, src }, setPreviewImg] = useState(initialState)\r\n const fileInputRef = useRef(null)\r\n const [arrTags, setTags] = useState([])\r\n const [stock, setStock] = useState(1)\r\n // Manage stock optional value boolean\r\n const [checkStock, setCheckStock] = useState(false)\r\n\r\n const handleIncreaseStock = () => {\r\n setStock(prevStock => {return prevStock + 1})\r\n }\r\n\r\n const handleDecreaseStock = () => {\r\n setStock(prevStock => {return (prevStock > 1 ? prevStock - 1 : 1)})\r\n }\r\n\r\n const handleCheckStock = () => {\r\n setCheckStock(prev => {\r\n const newCheckStock = !prev\r\n setStock(newCheckStock ? 1 : stock)\r\n return newCheckStock\r\n })\r\n }\r\n const [dataStore] = useStore()\r\n const {\r\n data,\r\n tags,\r\n setNewTags,\r\n newTags,\r\n handleRemoveTag,\r\n handleRegister: handleRegisterTags,\r\n handleAddTag\r\n } = useTagsProducts({ sendNotification })\r\n\r\n // HANDLESS\r\n const [check, setCheck] = useState({\r\n availability: true,\r\n noAvailability: false,\r\n desc: false,\r\n freeShipping: false\r\n })\r\n\r\n const handleCheck = (e) => {\r\n const { name, checked } = e.target\r\n return setCheck((prev) => {return { ...prev, [name]: checked }})\r\n }\r\n\r\n const handleUpdateBanner = event => {\r\n const { files } = event.target\r\n setPreviewImg(\r\n files.length\r\n ? {\r\n src: URL.createObjectURL(files[0]),\r\n alt: files[0].name\r\n }\r\n : initialState\r\n )\r\n }\r\n const handleChange = (e, error) => {\r\n const { name, value } = e.target\r\n setValues((prev) => {return {\r\n ...prev,\r\n [name]: value\r\n }})\r\n\r\n setErrors((prev) => {return {\r\n ...prev,\r\n [name]: error\r\n }})\r\n }\r\n const handleChangeFilter = e => {\r\n setSearch(e.target.value)\r\n }\r\n const onClickSearch = () => {\r\n setSearchFilter({ ...filter })\r\n }\r\n const onClickClear = () => {\r\n setSearchFilter({\r\n gender: [],\r\n desc: [],\r\n speciality: []\r\n })\r\n }\r\n const handleChangeClick = e => {\r\n const {\r\n name,\r\n value,\r\n checked\r\n } = e.target\r\n !checked\r\n ? setFilter(s => { return { ...s, [name]: s[name].filter(f => { return f !== value }) } })\r\n : setFilter({ ...filter, [name]: [...filter[name], value] })\r\n setSearchFilter({ ...filter })\r\n }\r\n const handleCheckFreeShipping = e => {\r\n handleCheck(e)\r\n setValues({\r\n ...values,\r\n ValueDelivery: 0\r\n })\r\n }\r\n\r\n const [updateProductFoods, { loading }] = useMutation(UPDATE_PRODUCT_FOOD, {\r\n })\r\n const [setImageProducts] = useMutation(UPDATE_IMAGE_PRODUCT_FOOD)\r\n\r\n const onTargetClick = () => {\r\n if (fileInputRef.current) {\r\n fileInputRef.current.click()\r\n }\r\n }\r\n \r\n const { img } = useEditImageProduct({ sendNotification, initialState })\r\n\r\n const handleRegister = async () => {\r\n const {\r\n ProPrice,\r\n ProDescuento,\r\n ProDescription,\r\n ProWeight,\r\n ProHeight,\r\n ValueDelivery,\r\n carProId\r\n } = values ?? {\r\n ProPrice: 0,\r\n ProDescuento: 0,\r\n ProDescription: '',\r\n ProWeight: '',\r\n ProHeight: 0,\r\n ValueDelivery: 0,\r\n carProId: ''\r\n }\r\n if (!carProId && !names) return setErrors({ ...errors, carProId: true })\r\n const ProImage = '/images/placeholder-image.webp'\r\n const pCode = RandomCode(10)\r\n try {\r\n const response = await updateProductFoods({\r\n variables: {\r\n input: {\r\n idStore: dataStore?.getStore?.idStore || '',\r\n ProPrice: check?.desc ? 0 : ProPrice,\r\n ProDescuento: check?.desc ? 0 : ProDescuento,\r\n ValueDelivery: check?.desc ? 0 : ValueDelivery,\r\n ProDescription,\r\n pName: names,\r\n manageStock: checkStock,\r\n pCode,\r\n carProId,\r\n stock,\r\n pState: 1,\r\n sTateLogistic: 1,\r\n ProStar: 0,\r\n ProImage,\r\n ProHeight: parseFloat(ProHeight),\r\n ProWeight,\r\n ProOutstanding: check?.desc ? 1 : 0,\r\n ProDelivery: check?.desc ? 1 : 0\r\n }\r\n }\r\n // update (cache) {\r\n // cache.modify({\r\n // fields: {\r\n // productFoodsAll (dataOld = []) {\r\n // return cache.writeQuery({ query: GET_ALL_FOOD_PRODUCTS, data: dataOld })\r\n // }\r\n // // getCatProductsWithProduct () {\r\n // // const updatedData = getCatProductsWithProduct(data, carProId)\r\n // // return updatedData\r\n // // }\r\n // }\r\n // })\r\n // }\r\n })\r\n const { data } = response\r\n const { updateProductFoods: dataResponse } = data\r\n const { success, data: productData } = dataResponse\r\n const { pId } = productData\r\n if (success) {\r\n handleRegisterTags({\r\n pId,\r\n nameTag: tags?.tag ?? null\r\n })\r\n }\r\n const { errors } = response?.data?.updateProductFoods ?? {\r\n errors: []\r\n }\r\n if (errors?.length > 0) {\r\n errors.forEach(error => {\r\n sendNotification({\r\n backgroundColor: 'error',\r\n title: 'Error',\r\n description: error.message\r\n })\r\n })\r\n return\r\n }\r\n if (image !== null) {\r\n try {\r\n await updateImageProducts({\r\n pId: response?.data?.updateProductFoods?.data?.pId,\r\n image\r\n })\r\n } catch {\r\n sendNotification({\r\n backgroundColor: 'error',\r\n title: `Ocurrió un error en la imagen en el producto ${names}`,\r\n description: 'error'\r\n })\r\n }\r\n }\r\n setPid(response?.data?.updateProductFoods?.data?.pId ?? null)\r\n return response\r\n } catch (error) {\r\n setAlertBox({ message: 'Ha ocurrido un error', duration: 7000 })\r\n }\r\n }\r\n\r\n // Manage tags\r\n const changeHandler = (name, value) => {\r\n if (name === 'tags') {\r\n setTags(value)\r\n if (value.length > 0 && errors.tags) {\r\n setErrors(prev => {\r\n const prevErrors = { ...prev }\r\n delete prevErrors.tags\r\n return prevErrors\r\n })\r\n }\r\n }\r\n }\r\n return {\r\n errors,\r\n src,\r\n names,\r\n setName,\r\n alt,\r\n showMore,\r\n success: true,\r\n fileInputRef,\r\n values,\r\n search,\r\n stock,\r\n pId,\r\n dataTags: data,\r\n tags,\r\n checkStock,\r\n loading,\r\n active,\r\n idStore: dataStore?.getStore?.idStore || '',\r\n arrTags,\r\n newTags,\r\n setNewTags,\r\n setPid,\r\n handleChange,\r\n onClickClear,\r\n handleChangeClick,\r\n handleChangeFilter,\r\n handleUpdateBanner,\r\n onClickSearch,\r\n handleDecreaseStock,\r\n handleIncreaseStock,\r\n changeHandler,\r\n setErrors,\r\n setCheck,\r\n handleRegister,\r\n setActive,\r\n STEPS,\r\n handleRegisterTags,\r\n setShowMore,\r\n handleCheckStock,\r\n onTargetClick,\r\n handleAddTag,\r\n handleRemoveTag,\r\n handleCheck,\r\n handleCheckFreeShipping,\r\n check\r\n }\r\n}\r\n","import { useState } from 'react'\r\n\r\nexport const useLocalStorage = (key: string, initialValue: string | object | any) => {\r\n // const { setAlertBox } = useContext(Context)\r\n // State to store our value\r\n // Pass initial state function to useState so logic is only executed once\r\n const [storedValue, setStoredValue] = useState(() => {\r\n try {\r\n // Get from local storage by key\r\n const item = window.localStorage.getItem(key)\r\n // Parse stored json or if none return initialValue\r\n return item ? JSON.parse(item) : initialValue\r\n } catch (error) {\r\n // If error also return initialValue\r\n return initialValue\r\n }\r\n })\r\n\r\n // Return a wrapped version of useState's setter function that ...\r\n // ... persists the new value to localStorage.\r\n const setValue = (value: string | object | any) => {\r\n try {\r\n // Allow value to be a function so we have same API as useState\r\n const valueToStore =\r\n value instanceof Function ? value(storedValue) : value\r\n // Save state\r\n setStoredValue(valueToStore)\r\n // Save to local storage\r\n window.localStorage.setItem(key, JSON.stringify(valueToStore))\r\n } catch (error) {\r\n // A more advanced implementation would handle the error case\r\n }\r\n }\r\n\r\n return [storedValue, setValue]\r\n}\r\n","import { useMutation } from '@apollo/client'\r\nimport { useState } from 'react'\n\r\nimport { useDeleteOneTag, useGetAllTags } from '../useTagProducts'\n\r\nimport { REGISTER_TAGS_PRODUCT } from './queriesStore'\n\r\n\r\nexport const useTagsProducts = ({\r\n sendNotification = () => { }\r\n} = {}) => {\r\n const [registerTag] = useMutation(REGISTER_TAGS_PRODUCT)\r\n const [handleDeleteTag, { loading }] = useDeleteOneTag()\r\n const { tags: listTags } = useGetAllTags()\r\n const [newTags, setNewTags] = useState([])\r\n\r\n const [tags, setTags] = useState({\r\n id: '',\r\n tag: ''\r\n })\r\n\r\n const handleAddTag = (id, tag) => {\r\n if (tags.id === id) {\r\n return setTags({\r\n id: '',\r\n tag: ''\r\n })\r\n }\r\n return setTags({\r\n id,\r\n tag\r\n })\r\n }\r\n\r\n const handleRemoveTag = async (tag) => {\r\n try {\r\n if (loading) return\r\n const { id: tgId, tag: nameTag } = tag ?? {\r\n tgId: null,\r\n nameTag: null\r\n }\r\n const response = await handleDeleteTag({ tgId, nameTag })\r\n const {\r\n success = false,\r\n message = '',\r\n data\r\n } = response ?? {}\r\n\r\n const name = data?.nameTag ?? ''\r\n return sendNotification({\r\n title: name ?? 'error',\r\n description: message,\r\n backgroundColor: success ? 'success' : 'error'\r\n })\r\n } catch (e) {\r\n sendNotification({\r\n title: 'Error',\r\n description: 'error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n }\r\n\r\n const handleRegister = tag => {\r\n const {\r\n pId,\r\n idUser,\r\n idStore,\r\n nameTag\r\n } = tag || {}\r\n\r\n registerTag({\r\n variables: {\r\n input: {\r\n pId,\r\n idUser,\r\n nameTag,\r\n idStore\r\n }\r\n }\r\n }).catch(err => { return console.log({ message: `${err}`, duration: 7000 }) })\r\n }\r\n const data = listTags.map((tag) => {\r\n return {\r\n id: tag?.tgId ?? '',\r\n tag: String(tag?.nameTag ?? '')\r\n }\r\n })\r\n\r\n return {\r\n tags,\r\n error: false,\r\n data,\r\n loading: false,\r\n newTags: newTags ?? [],\r\n setNewTags,\r\n handleRegister,\r\n handleRemoveTag,\r\n handleAddTag\r\n }\r\n}\r\n","import { useMutation, gql, useApolloClient } from '@apollo/client'\n\r\nimport { GET_ALL_TAGS } from './useGetAllTags'\r\n\r\n/**\r\n * GraphQL mutation to register multiple tags.\r\n */\r\nconst REGISTER_MULTIPLE_TAGS = gql`\r\n mutation registerMultipleTags($input: [String!]!) {\r\n registerMultipleTags(input: $input) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n }\r\n data {\r\n tgId\r\n nameTag\r\n idStore\r\n idUser\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Response structure for tag registration errors.\r\n */\r\ninterface ITagError {\r\n path: string\r\n message: string\r\n}\r\n\r\n/**\r\n * Structure for a registered tag.\r\n */\r\ninterface ITag {\r\n tgId: string\r\n nameTag: string\r\n idStore: string\r\n idUser: string\r\n}\r\n\r\n/**\r\n * General GraphQL response for registering tags.\r\n */\r\ninterface IResponseTag {\r\n success: boolean\r\n message: string\r\n errors: ITagError[]\r\n data: ITag[]\r\n}\r\n\r\n/**\r\n * Options for the useRegisterMultipleTags hook.\r\n */\r\ninterface UseRegisterMultipleTagsOptions {\r\n callback?: (response: IResponseTag) => void\r\n}\r\n\r\n/**\r\n * Return type for the useRegisterMultipleTags hook.\r\n */\r\ntype UseRegisterMultipleTagsReturn = [\r\n (tags: string[]) => Promise<IResponseTag>,\r\n {\r\n loading: boolean\r\n error: any\r\n data: IResponseTag | null\r\n }\r\n]\r\n\r\n/**\r\n * Hook to register multiple tags via GraphQL mutation.\r\n *\r\n * @param {UseRegisterMultipleTagsOptions} [options] - Optional callback for post-mutation handling.\r\n * @returns {UseRegisterMultipleTagsReturn} - Mutation handler and state.\r\n */\r\nexport const useRegisterMultipleTags = (\r\n { callback = () => { } }: UseRegisterMultipleTagsOptions = {}\r\n): UseRegisterMultipleTagsReturn => {\r\n const client = useApolloClient()\r\n const [registerMultipleTags, { loading, error, data }] = useMutation<\r\n { registerMultipleTags: IResponseTag },\r\n { input: string[] }\r\n >(REGISTER_MULTIPLE_TAGS, {\r\n onCompleted: (data) => {\r\n if (typeof callback === 'function') {\r\n callback(data.registerMultipleTags)\r\n }\r\n }\r\n })\r\n\r\n /**\r\n * Register multiple tags with the provided names.\r\n *\r\n * @param {string[]} tags - Array of tag names.\r\n * @returns {Promise<IResponseTag>} - Mutation response.\r\n */\r\n const handleRegisterTags = async (tags: string[]): Promise<IResponseTag> => {\r\n if (!Array.isArray(tags) || tags.length === 0 || tags.some(tag => {return typeof tag !== 'string'})) {\r\n throw new Error('Tag list must be a non-empty array of strings.')\r\n }\r\n\r\n const response = await registerMultipleTags({\r\n variables: {\r\n input: tags\r\n },\r\n update: (cache, { data }) => {\r\n if (!data?.registerMultipleTags?.data?.length) return\r\n\r\n const newTags = data.registerMultipleTags.data\r\n\r\n try {\r\n const existing = client.readQuery({ query: GET_ALL_TAGS })\r\n\r\n const updatedTags = [\r\n ...newTags,\r\n ...(existing?.getAllTags?.data || [])\r\n ]\r\n\r\n cache.writeQuery({\r\n query: GET_ALL_TAGS,\r\n data: {\r\n getAllTags: {\r\n ...existing.getAllTags,\r\n data: updatedTags,\r\n pagination: {\r\n ...existing.getAllTags.pagination,\r\n totalRecords: updatedTags.length\r\n }\r\n }\r\n }\r\n })\r\n } catch (error) {\r\n console.warn('Failed to update cache for GET_ALL_TAGS:', error)\r\n }\r\n }\r\n })\r\n return response.data?.registerMultipleTags ?? {\r\n success: false,\r\n message: 'No response from server',\r\n errors: [],\r\n data: []\r\n }\r\n }\r\n\r\n return [\r\n handleRegisterTags,\r\n {\r\n loading,\r\n error,\r\n data: data?.registerMultipleTags ?? null\r\n }\r\n ]\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL query to fetch all tags\r\n */\r\nexport const GET_ALL_TAGS = gql`\r\nquery getAllTags {\r\n getAllTags {\r\n success\r\n message\r\n pagination {\r\n totalRecords\r\n totalPages\r\n currentPage\r\n }\r\n data {\r\n tgId\r\n idUser\r\n idStore\r\n pId\r\n nameTag\r\n aName\r\n }\r\n errors {\r\n path\r\n message\r\n type\r\n context {\r\n limit\r\n value\r\n label\r\n key\r\n }\r\n }\r\n }\r\n}\r\n`\r\n\r\n/**\r\n * Custom hook to fetch all tags\r\n *\r\n * @returns {{\r\n * tags: any[],\r\n * loading: boolean,\r\n * error: Error | null,\r\n * message: string,\r\n * success: boolean,\r\n * pagination: { totalRecords: number, totalPages: number, currentPage: number } | null,\r\n * errors: any[] | null\r\n * }}\r\n */\r\nexport const useGetAllTags = () => {\r\n const { data, loading, error } = useQuery(GET_ALL_TAGS, {\r\n fetchPolicy: 'network-only'\r\n })\r\n\r\n const result = data?.getAllTags ?? {}\r\n\r\n return {\r\n tags: result?.data || [],\r\n loading,\r\n error,\r\n message: result?.message ?? '',\r\n success: result?.success ?? false,\r\n pagination: result?.pagination ?? null,\r\n errors: result?.errors ?? null\r\n }\r\n}\r\n","import { gql, useMutation } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL mutation to delete a tag by ID or name.\r\n */\r\nconst DELETE_ONE_TAG = gql`\r\n mutation deleteOneTag($tgId: ID, $nameTag: String) {\r\n deleteOneTag(tgId: $tgId, nameTag: $nameTag) {\r\n success\r\n message\r\n data {\r\n tgId\r\n nameTag\r\n state\r\n }\r\n errors {\r\n path\r\n message\r\n type\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to delete a tag by ID or name.\r\n * @returns {Object} An object with the deleteTag function and mutation state.\r\n */\r\nexport const useDeleteOneTag = () => {\r\n const [deleteOneTag, { data, loading, error }] = useMutation(DELETE_ONE_TAG, {\r\n update(cache, { data }) {\r\n const deleted = data?.deleteOneTag?.data\r\n const success = data?.deleteOneTag?.success\r\n\r\n if (!success || !deleted?.tgId) return\r\n\r\n // Update cache for getAllTags\r\n cache.modify({\r\n fields: {\r\n getAllTags(existing = {}) {\r\n const filteredData = existing?.data?.filter(\r\n (tag: any) => {return tag.tgId !== deleted.tgId}\r\n ) || []\r\n\r\n return {\r\n ...existing,\r\n data: filteredData,\r\n pagination: {\r\n ...existing.pagination,\r\n totalRecords: Math.max((existing.pagination?.totalRecords || 1) - 1, 0)\r\n }\r\n }\r\n }\r\n }\r\n })\r\n },\r\n // optional, remove if you prefer default behavior\r\n onError(err) {\r\n console.error('❌ Apollo error in deleteOneTag:', err)\r\n }\r\n })\r\n /**\r\n * Deletes a tag by ID or name.\r\n * @param {Object} variables - Mutation input.\r\n * @param {string} [variables.tgId] - Tag ID (optional).\r\n * @param {string} [variables.nameTag] - Tag name (optional).\r\n * @returns {Promise<Object>} Response from server.\r\n */\r\n const handleDeleteTag = async ({\r\n tgId,\r\n nameTag\r\n }: {\r\n tgId?: string\r\n nameTag?: string\r\n }) => {\r\n try {\r\n const { data } = await deleteOneTag({\r\n variables: {\r\n tgId,\r\n nameTag\r\n }\r\n })\r\n\r\n return data.deleteOneTag\r\n } catch (err: any) {\r\n return {\r\n success: false,\r\n message: 'An error occurred while deleting the tag.',\r\n data: null,\r\n errors: [\r\n {\r\n path: 'mutation',\r\n message: err.message || 'Unknown error',\r\n type: 'server'\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n\r\n return [handleDeleteTag, {\r\n data,\r\n loading,\r\n error\r\n }]\r\n}\r\n","import { useMutation, useApolloClient } from '@apollo/client'\n\r\nimport { GET_ONE_PRODUCTS_FOOD } from '../useProductsFood/queriesStore'\n\r\nimport { UPDATE_IMAGE_PRODUCT_FOOD } from './queries'\r\n\r\n/**\r\n * Hook to update product image and sync Apollo cache.\r\n *\r\n * @returns {[Function, Object]} mutation function and its state\r\n */\r\nexport const useSetImageProducts = () => {\r\n const client = useApolloClient()\r\n\r\n const [setImageProducts, { data, loading, error }] = useMutation(UPDATE_IMAGE_PRODUCT_FOOD)\r\n\r\n /**\r\n * Updates product image and manually updates Apollo cache.\r\n *\r\n * @param {Object} variables - Requires pId and image\r\n * @returns {Promise<any>}\r\n */\r\n const updateImageProducts = async (variables) => {\r\n const { pId, image } = variables\r\n\r\n if (!pId || !image) throw new Error('Missing pId or image')\r\n\r\n const response = await setImageProducts({\r\n variables: { input: { pId, image } }\r\n })\r\n const { ProImage } = response?.data?.setImageProducts?.data ?? {}\r\n try {\r\n const existing = client.readQuery({\r\n query: GET_ONE_PRODUCTS_FOOD,\r\n variables: { pId }\r\n })\r\n\r\n if (!existing?.productFoodsOne) return response\r\n\r\n // 📝 Escribir de nuevo el producto con la imagen actualizada\r\n client.writeQuery({\r\n query: GET_ONE_PRODUCTS_FOOD,\r\n variables: { pId },\r\n data: {\r\n productFoodsOne: {\r\n ...existing.productFoodsOne,\r\n ProImage\r\n }\r\n }\r\n })\r\n } catch (err) {\r\n console.warn('⚠️ Error updating cache for GET_ONE_PRODUCTS_FOOD:', err)\r\n }\r\n\r\n return response\r\n }\r\n\r\n return [updateImageProducts, { data, loading, error }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const UPDATE_IMAGE_PRODUCT_FOOD = gql`\r\n mutation setImageProducts($input: IFileImageProductFood) {\r\n setImageProducts(input: $input) {\r\n success\r\n message\r\n data {\r\n pId\r\n ProImage\r\n __typename\r\n }\r\n errors {\r\n message\r\n }\r\n }\r\n }\r\n`\r\n"," \r\nimport { useRef, useState } from 'react'\r\n\r\nexport const useEditImageProduct = ({ sendNotification = () => { }, initialState }) => {\r\n const [openEditImage, setopenEditImage] = useState(false)\r\n \r\n const [tags, setTags] = useState([])\r\n const [{ src, alt }, setPreviewImg] = useState([])\r\n const [errors, setErrors] = useState({})\r\n const handleOpenEditImage = () => {\r\n setopenEditImage(!openEditImage)\r\n }\r\n // eslint-disable-next-line\r\n const changeHandler = (name, value) => {\r\n if (name === 'tags') {\r\n setTags(value)\r\n if (value.length > 0 && errors.tags) {\r\n setErrors(prev => {\r\n const prevErrors = { ...prev }\r\n delete prevErrors.tags\r\n return prevErrors\r\n })\r\n }\r\n }\r\n }\r\n const [existImage, setExistImage] = useState(false)\r\n const [crop, setCrop] = useState({ x: 0, y: 0 })\r\n const [zoom, setZoom] = useState(0)\r\n const imageRef = useRef(null)\r\n const onCropChange = (crop) => {\r\n setCrop(crop)\r\n }\r\n\r\n const onZoomChange = (zoom) => {\r\n setZoom(zoom)\r\n }\r\n\r\n const onCropComplete = (crop, pixelCrop) => {\r\n const canvas = document.createElement('canvas')\r\n const img = imageRef.current\r\n\r\n canvas.width = pixelCrop.width\r\n canvas.height = pixelCrop.height\r\n\r\n const ctx = canvas.getContext('2d')\r\n ctx.drawImage(\r\n img,\r\n pixelCrop.x,\r\n pixelCrop.y,\r\n pixelCrop.width,\r\n pixelCrop.height,\r\n 0, 0,\r\n pixelCrop.width,\r\n pixelCrop.height)\r\n // ctx.drawImage(\r\n // img,\r\n // pixelCrop.x,\r\n // pixelCrop.y,\r\n // pixelCrop.width,\r\n // pixelCrop.height,\r\n // 0,\r\n // 0,\r\n // canvas.width,\r\n // canvas.height\r\n // )\r\n const croppedUrl = canvas.toDataURL()\r\n // console.log(croppedUrl)\r\n // You can use the croppedUrl for whatever you want\r\n // for example, you can set it as the src of an img element\r\n // or send it to a server\r\n // Convert the dataURL to a blob\r\n fetch(croppedUrl)\r\n .then(response => { return response.blob() })\r\n .then(blob => {\r\n // Create a new File\r\n const file = new File([blob], 'cropped_image.jpg', { type: blob.type })\r\n setPreviewImg(\r\n file\r\n ? {\r\n src: URL.createObjectURL(file),\r\n alt: ''\r\n }\r\n : initialState\r\n )\r\n // You can use the file object to send it to a server or to download it\r\n sendNotification({\r\n backgroundColor: 'success',\r\n title: 'Exito',\r\n description: 'Imagen editada'\r\n })\r\n setExistImage(true)\r\n handleOpenEditImage()\r\n })\r\n .catch(() => {\r\n sendNotification({\r\n backgroundColor: 'error',\r\n title: 'Error',\r\n description: 'Ha ocurrido un error!'\r\n })\r\n })\r\n // You can use the file object to send it to a server or to download it\r\n }\r\n /**\n *\n * @param image\n * @param crop\n * @param zoom\n */\n function getPixelCrop (image, crop, zoom) {\r\n const imgWidth = image.naturalWidth\r\n const imgHeight = image.naturalHeight\r\n\r\n const scaledWidth = imgWidth * zoom\r\n const scaledHeight = imgHeight * zoom\r\n\r\n const x = (imgWidth * crop.x) / 100\r\n const y = (imgHeight * crop.y) / 100\r\n\r\n return {\r\n x,\r\n y,\r\n width: scaledWidth,\r\n height: scaledHeight\r\n }\r\n }\r\n const handleEditImage = () => {\r\n handleOpenEditImage()\r\n }\r\n\r\n const [Dimage, setImage] = useState('')\r\n const [cropData, setCropData] = useState('#')\r\n const [cropper, setCropper] = useState()\r\n const onChange = (e) => {\r\n e.preventDefault()\r\n let files\r\n if (e.dataTransfer) {\r\n files = e.dataTransfer.files\r\n } else if (e.target) {\r\n files = e.target.files\r\n }\r\n const reader = new FileReader()\r\n reader.onload = () => {\r\n setImage(reader.result)\r\n }\r\n reader.readAsDataURL(files[0])\r\n }\r\n\r\n const getCropData = () => {\r\n if (typeof cropper !== 'undefined') {\r\n setCropData(cropper.getCroppedCanvas().toDataURL())\r\n fetch(cropper)\r\n .then(response => { return response.blob() })\r\n .then(blob => {\r\n // Create a new File\r\n const file = new File([blob], 'cropped_image.jpg', { type: blob.type })\r\n setPreviewImg(\r\n file\r\n ? {\r\n src: URL.createObjectURL(file),\r\n alt: ''\r\n }\r\n : initialState\r\n )\r\n // You can use the file object to send it to a server or to download it\r\n sendNotification({ title: 'Exito', description: 'Imagen editada' })\r\n setExistImage(true)\r\n handleOpenEditImage()\r\n })\r\n .catch(() => {\r\n sendNotification({ title: 'Error', description: 'Ha ocurrido un error!' })\r\n })\r\n }\r\n }\r\n return {\r\n img: null,\r\n crop,\r\n existImage,\r\n zoom,\r\n handleEditImage,\r\n onCropChange\r\n }\r\n}\r\n","import {\r\n useState,\r\n useEffect\r\n} from 'react'\n\r\nimport { MockData } from '../../mock'\r\nimport { RandomCode, updateCacheMod } from '../../utils'\r\nimport { useUpdateExtProductFoodsOptional } from '../updateExtProductFoodsOptional'\r\nimport { useDeleteSubProductOptional } from '../useDeleteSubProductOptional'\r\nimport { useEditSubProductOptional } from '../useEditSubProductOptional'\r\nimport { useRemoveExtraProductFoodsOptional } from '../useRemoveExtraProductFoodsOptional'\r\nimport { GET_EXTRAS_PRODUCT_FOOD_OPTIONAL } from '../useRemoveExtraProductFoodsOptional/queries'\nimport { useUpdateExtProductFoodsSubOptional } from '../useUpdateExtProductFoodsSubOptional'\r\n\r\nimport { transformDataToDessert } from './helpers'\n\r\n\r\nexport const useDessert = ({\r\n pId = null,\r\n initialData = null,\r\n sendNotification = (args) => { return args }\r\n}) => {\r\n const [selectedExtra, setSelectedExtra] = useState({})\r\n const [openModalEditExtra, setOpenModalEditExtra] = useState(false)\r\n const [selectedItem, setSelectedItem] = useState({})\r\n\r\n // Initialize state variables using the useState hook\r\n const [setCheck, setChecker] = useState({\r\n exState: false\r\n }) // State for checkboxes\r\n const [valueItems, setValueItems] = useState('') // State for input values\r\n const [title, setTitle] = useState('') // State for title input value\r\n // Initialize the data state with the transformedData or MockData\r\n const [data, setData] = useState(MockData)\r\n const handleCleanData = () => {\r\n setData(MockData)\r\n }\r\n const dataListIds = data?.listIds?.filter(x => {return x !== '01list'})\r\n\r\n /**\r\n * Checks if all required lists have the maximum number of cards.\r\n *\r\n * @return {boolean} Returns true if all required lists have the maximum number of cards, otherwise false.\r\n */\r\n const isCompleteRequired = dataListIds?.every(listID => {\r\n try {\r\n if (!Array.isArray(dataListIds) || data === null) {\r\n throw new Error('Invalid arguments. dataListIds must be an array and data must be a non-null object.')\r\n }\r\n const list = data.lists[listID]\r\n // If list or list.cards is missing, assume the list is not complete\r\n const verifiEmpyRequireCard = list?.cards?.length\r\n if (list && list?.cards) {\r\n return Number(verifiEmpyRequireCard) === Number(list.numberLimit)\r\n }\r\n\r\n // If list or list.cards is missing, assume the list is not complete\r\n return false\r\n } catch (e) {\r\n return false\r\n }\r\n })\r\n\r\n // Use useEffect to update the data state when the initialData prop changes\r\n useEffect(() => {\r\n if (initialData) {\r\n // Only update the data state if it's different from initialData\r\n if (JSON.stringify(data) !== JSON.stringify(transformDataToDessert(initialData))) {\r\n const transformedInitialData = transformDataToDessert(initialData)\r\n setData(transformedInitialData)\r\n }\r\n }\r\n }, [initialData]) // Include data as a dependency\r\n\r\n // Filter the 'listIds' from 'data' and store the filtered result in 'dataListIds'\r\n // Here, it seems to exclude a specific list ID ('01list') from the listIds.\r\n\r\n // HOOKS\r\n const { handleMutateExtProductFoodsSubOptional } = useUpdateExtProductFoodsSubOptional({\r\n sendNotification\r\n })\r\n const { handleUpdateExtProduct } = useUpdateExtProductFoodsOptional()\r\n const { DeleteExtProductFoodsOptional } = useRemoveExtraProductFoodsOptional()\r\n const [DeleteExtFoodSubsOptional] = useDeleteSubProductOptional()\r\n const [editExtFoodSubsOptional, { loading: loadingEditSubOptional }] = useEditSubProductOptional()\r\n\r\n // HANDLESS\r\n /**\r\n * Handles checkbox changes and updates the setCheck state accordingly.\r\n * @param {Event} e - The checkbox change event object.\r\n */\r\n const handleCheck = (e) => {\r\n // Extract the 'name' and 'checked' properties from the event target (checkbox)\r\n const { name, checked } = e.target\r\n\r\n // Update the setCheck state with the new value for the checkbox identified by the 'name' property\r\n setChecker({ ...setCheck, [name]: checked })\r\n }\r\n\r\n /**\r\n * Handles the removal of a list from the data state and performs additional operations if needed.\r\n * @param {number} i - The index of the list to be removed.\r\n * @param {string} listID - The ID of the list to be removed (optional).\r\n * @throws {Error} Will throw an error if the provided index (i) is not a non-negative number.\r\n * @throws {Error} Will throw an error if the provided index (i) is out of range.\r\n * @throws {Error} Will throw an error if the provided listID is invalid (optional validation).\r\n */\r\n const handleRemoveList = (i, listID) => {\r\n // Validate that the provided index (i) is a non-negative number\r\n if (typeof i !== 'number' || i < 0) {\r\n throw new Error('Invalid index provided. The index must be a non-negative number.')\r\n }\r\n\r\n // Make a copy of the listIds array from the data state\r\n const listIdsCopy = [...data.listIds]\r\n\r\n // Validate that the provided index (i) is within the range of the listIds array\r\n if (i >= listIdsCopy.length) {\r\n throw new Error('Invalid index provided. The index is out of range.')\r\n }\r\n\r\n // Remove the list with the specified index from the listIdsCopy array\r\n const Lines = data?.listIds.filter((_, index) => {return index !== i})?.filter(x => {return x !== '01list'})\r\n // Update the data state with the modified listIdsCopy array\r\n setData({\r\n listIds: listID ? Lines.filter((subItem) => { return subItem !== listID }) : Lines,\r\n lists: {\r\n ...data.lists\r\n }\r\n })\r\n\r\n // Perform additional operations if a valid listID is provided\r\n if (listID) {\r\n try {\r\n // Assuming DeleteExtProductFoodsOptional is a function that deletes an external product\r\n // Call the function to delete the external product using the provided listID\r\n DeleteExtProductFoodsOptional({\r\n variables: {\r\n state: 1,\r\n opExPid: listID,\r\n isCustomOpExPid: true\r\n },\r\n update: (cache, { data: { ExtProductFoodsOptionalAll } }) => {\r\n return updateCacheMod({\r\n cache,\r\n query: GET_EXTRAS_PRODUCT_FOOD_OPTIONAL,\r\n nameFun: 'ExtProductFoodsOptionalAll',\r\n dataNew: ExtProductFoodsOptionalAll\r\n })\r\n }\r\n })\r\n } catch (error) {\r\n // Handle any errors that may occur during the deletion process\r\n throw new Error('An error occurred while deleting the external product.')\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes a specific item from a list within the data state.\r\n * @param {Object} params - The parameters for removing the item.\r\n * @param {string} params.listID - The ID of the list from which the item will be removed.\r\n * @param {string} params.id - The ID of the item to be removed.\r\n * @param params.isCustomSubOpExPid\n * @throws {Error} Will throw an error if the provided listID does not exist in the data state.\r\n * @throws {Error} Will throw an error if the provided listID exists but the corresponding list does not have a cards array.\r\n */\r\n const removeOneItem = ({\r\n listID = '',\r\n id = '',\r\n isCustomSubOpExPid = false\r\n }) => {\r\n try {\r\n const forRemove = Boolean(listID && id)\r\n if (forRemove) {\r\n DeleteExtFoodSubsOptional({\r\n variables: {\r\n isCustomSubOpExPid,\r\n opSubExPid: id,\r\n state: 1\r\n }\r\n })\r\n }\r\n // Ensure the provided listID exists in the data state\r\n if (!data.lists[listID]) {\r\n throw new Error(`List with ID \"${listID}\" does not exist.`)\r\n }\r\n\r\n // Ensure the list has a cards array\r\n if (!Array.isArray(data.lists[listID].cards)) {\r\n throw new Error(`List with ID \"${listID}\" does not have a valid cards array.`)\r\n }\r\n\r\n // Get the current list from the data state using the provided listID\r\n const currentList = data.lists[listID]\r\n\r\n // Filter out the item with the specified ID from the current list's cards array\r\n const filteredCart = currentList?.cards?.filter((cart) => {return cart.id !== id})\r\n\r\n // Update the current list's cards with the filtered array to remove the specified item\r\n setData({\r\n listIds: [...data.listIds],\r\n lists: {\r\n ...data.lists,\r\n [listID]: {\r\n ...currentList,\r\n cards: filteredCart\r\n }\r\n }\r\n })\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n }\r\n\r\n /**\r\n * Edits a single item within a list.\r\n *\r\n * The `editOneItem` function is responsible for editing the title of a specific item in a list.\r\n * It first updates the state of the selected item, then searches for the item in the current list\r\n * using its ID, and compares the existing title with the new title provided. If the title is\r\n * different and not null, it makes an API call (`editExtFoodSubsOptional`) to update the\r\n * title in the database. If the update is successful, a success notification is sent, and\r\n * the local state is updated to reflect the changes in the item. The function handles errors\r\n * internally and logs them to the console.\r\n *\r\n * @param {Object} params - Parameters for editing an item.\r\n * @param {string} params.listID - The ID of the list containing the item to be edited.\r\n * @param {string} params.id - The ID of the specific item to be edited.\r\n * @param {string|null} [params.title=null] - The new title for the item. If null, no\r\n * update is performed.\r\n */\r\n const editOneItem = ({\r\n listID = '',\r\n id = '',\r\n title = null\r\n }) => {\r\n try {\r\n setSelectedItem(() => {\r\n return { listID, id }\r\n })\r\n const currentList = data.lists[listID]\r\n const findItem = currentList?.cards?.find(item => { return item.id === id })\r\n const checkDifferentText = findItem?.title !== title\r\n if (title && checkDifferentText) {\r\n editExtFoodSubsOptional({\r\n variables: {\r\n isCustomSubOpExPid: false,\r\n opSubExPid: id,\r\n OptionalSubProName: title\r\n }\r\n }).then(({ data: response }) => {\r\n const { editExtFoodSubsOptional } = response || {}\r\n const { success } = editExtFoodSubsOptional || { success: false }\r\n if (success) {\r\n sendNotification({\r\n description: 'El sub item actualizado con éxito',\r\n title: 'Actualizado',\r\n backgroundColor: 'success'\r\n })\r\n const currentList = data.lists[listID]\r\n const updatedCards = currentList?.cards?.map((card) => {\r\n if (card.id === id) {\r\n return {\r\n ...card,\r\n title\r\n }\r\n }\r\n return card\r\n })\r\n setData({\r\n listIds: [...data.listIds],\r\n lists: {\r\n ...data.lists,\r\n [listID]: {\r\n ...currentList,\r\n cards: updatedCards\r\n }\r\n }\r\n })\r\n }\r\n })\r\n }\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n }\r\n\r\n const updateListById = (listId, updatedFields) => {\r\n setData((prevData) => {\r\n const updatedLists = {\r\n ...prevData.lists,\r\n [listId]: {\r\n ...prevData.lists[listId],\r\n ...updatedFields\r\n }\r\n }\r\n\r\n return {\r\n ...prevData,\r\n lists: updatedLists\r\n }\r\n })\r\n }\r\n /**\r\n * Edit a extra.\r\n * @async\r\n * @param {Object} options - Opciones para la edición del extra.\r\n * @param {string} options.id - ID del extra.\r\n * @param {number|null} options.numberLimit - Límite de número para el extra.\r\n * @param {string} options.title - Título del extra.\r\n * @param {boolean} options.required - Indica si el extra es requerido.\r\n * @throws {Error} Se lanza un error si no se proporciona un ID válido.\r\n * @returns {Promise<void>}\r\n */\r\n const editOneExtra = async ({\r\n id = '',\r\n numberLimit = null,\r\n title,\r\n required\r\n }) => {\r\n try {\r\n if (id) {\r\n const response = await handleUpdateExtProduct({\r\n opExPid: id,\r\n code: id,\r\n OptionalProName: title,\r\n required: required ? 1 : 0,\r\n numbersOptionalOnly: numberLimit\r\n })\r\n const { data } = response || {}\r\n if (!data?.updateExtProductOptional) {\r\n return sendNotification({\r\n description: 'Ocurrió un error, intenta de nuevo',\r\n title: 'Error',\r\n backgroundColor: 'warning'\r\n })\r\n }\r\n const { success, message } = data?.updateExtProductOptional || {}\r\n if (success) {\r\n setSelectedExtra({})\r\n setOpenModalEditExtra(false)\r\n sendNotification({\r\n description: message,\r\n title: 'Actualizado',\r\n backgroundColor: 'success'\r\n })\r\n return updateListById(id, {\r\n title,\r\n numberLimit,\r\n required: required ? 1 : 0\r\n })\r\n }\r\n }\r\n\r\n if (!id) {\r\n return sendNotification({\r\n description: 'Ocurrió un error, intenta de nuevo',\r\n title: 'Error',\r\n backgroundColor: 'warning'\r\n })\r\n }\r\n } catch (error) {\r\n setSelectedExtra({})\r\n setOpenModalEditExtra(false)\r\n sendNotification({\r\n description: 'Ocurrió un error, intenta de nuevo',\r\n title: 'Error',\r\n backgroundColor: 'warning'\r\n })\r\n }\r\n }\r\n\r\n const addCard = async (title, listId) => {\r\n const id = RandomCode(9)\r\n const newCard = {\r\n id,\r\n title,\r\n numberLimit: 5,\r\n value: '',\r\n required: setCheck.exState ? 1 : 0\r\n }\r\n const list = data.lists[listId]\r\n list.cards = [...list.cards, newCard]\r\n setData({\r\n ...data,\r\n lists: {\r\n ...data.lists,\r\n [listId]: list\r\n }\r\n })\r\n handleMutateExtProductFoodsSubOptional({\r\n pId,\r\n title,\r\n listId,\r\n id,\r\n state: 1\r\n })\r\n setTitle('')\r\n }\r\n const handleAdd = ({ listId }) => {\r\n if (valueItems !== '' && valueItems.trim() !== '') {\r\n addCard(valueItems, listId)\r\n }\r\n setValueItems('')\r\n // Reset the value of all lists in dataListIds to 0 in a single setData call\r\n setData(prevData => {\r\n const updatedLists = Object.fromEntries(\r\n Object.entries(prevData.lists).map(([listId, list]) => {\r\n if (dataListIds.includes(listId)) {\r\n return [listId, { ...list, value: '' }]\r\n }\r\n return [listId, list]\r\n })\r\n )\r\n return {\r\n ...prevData,\r\n lists: updatedLists\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Handles the addition of a new list with the given title and number limit.\r\n * @param {Object} params - The parameters for adding the new list.\r\n * @param {string} params.title - The title of the new list.\r\n * @param {number} params.numberLimit - The number limit for the new list.\r\n */\r\n const handleAddList = async ({ title, numberLimit }) => {\r\n // Check if the title is not empty\r\n if (title.trim() === '') {\r\n sendNotification({\r\n description: 'El titulo no debe estar vacío',\r\n title: 'Error',\r\n backgroundColor: 'warning'\r\n })\r\n return // Termina la función si el título está vacío\r\n }\r\n\r\n // Generate a new list ID using the RandomCode function (must be implemented elsewhere)\r\n const newListId = RandomCode(9)\r\n\r\n // Determine if the list is required based on the setCheck.exState state\r\n const required = setCheck.exState ? 1 : 0\r\n\r\n // Add the new list to the beginning of the data state\r\n setData(prevData => {return {\r\n listIds: [newListId, ...prevData.listIds], // Agrega el nuevo ID al principio del array\r\n lists: {\r\n ...prevData.lists,\r\n [newListId]: {\r\n id: newListId,\r\n title,\r\n required,\r\n numberLimit,\r\n value: '',\r\n cards: []\r\n }\r\n }\r\n }})\r\n\r\n // Update the external product with the information of the new list\r\n handleUpdateExtProduct({\r\n pId,\r\n code: newListId,\r\n OptionalProName: title,\r\n required,\r\n numbersOptionalOnly: numberLimit\r\n })\r\n\r\n // Clear the title field after adding the list\r\n setTitle('')\r\n }\r\n\r\n /**\r\n * Handles the change of items in a specific list.\r\n * @param {Object} params - The parameters for handling the change.\r\n * @param {string} params.listID - The ID of the list where the change is happening.\r\n * @param {Object} params.value - The event object containing the new value for the list items.\r\n */\r\n const handleChangeItems = ({ listID, value: e }) => {\r\n const value = e.target.value\r\n setValueItems(value)\r\n\r\n // Get the current list from the data state using the provided listID\r\n const currentList = data.lists[listID]\r\n\r\n // Update the value of the current list with the new value\r\n setData({\r\n listIds: [...data.listIds],\r\n lists: {\r\n ...data.lists,\r\n [listID]: {\r\n ...currentList,\r\n value\r\n }\r\n }\r\n })\r\n\r\n // Note: The return statement seems to be unnecessary, and the map function doesn't serve a purpose here.\r\n // If you want to map through dataListIds for some other reason, you should use it separately from this function.\r\n }\r\n\r\n return {\r\n addCard,\r\n data,\r\n dataListIds,\r\n loadingEditSubOptional,\r\n isCompleteRequired,\r\n handleAdd,\r\n handleAddList,\r\n handleChangeItems,\r\n handleCheck,\r\n handleRemoveList,\r\n removeOneItem,\r\n editOneExtra,\r\n editOneItem,\r\n setCheck,\r\n selectedItem,\r\n setData,\r\n handleCleanData,\r\n setTitle,\r\n title,\r\n selectedExtra,\r\n openModalEditExtra,\r\n setSelectedExtra,\r\n setOpenModalEditExtra\r\n }\r\n}\r\n","import { RandomCode } from '../../utils'\r\n\r\nexport const MockData = {\r\n lists: {\r\n '01list': {\r\n id: RandomCode(9),\r\n title: 'Elige tu salsa favorita',\r\n numberLimit: 0,\r\n required: 0,\r\n value: '',\r\n cards: [\r\n ]\r\n }\r\n },\r\n listIds: ['01list']\r\n}\r\n","import { useMutation } from '@apollo/client'\n\r\nimport { EDIT_EXTRA_SUB_OPTIONAL_PRODUCTS } from './queries'\r\n\r\nexport const useEditSubProductOptional = () => {\r\n const [editExtFoodSubsOptional, {\r\n loading,\r\n error,\r\n called\r\n }] = useMutation(EDIT_EXTRA_SUB_OPTIONAL_PRODUCTS)\r\n return [editExtFoodSubsOptional, { loading, error, called }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const EDIT_EXTRA_SUB_OPTIONAL_PRODUCTS = gql`\r\nmutation editExtFoodSubsOptional($opSubExPid: ID, $state: Int, $isCustomSubOpExPid: Boolean, $OptionalSubProName: String){\r\n editExtFoodSubsOptional(opSubExPid: $opSubExPid, state: $state, isCustomSubOpExPid: $isCustomSubOpExPid, OptionalSubProName: $OptionalSubProName){\r\n success,\r\n message\r\n }\r\n}\r\n`\r\n","import { useMutation } from '@apollo/client'\n\r\nimport { updateCacheMod } from '../../utils'\r\nimport { GET_EXTRAS_PRODUCT_FOOD_OPTIONAL, GET_EXTRAS_PRODUCT_FOOD_SUB_OPTIONAL } from '../useProductsFood/queriesStore'\r\n\r\nexport const useUpdateExtProductFoodsSubOptional = ({\r\n sendNotification = (args) => { return args }\r\n} = {}) => {\r\n const [updateExtProductSubOptional] = useMutation(GET_EXTRAS_PRODUCT_FOOD_SUB_OPTIONAL, {\r\n onCompleted: (data) => {\r\n console.log('🚀 ~ useUpdateExtProductFoodsSubOptional ~ data:', data)\r\n const { updateExtProductSubOptional } = data ?? {}\r\n const { success, message, errors } = updateExtProductSubOptional ?? {}\r\n sendNotification({\r\n description: message,\r\n title: success ? 'Sub item creado' : 'Error',\r\n backgroundColor: success ? 'success' : 'error'\r\n })\r\n for (const err of errors || []) {\r\n const { message: msg } = err || {}\r\n sendNotification({\r\n description: msg,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n return data\r\n }\r\n })\r\n\r\n const handleMutateExtProductFoodsSubOptional = ({\r\n pId,\r\n title,\r\n listId,\r\n id,\r\n state = 1\r\n }) => {\r\n updateExtProductSubOptional({\r\n variables: {\r\n input: {\r\n pId,\r\n OptionalSubProName: title,\r\n exCodeOptionExtra: listId,\r\n exCode: id,\r\n state\r\n }\r\n },\r\n update: (cache, { data: { ExtProductFoodsOptionalAll } }) => {\r\n return updateCacheMod({\r\n cache,\r\n query: GET_EXTRAS_PRODUCT_FOOD_OPTIONAL,\r\n nameFun: 'ExtProductFoodsOptionalAll',\r\n dataNew: ExtProductFoodsOptionalAll\r\n })\r\n }\r\n })\r\n }\r\n return {\r\n handleMutateExtProductFoodsSubOptional\r\n }\r\n}\r\n","import { MockData } from '../../../mock'\r\n\r\n/**\r\n * Transforms an array of objects into a specific data format suitable for desserts.\r\n *\r\n * @param {Array<Object>} dataArray - The array of objects to transform.\r\n * @return {Object} The transformed data containing lists and listIds.\r\n * @throws {Error} If dataArray is not an array or if the objects lack required properties.\r\n */\r\nexport const transformDataToDessert = (dataArray) => {\r\n try {\r\n if (!dataArray) {\r\n return MockData\r\n }\r\n if (!Array.isArray(dataArray)) {\r\n throw new Error('dataArray must be an array.')\r\n }\r\n\r\n const transformedData = {\r\n lists: {},\r\n listIds: []\r\n }\r\n\r\n dataArray.forEach((item) => {\r\n const listId = item.code\r\n transformedData.listIds.push(listId)\r\n transformedData.lists[listId] = {\r\n id: listId,\r\n title: item?.OptionalProName,\r\n numberLimit: item?.numbersOptionalOnly,\r\n required: item?.required,\r\n value: '',\r\n cards: item?.ExtProductFoodsSubOptionalAll?.length > 0\r\n ? item?.ExtProductFoodsSubOptionalAll?.map(subOptional => {\r\n return {\r\n id: subOptional?.exCode,\r\n title: subOptional?.OptionalSubProName,\r\n required: subOptional?.state,\r\n value: ''\r\n }\r\n })\r\n : []\r\n }\r\n })\r\n\r\n return transformedData\r\n } catch (error) {\r\n console.error(error.message)\r\n return MockData\r\n }\r\n}\r\n","import { useEffect, useState } from 'react'\r\n\r\n/**\n *\n * @param ref\n */\nexport function useDrag2 (ref) {\r\n useEffect(() => {\r\n if (!ref || !ref?.current) return null\r\n const target = ref?.current\r\n if (!target) return\r\n const previousOffset = { x: 0, y: 0 }\r\n let originMouseX\r\n let originMouseY\r\n /**\n *\n * @param e\n */\n function onMousemove (e) {\r\n const { pageX, pageY } = e\r\n const x = pageX - originMouseX + previousOffset.x\r\n const y = pageY - originMouseY + previousOffset.y\r\n target.style.transform = `translate(${x}px, ${y}px)`\r\n }\r\n /**\n *\n * @param e\n */\n function onMouseup (e) {\r\n previousOffset.x += e.pageX - originMouseX\r\n previousOffset.y += e.pageY - originMouseY\r\n window.removeEventListener('mousemove', onMousemove)\r\n window.removeEventListener('mouseup', onMouseup)\r\n }\r\n /**\n *\n * @param e\n */\n function onMousedown (e) {\r\n originMouseX = e.pageX\r\n originMouseY = e.pageY\r\n window.addEventListener('mousemove', onMousemove)\r\n window.addEventListener('mouseup', onMouseup)\r\n }\r\n target.addEventListener('mousedown', onMousedown)\r\n return () => {\r\n target?.removeEventListener('mousedown', onMousedown)\r\n window?.removeEventListener('mouseup', onMouseup)\r\n window?.removeEventListener('mousemove', onMousemove)\r\n }\r\n }, [ref])\r\n}\r\n\r\nexport const useDrag = (x, y) => {\r\n const [move, setMove] = useState(false)\r\n const [moveTo, setMoveTo] = useState([x, y])\r\n const moveIcon = e => {\r\n const xcoord = moveTo[0] + e.movementX\r\n const ycoord = moveTo[1] + e.movementY\r\n setMoveTo([xcoord, ycoord])\r\n }\r\n const handleMove = e => {\r\n move && moveIcon(e)\r\n }\r\n const handelDown = () => {\r\n setMove(true)\r\n }\r\n const handelUp = () => {\r\n setMove(false)\r\n }\r\n\r\n return {\r\n move,\r\n moveTo,\r\n handelDown,\r\n handelUp,\r\n handleMove\r\n }\r\n}\r\n","import { useEffect } from 'react'\r\n\r\nexport const on = ({ eventType, callBack }) => {\r\n document.addEventListener(eventType, callBack)\r\n}\r\nexport const off = ({ eventType, callBack }) => {\r\n document.removeEventListener(eventType, callBack)\r\n}\r\nexport const once = ({ eventType, callBack }) => {\r\n const handleEventOnce = (event) => {\r\n callBack(event)\r\n off({ eventType, callBack: handleEventOnce })\r\n }\r\n on({ eventType, callBack: handleEventOnce })\r\n}\r\nexport const trigger = ({ eventType, data }) => {\r\n const event = new CustomEvent(eventType, { detail: data })\r\n document.dispatchEvent(event)\r\n}\r\n// This function is used to subscribe components an any event\r\nexport const useEvents = ({ eventType, callBack }) => {\r\n useEffect(() => {\r\n on({ eventType, callBack })\r\n return () => {\r\n off({ eventType, callBack })\r\n }\r\n }, [eventType, callBack])\r\n}\r\n// This function create and dispatch event\r\nexport const useTrigerEvent = () => {\r\n return {\r\n trigger\r\n }\r\n}\r\n","/**\r\n * It fetches a json response, and if the response is not ok, it throws an error with the response and\r\n * the data\r\n * @param args - The arguments to pass to fetch.\r\n */\r\nexport const fetchJson = async (...args) => {\r\n try {\r\n const response = await fetch(...args)\r\n // if the server replies, there's always some data in json\r\n // if there's a network error, it will throw at the previous line\r\n const data = await response.json()\r\n if (response.ok) {\r\n return data\r\n }\r\n const error = new Error(response.statusText)\r\n error.response = response\r\n error.data = data\r\n throw error\r\n } catch (error) {\r\n if (!error.data) {\r\n error.data = { message: error.message }\r\n }\r\n throw error\r\n }\r\n}\r\n","/**\r\n * Get the start timestamp for the current day.\r\n * @returns {string} The start timestamp for the current day.\r\n */\r\nexport const getStartOfDayTimestamp = () => {\r\n const start = new Date()\r\n start.setHours(0, 0, 0, 0)\r\n return start.toISOString()\r\n}\r\n\r\n/**\r\n * Get the end timestamp for the current day.\r\n * @returns {string} The end timestamp for the current day.\r\n */\r\nexport const getEndOfDayTimestamp = () => {\r\n const end = new Date()\r\n end.setHours(23, 59, 59, 999)\r\n return end.toISOString()\r\n}\r\n\r\n/**\r\n * Get start and end timestamps for the current day.\r\n * @returns {Object} An object containing start and end timestamps.\r\n */\r\nexport const getTodayTimestamps = () => {\r\n return {\r\n startTimestamp: getStartOfDayTimestamp(),\r\n endTimestamp: getEndOfDayTimestamp()\r\n }\r\n}\r\n\r\n/**\r\n * Get start timestamp for a specific number of days ago.\r\n * @param {number} daysAgo - The number of days ago.\r\n * @returns {string} The start timestamp for the specified number of days ago.\r\n */\r\nexport const getStartTimestampDaysAgo = (daysAgo) => {\r\n if (isNaN(daysAgo) || daysAgo < 0) {\r\n throw new Error('Invalid input. Provide a valid number of days.')\r\n }\r\n\r\n const start = new Date()\r\n start.setDate(start.getDate() - daysAgo)\r\n start.setHours(0, 0, 0, 0)\r\n\r\n return start.toISOString()\r\n}\r\n\r\n/**\n *\n * @param root0\n * @param root0.dateString\n * @param root0.start\n */\nexport function convertDateFormat ({ dateString, start }) {\r\n const parsedDate = dateString ? new Date(dateString) : new Date()\r\n const year = parsedDate.getFullYear()\r\n const month = `0${parsedDate.getMonth() + 1}`.slice(-2)\r\n const day = `0${parsedDate.getDate()}`.slice(-2)\r\n\r\n if (start) {\r\n // Inicio del día (00:00:00)\r\n return `${year}-${month}-${day}T00:00:00.000Z`\r\n } \r\n // Final del día (23:59:59.999)\r\n const endOfDay = new Date(parsedDate)\r\n endOfDay.setHours(23, 59, 59, 999)\r\n return endOfDay.toISOString()\r\n \r\n}\r\n","/**\r\n * Description\r\n * @param {any} phoneNumber type number or string\r\n * @returns {any}\r\n */\r\nexport const formatPhoneNumber = (phoneNumber) => {\r\n const cleaned = ('' + phoneNumber).replace(/\\D/g, '')\r\n const match = cleaned.match(/^(\\d{3})(\\d{3})(\\d{4})$/)\r\n if (match) {\r\n return `(${match[1]}) ${match[2]}-${match[3]}`\r\n }\r\n return phoneNumber\r\n}\r\n\r\n/**\r\n * Description\r\n * @param {any} phoneNumber type number or string\r\n * @returns {any}\r\n */\r\nexport const validatePhoneNumber = (phoneNumber) => {\r\n const regex = /^\\(\\d{3}\\) \\d{3}-\\d{4}$/\r\n return regex.test(phoneNumber)\r\n}\n","import {\r\n useCallback,\r\n useEffect,\r\n useState\r\n} from 'react'\n\r\nimport { validationSubmitHooks } from '../../utils'\r\n\r\n\r\ninterface UseFormToolsProps {\r\n initialValues?: Record<string, any>;\r\n sendNotification?: ({\r\n title,\r\n description,\r\n backgroundColor\r\n }: {\r\n title?: string;\r\n description?: string;\r\n backgroundColor?: string;\r\n }) => void;\r\n}\r\n\r\n/**\r\n * @param root0\n * @param root0.initialValues\n * @param root0.sendNotification\n * @version 0.0.1\r\n * @description Hook con herramientas de validación y eventos de cambio\r\n * @return {Array} devuelve la función onChange a ejecutar y el estado de error de cada input\r\n */\r\nexport const useFormTools = ({\r\n initialValues = {},\r\n sendNotification = ({\r\n title = '',\r\n description = '',\r\n backgroundColor = ''\r\n }) => {\r\n console.log({ title, description, backgroundColor })\r\n }\r\n}: UseFormToolsProps = {}) => {\r\n const [dataForm, setDataForm] = useState<Record<string, any>>({ ...initialValues })\r\n const [errorForm, setErrorForm] = useState<Record<string, boolean>>({})\r\n const [errorSubmit, setErrorSubmit] = useState(false)\r\n const [calledSubmit, setCalledSubmit] = useState(false)\r\n // Handle Change\r\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>, error: boolean) => {\r\n setDataForm({ ...dataForm, [e.target.name]: e.target.value })\r\n setErrorForm({ ...errorForm, [e.target.name]: error })\r\n }, [setDataForm, dataForm, errorForm, setErrorForm])\r\n\r\n // Forzar datos desde una ventana externa\r\n const handleForcedData = useCallback((data: Record<string, any>) => {\r\n setDataForm(data)\r\n }, [setDataForm])\r\n\r\n // Forzar datos de error desde una ventana externa\r\n const setForcedError = useCallback((errors: Record<string, boolean>) => {\r\n setErrorForm(errors)\r\n }, [setErrorForm])\r\n\r\n // Handle submit, al enviar formulario\r\n const listErrors = Object.values(errorForm)\r\n const errors = listErrors.find((error) => {\r\n return error === true\r\n })\r\n\r\n const handleSubmit = ({\r\n event,\r\n msgError = '',\r\n msgSuccess,\r\n action = () => { return Promise.resolve() },\r\n actionAfterSuccess = () => { }\r\n }: {\r\n event: React.FormEvent<HTMLFormElement>,\r\n msgError?: string,\r\n msgSuccess?: string,\r\n action?: () => Promise<any>,\r\n actionAfterSuccess?: () => void\r\n }) => {\r\n event.preventDefault()\r\n setCalledSubmit(true)\r\n let errSub = false\r\n\r\n // Valida los errores locales\r\n for (const x in errorForm) {\r\n if (errorForm[x]) errSub = true\r\n }\r\n if (errSub) {\r\n sendNotification({\r\n description: 'Completa los campos requeridos',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n if (errors) {\r\n setErrorSubmit(true)\r\n return setForcedError({ ...errorForm })\r\n }\r\n\r\n if (errSub) return setErrorSubmit(errSub)\r\n\r\n // Valida los errores desde el evento\r\n const errores = validationSubmitHooks(event.currentTarget.elements)\r\n setErrorForm(errores)\r\n for (const x in errores) {\r\n // @ts-ignore\r\n if (errores[x]) errSub = true\r\n }\r\n if (errSub) return setErrorSubmit(errSub)\r\n\r\n // Ejecuta la accion si es válido\r\n if (!errSub && typeof action === 'function') {\r\n const result = action()\r\n if (result && typeof result.then === 'function') {\r\n result.then((res) => {\r\n if (res) {\r\n sendNotification({\r\n title: msgSuccess ?? 'Operación exitosa',\r\n description: 'Operación exitosa',\r\n backgroundColor: 'success'\r\n })\r\n if (actionAfterSuccess) actionAfterSuccess()\r\n }\r\n }).catch((e) => {\r\n sendNotification({\r\n title: msgError || e?.message || 'Ha ocurrido un error',\r\n backgroundColor: 'error'\r\n })\r\n })\r\n }\r\n }\r\n\r\n setErrorSubmit(errSub)\r\n }\r\n\r\n useEffect(() => { return setCalledSubmit(false) }, [calledSubmit])\r\n useEffect(() => {\r\n return setCalledSubmit(false)\r\n },\r\n [])\r\n\r\n return [handleChange, handleSubmit, handleForcedData, { dataForm, errorForm, errorSubmit, calledSubmit, setForcedError }]\r\n}\r\n","import { useRef, useState, useEffect } from 'react'\r\n\r\n/**\n *\n */\nexport function useHover () {\r\n const [value, setValue] = useState(false)\r\n\r\n const ref = useRef(null)\r\n\r\n const handleMouseOver = () => { return setValue(true) }\r\n const handleMouseOut = () => { return setValue(false) }\r\n\r\n useEffect(\r\n () => {\r\n const node = ref.current\r\n if (node) {\r\n node.addEventListener('mouseover', handleMouseOver)\r\n node.addEventListener('mouseout', handleMouseOut)\r\n\r\n return () => {\r\n node.removeEventListener('mouseover', handleMouseOver)\r\n node.removeEventListener('mouseout', handleMouseOut)\r\n }\r\n }\r\n return {}\r\n },\r\n [] // Recall only if ref changes\r\n )\r\n\r\n return [ref, value]\r\n}\r\n","import { useEffect, useState } from 'react'\r\n// use it\r\n// const imageUrl = 'https://example.com/image.jpg';\r\n// const optimizedUrl = useImageOptimization(imageUrl);\r\n\r\n/**\n *\n * @param imageUrl\n */\nexport function useImageOptimization (imageUrl) {\r\n const [optimizedUrl, setOptimizedUrl] = useState(null)\r\n\r\n useEffect(() => {\r\n const image = new Image()\r\n image.src = imageUrl\r\n\r\n image.onload = () => {\r\n const canvas = document.createElement('canvas')\r\n const ctx = canvas.getContext('2d')\r\n\r\n canvas.width = image.width\r\n canvas.height = image.height\r\n\r\n ctx.drawImage(image, 0, 0, image.width, image.height)\r\n\r\n const optimizedUrl = canvas.toDataURL('image/jpeg', 0.8)\r\n setOptimizedUrl(optimizedUrl)\r\n }\r\n }, [imageUrl])\r\n\r\n return optimizedUrl\r\n}\r\n","import { useMutation } from '@apollo/client'\r\nimport {\r\n useRef,\r\n useState\r\n} from 'react'\n\r\nimport {\r\n CREATE_BANNER_STORE,\r\n CREATE_LOGO,\r\n DELETE_ONE_BANNER_STORE,\r\n DELETE_ONE_LOGO_STORE,\r\n GET_ONE_BANNER_STORE\r\n} from '../useProductsFood/queriesStore'\r\nimport { GET_ONE_STORE } from '../useStore/queries'\n\r\nimport { color } from './utils'\r\nexport * from './queries'\r\n\r\nexport const useImageStore = ({ idStore, sendNotification = () => { } } = {}) => {\r\n // STATES\r\n const fileInputRef = useRef(null)\r\n const initialState = { alt: '/images/DEFAULTBANNER.png', src: '/images/DEFAULTBANNER.png' }\r\n const initialStateLogo = { altLogo: '/images/DEFAULTLOGO.png', srcLogo: '/images/DEFAULTLOGO.png' }\r\n const [{ altLogo, srcLogo }, setPreviewImgLogo] = useState(initialStateLogo)\r\n const [{ alt, src }, setPreviewImg] = useState(initialState)\r\n const fileInputRefLogo = useRef(null)\r\n\r\n // HOOKS\r\n const [registerBanner] = useMutation(CREATE_BANNER_STORE, {\r\n onCompleted: (data) => {\r\n const { registerBanner } = data || {}\r\n const { message = '', success = false } = registerBanner || {}\r\n if (!success) {\r\n setPreviewImg(initialState)\r\n return\r\n }\r\n sendNotification({\r\n title: success ? 'Banner subido' : 'Error al subir banner',\r\n description: message,\r\n backgroundColor: success ? color.success : color.error\r\n })\r\n }\r\n\r\n })\r\n const [registerLogo] = useMutation(CREATE_LOGO, {\r\n onCompleted: (data) => {\r\n const { registerLogo } = data || {}\r\n const { message = '', success = false } = registerLogo ?? {\r\n message: 'Error al subir logo',\r\n success: false,\r\n data: null\r\n }\r\n if (!success) {\r\n setPreviewImgLogo(initialStateLogo)\r\n return\r\n }\r\n\r\n sendNotification({\r\n title: success ? 'Logo creado con exito' : color.error,\r\n description: message,\r\n backgroundColor: success ? color.success : color.error\r\n })\r\n }\r\n })\r\n const [deleteOneBanner] = useMutation(DELETE_ONE_BANNER_STORE, {\r\n onCompleted: (data) => {\r\n const { deleteOneBanner } = data || {}\r\n const { message = '', success = false } = deleteOneBanner || {}\r\n return sendNotification({\r\n title: success ? 'Logo subido' : color.error,\r\n description: message,\r\n backgroundColor: success ? color.success : color.error\r\n })\r\n }\r\n })\r\n const [deleteALogoStore] = useMutation(DELETE_ONE_LOGO_STORE, {\r\n onCompleted: (data) => {\r\n const { deleteALogoStore } = data || {}\r\n const { message = '', success = false } = deleteALogoStore || {}\r\n sendNotification({\r\n title: success ? 'Logo Eliminado' : 'Error al eliminar el logo',\r\n description: message,\r\n backgroundColor: success ? color.success : color.error\r\n })\r\n setPreviewImgLogo(initialStateLogo)\r\n },\r\n update (cache) {\r\n cache.modify({\r\n fields: {\r\n getStore (dataOld = {}) {\r\n return cache.writeQuery({ query: GET_ONE_STORE, data: dataOld })\r\n }\r\n }\r\n })\r\n }\r\n })\r\n // HANDLESS\r\n const handleDeleteLogo = () => {\r\n return deleteALogoStore({\r\n variables: {\r\n Image: ''\r\n }\r\n })\r\n }\r\n\r\n const handleUpdateBanner = event => {\r\n try {\r\n const { files } = event.target\r\n setPreviewImg(\r\n files.length\r\n ? {\r\n src: URL.createObjectURL(files[0]),\r\n alt: files[0].name\r\n }\r\n : initialState\r\n )\r\n registerBanner({\r\n variables: {\r\n input: {\r\n bnImage: files[0],\r\n idStore\r\n }\r\n },\r\n update (cache) {\r\n cache.modify({\r\n fields: {\r\n getStore (dataOld = {}) {\r\n return cache.writeQuery({ query: GET_ONE_STORE, data: dataOld })\r\n }\r\n }\r\n })\r\n }\r\n })\r\n } catch {\r\n setPreviewImg(initialState)\r\n }\r\n }\r\n /**\r\n * Handle store logo upload and update cache Image field\r\n * @param {React.ChangeEvent<HTMLInputElement>} event - File input change event\r\n * @returns {void}\r\n */\r\n const handleInputChangeLogo = async (event) => {\r\n const { files } = event.target\r\n\r\n if (!files || files.length === 0) {\r\n sendNotification({\r\n title: 'Debes seleccionar un archivo',\r\n description: color.error,\r\n backgroundColor: color.error\r\n })\r\n return\r\n }\r\n\r\n const file = files[0]\r\n\r\n const result = await registerLogo({\r\n variables: { logo: file, idStore }\r\n })\r\n const {\r\n data: {\r\n registerLogo: {\r\n success = false,\r\n data: url = ''\r\n } = {}\r\n } = {}\r\n } = result ?? {\r\n data: '',\r\n success: false,\r\n message: ''\r\n }\r\n if (!success) {\r\n setPreviewImgLogo(initialStateLogo)\r\n return\r\n }\r\n setPreviewImgLogo({\r\n srcLogo: URL.createObjectURL(file),\r\n altLogo: url\r\n })\r\n }\r\n\r\n const HandleDeleteBanner = async () => {\r\n setPreviewImg(initialStateLogo)\r\n deleteOneBanner({\r\n variables: {\r\n idStore\r\n },\r\n update (cache) {\r\n cache.modify({\r\n fields: {\r\n getOneBanners (dataOld = []) {\r\n return cache.writeQuery({ query: GET_ONE_BANNER_STORE, data: dataOld })\r\n }\r\n }\r\n })\r\n }\r\n }).then(() => {\r\n setPreviewImg(initialState)\r\n })\r\n }\r\n const onTargetClickLogo = e => {\r\n e.preventDefault()\r\n fileInputRefLogo.current.click()\r\n }\r\n const onTargetClick = e => {\r\n e.preventDefault()\r\n fileInputRef.current.click()\r\n }\r\n\r\n return {\r\n fileInputRefLogo,\r\n src,\r\n alt,\r\n initialState,\r\n srcLogo,\r\n altLogo,\r\n fileInputRef,\r\n handleDeleteLogo,\r\n setPreviewImgLogo,\r\n setPreviewImg,\r\n onTargetClick,\r\n onTargetClickLogo,\r\n HandleDeleteBanner,\r\n handleInputChangeLogo,\r\n handleUpdateBanner\r\n }\r\n}\r\n","export const color = {\r\n success: 'success',\r\n error: 'error'\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CREATE_SCHEDULE_STORE = gql`\r\n mutation setStoreSchedule($input: IsStoreSchedule!) {\r\n setStoreSchedule(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const GET_SCHEDULE_STORE = gql`\r\n query getStoreSchedules($schDay: Int, $idStore: ID) {\r\n getStoreSchedules(schDay: $schDay, idStore: $idStore) {\r\n schId\r\n idStore\r\n schDay\r\n schHoSta\r\n schHoEnd\r\n schState\r\n }\r\n }\r\n`\r\nexport const GET_ONE_SCHEDULE_STORE = gql`\r\n query getOneStoreSchedules($schDay: Int, $idStore: ID) {\r\n getOneStoreSchedules(schDay: $schDay, idStore: $idStore) {\r\n schId\r\n schDay\r\n schHoSta\r\n schHoEnd\r\n schState\r\n }\r\n }\r\n`\r\nexport const GET_CAT_OF_PRODUCTS = gql`\r\n query getAllCatOfProducts($idStore: ID) {\r\n getAllCatOfProducts(idStore: $idStore) {\r\n id\r\n cpId\r\n catName\r\n catDescription\r\n schState\r\n }\r\n }\r\n`\r\nexport const REGISTER_CAT_OF_PRODUCTS = gql`\r\n mutation updatedProducts($input: InputCatProducts) {\r\n updatedProducts(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const REGISTER_CONTRACT_STORE = gql`\r\n mutation createOneContract($input: InputContractType) {\r\n createOneContract(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const GET_ALL_EMPLOYEE_STORE = gql`\r\n query employees($umId: ID, $cId: ID, $aId: ID) {\r\n employees(umId: $umId, cId: $cId, aId: $aId) {\r\n eId\r\n idStore\r\n id\r\n idEmployee\r\n eSalary\r\n typeContract\r\n uEmail\r\n termContract\r\n eDatAdm\r\n eState\r\n }\r\n }\r\n`\r\n\r\nexport const GET_ALL_RATING_START_STORE = gql`\r\n query getAllRatingStar($idStore: ID) {\r\n getAllRatingStar(idStore: $idStore) {\r\n rSId\r\n rScore\r\n idStore\r\n createAt\r\n }\r\n }\r\n`\r\nexport const GET_ALL_VISITOR_STORE = gql`\r\n query getAllVisitorStore(\r\n $idStore: ID\r\n $search: String\r\n $min: Int\r\n $max: Int\r\n $fromDate: DateTime\r\n $toDate: DateTime\r\n ) {\r\n getAllVisitorStore(\r\n idStore: $idStore\r\n search: $search\r\n min: $min\r\n max: $max\r\n fromDate: $fromDate\r\n toDate: $toDate\r\n ) {\r\n visitStoreId\r\n id\r\n idStore\r\n createAt\r\n updateAt\r\n }\r\n }\r\n`\r\nexport const GET_MIN_PEDIDO = gql`\r\n query getMinPrice($idStore: ID) {\r\n getMinPrice(idStore: $idStore)\r\n }\r\n`\r\n\r\n \r\nexport const GET_All_RATING_STORE = gql`\r\n query getAllRating($idStore: ID) {\r\n getAllRating(idStore: $idStore) {\r\n idStore\r\n rId\r\n id\r\n rAppearance\r\n rTasty\r\n rGoodTemperature\r\n rGoodCondition\r\n rState\r\n createAt\r\n updateAt\r\n }\r\n }\r\n`\r\nexport const CREATE_LOGO = gql`\r\n mutation registerLogo($logo: Upload, $idStore: ID) {\r\n registerLogo(logo: $logo, idStore: $idStore) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const CREATE_BANNER_STORE = gql`\r\n mutation registerBanner($input: IBanner) {\r\n registerBanner(input: $input) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\nexport const DELETE_ONE_LOGO_STORE = gql`\r\n mutation deleteALogoStore($idStore: ID, $Image: String) {\r\n deleteALogoStore(idStore: $idStore, Image: $Image) {\r\n message\r\n success\r\n }\r\n }\r\n`\r\nexport const GET_ONE_BANNER_STORE = gql`\r\n query getOneBanners($idStore: ID, $id: ID) {\r\n getOneBanners(idStore: $idStore, id: $id) {\r\n bnId\r\n id\r\n path\r\n bnImageFileName\r\n idStore\r\n bnState\r\n createAt\r\n updateAt\r\n }\r\n }\r\n`\r\nexport const DELETE_ONE_BANNER_STORE = gql`\r\n mutation DeleteOneBanner(\r\n $bnState: Int\r\n $idStore: ID\r\n $bnId: ID\r\n $bnImage: String\r\n $bnImageFileName: String\r\n ) {\r\n DeleteOneBanner(\r\n bnState: $bnState\r\n idStore: $idStore\r\n bnId: $bnId\r\n bnImage: $bnImage\r\n bnImageFileName: $bnImageFileName\r\n ) {\r\n success\r\n message\r\n }\r\n }\r\n`\r\n","import { useEffect, useState } from 'react'\r\n\r\n/**\n *\n * @param imageUrl\n */\nexport function useImageWeight (imageUrl) {\r\n const [weight, setWeight] = useState(null)\r\n\r\n useEffect(() => {\r\n const image = new Image()\r\n image.src = imageUrl\r\n\r\n image.onload = () => {\r\n const xhr = new XMLHttpRequest()\r\n xhr.open('HEAD', imageUrl, true)\r\n xhr.onreadystatechange = () => {\r\n if (xhr.readyState === 4 && xhr.status === 200) {\r\n const contentLength = xhr.getResponseHeader('Content-Length')\r\n setWeight(contentLength)\r\n }\r\n }\r\n xhr.send()\r\n }\r\n }, [imageUrl])\r\n\r\n return weight\r\n}\r\n\r\n// I use\r\n// function MyComponent() {\r\n// const imageUrl = 'https://example.com/image.jpg';\r\n// const weight = useImageWeight(imageUrl);\r\n\r\n// return (\r\n// <div>\r\n// <img src={imageUrl} alt=\"My Image\" />\r\n// {weight ? `Peso de imagen: ${weight} bytes` : 'Cargando...'}\r\n// </div>\r\n// );\r\n// }\r\n\r\n// const weightInMB = weight / (1024 * 1024);\r\n\r\n// function MyComponent() {\r\n// const imageUrl = 'https://example.com/image.jpg';\r\n// const weight = useImageWeight(imageUrl);\r\n\r\n// return (\r\n// <div>\r\n// <img src={imageUrl} alt=\"My Image\" />\r\n// {weight ? `Peso de imagen: ${(weight / (1024 * 1024)).toFixed(2)} MB` : 'Cargando...'}\r\n// </div>\r\n// );\r\n// }\r\n","import { useEffect, useState } from 'react'\r\n\r\nexport const useOnScreen = (threshold = 0.6) => {\r\n const [isVisible, setIsVisible] = useState(false)\r\n const [ref, setRef] = useState(null)\r\n\r\n useEffect(\r\n () => {\r\n let observer\r\n if (ref) {\r\n observer = new IntersectionObserver(\r\n ([entry]) => {\r\n setIsVisible(entry.isIntersecting)\r\n },\r\n {\r\n // rootMargin,\r\n threshold\r\n }\r\n )\r\n observer.observe(ref)\r\n }\r\n\r\n return () => {\r\n if (ref && observer) observer.unobserve(ref)\r\n }\r\n },\r\n [ref]\r\n )\r\n\r\n return [setRef, isVisible]\r\n}\r\n\r\nconst defaultObserverOptions = {\r\n root: null,\r\n threshold: 0.1,\r\n rootMargin: '0px'\r\n}\r\n\r\nexport const useIntersectionObserver = ({\r\n active = true,\r\n disconnect,\r\n el,\r\n options = defaultObserverOptions,\r\n onEnter = () => {},\r\n out = () => {}\r\n}) => {\r\n const [onScreen, setOnScreen] = useState()\r\n useEffect(() => {\r\n let observer\r\n const refEl = el.current\r\n if (IntersectionObserver && active && refEl) {\r\n observer = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) => {\r\n if (disconnect) {\r\n if (entry.isIntersecting) {\r\n onEnter()\r\n setOnScreen(true)\r\n } else {\r\n out()\r\n setOnScreen(false)\r\n }\r\n }\r\n if (!disconnect) {\r\n onEnter()\r\n setOnScreen(true)\r\n }\r\n })\r\n }, options)\r\n observer.observe(refEl)\r\n }\r\n return () => {\r\n if (disconnect) {\r\n \r\n observer === null || observer === void 0 ? void 0 : observer.disconnect(refEl)\r\n }\r\n if (!disconnect) {\r\n if (el && observer) observer.unobserve(refEl)\r\n }\r\n }\r\n }, [el, onEnter, active, options])\r\n return {\r\n onScreen\r\n }\r\n}\r\n","import { useEffect, useState } from 'react'\r\n\r\nexport const useKeyPress = (targetKey) => {\r\n const [keyPressed, setKeyPressed] = useState(false)\r\n\r\n useEffect(() => {\r\n const downHandler = ({ key }) => {\r\n if (key === targetKey) {\r\n setKeyPressed(true)\r\n }\r\n }\r\n const upHandler = ({ key }) => {\r\n if (key === targetKey) {\r\n setKeyPressed(false)\r\n }\r\n }\r\n\r\n window.addEventListener('keydown', downHandler)\r\n window.addEventListener('keyup', upHandler)\r\n\r\n return () => {\r\n window.removeEventListener('keydown', downHandler)\r\n window.removeEventListener('keyup', upHandler)\r\n }\r\n }, [targetKey])\r\n\r\n return keyPressed\r\n}\r\n","import { useEffect, useState } from 'react'\r\n\r\nexport const useLazyScript = (src, delay = null) => {\r\n const [status, setStatus] = useState(src ? 'loading' : 'idle')\r\n\r\n useEffect(() => {\r\n if (!src) {\r\n setStatus('idle')\r\n return 'idle'\r\n }\r\n\r\n let script = document.querySelector(`script[src='${src}']`)\r\n let timeout = null\r\n\r\n if (!script) {\r\n if (delay) {\r\n timeout = setTimeout(() => {\r\n injectScript()\r\n // Add event listener after the script is added\r\n script.addEventListener('load', setStateStatus)\r\n script.addEventListener('error', setStateStatus)\r\n }, delay)\r\n } else {\r\n injectScript()\r\n }\r\n } else {\r\n setStatus(script.getAttribute('data-status'))\r\n }\r\n\r\n const setStateStatus = (event) => {\r\n setStatus(event.type === 'load' ? 'ready' : 'error')\r\n }\r\n\r\n // code to inject script\r\n /**\n *\n */\n function injectScript () {\r\n script = document.createElement('script')\r\n script.src = src\r\n script.async = true\r\n script.setAttribute('data-status', 'loading')\r\n document.body.appendChild(script)\r\n\r\n const setDataStatus = (event) => {\r\n script.setAttribute(\r\n 'data-status',\r\n event.type === 'load' ? 'ready' : 'error'\r\n )\r\n }\r\n\r\n script.addEventListener('load', setDataStatus)\r\n script.addEventListener('error', setDataStatus)\r\n }\r\n\r\n if (script) {\r\n // script will be be undefined available when its delayed hence check it before adding listener\r\n script.addEventListener('load', setStateStatus)\r\n script.addEventListener('error', setStateStatus)\r\n }\r\n\r\n return () => {\r\n if (script) {\r\n script.removeEventListener('load', setStateStatus)\r\n script.removeEventListener('error', setStateStatus)\r\n }\r\n if (timeout) {\r\n clearTimeout(timeout)\r\n }\r\n }\r\n }, [src])\r\n\r\n return status\r\n}\r\n","import { useEffect, useState } from 'react'\r\n\r\nconst defaultSettings = {\r\n enableHighAccuracy: false,\r\n timeout: Infinity,\r\n maximumAge: 0\r\n}\r\n\r\nexport const usePosition = (watch = false, settings = defaultSettings) => {\r\n const [position, setPosition] = useState({})\r\n const [error, setError] = useState(null)\r\n\r\n const onChange = ({ coords, timestamp }) => {\r\n setPosition({\r\n latitude: coords.latitude,\r\n longitude: coords.longitude,\r\n accuracy: coords.accuracy,\r\n speed: coords.speed,\r\n timestamp\r\n })\r\n }\r\n\r\n const onError = () => {\r\n setError(error?.message)\r\n }\r\n\r\n useEffect(() => {\r\n if (!navigator || !navigator.geolocation) {\r\n setError('Geolocation is not supported')\r\n return\r\n }\r\n\r\n let watcher = null\r\n if (watch) {\r\n watcher = navigator.geolocation.watchPosition(\r\n onChange,\r\n onError,\r\n settings\r\n )\r\n } else {\r\n navigator.geolocation.getCurrentPosition(onChange, onError, settings)\r\n }\r\n\r\n return () => { return watcher && navigator.geolocation.clearWatch(watcher) }\r\n }, [\r\n settings,\r\n settings.enableHighAccuracy,\r\n settings.timeout,\r\n settings.maximumAge,\r\n watch\r\n ])\r\n\r\n return { ...position, error }\r\n}\r\n","import { Cookies } from '../../cookies'\r\nimport { getCurrentDomain } from '../../utils'\r\n\r\nexport const useSetSession = () => {\r\n const handleSession = async (props) => {\r\n try {\r\n const { cookies } = props\r\n let domain = getCurrentDomain()\r\n\r\n // Si estás en entorno local, usa 'localhost' como dominio\r\n if (domain === 'localhost') {\r\n domain = undefined // Esto permitirá la cookie en 'localhost'\r\n }\r\n\r\n if (!Array.isArray(cookies)) {\r\n throw new Error('Input cookies should be an array.')\r\n }\r\n\r\n for (const { name, value, domain: incomingDomain } of cookies) {\r\n if (value) {\r\n const expirationTime = new Date()\r\n expirationTime.setTime(expirationTime.getTime() + 8 * 60 * 60 * 1000)\r\n\r\n const formattedDomain = incomingDomain || domain\r\n\r\n await Cookies.set(name, value, {\r\n domain: formattedDomain,\r\n path: '/',\r\n secure: process.env.NODE_ENV === 'production',\r\n sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax',\r\n expires: expirationTime\r\n })\r\n }\r\n }\r\n\r\n console.log('Cookies guardadas correctamente.')\r\n } catch (error) {\r\n console.error('Error al guardar las cookies:', error)\r\n throw new Error('Error al guardar las cookies.')\r\n }\r\n }\r\n\r\n return [handleSession]\r\n}\r\n","import { useEffect, useRef, useState } from 'react'\r\n\r\nexport const MEDIA_QUERY = {\r\n MOBILE: '(max-width: 768px)',\r\n TABLET: '(max-width: 960px)',\r\n DESKTOP: '(min-width: 961px)'\r\n}\r\n\r\nexport const useMobile = ({ callback } = {}) => {\r\n const [isMobile, setIsMobile] = useState(false)\r\n const [isTablet, setIsTablet] = useState(false)\r\n const [isDesktop, setIsDesktop] = useState(false)\r\n\r\n const prevValues = useRef({\r\n isMobile: false,\r\n isTablet: false,\r\n isDesktop: false\r\n })\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return\r\n\r\n const mobileQuery = window.matchMedia(MEDIA_QUERY.MOBILE)\r\n const tabletQuery = window.matchMedia(MEDIA_QUERY.TABLET)\r\n const desktopQuery = window.matchMedia(MEDIA_QUERY.DESKTOP)\r\n\r\n const updateMatches = () => {\r\n const newIsMobile = mobileQuery.matches\r\n const newIsTablet = tabletQuery.matches\r\n const newIsDesktop = desktopQuery.matches\r\n\r\n const hasChanged =\r\n newIsMobile !== prevValues.current.isMobile ||\r\n newIsTablet !== prevValues.current.isTablet ||\r\n newIsDesktop !== prevValues.current.isDesktop\r\n\r\n if (hasChanged) {\r\n prevValues.current = {\r\n isMobile: newIsMobile,\r\n isTablet: newIsTablet,\r\n isDesktop: newIsDesktop\r\n }\r\n callback?.(prevValues.current)\r\n }\r\n\r\n setIsMobile(newIsMobile)\r\n setIsTablet(newIsTablet)\r\n setIsDesktop(newIsDesktop)\r\n }\r\n\r\n updateMatches()\r\n\r\n mobileQuery.addEventListener('change', updateMatches)\r\n tabletQuery.addEventListener('change', updateMatches)\r\n desktopQuery.addEventListener('change', updateMatches)\r\n\r\n return () => {\r\n mobileQuery.removeEventListener('change', updateMatches)\r\n tabletQuery.removeEventListener('change', updateMatches)\r\n desktopQuery.removeEventListener('change', updateMatches)\r\n }\r\n }, [callback])\r\n\r\n return { isMobile, isTablet, isDesktop }\r\n}\r\n","import {\r\n useEffect,\r\n useRef,\r\n useState\r\n} from 'react'\r\n\r\nexport const useMutateHeight = ({ isCollapsed = false }) => {\r\n const [collapsed, setCollapsed] = useState(isCollapsed)\r\n const childrenContainerRef = useRef(null)\r\n\r\n useEffect(() => {\r\n setCollapsed(isCollapsed)\r\n if (childrenContainerRef.current !== null) {\r\n const height = isCollapsed\r\n ? childrenContainerRef.current.scrollHeight\r\n : 0\r\n childrenContainerRef.current.style.height = `${height}px`\r\n }\r\n }, [isCollapsed])\r\n\r\n const handleCollapsed = visible => {\r\n setCollapsed(visible)\r\n if (childrenContainerRef.current !== null) {\r\n const height = visible ? childrenContainerRef.current.scrollHeight : 0\r\n childrenContainerRef.current.style.height = `${height}px`\r\n }\r\n }\r\n\r\n return {\r\n handleCollapsed,\r\n childrenContainerRef,\r\n collapsed\r\n }\r\n}\r\n\r\n// https://codesandbox.io/s/dropdown-navigation-9fx6r?file=/src/Navigation/Navigation.js:357-775\n","import { useQuery, useLazyQuery } from '@apollo/client'\n\r\nimport { GET_ALL_SALES, GET_ALL_TOTAL_SALES } from './queries'\r\n\r\nexport const useReport = ({\r\n fromDate = '',\r\n more,\r\n search = '',\r\n channel = null,\r\n toDate = '',\r\n lazyQuery = false\r\n}) => {\r\n const [getAllSalesStore, { data: lazyDataSales, loading: lazyLoading }] = useLazyQuery(GET_ALL_SALES)\r\n\r\n // Combine both queries to reduce separate requests\r\n const { data, fetchMore, loading } = useQuery(GET_ALL_SALES, {\r\n fetchPolicy: lazyQuery ? 'cache-and-network' : 'network-only',\r\n skip: lazyQuery,\r\n variables: {\r\n min: 0,\r\n fromDate,\r\n channel,\r\n search,\r\n toDate,\r\n max: more\r\n }\r\n })\r\n\r\n // Get total sales in the same query\r\n const { data: totalSalesData } = useQuery(GET_ALL_TOTAL_SALES, {\r\n variables: {\r\n fromDate,\r\n toDate\r\n }\r\n })\r\n\r\n const totalSales = totalSalesData?.getAllSalesStoreTotal ?? {}\r\n console.log(totalSales)\r\n return {\r\n getAllSalesStore: lazyQuery ? getAllSalesStore : () => { }, // Return function only if in lazy mode\r\n data: lazyQuery ? lazyDataSales : data, // Use data from lazy query if available\r\n loading: lazyQuery ? lazyLoading || loading : loading,\r\n totalSales: totalSales.TOTAL || 0,\r\n restaurant: totalSales.restaurant || 0,\r\n delivery: totalSales.delivery || 0,\r\n fetchMore\r\n }\r\n}\r\n","import { useApolloClient, useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_COUNT_SALES } from './queries'\r\n\r\nexport const useTotalSales = () => {\r\n const client = useApolloClient()\r\n\r\n const { data, loading, error } = useQuery(GET_ALL_COUNT_SALES, {\r\n fetchPolicy: 'cache-and-network',\r\n notifyOnNetworkStatusChange: true,\r\n nextFetchPolicy: 'cache-first',\r\n refetchWritePolicy: 'merge'\r\n })\r\n\r\n // Guarda la respuesta en la caché manualmente (opcional)\r\n if (data) {\r\n client.writeQuery({ query: GET_ALL_COUNT_SALES, data })\r\n }\r\n\r\n return [data?.getTodaySales || 0, {\r\n loading,\r\n error\r\n }]\r\n}\r\n","export const useOrderClient = () => {\r\n return {\r\n\r\n }\r\n}\r\n","import { useQuery, useMutation, useLazyQuery } from '@apollo/client'\r\nimport { useState } from 'react'\n\r\nimport {\r\n GET_ALL_CONTACTS,\r\n EDIT_ONE_CONTACT,\r\n CREATE_CONTACTS,\r\n GET_ONE_CONTACT\r\n} from './queries'\r\n\r\ninterface UseStoreContactsParams {\r\n sendNotification?: (message: string, type?: 'error' | 'success') => void\r\n max?: number\r\n search?: string\r\n}\r\nexport const useGetStoreContacts = ({\r\n sendNotification = () => { },\r\n max,\r\n search = ''\r\n}: UseStoreContactsParams = {}) => {\r\n const [clientes, setClientes] = useState<{ getAllContacts?: any[] } | undefined>(undefined)\r\n const { loading, error, fetchMore, called } = useQuery(GET_ALL_CONTACTS, {\r\n variables: {\r\n max,\r\n search\r\n },\r\n onCompleted: (data) => {\r\n setClientes(data)\r\n }\r\n })\r\n return [clientes?.getAllContacts ?? [], { loading: called ? false : loading, error, fetchMore }]\r\n}\r\n\r\nexport const useDeleteUseStoreContacts = ({ sendNotification = () => { } } = {}) => {\r\n const [getOneContacts, { data, error, loading }] = useLazyQuery(GET_ONE_CONTACT)\r\n return [getOneContacts, data?.getOneContacts ?? {}, { loading, error }]\r\n}\r\n\r\nexport const useGetOneUseStoreContacts = ({ sendNotification = () => { } } = {}) => {\r\n const [getOneContacts, { data, error, loading }] = useLazyQuery(GET_ONE_CONTACT)\r\n return [getOneContacts, { data: data?.getOneContacts, loading, error }]\r\n}\r\n\r\nexport const useEditOneUseStoreContacts = ({ sendNotification = () => { } } = {}) => {\r\n const [editOneContacts, { data, error, loading }] = useMutation(EDIT_ONE_CONTACT)\r\n return [editOneContacts, { data: data?.editOneContacts, loading, error }]\r\n}\r\n\r\nexport const useCreateContacts = ({ sendNotification = () => { } } = {}) => {\r\n const [createUseStoreContacts, { loading, error }] = useMutation(CREATE_CONTACTS)\r\n\r\n return [createUseStoreContacts, { loading, error }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CREATE_CONTACTS = gql`\r\nmutation createContacts ($input: IContacts) {\r\n createContacts(input: $input) {\r\n success\r\n message\r\n }\r\n}\r\n`\r\nexport const GET_ALL_CONTACTS = gql`\r\nquery getAllContacts($idStore: ID, $cId: ID, $dId: ID, $ctId: ID, $search: String, $min: Int, $pState: Int, $max: Int) {\r\n getAllContacts(idStore: $idStore, cId: $cId, dId: $dId, ctId: $ctId, search: $search, min: $min, pState: $pState, max: $max) {\r\n contactId\r\n cntState\r\n cntComments\r\n cntNumberPhone\r\n cntName\r\n createAt\r\n updateAt\r\n }\r\n}\r\n`\r\n\r\nexport const GET_ONE_CONTACT = gql`\r\nquery getOneContacts($contactId: String) {\r\n getOneContacts(contactId: $contactId) {\r\n contactId\r\n id\r\n idStore\r\n cntName\r\n cntComments\r\n cntNumberPhone\r\n cntState\r\n createAt\r\n updateAt\r\n }\r\n}\r\n`\r\n\r\nexport const EDIT_ONE_CONTACT = gql`\r\nmutation editOneContacts($input: IContacts) {\r\n editOneContacts(input: $input) {\r\n success\r\n message\r\n }\r\n}\r\n`\r\n","import { useLazyQuery } from '@apollo/client'\r\nimport { useEffect, useState } from 'react'\n\r\nimport { useManageQueryParams } from '../useManageQueryParams'\n\r\nimport { filterAndSortByDate } from './helpers'\r\nimport { getStatusForStores } from './helpers/manageStatusOpen'\r\nimport { GET_ALL_RESTAURANT } from './queries'\r\n\r\nexport const useRestaurant = ({\r\n location = {\r\n query: {},\r\n push: (props, state, { shallow }) => {\r\n return { ...props, state, shallow }\r\n }\r\n }\r\n} = {}) => {\r\n const [loadingFilter, setLoadingFilter] = useState(false)\r\n const { handleQuery, handleCleanQuery } = useManageQueryParams({\r\n location\r\n })\r\n\r\n const [getAllStoreInStore, {\r\n data,\r\n loading,\r\n error,\r\n fetchMore\r\n }] = useLazyQuery(GET_ALL_RESTAURANT, {\r\n fetchPolicy: 'cache-and-network',\r\n notifyOnNetworkStatusChange: true,\r\n nextFetchPolicy: 'cache-first',\r\n refetchWritePolicy: 'merge',\r\n context: { clientName: 'admin-store' }\r\n })\r\n\r\n useEffect(() => {\r\n getAllStoreInStore({})\r\n }, [location])\r\n const handleSendQueries = (name, value) => {\r\n if (value) handleQuery(name, value)\r\n }\r\n\r\n const handleCleanQueries = (name) => {\r\n handleCleanQuery(name)\r\n }\r\n const handleFilterStore = async () => {\r\n setLoadingFilter(true)\r\n try {\r\n await getAllStoreInStore({\r\n\r\n }).then(() => {\r\n setLoadingFilter(false)\r\n })\r\n } catch (error) {\r\n setLoadingFilter(false)\r\n }\r\n }\r\n const dataRestaurant = data?.getAllStoreInStore || []\r\n const dataSort = filterAndSortByDate(dataRestaurant)\r\n const statuses = getStatusForStores(dataSort)\r\n\r\n return [statuses, {\r\n loading,\r\n loadingFilter,\r\n error,\r\n fetchMore,\r\n handleSendQueries,\r\n handleFilterStore,\r\n handleCleanQueries\r\n }]\r\n}\r\n","import { gql } from '@apollo/client'\r\nexport const GET_ALL_RESTAURANT = gql`\r\nquery getAllStoreInStore($search: String, $min: Int, $max: Int){\r\n getAllStoreInStore(search: $search, min: $min, max: $max) {\r\n open\r\n scheduleOpenAll\r\n getStoreSchedules {\r\n idStore\r\n schId\r\n schDay\r\n schHoSta\r\n schHoEnd\r\n schState\r\n }\r\n idStore\r\n cId\r\n id\r\n dId\r\n deliveryTimeMinutes\r\n ctId\r\n catStore\r\n neighborhoodStore\r\n Viaprincipal\r\n storeOwner\r\n storeName\r\n cateStore{\r\n catStore\r\n cName\r\n }\r\n emailStore\r\n storePhone\r\n socialRaz\r\n Image\r\n banner\r\n documentIdentifier\r\n uPhoNum\r\n ULocation\r\n upLat\r\n upLon\r\n uState\r\n siteWeb\r\n description\r\n NitStore\r\n typeRegiments\r\n typeContribute\r\n secVia\r\n addressStore\r\n createdAt\r\n pais{\r\n cId\r\n cName\r\n cCalCod\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n city {\r\n ctId\r\n dId\r\n cName\r\n cState\r\n cDatCre\r\n cDatMod\r\n }\r\n department {\r\n dId\r\n cId\r\n dName\r\n dState\r\n dDatCre\r\n dDatMod\r\n }\r\n getAllRatingStar {\r\n rSId\r\n rScore\r\n idStore\r\n createAt\r\n }\r\n }\r\n}\r\n`\r\n","import {\r\n useApolloClient,\r\n useLazyQuery,\r\n useMutation\r\n} from '@apollo/client'\r\nimport {\r\n useCallback,\r\n useEffect,\r\n useReducer,\r\n useMemo,\r\n useState\r\n} from 'react'\n\r\nimport { Cookies } from '../../cookies'\r\nimport { RandomCode, getCurrentDomain } from '../../utils'\r\nimport { generateTicket } from '../../utils/generateCode'\nimport { useCatWithProduct } from '../useCatWithProduct'\r\nimport { CatProductWithProduct, GetCatProductsWithProductResponse } from '../useCatWithProduct/types'\r\nimport { useFormatDate } from '../useFormatDate'\r\nimport { useLogout } from '../useLogout'\r\nimport { useGetOneProductsFood, useProductsFood } from '../useProductsFood'\r\nimport {\r\n GET_ALL_EXTRA_PRODUCT,\r\n GET_EXTRAS_PRODUCT_FOOD_OPTIONAL,\r\n GET_ONE_PRODUCTS_FOOD\r\n} from '../useProductsFood/queriesStore'\r\nimport { useStore } from '../useStore'\n\r\n// import { updateExistingOrders } from '../useUpdateExistingOrders'\r\n\r\nimport { addToCartFunc } from './helpers/add-product.utils'\r\nimport { applyDiscountToCart } from './helpers/apply-discount-to-cart.utils'\r\nimport { initialStateSales, SalesActionTypes } from './helpers/constants'\r\nimport { decrementExtra } from './helpers/extras.utils'\r\nimport { filterProductsByCarProId } from './helpers/filterProductsByCarProId.utils'\r\nimport { handleRemoveProduct } from './helpers/remove-product.utils'\r\nimport { incrementProductQuantity } from './helpers/increment-product-quantity.utils'\r\nimport {\r\n CREATE_SHOPPING_CARD_TO_USER_STORE,\r\n GET_ALL_COUNT_SALES\r\n} from './queries'\r\nimport { SalesReducerAction, SalesState, ValuesState } from './types'\r\nimport { UseSalesProps } from './types/use-sales.types'\r\nimport { initializer } from './helpers/initializer.utils'\nimport { useGetSale } from './useGetSale'\r\n\r\n\r\nexport const useSales = ({\r\n disabled = false,\r\n router,\r\n sendNotification = (args) => { return args },\r\n setAlertBox = (args) => { return args }\r\n}: UseSalesProps) => {\r\n const keyToSaveData = String(process.env.NEXT_LOCAL_SALES_STORE)\r\n const saveDataState = JSON.parse(Cookies.get(keyToSaveData) ?? '[]')\r\n const domain = getCurrentDomain()\r\n const [loadingSale, setLoadingSale] = useState(false)\r\n const [errorSale, setErrorSale] = useState(false)\r\n const [onClickLogout] = useLogout({})\r\n const [modalItem, setModalItem] = useState(false)\r\n const [openCommentModal, setOpenCommentModal] = useState(false)\r\n const [search, setSearch] = useState('')\r\n const [categories, setCategories] = useState<CatProductWithProduct[]>([])\r\n\r\n useCatWithProduct({\r\n max: Infinity,\r\n callback: (data: GetCatProductsWithProductResponse) => {\r\n return setCategories(data.getCatProductsWithProduct?.catProductsWithProduct || [])\r\n }\r\n })\r\n const [currentPage, setCurrentPage] = useState<number>(1)\r\n const [totalProductPrice, setTotalProductPrice] = useState<number>(0)\r\n const [showMore, setShowMore] = useState<number>(100)\r\n const [inputValue, setInputValue] = useState<string>('')\r\n \r\n const [_, setFilteredList] = useState([])\r\n const [delivery, setDelivery] = useState<boolean>(false)\r\n const [print, setPrint] = useState<boolean>(false)\r\n const [errors, setErrors] = useState({})\r\n\r\n const initialValuesState: ValuesState = {\r\n change: '',\r\n cliId: '',\r\n comment: '',\r\n tableId: '',\r\n valueDelivery: ''\r\n }\r\n const [values, setValues] = useState<ValuesState>(initialValuesState)\r\n\r\n const [dataStore] = useStore()\r\n const { createdAt, idStore } = dataStore ?? {\r\n createdAt: null,\r\n idStore: null\r\n }\r\n const [code, setCode] = useState(null)\r\n const [openCurrentSale, setOpenCurrentSale] = useState(null)\r\n const [oneProductToComment, setOneProductToComment] = useState({})\r\n const [sumExtraProducts, setSumExtraProducts] = useState(0)\r\n const { yearMonthDay } = useFormatDate({ date: createdAt })\r\n const [handleGetOneProduct] = useGetOneProductsFood()\r\n const [valuesDates, setValuesDates] = useState(() => {\r\n return { fromDate: yearMonthDay, toDate: '' }\r\n })\r\n\r\n const [product, setProduct] = useState({\r\n PRODUCT: {\r\n pId: null\r\n }\r\n })\r\n\r\n const [loadingExtraProduct, setLoadingExtraProduct] = useState(false)\r\n const [dataOptional, setDataOptional] = useState<any[]>([])\r\n const [dataExtra, setDataExtra] = useState<any[]>([])\r\n const [registerSalesStore, { loading: loadingRegisterSale }] = useMutation(\r\n CREATE_SHOPPING_CARD_TO_USER_STORE,\r\n {\r\n onCompleted: (data) => {\r\n const message = `${data?.registerSalesStore?.message}`\r\n const error = data?.registerSalesStore?.success\r\n ? 'Éxito'\r\n : 'Error'\r\n sendNotification({\r\n backgroundColor: error ? 'success' : 'error',\r\n title: error,\r\n description: message\r\n })\r\n setAlertBox({ message, type: 'success' })\r\n if (message === 'Token expired') {\r\n // @ts-ignore\r\n onClickLogout()\r\n }\r\n setOpenCurrentSale(data?.registerSalesStore.success)\r\n },\r\n onError: (error) => {\r\n sendNotification({\r\n backgroundColor: 'error',\r\n title: typeof error === 'string' ? error : 'Lo sentimos',\r\n description: 'ha ocurrido un error'\r\n })\r\n }\r\n }\r\n )\r\n\r\n const [productFoodsOne, { data: dataProduct }] = useLazyQuery(GET_ONE_PRODUCTS_FOOD)\r\n\r\n const [ExtProductFoodsSubOptionalAll, { loading: loadingExtProductFoodsSubOptionalAll }] = useLazyQuery(\r\n GET_EXTRAS_PRODUCT_FOOD_OPTIONAL,\r\n {\r\n onError: () => {\r\n setDataOptional([])\r\n }\r\n }\r\n )\r\n const [ExtProductFoodsAll] = useLazyQuery(GET_ALL_EXTRA_PRODUCT, {\r\n onError: () => {\r\n setDataExtra([])\r\n }\r\n })\r\n\r\n const [productsFood, {\r\n loading,\r\n fetchMore,\r\n pagination,\r\n refetch\r\n }] = useProductsFood({\r\n // @ts-ignore\r\n search: search?.length >= 4 ? search : '',\r\n gender: [],\r\n desc: [],\r\n categories: [],\r\n toDate: valuesDates?.toDate,\r\n fromDate: valuesDates?.fromDate,\r\n max: showMore,\r\n min: 0,\r\n isShopppingCard: true,\r\n idStore: idStore ?? '',\r\n dataSale: (Array.isArray(saveDataState?.PRODUCT) && saveDataState?.PRODUCT) ?? [],\r\n callback: () => { return }\r\n })\r\n\r\n const handlePageChange = (pageNumber: number) => {\r\n setCurrentPage(pageNumber)\r\n refetch({ page: pageNumber })\r\n }\r\n\r\n /**\r\n * Toggles the `checked` field of a category with maximum performance.\r\n * @param {string} caId - Category ID to toggle.\r\n */\r\n const handleChangeCheck = (caId: string) => {\r\n setCategories((prev) => {\r\n if (!prev || prev.length === 0) return prev\r\n\r\n const index = prev.findIndex((item) => {return item.carProId === caId})\r\n if (index === -1) return prev // nothing to update → no rerender\r\n\r\n const target = prev[index]\r\n\r\n const updatedItem = {\r\n ...target,\r\n checked: !target.checked\r\n }\r\n\r\n const newList = [...prev] // clone array ONCE\r\n newList[index] = updatedItem\r\n\r\n return newList\r\n })\r\n }\r\n\r\n\r\n // HANDLESS\r\n // FILTER PRODUCT DATA_DB\r\n // @ts-ignore\r\n const handlePrint = () => {\r\n if (disabled) {\r\n return sendNotification({\r\n title: 'Error',\r\n description: 'Esta es la descripción',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n setPrint(!print)\r\n }\r\n\r\n const handleChangeFilter = (value: string): void => {\r\n return setSearch(value)\r\n }\r\n\r\n const handleChange = (\r\n e: React.ChangeEvent<HTMLInputElement> | { target: { name: string; value: any } },\r\n error: boolean\r\n ) => {\r\n const target: any = (e as any).target\r\n const { name, value } = target\r\n setErrors({ ...errors, [name]: error })\r\n setValues((prevValues) => {return {\r\n ...prevValues,\r\n [name]: value\r\n }})\r\n }\r\n\r\n const onChangeInput = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n return setValuesDates({ ...valuesDates, [e.target.name]: e.target.value })\r\n }\r\n\r\n /**\r\n * Toggles editing state of a product with maximum performance.\r\n * @param {any} state - Current reducer state.\r\n * @param {any} action - Payload with product ID.\r\n * @returns {any} New updated state.\r\n */\r\n const handleToggleEditingStatus = (state: any, action: any) => {\r\n const pId = action?.payload?.pId\r\n if (!pId) return state\r\n\r\n const list = state.PRODUCT\r\n const index = list.findIndex((item: any) => {return item.pId === pId})\r\n\r\n // If no match, nothing changes → no re-render\r\n if (index === -1) return state\r\n\r\n const target = list[index]\r\n\r\n const updatedItem = {\r\n ...target,\r\n editing: !target.editing,\r\n oldQuantity: target.ProQuantity ?? 0\r\n }\r\n\r\n // Clone the array only once\r\n const newList = [...list]\r\n newList[index] = updatedItem\r\n\r\n return {\r\n ...state,\r\n PRODUCT: newList\r\n }\r\n }\r\n\r\n\r\n const handleChangeFilterProduct = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const text = searchedInput(e.target.value)\r\n if (text === undefined || text === '') {\r\n return\r\n }\r\n const filteredData = handleList(text)\r\n setFilteredList(filteredData)\r\n }\r\n\r\n const handleComment = (product: any) => {\r\n if (product) {\r\n setOneProductToComment(product)\r\n setValues({\r\n ...values,\r\n comment: product?.comment ?? ''\r\n })\r\n }\r\n setOpenCommentModal(!openCommentModal)\r\n }\r\n\r\n /**\r\n * Updates a single product inside the PRODUCT array with maximum performance.\r\n * @param {any} state - Current state.\r\n * @param {any} payload - Action payload.\r\n * @returns {any} New updated state.\r\n */\r\n const handleSuccessUpdateQuantity = (state: any, payload: any) => {\r\n const pId = payload?.payload?.pId\r\n if (!pId) return state\r\n\r\n const list = state.PRODUCT\r\n const index = list.findIndex((item: any) => {return item.pId === pId})\r\n\r\n // If no match → no state changes → no rerender\r\n if (index === -1) return state\r\n\r\n const target = list[index]\r\n const updatedItem = {\r\n ...target,\r\n editing: false,\r\n oldQuantity: target.ProQuantity ?? 0\r\n }\r\n\r\n // Clone array ONCE\r\n const newList = [...list]\r\n newList[index] = updatedItem\r\n sendNotification({\r\n title: 'Cantidad actualizada',\r\n backgroundColor: 'success',\r\n description: `La cantidad de ${target.pName} ha sido actualizada a ${updatedItem.ProQuantity}.`\r\n })\r\n return {\r\n ...state,\r\n PRODUCT: newList\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Cancels the update of a product's quantity, resetting it to the previous value.\r\n * @param {Object} state - The current state.\r\n * @param {Object} payload - The payload containing the product ID.\r\n * @returns {Object} - The new state with the updated product quantity and editing status.\r\n */\r\n const handleCancelUpdateQuantity = (state: any, payload: any) => {\r\n // Validación de `state`\r\n if (!state || typeof state !== 'object') {\r\n sendNotification({\r\n title: 'Error',\r\n backgroundColor: 'error',\r\n description: 'Ha ocurrido un error al actualizar la cantidad del producto.'\r\n })\r\n return state // Retorna el estado sin cambios si es inválido.\r\n }\r\n\r\n // Validación de `PRODUCT`\r\n if (!Array.isArray(state.PRODUCT)) {\r\n sendNotification({\r\n title: 'Error',\r\n backgroundColor: 'error',\r\n description: 'Ha ocurrido un error al actualizar la cantidad del producto.'\r\n })\r\n return state\r\n }\r\n\r\n // Validación de `payload`\r\n const { pId } = payload.payload || {}\r\n if (!pId) {\r\n sendNotification({\r\n title: 'Error',\r\n backgroundColor: 'error',\r\n description: 'Ha ocurrido un error al actualizar la cantidad del producto.'\r\n })\r\n return state // Retorna el estado sin cambios si falta `pId`.\r\n }\r\n\r\n return {\r\n ...state,\r\n PRODUCT: state.PRODUCT.map((item: any) => {\r\n // Validación de propiedades en cada item\r\n if (item.pId === pId) {\r\n if (typeof item.oldQuantity !== 'number' || typeof item.unitPrice !== 'number') {\r\n sendNotification({\r\n title: 'Error',\r\n backgroundColor: 'error',\r\n description: 'Ha ocurrido un error al actualizar la cantidad del producto.'\r\n })\r\n return item // Retorna el item sin cambios si las propiedades son inválidas.\r\n }\r\n\r\n return {\r\n ...item,\r\n editing: false,\r\n ProQuantity: item.oldQuantity,\r\n ProPrice: item.oldQuantity * item.unitPrice\r\n }\r\n }\r\n\r\n return item\r\n })\r\n }\r\n }\r\n\r\n const paymentMethod = (state: any, action: any) => {\r\n return {\r\n ...state,\r\n payId: action.payload\r\n }\r\n }\r\n\r\n\r\n const handleAddProduct = async (product: any) => {\r\n const pId = String(product?.pId)\r\n const memo = productsFood.find((item: any) => {return String(item.pId) === pId})\r\n if (!memo) {\r\n const response = await handleGetOneProduct({ pId })\r\n if (response.data?.productFoodsOne == null) {return sendNotification({\r\n title: 'Error',\r\n backgroundColor: 'error',\r\n description: 'No se pudo obtener el producto'\r\n })}\r\n const productData = response.data?.productFoodsOne ?? { pId: null }\r\n return dispatch({\r\n type: SalesActionTypes.ADD_TO_CART,\r\n payload: productData\r\n })\r\n }\r\n return dispatch({\r\n type: SalesActionTypes.ADD_TO_CART,\r\n payload: memo\r\n })\r\n }\r\n\r\n const PRODUCT = (state: any, action: any) => {\r\n switch (action.type) {\r\n case SalesActionTypes.ADD_TO_CART:\r\n return addToCartFunc({\r\n state,\r\n action,\r\n product: action.payload,\r\n sendAlertStock,\r\n sendNotification\r\n })\r\n case SalesActionTypes.ADD_PRODUCT:\r\n return {\r\n ...state,\r\n // eslint-disable-next-line\r\n PRODUCT: [...state?.PRODUCT, action?.payload],\r\n }\r\n case SalesActionTypes.REMOVE_PRODUCT:\r\n return handleRemoveProduct(state, action, productsFood)\r\n case SalesActionTypes.REMOVE_PRODUCT_TO_CART:\r\n return {\r\n ...state,\r\n PRODUCT: state?.PRODUCT?.filter((t: any) => {\r\n return t.pId !== action?.payload.pId\r\n }),\r\n counter: state.counter - action.payload.ProQuantity\r\n }\r\n case SalesActionTypes.ON_CHANGE: {\r\n return handleChangeNumber(\r\n state,\r\n action,\r\n productsFood,\r\n sendNotification\r\n )\r\n }\r\n case SalesActionTypes.UPDATE_SUCCESS_QUANTITY_EDITING_PRODUCT: {\r\n return handleSuccessUpdateQuantity(state, action)\r\n }\r\n case SalesActionTypes.CANCEL_UPDATE_QUANTITY_EDITING_PRODUCT: {\r\n return handleCancelUpdateQuantity(state, action)\r\n }\r\n case SalesActionTypes.REMOVE_ALL_PRODUCTS:\r\n // @ts-ignore\r\n setValues({\r\n ...values,\r\n comment: '',\r\n change: '',\r\n valueDelivery: ''\r\n })\r\n return {\r\n ...state,\r\n PRODUCT: [],\r\n sortBy: null,\r\n counter: 0\r\n }\r\n\r\n case SalesActionTypes.TOGGLE_FREE_PRODUCT:\r\n return toggleFreeProducts(state, action)\r\n case SalesActionTypes.TOGGLE_EDITING_PRODUCT: {\r\n return handleToggleEditingStatus(state, action)\r\n }\r\n case SalesActionTypes.INCREMENT: {\r\n return incrementProductQuantity({\r\n state,\r\n productId: action.id,\r\n productsFood,\r\n sendNotification\r\n })\r\n }\r\n\r\n case SalesActionTypes.PUT_COMMENT:\r\n return commentProducts(state, action)\r\n case SalesActionTypes.PUT_EXTRA_PRODUCTS_AND_OPTIONAL_PRODUCT:\r\n return handleUpdateAllExtraAndOptional(state, action)\r\n case SalesActionTypes.PRICE_RANGE:\r\n return {\r\n ...state,\r\n priceRange: action.payload\r\n }\r\n case SalesActionTypes.SORT:\r\n return { ...state, sortBy: action.payload }\r\n case SalesActionTypes.DECREMENT:\r\n return {\r\n ...state\r\n }\r\n case SalesActionTypes.PAYMENT_METHOD: return paymentMethod(state, action)\r\n\r\n case SalesActionTypes.APPLY_DISCOUNT: {\r\n return applyDiscountToCart(\r\n state,\r\n action.payload,\r\n sendNotification\r\n )\r\n }\r\n default:\r\n return state\r\n }\r\n }\r\n\r\n const [data, dispatch] = useReducer<React.Reducer<SalesState, SalesReducerAction>, SalesState>(PRODUCT, initialStateSales, initializer)\r\n\r\n const handleRemoveValue = useCallback(({ name, value, pId }: { name: string; value: string | null; pId: string }) => {\r\n setValues({\r\n ...values,\r\n [name]: value ?? ''\r\n })\r\n sendNotification({\r\n backgroundColor: 'success',\r\n title: 'Comentario eliminado',\r\n description: 'Has eliminado el comentario!'\r\n })\r\n // @ts-ignore\r\n return dispatch({\r\n type: SalesActionTypes.PUT_COMMENT,\r\n payload: pId,\r\n value: ''\r\n })\r\n }, [])\r\n\r\n const handleAddOptional = ({ exOptional = null, codeCategory = null }) => {\r\n if (!exOptional || !codeCategory) return\r\n const item = dataOptional.find((item) => {return item.code === codeCategory})\r\n if (!item) return\r\n const idx = item.ExtProductFoodsSubOptionalAll.findIndex(\r\n (el: any) => {return el.opSubExPid === exOptional}\r\n )\r\n if (item && idx !== -1) {\r\n const updatedItem = {\r\n // @ts-ignore\r\n ...item,\r\n ExtProductFoodsSubOptionalAll: [\r\n // @ts-ignore\r\n ...item.ExtProductFoodsSubOptionalAll.slice(0, idx),\r\n {\r\n // @ts-ignore\r\n ...item.ExtProductFoodsSubOptionalAll[idx],\r\n // @ts-ignore\r\n check: !item.ExtProductFoodsSubOptionalAll[idx].check\r\n },\r\n // @ts-ignore\r\n ...item.ExtProductFoodsSubOptionalAll.slice(idx + 1)\r\n ]\r\n }\r\n const newData = dataOptional.map((el) =>\r\n // @ts-ignore\r\n {return el.code === codeCategory ? updatedItem : el}\r\n )\r\n // @ts-ignore\r\n setDataOptional(() => {return [...newData]})\r\n }\r\n }\r\n\r\n /**\n *\n * @param state\n * @param action\n */\n function handleUpdateAllExtraAndOptional(state: any, action: any) {\r\n return {\r\n ...state,\r\n PRODUCT: state?.PRODUCT?.map((items: any) => {\r\n return items.pId === action.payload\r\n ? {\r\n ...items,\r\n dataOptional: action.dataOptional || [],\r\n dataExtra: action.dataExtra || []\r\n }\r\n : items\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Description\r\n * @returns {any}\r\n * */\r\n useEffect(() => {\r\n const arr =\r\n dataExtra?.length > 0\r\n ? dataExtra?.filter((p) => {\r\n // @ts-ignore\r\n return p.quantity !== 0\r\n })\r\n : []\r\n const val = arr.findIndex((item: any) => {return item.quantity !== 0})\r\n if (val === -1) {\r\n setSumExtraProducts(0)\r\n }\r\n /**\n *\n */\n function sumNewExtraPrice() {\r\n let sum = 0\r\n arr.forEach((obj: any) => {\r\n sum += obj.newExtraPrice ?? 0\r\n })\r\n if (arr.length === 0) {\r\n setSumExtraProducts(0)\r\n }\r\n setSumExtraProducts(sum)\r\n return sum\r\n }\r\n if (arr.length > 0) {\r\n sumNewExtraPrice()\r\n }\r\n }, [dataExtra])\r\n\r\n /**\n *\n */\n function handleUpdateAllExtra() {\r\n try {\r\n if (!product?.PRODUCT?.pId) {\r\n return sendNotification({\r\n title: 'Error',\r\n backgroundColor: 'error',\r\n description: 'Ha ocurrido un error'\r\n })\r\n }\r\n const filteredDataOptional = dataOptional\r\n .map((obj) => {\r\n // @ts-ignore\r\n const filteredSubOptions = obj?.ExtProductFoodsSubOptionalAll?.filter(\r\n (subObj: any) => {return subObj?.check === true}\r\n )\r\n // Excluya todo el objeto padre si filteredSubOptions está vacío\r\n if (filteredSubOptions?.length === 0) {\r\n return null\r\n }\r\n // @ts-ignore\r\n return { ...obj, ExtProductFoodsSubOptionalAll: filteredSubOptions }\r\n })\r\n .filter((obj) => {return obj !== null}) // Elimine todos los objetos nulos del arreglo\r\n // @ts-ignore\r\n const filteredDataExtra = dataExtra?.filter((p) => {return p?.quantity !== undefined && p?.quantity !== 0})\r\n if (product?.PRODUCT?.pId) {\r\n // @ts-ignore\r\n dispatch({\r\n type: SalesActionTypes.PUT_EXTRA_PRODUCTS_AND_OPTIONAL_PRODUCT,\r\n payload: product.PRODUCT.pId,\r\n dataOptional: filteredDataOptional,\r\n dataExtra: filteredDataExtra\r\n })\r\n const updatesOccurred = (\r\n (dataExtra && dataExtra.length > 0)\r\n )\r\n if (updatesOccurred) {\r\n return sendNotification({\r\n title: 'Success',\r\n backgroundColor: 'success',\r\n description: 'Items subidos al producto'\r\n })\r\n }\r\n }\r\n } catch (_error) {\r\n return sendNotification({\r\n title: 'Error',\r\n backgroundColor: 'error',\r\n description: 'No se puedo actualizar el producto'\r\n })\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n /**\n *\n * @param root0\n * @param root0.Adicionales\n * @param root0.index\n */\n function handleIncrementExtra({ Adicionales, index }) {\r\n const { pId } = product?.PRODUCT || {}\r\n const exPid = Adicionales?.exPid || null\r\n\r\n if (exPid && pId) {\r\n const newExtra = dataExtra.map((producto) => {\r\n // @ts-ignore\r\n if (exPid === producto.exPid) {\r\n // @ts-ignore\r\n const initialQuantity = producto?.quantity ? producto?.quantity : 0\r\n const newQuantity = initialQuantity + 1\r\n // @ts-ignore\r\n const newExtraPrice = producto.extraPrice * newQuantity\r\n\r\n return {\r\n // @ts-ignore\r\n ...producto,\r\n quantity: newQuantity,\r\n newExtraPrice\r\n }\r\n }\r\n return producto\r\n })\r\n\r\n // @ts-ignore\r\n setDataExtra(newExtra)\r\n }\r\n }\r\n const handleDecrementExtra = ({ Adicionales }: { Adicionales: any }) => {\r\n const exPid = Adicionales?.exPid\r\n if (!exPid) return\r\n setDataExtra((prev) => {return decrementExtra(prev as any, exPid)})\r\n }\r\n\r\n\r\n /**\n *\n * @param stock\n */\n function sendAlertStock(stock: number) {\r\n return sendNotification({\r\n title: 'Stock insuficiente',\r\n backgroundColor: 'warning',\r\n description: `Solo hay ${stock} unidades disponibles en el inventario`\r\n })\r\n }\r\n\r\n /**\r\n * Toggles free mode for a product and recalculates its price\r\n * with maximum performance.\r\n * @param {any} state - Current reducer state.\r\n * @param {any} action - Payload containing pId.\r\n * @returns {any} Updated state.\r\n */\r\n function toggleFreeProducts(state: any, action: any) {\r\n const pId = action?.payload?.pId\r\n if (!pId) return state\r\n\r\n // Find the reference product price only once\r\n const referenceProduct = productsFood.find((item: any) => {return item.pId === pId})\r\n if (!referenceProduct) return state\r\n\r\n const list = state.PRODUCT\r\n const index = list.findIndex((item: any) => {return item.pId === pId})\r\n\r\n // If no match, skip re-render\r\n if (index === -1) return state\r\n\r\n const target = list[index]\r\n\r\n const newFreeState = !target.free\r\n\r\n const updatedItem = {\r\n ...target,\r\n free: newFreeState,\r\n ProPrice: newFreeState\r\n ? 0\r\n : (target.ProQuantity ?? 1) * (referenceProduct.ProPrice ?? 0)\r\n }\r\n\r\n // Clone array ONCE\r\n const newList = [...list]\r\n newList[index] = updatedItem\r\n\r\n return {\r\n ...state,\r\n PRODUCT: newList\r\n }\r\n }\r\n\r\n\r\n // COMMENT_FREE_PRODUCT\r\n /**\n *\n * @param state\n * @param action\n * @param deleteValue\n */\n function commentProducts(state: any, action: any, deleteValue = false) {\r\n if (values.comment) {\r\n sendNotification({\r\n backgroundColor: 'success',\r\n title: deleteValue ? 'Comentario eliminado' : 'Producto comentado',\r\n description: deleteValue ? 'Has eliminado el comentario!' : 'Has comentado!'\r\n })\r\n }\r\n setOpenCommentModal(!openCommentModal)\r\n return {\r\n ...state,\r\n PRODUCT: state?.PRODUCT?.map((items: any) => {\r\n return items.pId === action.payload\r\n ? {\r\n ...items,\r\n comment: deleteValue ? '' : values.comment\r\n }\r\n : items\r\n })\r\n }\r\n }\r\n\r\n const getSortedProduct = useCallback((data: any[], sort: string | null) => {\r\n if (sort && sort === 'PRICE_HIGH_TO_LOW') {\r\n return data.sort((a, b) => {\r\n return b.ProPrice - a.ProPrice\r\n })\r\n }\r\n if (sort && sort === 'PRICE_LOW_TO_HIGH') {\r\n return data.sort((a, b) => {\r\n return a.ProPrice - b.ProPrice\r\n })\r\n }\r\n return data\r\n }, [])\r\n\r\n const PriceRangeFunc = (products: any[], price: number) => {\r\n return (\r\n products?.length > 0 &&\r\n products?.filter((items) => {\r\n return items?.ProPrice >= price\r\n })\r\n )\r\n }\r\n\r\n const sortedProduct = useMemo(() => {\r\n return getSortedProduct(data.PRODUCT, data.sortBy)\r\n }, [data.PRODUCT, data.sortBy, getSortedProduct])\r\n\r\n const finalFilter = PriceRangeFunc(sortedProduct, data.priceRange)\r\n\r\n const handleList = (text: string) => {\r\n const inputText = text.toLowerCase()\r\n let dataList = []\r\n dataList = finalFilter.filter((item) => {\r\n return item.pName.toLowerCase().includes(inputText)\r\n })\r\n return dataList\r\n }\r\n\r\n const searchedInput = (words: string) => {\r\n setInputValue(words)\r\n const n = words.split(' ')\r\n if (n.length !== 0) {\r\n if (n[n.length - 1] === '') {\r\n n.pop()\r\n }\r\n return n[n.length - 1]\r\n }\r\n return ''\r\n }\r\n\r\n const arrayProduct = useMemo(() => {\r\n if (!Array.isArray(data.PRODUCT) || data.PRODUCT.length === 0) return []\r\n return data.PRODUCT.map((product: any) => {\r\n const filteredDataExtra = (product?.dataExtra ?? []).map(({ __typename, ...rest }) => {return rest})\r\n const dataOptional = (product?.dataOptional ?? []).map(({ __typename, ...rest }) => {\r\n const { ExtProductFoodsSubOptionalAll, ...r } = rest\r\n const adjusted = (ExtProductFoodsSubOptionalAll ?? []).map(({ __typename, ...s }) => {return s})\r\n return { ...r, ExtProductFoodsSubOptionalAll: adjusted }\r\n })\r\n return {\r\n pId: product.pId,\r\n refCodePid: RandomCode(20),\r\n id: values?.cliId,\r\n cantProducts: parseInt(String(product?.ProQuantity ?? 0)),\r\n comments: product?.comment ?? '',\r\n dataOptional: dataOptional ?? [],\r\n dataExtra: filteredDataExtra,\r\n ProPrice: product.ProPrice\r\n }\r\n })\r\n }, [data.PRODUCT, values?.cliId])\r\n\r\n const finalArrayProduct = useMemo(() => {\r\n return arrayProduct.map((item: any) => {\r\n const totalExtra = (item.dataExtra ?? []).reduce((acc: number, ex: any) => {return acc + (Number(ex.newExtraPrice) || 0)}, 0)\r\n return { ...item, totalExtra }\r\n })\r\n }, [arrayProduct])\r\n\r\n let totalSale = 0\r\n /**\n *\n * @param data\n */\n function sumProPriceAndTotalExtra(data) {\r\n return data.map((item) => {\r\n const totalExtra = item.dataExtra.reduce((acc, curr) => {\r\n const newExtraPrice = parseFloat(curr.newExtraPrice)\r\n if (isNaN(newExtraPrice)) {\r\n return acc\r\n }\r\n return acc + newExtraPrice\r\n }, 0)\r\n const total = item.ProPrice + totalExtra\r\n return { ...item, totalExtra, total }\r\n })\r\n }\r\n useEffect(() => {\r\n const dataCountTotal = sumProPriceAndTotalExtra(finalArrayProduct)\r\n dataCountTotal.forEach((a) => {\r\n const { total } = a || {}\r\n totalSale += total\r\n setTotalProductPrice(Math.abs(totalSale))\r\n })\r\n if (data.PRODUCT.length === 0) {\r\n setTotalProductPrice(0)\r\n }\r\n }, [totalProductPrice, totalSale, data, finalArrayProduct])\r\n\r\n const client = useApolloClient()\r\n const { getOneSalesStore } = useGetSale()\r\n console.log(data)\r\n const handleSubmit = () => {\r\n // @ts-ignore\r\n if (errors?.change || errors?.valueDelivery) {\r\n return sendNotification({\r\n title: 'error',\r\n backgroundColor: 'warning',\r\n description: 'Completa los campos requeridos'\r\n })\r\n }\r\n setLoadingSale(true)\r\n const {\r\n code,\r\n success,\r\n error\r\n } = generateTicket({\r\n length: 8,\r\n strategy: 'numeric',\r\n prefix: 'T-',\r\n timestamp: true\r\n })\r\n if (error) {\r\n setLoadingSale(false)\r\n return sendNotification({\r\n title: 'error',\r\n backgroundColor: 'error',\r\n description: 'Lo sentimos, ocurrió un error'\r\n })\r\n }\r\n if (!success) {\r\n setLoadingSale(false)\r\n return sendNotification({\r\n title: 'error',\r\n backgroundColor: 'error',\r\n description: 'Lo sentimos, ocurrió un error'\r\n })\r\n }\r\n // @ts-ignore\r\n setCode(code)\r\n /**\n *\n * @param cadena\n */\n function convertInteger(cadena: string | number) {\r\n if (typeof cadena === 'string') {\r\n const numeroEntero = parseInt(cadena?.replace('.', ''))\r\n return numeroEntero\r\n }\r\n return cadena || 0\r\n }\r\n const {\r\n change,\r\n valueDelivery,\r\n tableId\r\n } = values || {\r\n change: 0,\r\n valueDelivery: 0,\r\n tableId: null,\r\n cliId: null\r\n }\r\n\r\n const shoppingCartRefCode = `REF-${RandomCode(36)}`\r\n\r\n const input = finalArrayProduct.map((item: any) => {\r\n return {\r\n ...item,\r\n shoppingCartRefCode\r\n }\r\n })\r\n return registerSalesStore({\r\n variables: {\r\n input,\r\n id: values?.cliId,\r\n pCodeRef: code,\r\n tableId,\r\n change: convertInteger(change),\r\n valueDelivery: convertInteger(valueDelivery),\r\n payId: data.payId,\r\n pickUp: 1,\r\n shoppingCartRefCode,\r\n discount: {\r\n type: String(data.discountType),\r\n value: 2\r\n },\r\n totalProductsPrice: convertInteger(totalProductsPrice) || 0\r\n },\r\n update(cache) {\r\n cache.modify({\r\n fields: {\r\n productFoodsAll(existingProductFoodsAll = []) {\r\n return existingProductFoodsAll\r\n }\r\n }\r\n })\r\n }\r\n })\r\n .then((response) => {\r\n if (response) {\r\n const { data } = response\r\n const { registerSalesStore } = data ?? {}\r\n const { success } = registerSalesStore ?? {}\r\n if (success) {\r\n setPrint(false)\r\n client.query({\r\n query: GET_ALL_COUNT_SALES,\r\n fetchPolicy: 'network-only',\r\n // @ts-ignore\r\n onCompleted: (data) => {\r\n client.writeQuery({ query: GET_ALL_COUNT_SALES, data: { getTodaySales: data.countSales.todaySales } })\r\n }\r\n })\r\n setValues(initialValuesState)\r\n handleChange({ target: { name: 'tableId', value: '' } }, false)\r\n getOneSalesStore({\r\n variables: {\r\n pCodeRef: code || ''\r\n }\r\n }).then((responseSale: any) => {\r\n if (responseSale?.data?.getOneSalesStore) {\r\n const currentSale = responseSale?.data?.getOneSalesStore || {}\r\n const inComingCodeRef = currentSale?.pCodeRef || null\r\n if (!inComingCodeRef) return null\r\n // client.cache.modify({\r\n // fields: {\r\n // getAllOrdersFromStore (existingOrders = []) {\r\n // try {\r\n // const newGetAllOrdersFromStore = updateExistingOrders(existingOrders, inComingCodeRef, 4, currentSale)\r\n // return newGetAllOrdersFromStore\r\n // } catch (e) {\r\n // return existingOrders\r\n // }\r\n // }\r\n // }\r\n // })\r\n }\r\n })\r\n router.push(\r\n {\r\n query: {\r\n ...router.query,\r\n saleId: code\r\n }\r\n },\r\n undefined,\r\n { shallow: true }\r\n )\r\n }\r\n }\r\n setLoadingSale(false)\r\n })\r\n .catch(() => {\r\n setLoadingSale(false)\r\n setErrorSale(true)\r\n setPrint(false)\r\n sendNotification({\r\n title: 'error',\r\n backgroundColor: 'error',\r\n description: 'Lo sentimos, ocurrió un error'\r\n })\r\n })\r\n .finally(() => {\r\n setPrint(false)\r\n setLoadingSale(false)\r\n })\r\n }\r\n\r\n const handleProduct = async (PRODUCT: any) => {\r\n setLoadingExtraProduct(true)\r\n const { pId } = PRODUCT || {}\r\n try {\r\n const originalArray = data.PRODUCT.find((item: any) => {\r\n return item.pId === pId\r\n })\r\n // OPTIONAL\r\n productFoodsOne({ variables: { pId } })\r\n const optionalAll = await ExtProductFoodsSubOptionalAll({\r\n variables: { pId }\r\n })\r\n const optionalFetch = optionalAll.data.ExtProductFoodsOptionalAll\r\n setDataOptional(optionalFetch || [])\r\n const existOptionalCookies = originalArray?.dataOptional\r\n const filteredDataOptional = existOptionalCookies?.length\r\n ? existOptionalCookies\r\n ?.map((obj: any) => {\r\n const filteredSubOptions =\r\n obj.ExtProductFoodsSubOptionalAll.filter(\r\n (subObj: any) => {return subObj.check === true}\r\n )\r\n // Excluya todo el objeto padre si filteredSubOptions está vacío\r\n if (filteredSubOptions.length === 0) {\r\n return null\r\n }\r\n return {\r\n ...obj,\r\n ExtProductFoodsSubOptionalAll: filteredSubOptions\r\n }\r\n })\r\n .filter((obj: any) => {return obj !== null})\r\n : []\r\n\r\n // Actualizar optionalAll.data.ExtProductFoodsSubOptionalAll con los valores actualizados de originalArray2.ExtProductFoodsSubOptionalAll\r\n if (optionalFetch && filteredDataOptional) {\r\n const updateOption = optionalFetch\r\n .map((obj: any) => {\r\n const matchingArray = filteredDataOptional.find(\r\n (o: any) => {return o && o.opExPid === obj.opExPid}\r\n )\r\n if (!matchingArray) {\r\n return obj\r\n }\r\n const extProductFoodsSubOptionalAll =\r\n obj.ExtProductFoodsSubOptionalAll || []\r\n const updateExtProductSubOptionalAll =\r\n extProductFoodsSubOptionalAll.map((subObj: any) => {\r\n const newItem =\r\n matchingArray.ExtProductFoodsSubOptionalAll.find(\r\n (newItem: any) =>\r\n {return newItem && newItem.opSubExPid === subObj.opSubExPid}\r\n )\r\n if (newItem) {\r\n return {\r\n ...subObj,\r\n check: true\r\n }\r\n }\r\n return subObj\r\n })\r\n return {\r\n ...obj,\r\n ExtProductFoodsSubOptionalAll:\r\n updateExtProductSubOptionalAll\r\n }\r\n })\r\n .filter((obj: any) => {return obj})\r\n if (existOptionalCookies) {\r\n setDataOptional(updateOption || [])\r\n } else {\r\n setDataOptional(optionalAll.data.ExtProductFoodsOptionalAll || [])\r\n }\r\n }\r\n // NO OPTIONAL\r\n const extProduct = await ExtProductFoodsAll({ variables: { pId } })\r\n let finalData\r\n if (!originalArray?.dataExtra) {\r\n finalData = extProduct?.data?.ExtProductFoodsAll\r\n } else {\r\n const filteredData = originalArray.dataExtra.filter((item: any) =>\r\n {return extProduct?.data?.ExtProductFoodsAll.some(\r\n (newItem: any) => {return newItem.exPid === item.exPid}\r\n )}\r\n )\r\n finalData = originalArray?.dataExtra?.concat(\r\n extProduct?.data?.ExtProductFoodsAll?.filter(\r\n (item: any) =>\r\n {return !filteredData?.some(\r\n (filteredItem: any) => {return filteredItem.exPid === item.exPid}\r\n )}\r\n )\r\n )\r\n }\r\n setDataExtra(finalData)\r\n setProduct(() => {\r\n return {\r\n PRODUCT\r\n }\r\n })\r\n setLoadingExtraProduct(false)\r\n } catch (error) {\r\n setLoadingExtraProduct(false)\r\n if (error instanceof Error) {\r\n return sendNotification({\r\n title: 'error',\r\n backgroundColor: 'error',\r\n description: error.message ?? 'Lo sentimos, ocurrió un error'\r\n })\r\n }\r\n }\r\n }\r\n\r\n const handleCleanFilter = (): null => {\r\n setValues(initialValuesState)\r\n setValuesDates({ fromDate: yearMonthDay, toDate: '' })\r\n return null\r\n }\r\n\r\n const disabledModalItems = (dataOptional?.length > 0 || dataExtra?.length > 0) && !loadingExtProductFoodsSubOptionalAll\r\n\r\n /**\r\n * Filter objects with checked property equal to true.\r\n * @param {Array} products - Array of objects.\r\n * @returns {Array} - Array of objects with checked property equal to true.\r\n */\r\n function filterChecked(products: any[]) {\r\n if (!Array.isArray(products)) {\r\n return []\r\n }\r\n\r\n return products.filter(product => {return product?.checked === true})?.map(product => {return product?.carProId})\r\n }\r\n\r\n // Obtener los carProIds de productos con checked en true\r\n const carProIds = filterChecked(categories)\r\n\r\n // Filtrar los productos de productsFood por los carProIds obtenidos\r\n const filteredProducts = filterProductsByCarProId(productsFood, carProIds)\r\n\r\n const allProducts = useMemo(() => {\r\n const productMap = new Map(data?.PRODUCT?.map((item: any) => {return [String(item.pId), item.ProQuantity || 0]}))\r\n\r\n return filteredProducts.map(product => {return {\r\n ...product,\r\n existsInSale: productMap.has(String(product.pId)),\r\n ProQuantity: productMap.get(String(product.pId)) || 0\r\n }})\r\n }, [data.PRODUCT, filteredProducts])\r\n\r\n const totalProductsPrice = useMemo(() => { return finalArrayProduct.reduce((acc: number, item: any) => {return acc + (Number(item.ProPrice) || 0) + (Number(item.totalExtra) || 0)}, 0) }, [finalArrayProduct])\r\n\r\n const handleAddAllProductsToCart = () => {\r\n for (const product of allProducts) {\r\n const existsInCart = data.PRODUCT.some((item: any) => {return item.pId === product.pId})\r\n if (!existsInCart) {\r\n dispatch({ type: SalesActionTypes.ADD_TO_CART, payload: product })\r\n } else {\r\n dispatch({ type: SalesActionTypes.INCREMENT, id: product.pId })\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * handleChangeNumber\r\n * Updates product quantity from input change with full validations.\r\n * @param {any} state - Current reducer state\r\n * @param {any} action - Action with payload { value, index, id }\r\n * @param {any[]} productsFood - Products memory source\r\n * @param {(n:{title:string,backgroundColor:string,description?:string})=>void} sendNotification\r\n * @param {(a:any)=>void} dispatch\r\n * @returns {any} Updated state\r\n */\r\n function handleChangeNumber(\r\n state: any,\r\n action: any,\r\n productsFood: any[] = [],\r\n sendNotification: Function\r\n ) {\r\n const event = action?.payload ?? {}\r\n const { value, index, id } = event\r\n\r\n if (!id || index === undefined) return state\r\n\r\n const productExist = productsFood.find((item: any) => {return item.pId === id})\r\n const oneProduct = state?.PRODUCT?.find((item: any) => {return item.pId === id})\r\n\r\n // Product not found\r\n if (!productExist || !oneProduct) return state\r\n\r\n // No stock\r\n if (productExist.stock === 0) {\r\n sendNotification({\r\n title: 'Sin stock',\r\n backgroundColor: 'warning',\r\n description: 'Producto sin stock disponible'\r\n })\r\n return state\r\n }\r\n\r\n // Remove product if quantity <= 0\r\n if (value <= 0) {\r\n sendNotification({\r\n title: 'Producto eliminado',\r\n backgroundColor: 'info',\r\n description: `Has eliminado ${oneProduct.pName} del carrito.`\r\n })\r\n return {\r\n ...state,\r\n PRODUCT: state.PRODUCT.filter((t: any) => {return t.pId !== id}),\r\n counter: (state.counter ?? 0) - (oneProduct.ProQuantity || 0)\r\n }\r\n }\r\n\r\n const safeValue = Number(value) || 0\r\n const maxStock = productExist.manageStock ? productExist.stock : safeValue\r\n const finalQuantity = Math.min(safeValue, maxStock)\r\n\r\n // Stock exceeded\r\n if (safeValue > productExist.stock && productExist.manageStock) {\r\n sendNotification({\r\n title: 'Stock insuficiente',\r\n backgroundColor: 'warning',\r\n description: `No puedes agregar más unidades de ${oneProduct.pName}. Stock disponible: ${productExist.stock}`\r\n })\r\n }\r\n\r\n const updatedProducts = state.PRODUCT.map((item: any, i: number) =>\r\n {return i === index\r\n ? {\r\n ...item,\r\n ProQuantity: finalQuantity,\r\n ProPrice: finalQuantity * (productExist.ProPrice ?? 0)\r\n }\r\n : item}\r\n )\r\n\r\n return {\r\n ...state,\r\n PRODUCT: updatedProducts,\r\n counter: (state.counter ?? 0) + 1\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n Cookies.set(keyToSaveData, JSON.stringify(data), { domain, path: '/' })\r\n }, [data, domain])\r\n\r\n return {\r\n loading: loading || loadingSale,\r\n loadingExtraProduct,\r\n disabledModalItems: !disabledModalItems,\r\n loadingRegisterSale,\r\n errorSale,\r\n openCurrentSale,\r\n code,\r\n totalProductPrice,\r\n saveDataState,\r\n product,\r\n data,\r\n openCommentModal,\r\n inputValue,\r\n arrayProduct,\r\n delivery,\r\n valuesDates,\r\n print,\r\n finalFilter,\r\n showMore,\r\n search,\r\n values,\r\n initialStateSales,\r\n productsFood: allProducts,\r\n modalItem,\r\n sumExtraProducts,\r\n oneProductToComment: oneProductToComment ?? null,\r\n dataProduct: dataProduct?.productFoodsOne || {},\r\n dataOptional: dataOptional || [],\r\n dataExtra: dataExtra || [],\r\n fetchMore,\r\n pagination,\r\n discount: 0,\r\n datCat: categories,\r\n currentPage,\r\n loadingProduct: loading,\r\n handleChangeCheck,\r\n errors,\r\n handleUpdateAllExtra,\r\n handleAddAllProductsToCart,\r\n dispatch,\r\n handlePageChange,\r\n handleComment,\r\n setModalItem,\r\n handleChangeFilter,\r\n handleProduct,\r\n handleChange,\r\n setOpenCurrentSale,\r\n setErrors,\r\n onChangeInput,\r\n handleAddProduct,\r\n handleRemoveValue,\r\n setDelivery,\r\n setValues,\r\n setShowMore,\r\n PriceRangeFunc,\r\n handleCleanFilter,\r\n handleSubmit,\r\n handleChangeFilterProduct,\r\n handleDecrementExtra,\r\n setTotalProductPrice,\r\n setInputValue,\r\n getSortedProduct,\r\n handleAddOptional,\r\n handleIncrementExtra,\r\n setProduct,\r\n setPrint: handlePrint,\r\n PRODUCT\r\n }\r\n}\r\n","// ticket-generator.ts\r\n/**\r\n * Ticket generator for POS systems.\r\n * - Provides numeric and alphanumeric strategies.\r\n * - Supports prefix, timestamp embedding, synchronous generation and async uniqueness check.\r\n *\r\n * JSDoc comments are in English as requested.\r\n */\r\n\r\ntype Strategy = 'alphanumeric' | 'numeric';\r\n\r\nexport interface TicketConfig {\r\n /** Total length of the generated code excluding prefix. Minimum 4. */\r\n length?: number;\r\n /** Strategy: 'alphanumeric' | 'numeric' */\r\n strategy?: Strategy;\r\n /** Optional human-readable prefix (e.g. 'TKT-', 'POS1-') */\r\n prefix?: string;\r\n /** If true, embed a short timestamp chunk (base36) at start of payload */\r\n timestamp?: boolean;\r\n /** Maximum attempts for uniqueness check when using generateUniqueAsync */\r\n maxAttempts?: number;\r\n /** Padding char for numeric sequences (only used if `useSequential` provided) */\r\n padChar?: string;\r\n}\r\n\r\n/**\r\n * Result returned by generators.\r\n */\r\nexport type TicketResult =\r\n | { success: true; code: string; error?: undefined }\r\n | { success: false; error: string; code?: string };\r\n\r\n/**\r\n * Async uniqueness checker signature.\r\n * Implement with DB query that returns true if code is unique (not found).\r\n */\r\nexport type IsUniqueFn = (code: string) => Promise<boolean>;\r\n\r\n/* -------------------- Implementation -------------------- */\r\n\r\n/**\r\n * Secure random integer in [0, max)\r\n * @param max\r\n * @returns random integer in [0, max)\r\n */\r\nconst secureRandomInt = (max: number): number => {\r\n if (typeof crypto !== 'undefined' && typeof (crypto as any).getRandomValues === 'function') {\r\n // browser\r\n const arr = new Uint32Array(1);\r\n (crypto as any).getRandomValues(arr)\r\n return arr[0] % max\r\n }\r\n try {\r\n // node\r\n \r\n const nodeCrypto = require('crypto')\r\n const buf = nodeCrypto.randomBytes(4)\r\n const val = buf.readUInt32BE(0)\r\n return val % max\r\n } catch {\r\n // fallback (less secure)\r\n return Math.floor(Math.random() * max)\r\n }\r\n}\r\n\r\n/**\r\n * Build a random string from charset.\r\n * @param length\r\n * @param charset\r\n */\r\nconst randomFromCharset = (length: number, charset: string): string => {\r\n const out: string[] = []\r\n const m = charset.length\r\n for (let i = 0; i < length; i += 1) {\r\n out.push(charset[secureRandomInt(m)])\r\n }\r\n return out.join('')\r\n}\r\n\r\n/**\r\n * Short fixed-size timestamp chunk that respects strategy.\r\n * - For 'numeric' returns decimal digits (zero-padded).\r\n * - For 'alphanumeric' returns base36 chars.\r\n *\r\n * @param strategy generation strategy\r\n * @param size chunk length (default 4)\r\n * @returns timestamp chunk string of length `size`\r\n */\r\nconst timestampChunk = (strategy: Strategy, size = 4): string => {\r\n const now = Date.now()\r\n if (strategy === 'numeric') {\r\n const mod = Math.pow(10, size)\r\n const n = (now % mod).toString().padStart(size, '0')\r\n return n\r\n }\r\n // alphanumeric: compact base36 slice (keeps letters & digits)\r\n return now.toString(36).slice(-size).padStart(size, '0')\r\n}\r\n\r\n/**\r\n * Validate config and return normalized defaults or error string.\r\n * @param cfg\r\n */\r\nconst normalizeConfig = (cfg?: TicketConfig): { cfg?: Required<TicketConfig>; error?: string } => {\r\n const defaultCfg: Required<TicketConfig> = {\r\n length: 10,\r\n strategy: 'alphanumeric',\r\n prefix: '',\r\n timestamp: false,\r\n maxAttempts: 5,\r\n padChar: '0'\r\n }\r\n\r\n if (!cfg) return { cfg: defaultCfg }\r\n\r\n const merged = { ...defaultCfg, ...cfg }\r\n\r\n if (!Number.isInteger(merged.length) || merged.length < 4) {\r\n return { error: 'length must be an integer >= 4' }\r\n }\r\n\r\n if (!['alphanumeric', 'numeric'].includes(merged.strategy)) {\r\n return { error: \"strategy must be 'alphanumeric' or 'numeric'\" }\r\n }\r\n\r\n if (typeof merged.prefix !== 'string' || /[^A-Za-z0-9-_]/.test(merged.prefix)) {\r\n return { error: 'prefix must be alphanumeric, dash or underscore only' }\r\n }\r\n\r\n if (typeof merged.maxAttempts !== 'number' || merged.maxAttempts < 1) {\r\n merged.maxAttempts = defaultCfg.maxAttempts\r\n }\r\n\r\n if (typeof merged.padChar !== 'string' || merged.padChar.length !== 1) {\r\n merged.padChar = defaultCfg.padChar\r\n }\r\n\r\n return { cfg: merged }\r\n}\r\n\r\n/**\r\n * Generate a ticket code (synchronous, no uniqueness guarantee).\r\n * Use generateUniqueAsync if you need persistence-level uniqueness.\r\n *\r\n * @param config Ticket generation options\r\n * @returns TicketResult with code or error\r\n */\r\nexport const generateTicket = (config?: TicketConfig): TicketResult => {\r\n const normalized = normalizeConfig(config)\r\n if (normalized.error) return { success: false, error: normalized.error }\r\n const cfg = normalized.cfg!\r\n\r\n const payloadLen = cfg.length\r\n const prefix = cfg.prefix || ''\r\n\r\n // decide charset\r\n const numericCharset = '0123456789'\r\n const alphaNumCharset = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz0123456789' // removed O/0/l for readability\r\n const charset = cfg.strategy === 'numeric' ? numericCharset : alphaNumCharset\r\n\r\n // prepare timestamp chunk if requested (keep it short and strategy-aware)\r\n const ts = cfg.timestamp ? timestampChunk(cfg.strategy, 4) : ''\r\n\r\n\r\n // calc remaining length for random part\r\n const remaining = payloadLen - ts.length\r\n if (remaining < 1) return { success: false, error: 'length too small for timestamp embedding' }\r\n\r\n const randomPart = randomFromCharset(remaining, charset)\r\n\r\n const code = `${prefix}${ts}${randomPart}`\r\n return { success: true, code }\r\n}\r\n\r\n/**\r\n * Generate a ticket code with uniqueness guarantee using an async uniqueness checker.\r\n * Tries up to config.maxAttempts times.\r\n *\r\n * @param isUnique Async function that returns true if code is unique (not present)\r\n * @param config Ticket generation options\r\n * @returns TicketResult with unique code or error\r\n */\r\nexport const generateUniqueAsync = async (isUnique: IsUniqueFn, config?: TicketConfig): Promise<TicketResult> => {\r\n const normalized = normalizeConfig(config)\r\n if (normalized.error) return { success: false, error: normalized.error }\r\n const cfg = normalized.cfg!\r\n\r\n for (let attempt = 1; attempt <= cfg.maxAttempts; attempt += 1) {\r\n const candidateRes = generateTicket(cfg)\r\n if (!candidateRes.success) return candidateRes\r\n\r\n const candidate = candidateRes.code\r\n try {\r\n const unique = await isUnique(candidate)\r\n if (unique) return { success: true, code: candidate }\r\n // else collision -> retry\r\n } catch (err) {\r\n return { success: false, error: `isUnique function threw: ${(err as Error).message}` }\r\n }\r\n }\r\n\r\n return { success: false, error: 'unable to generate unique ticket after max attempts' }\r\n}\r\n\r\n/* -------------------- Example usage -------------------- */\r\n\r\n/*\r\nExample (sync):\r\nconst res = generateTicket({ length: 8, strategy: 'numeric', prefix: 'T-', timestamp: true });\r\nif (!res.success) console.error(res.error);\r\nelse console.log('Ticket:', res.code);\r\n\r\nExample (async uniqueness check, e.g. DB):\r\nconst isUniqueInDb = async (code: string) => {\r\n // query DB to see if code exists; return true if NOT exist\r\n return !(await db.exists({ ticketCode: code }));\r\n};\r\nconst unique = await generateUniqueAsync(isUniqueInDb, { length: 10, strategy: 'alphanumeric', prefix: 'POS1-', timestamp: true });\r\nif (unique.success) console.log('Unique ticket:', unique.code);\r\nelse console.error('Error generating unique:', unique.error);\r\n*/\r\n","export const isStockInsufficient = (currentQuantity: number, stock: number) => {\r\n return currentQuantity >= stock\r\n}","import { NotificationPayload } from '../types'\n\r\nimport { isStockInsufficient } from './isStockInsufficient'\r\n\r\ninterface AddToCartProps {\r\n state: any\r\n action: any\r\n product: any\r\n sendNotification?: (args: NotificationPayload) => any\r\n sendAlertStock: (stock: number) => void\r\n}\r\n\r\n/**\r\n * Adds a product to the cart with maximum performance.\r\n * Avoids full array scans and minimizes object cloning.\r\n * @param {any} state - Current reducer state.\r\n * @param {any} action - Action containing product data.\r\n * @returns {any} Updated state.\r\n */\r\nexport const addToCartFunc = ({\r\n state = {},\r\n action = {},\r\n product,\r\n sendNotification = () => { },\r\n sendAlertStock = () => { }\r\n}: AddToCartProps) => {\r\n const payload = action?.payload ?? {}\r\n const {\r\n pId,\r\n pName,\r\n getOneTags,\r\n stock,\r\n ProDescription,\r\n ProImage,\r\n ProPrice,\r\n ProDescuento\r\n } = payload\r\n\r\n // Validate basic stock\r\n if (stock === 0) {\r\n sendNotification({\r\n title: 'Sin stock',\r\n backgroundColor: 'warning',\r\n description: 'Producto sin stock disponible en tu inventario'\r\n })\r\n return state\r\n }\r\n\r\n // PRE-FETCH product references (only ONCE)\r\n const productExistIndex = state.PRODUCT.findIndex((item: any) => {return item.pId === pId})\r\n const productExist = productExistIndex !== -1 ? state.PRODUCT[productExistIndex] : null\r\n if (!product) return state\r\n\r\n // Check stock handling rules\r\n const currentQty = productExist?.ProQuantity ?? 0\r\n if (product.manageStock && isStockInsufficient(currentQty, product.stock)) {\r\n sendAlertStock(stock)\r\n return state\r\n }\r\n\r\n const isFree = productExist?.free ?? false\r\n const newQuantity = productExist ? currentQty + 1 : 1\r\n\r\n // Calculate new unit price only once\r\n const unitPrice = product.ProPrice ?? 0\r\n\r\n // Calculate final price respecting 'free' mode\r\n const newPrice = isFree ? 0 : newQuantity * unitPrice\r\n\r\n // COMMON STATE UPDATES\r\n const baseState = {\r\n ...state,\r\n counter: state.counter + 1,\r\n totalAmount: state.totalAmount + ProPrice,\r\n startAnimateUp: 'start-animate-up'\r\n }\r\n\r\n // CASE 1: Product does NOT exist → add it\r\n if (!productExist) {\r\n const newProduct = {\r\n pId,\r\n pName,\r\n editing: false,\r\n getOneTags,\r\n unitPrice,\r\n manageStock: product.manageStock ?? false,\r\n ProDescription,\r\n ProImage,\r\n ProPrice,\r\n stock,\r\n ProDescuento,\r\n ProQuantity: 1,\r\n free: false\r\n }\r\n\r\n return {\r\n ...baseState,\r\n PRODUCT: [...state.PRODUCT, newProduct]\r\n }\r\n }\r\n\r\n // CASE 2: Product already exists → update only ONE item\r\n const newList = [...state.PRODUCT]\r\n\r\n newList[productExistIndex] = {\r\n ...productExist,\r\n getOneTags: product.genderTags,\r\n unitPrice,\r\n editing: false,\r\n oldQuantity: newQuantity,\r\n ProPrice: newPrice,\r\n ProQuantity: newQuantity,\r\n free: isFree\r\n }\r\n\r\n return {\r\n ...baseState,\r\n PRODUCT: newList\r\n }\r\n}","export enum TypeDiscount {\r\n PERCENT = 'PERCENT',\r\n AMOUNT = 'AMOUNT'\r\n}\r\ninterface DiscountPayload {\r\n type: TypeDiscount\r\n value: number\r\n}\r\n\r\n/**\r\n * Apply a discount to the reducer state in a mathematically-exact way.\r\n *\r\n * - Supports two discount types: \"PERCENT\" (0-100) and \"AMOUNT\" (fixed currency amount).\r\n * - Works in integer cents to avoid floating point errors, distributes rounding\r\n * remainders using the Largest Remainder Method so allocations sum exactly.\r\n * - BEFORE applying a new discount, restores original prices if they were previously saved\r\n * (originalProPrice and originalNewExtraPrice). This prevents stacking discounts.\r\n * - Applies discount first to `ProPrice` (base) and, if needed, to `dataExtra[].newExtraPrice`\r\n * proportionally, never producing negative prices.\r\n * - Returns a new state (immutable) and sets metadata: discountType, discountPercent,\r\n * discountAmount, discountBreakdown and preserves original prices in `originalProPrice`\r\n * and `dataExtra[].originalNewExtraPrice`.\r\n *\r\n * NOTE: Uses optional `sendNotification` to report errors/success.\r\n *\r\n * @param {any} state - current reducer state\r\n * @param {{ type: string, value: number }} payload - { type: 'PERCENT'|'AMOUNT', value: number }\r\n * @param {(notification: {title:string,backgroundColor:'success'|'error'|'warning'|'info',description:string}) => void} sendNotification\r\n * @returns {any} new state with discounts applied (idempotent w.r.t repeated calls)\r\n */\r\nexport const applyDiscountToCart = (\r\n state: any,\r\n payload: DiscountPayload,\r\n sendNotification?: (notification: {\r\n title: string\r\n backgroundColor: 'success' | 'error' | 'warning' | 'info'\r\n description: string\r\n }) => void\r\n) => {\r\n const discountType = (payload?.type ?? TypeDiscount.PERCENT).toString().toUpperCase()\r\n const rawValue = Number(payload?.value)\r\n\r\n // Basic validations\r\n if (!Array.isArray(state?.PRODUCT) || state.PRODUCT.length === 0) {\r\n sendNotification?.({\r\n title: 'Warning',\r\n backgroundColor: 'warning',\r\n description: 'No items in cart to apply discount.'\r\n })\r\n return {\r\n ...state,\r\n discountType,\r\n discountPercent: 0,\r\n discountAmount: 0,\r\n discountBreakdown: []\r\n }\r\n }\r\n\r\n if (Number.isNaN(rawValue) || rawValue < 0) {\r\n sendNotification?.({\r\n title: 'Error',\r\n backgroundColor: 'error',\r\n description: 'Invalid discount value.'\r\n })\r\n return state\r\n }\r\n\r\n if (discountType !== TypeDiscount.PERCENT && discountType !== TypeDiscount.AMOUNT) {\r\n sendNotification?.({\r\n title: 'Error',\r\n backgroundColor: 'error',\r\n description: 'Invalid discount type.'\r\n })\r\n return state\r\n }\r\n\r\n if (discountType === TypeDiscount.PERCENT && (rawValue < 0 || rawValue > 100)) {\r\n sendNotification?.({\r\n title: 'Error',\r\n backgroundColor: 'warning',\r\n description: 'Percentage must be between 0 and 100.'\r\n })\r\n return state\r\n }\r\n\r\n // Helpers - work in cents to preserve exactness\r\n const toCents = (n: number) => {return Math.round((Number(n) || 0) * 100)}\r\n const fromCents = (c: number) => {return c / 100}\r\n\r\n // --- Normalize / Restore originals to avoid stacking discounts ---\r\n // For each product, use saved original prices if present; otherwise use current as \"original\"\r\n const normalizedItems = state.PRODUCT.map((item: any) => {\r\n // Determine original base price (prefer originalProPrice if present)\r\n const origBaseRaw =\r\n item.originalProPrice !== undefined && item.originalProPrice !== null\r\n ? Number(item.originalProPrice)\r\n : Number(item.ProPrice || 0)\r\n\r\n const baseCents = toCents(origBaseRaw)\r\n\r\n // Normalize extras: preserve originalNewExtraPrice if exists, else take current newExtraPrice\r\n const extrasRaw = Array.isArray(item.dataExtra) ? item.dataExtra : []\r\n const extrasNormalized = extrasRaw.map((ex: any) => {\r\n const origExRaw =\r\n ex.originalNewExtraPrice !== undefined && ex.originalNewExtraPrice !== null\r\n ? Number(ex.originalNewExtraPrice)\r\n : Number(ex.newExtraPrice || 0)\r\n return {\r\n originalExtraObject: ex,\r\n originalNewExtraPriceRaw: origExRaw,\r\n originalNewExtraPriceCents: toCents(origExRaw)\r\n }\r\n })\r\n\r\n const extrasCentsList = extrasNormalized.map((e: any) => {return e.originalNewExtraPriceCents})\r\n const extrasTotalCents = extrasCentsList.reduce((s: number, v: number) => {return s + v}, 0)\r\n const itemTotalCents = baseCents + extrasTotalCents\r\n\r\n return {\r\n originalItem: item,\r\n baseCents,\r\n extrasNormalized,\r\n extrasCentsList,\r\n extrasTotalCents,\r\n itemTotalCents\r\n }\r\n })\r\n\r\n const cartTotalCents = normalizedItems.reduce((s: number, it: any) => {return s + it.itemTotalCents}, 0)\r\n\r\n if (cartTotalCents === 0) {\r\n sendNotification?.({\r\n title: 'Warning',\r\n backgroundColor: 'warning',\r\n description: 'Cart total is zero; nothing to discount.'\r\n })\r\n return {\r\n ...state,\r\n discountType,\r\n discountPercent: 0,\r\n discountAmount: 0,\r\n discountBreakdown: []\r\n }\r\n }\r\n\r\n // Determine requested total discount in cents\r\n let totalDiscountCents = 0\r\n if (discountType === TypeDiscount.PERCENT) {\r\n totalDiscountCents = Math.round((cartTotalCents * rawValue) / 100)\r\n } else {\r\n totalDiscountCents = toCents(rawValue)\r\n // Cap to cart total\r\n if (totalDiscountCents > cartTotalCents) {\r\n totalDiscountCents = cartTotalCents\r\n }\r\n }\r\n\r\n // If no discount to apply\r\n if (totalDiscountCents <= 0) {\r\n sendNotification?.({\r\n title: 'Notice',\r\n backgroundColor: 'info',\r\n description: 'No discount applied.'\r\n })\r\n return {\r\n ...state,\r\n discountType,\r\n discountPercent: discountType === TypeDiscount.PERCENT ? rawValue : +((totalDiscountCents / cartTotalCents) * 100).toFixed(2),\r\n discountAmount: fromCents(totalDiscountCents),\r\n discountBreakdown: []\r\n }\r\n }\r\n\r\n // ---- Allocation using Largest Remainder Method (exact cents) ----\r\n const rawAllocs = normalizedItems.map((it: any) => {return (it.itemTotalCents * totalDiscountCents) / cartTotalCents})\r\n const floorAllocs = rawAllocs.map((v: any) => {return Math.floor(v)})\r\n const remainders = rawAllocs.map((v: any, i: number) => {return { idx: i, rem: v - floorAllocs[i] }})\r\n const sumFloor = floorAllocs.reduce((s: number, v: number) => {return s + v}, 0)\r\n let remainingCents = totalDiscountCents - sumFloor\r\n\r\n remainders.sort((a: any, b: any) => {return b.rem - a.rem})\r\n const finalAllocs = [...floorAllocs]\r\n for (let i = 0; i < remainders.length && remainingCents > 0; i++) {\r\n finalAllocs[remainders[i].idx] += 1\r\n remainingCents -= 1\r\n }\r\n\r\n // ---- Apply allocations to restored originals (base first, then extras) ----\r\n const breakdown: { pId: string | number; discountAmount: number }[] = []\r\n const newProducts = normalizedItems.map((it: any, idx: number) => {\r\n const allocated = finalAllocs[idx] // cents\r\n let remainingToTake = allocated\r\n\r\n // Apply on base\r\n const origBaseCents = it.baseCents\r\n const usedOnBase = Math.min(origBaseCents, remainingToTake)\r\n const baseAfter = origBaseCents - usedOnBase\r\n remainingToTake -= usedOnBase\r\n\r\n // Apply on extras proportionally if needed\r\n let newExtrasCentsList = it.extrasCentsList.slice() // copy\r\n if (remainingToTake > 0 && it.extrasTotalCents > 0) {\r\n const extrasTotal = it.extrasTotalCents\r\n // raw per-extra allocation\r\n const rawExtraAllocs = newExtrasCentsList.map((exCents: number) => {return (exCents / extrasTotal) * remainingToTake})\r\n const floorExtraAllocs = rawExtraAllocs.map((v: number) => {return Math.floor(v)})\r\n const usedExtraFloor = floorExtraAllocs.reduce((s: number, v: number) => {return s + v}, 0)\r\n let rest = remainingToTake - usedExtraFloor\r\n\r\n const extraRemainders = rawExtraAllocs.map((v: number, i: number) => {return { idx: i, rem: v - floorExtraAllocs[i] }})\r\n extraRemainders.sort((a: any, b: any) => {return b.rem - a.rem})\r\n const finalExtraAllocs = [...floorExtraAllocs]\r\n for (let k = 0; k < extraRemainders.length && rest > 0; k++) {\r\n finalExtraAllocs[extraRemainders[k].idx] += 1\r\n rest -= 1\r\n }\r\n\r\n // apply finalExtraAllocs with cap\r\n newExtrasCentsList = newExtrasCentsList.map((exCents: number, i: number) => {\r\n const reduceBy = Math.min(exCents, finalExtraAllocs[i])\r\n return exCents - reduceBy\r\n })\r\n\r\n remainingToTake = 0\r\n }\r\n\r\n // Build updated product object:\r\n const newBaseCents = baseAfter\r\n const newProPrice = fromCents(newBaseCents)\r\n\r\n const originalExtrasObjects = it.extrasNormalized.map((e: any) => {return e.originalExtraObject || {}})\r\n const newDataExtra = originalExtrasObjects.map((exObj: any, i: number) => {\r\n const newExtraPrice = fromCents(newExtrasCentsList[i] || 0)\r\n // preserve originalNewExtraPrice on each extra (if not already)\r\n return {\r\n ...exObj,\r\n originalNewExtraPrice: exObj.originalNewExtraPrice !== undefined ? exObj.originalNewExtraPrice : exObj.newExtraPrice,\r\n newExtraPrice\r\n }\r\n })\r\n\r\n const appliedDiscountCents = allocated - remainingToTake\r\n breakdown.push({ pId: it.originalItem.pId, discountAmount: fromCents(appliedDiscountCents) })\r\n\r\n const itemTotalCentsBefore = it.itemTotalCents || 0\r\n const itemDiscountPercent = itemTotalCentsBefore > 0 ? +((appliedDiscountCents / itemTotalCentsBefore) * 100).toFixed(4) : 0\r\n\r\n return {\r\n ...it.originalItem,\r\n // save originalProPrice if not present (so future calls can restore)\r\n originalProPrice:\r\n it.originalItem.originalProPrice !== undefined && it.originalItem.originalProPrice !== null\r\n ? it.originalItem.originalProPrice\r\n : fromCents(it.baseCents),\r\n ProPrice: newProPrice,\r\n dataExtra: newDataExtra,\r\n // per-item metadata\r\n discountAmount: fromCents(appliedDiscountCents),\r\n discountPercent: itemDiscountPercent\r\n }\r\n })\r\n\r\n // Final safety check & tiny correction if needed\r\n const allocatedSumCents = breakdown.reduce((s, b) => {return s + toCents(Number(b.discountAmount) || 0)}, 0)\r\n if (allocatedSumCents !== totalDiscountCents) {\r\n const diff = totalDiscountCents - allocatedSumCents\r\n if (newProducts.length > 0 && diff !== 0) {\r\n const first = newProducts[0]\r\n first.discountAmount = Number(first.discountAmount || 0) + fromCents(diff)\r\n const adjustOnBase = Math.min(toCents(first.ProPrice), diff)\r\n first.ProPrice = fromCents(Math.max(0, toCents(first.ProPrice) - adjustOnBase))\r\n breakdown[0].discountAmount = Number(breakdown[0].discountAmount || 0) + fromCents(diff)\r\n }\r\n }\r\n\r\n const overallPercent = +((totalDiscountCents / cartTotalCents) * 100).toFixed(4)\r\n\r\n sendNotification?.({\r\n title: 'Discount applied',\r\n backgroundColor: 'success',\r\n description: `${discountType === TypeDiscount.PERCENT ? rawValue + '%' : fromCents(totalDiscountCents)} discount applied successfully.`\r\n })\r\n\r\n return {\r\n ...state,\r\n PRODUCT: newProducts,\r\n discountType,\r\n discountPercent: discountType === TypeDiscount.PERCENT ? rawValue : overallPercent,\r\n discountAmount: fromCents(totalDiscountCents),\r\n discountBreakdown: breakdown\r\n }\r\n}\r\n","import { SalesState } from '../../types'\r\nimport { TypeDiscount } from '../apply-discount-to-cart.utils'\r\n\r\nexport enum SalesActionTypes {\r\n ADD_TO_CART = 'ADD_TO_CART',\r\n ADD_PRODUCT = 'ADD_PRODUCT',\r\n REMOVE_PRODUCT = 'REMOVE_PRODUCT',\r\n REMOVE_PRODUCT_TO_CART = 'REMOVE_PRODUCT_TO_CART',\r\n ON_CHANGE = 'ON_CHANGE',\r\n UPDATE_SUCCESS_QUANTITY_EDITING_PRODUCT = 'UPDATE_SUCCESS_QUANTITY_EDITING_PRODUCT',\r\n CANCEL_UPDATE_QUANTITY_EDITING_PRODUCT = 'CANCEL_UPDATE_QUANTITY_EDITING_PRODUCT',\r\n REMOVE_ALL_PRODUCTS = 'REMOVE_ALL_PRODUCTS',\r\n TOGGLE_FREE_PRODUCT = 'TOGGLE_FREE_PRODUCT',\r\n TOGGLE_EDITING_PRODUCT = 'TOGGLE_EDITING_PRODUCT',\r\n INCREMENT = 'INCREMENT',\r\n DECREMENT = 'DECREMENT',\r\n PUT_COMMENT = 'PUT_COMMENT',\r\n PUT_EXTRA_PRODUCTS_AND_OPTIONAL_PRODUCT = 'PUT_EXTRA_PRODUCTS_AND_OPTIONAL_PRODUCT',\r\n PRICE_RANGE = 'PRICE_RANGE',\r\n SORT = 'SORT',\r\n PAYMENT_METHOD = 'PAYMENT_METHOD',\r\n APPLY_DISCOUNT = 'APPLY_DISCOUNT'\r\n}\r\nexport const initialStateSales: SalesState = {\r\n animateType: '',\r\n counter: 0,\r\n discountAmount: 0,\r\n discountPercent: 0,\r\n discountType: TypeDiscount.PERCENT,\r\n itemsInCart: 0,\r\n payId: '',\r\n priceRange: 0,\r\n PRODUCT: [],\r\n sortBy: null,\r\n startAnimateUp: '',\r\n totalAmount: 0,\r\n totalPrice: 0\r\n}\r\n","/**\r\n * extrasUtils.ts\r\n * Increment/decrement extras handling as pure functions returning new arrays.\r\n */\r\n\r\n/**\r\n * Increment extra entry\r\n * @param {Array} dataExtra\r\n * @param {string|number} exPid\r\n * @returns {Array}\r\n */\r\nexport const incrementExtra = (dataExtra = [], exPid: string | number) => {\r\n if (!Array.isArray(dataExtra)) return []\r\n return dataExtra.map((producto: any) => {\r\n if (producto.exPid === exPid) {\r\n const initialQuantity = producto.quantity ? producto.quantity : 0\r\n const newQuantity = initialQuantity + 1\r\n const newExtraPrice = (producto.extraPrice || 0) * newQuantity\r\n return { ...producto, quantity: newQuantity, newExtraPrice }\r\n }\r\n return producto\r\n })\r\n}\r\n\r\n/**\r\n * Decrement extra entry\r\n * @param {Array} dataExtra\r\n * @param {string|number} exPid\r\n * @returns {Array}\r\n */\r\nexport const decrementExtra = (dataExtra = [], exPid: string | number) => {\r\n if (!Array.isArray(dataExtra)) return []\r\n return dataExtra.map((producto: any) => {\r\n if (producto.exPid === exPid) {\r\n const { quantity = 0, extraPrice = 0 } = producto\r\n const newQuantity = Math.max(quantity - 1, 0)\r\n const newExtraPrice = newQuantity === 0 ? extraPrice : extraPrice * newQuantity\r\n return { ...producto, quantity: newQuantity, newExtraPrice }\r\n }\r\n return producto\r\n })\r\n}\r\n","/**\r\n * Filter products by carProId.\r\n * @param {Array} products - Array of products to filter.\r\n * @param {Array} carProIds - Array of carProId to filter by.\r\n * @returns {Array} - Filtered array of products or all products if no matches found.\r\n */\r\nexport function filterProductsByCarProId(products: any[], carProIds: (string | number)[]) {\r\n if (!Array.isArray(products)) {\r\n return []\r\n }\r\n\r\n if (!Array.isArray(carProIds) || carProIds.length === 0) {\r\n return products\r\n }\r\n\r\n return products.filter(product => {return carProIds.includes(product.carProId)})\r\n}","/**\n *\n * @param state\n * @param action\n * @param productsFood\n */\nexport function handleRemoveProduct(state: any, action: any, productsFood: any) {\r\n const productExist = state?.PRODUCT.find((items: any) => {\r\n return items.pId === action.payload.pId\r\n })\r\n const OurProduct = productsFood.find((items: any) => {\r\n return items.pId === action.payload.pId\r\n })\r\n return {\r\n ...state,\r\n counter: state.counter - 1,\r\n totalAmount: state.totalAmount - action.payload.ProPrice,\r\n PRODUCT:\r\n action.payload.ProQuantity > 1\r\n ? state.PRODUCT.map((items: any) => {\r\n return items.pId === action.payload.pId\r\n ? {\r\n ...items,\r\n pId: action.payload.pId,\r\n ProQuantity: items.ProQuantity - 1,\r\n ProPrice: productExist.ProPrice - OurProduct?.ProPrice\r\n }\r\n : items\r\n })\r\n : state.PRODUCT.filter((items: any) => {\r\n return items.pId !== action.payload.pId\r\n })\r\n }\r\n}","/**\r\n * Increments product quantity in cart safely.\r\n * - Validates stock\r\n * - Respects free mode\r\n * - Avoids unnecessary mutations\r\n *\r\n * @param {Object} params\r\n * @param {Object} params.state - Current reducer state\r\n * @param {string | number} params.productId - Product identifier\r\n * @param {Object[]} params.productsFood - Source products list\r\n * @param {Function} params.sendNotification - Notification handler\r\n *\r\n * @returns {Object} Updated state\r\n */\r\nexport const incrementProductQuantity = ({\r\n state,\r\n productId,\r\n productsFood = [],\r\n sendNotification = () => {}\r\n}: {\r\n state: any;\r\n productId: string | number;\r\n productsFood: any[];\r\n sendNotification?: Function;\r\n}) => {\r\n const sourceProduct = productsFood.find(\r\n (product) => {return product.pId === productId}\r\n )\r\n\r\n if (!sourceProduct) return state\r\n\r\n const PRODUCT = state.PRODUCT.map((item: any) => {\r\n if (item.pId !== productId) return item\r\n\r\n const {\r\n stock = 0,\r\n manageStock,\r\n ProPrice: unitPrice = 0\r\n } = sourceProduct\r\n\r\n const isFree = Boolean(item.free)\r\n const newQuantity = item.ProQuantity + 1\r\n\r\n // Stock = 0\r\n if (stock === 0) {\r\n sendNotification({\r\n title: 'Sin stock',\r\n backgroundColor: 'warning',\r\n description: `El producto ${item.pName} está agotado y no puede ser añadido al carrito.`\r\n })\r\n return item\r\n }\r\n\r\n // Stock exceeded\r\n if (manageStock && newQuantity > stock) {\r\n sendNotification({\r\n title: 'Stock insuficiente',\r\n backgroundColor: 'warning',\r\n description: `No puedes agregar más unidades de ${item.pName}, stock disponible: ${stock}`\r\n })\r\n return item\r\n }\r\n\r\n return {\r\n ...item,\r\n ProQuantity: newQuantity,\r\n ProPrice: isFree ? 0 : newQuantity * unitPrice\r\n }\r\n })\r\n\r\n return {\r\n ...state,\r\n counter: state.counter + 1,\r\n PRODUCT\r\n }\r\n}\r\n","import { Cookies } from '../../../cookies'\r\nimport { SalesState } from '../types'\n\r\nimport { initialStateSales } from './constants'\r\n\r\n/**\r\n * Initializes sales state from cookies or fallback state\r\n * @param initialValue\n */\r\nexport const initializer = (\r\n initialValue: SalesState = initialStateSales\r\n): SalesState => {\r\n try {\r\n const raw = Cookies.get(process.env.NEXT_LOCAL_SALES_STORE)\r\n\r\n if (!raw) return initialValue\r\n\r\n return JSON.parse(raw) as SalesState\r\n } catch {\r\n return initialValue\r\n }\r\n}\r\n","import { useLazyQuery } from '@apollo/client'\n\r\nimport { GET_ONE_SALE } from './queries'\r\n\r\nexport const useGetSale = () => {\r\n const [getOneSalesStore, { loading, data, called, error }] = useLazyQuery(GET_ONE_SALE)\r\n\r\n const handleGetSale = async (pCodeRef) => {\r\n return await getOneSalesStore({\r\n variables: { pCodeRef }\r\n })\r\n }\r\n return {\r\n data: data?.getOneSalesStore,\r\n loading,\r\n error,\r\n called,\r\n getOneSalesStore,\r\n handleGetSale\r\n }\r\n}\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_MIN_PEDIDO } from './queries'\r\n\r\nexport const useGetMinPrice = ({ idStore = '' } = {}) => {\r\n const { data, loading, error } = useQuery(GET_MIN_PEDIDO, {\r\n variables: {\r\n idStore\r\n }\r\n })\r\n\r\n return [data, { loading, error }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_MIN_PEDIDO = gql`\r\nquery getMinPrice($idStore: ID){\r\ngetMinPrice(idStore: $idStore)\r\n}\r\n`\r\n","import { useQuery } from '@apollo/client'\r\nimport { useMemo } from 'react'\n\r\nimport { GET_ALL_CATEGORIES_WITH_PRODUCT_CLIENTS } from './queries'\r\n\r\n/**\r\n * Custom hook to fetch categories with product data.\r\n *\r\n * @param {string} idStore - The ID of the store.\r\n * @returns {object} - The hook result containing filtered data, loading state, and fetch function.\r\n */\r\nexport const useCatWithProductClient = (idStore) => {\r\n const { data, loading, error, fetchMore } = useQuery(GET_ALL_CATEGORIES_WITH_PRODUCT_CLIENTS, {\r\n fetchPolicy: 'cache-and-network',\r\n variables: {\r\n max: 100,\r\n idStore,\r\n search: '',\r\n gender: [],\r\n desc: [],\r\n categories: []\r\n }\r\n })\r\n\r\n const fetchCategories = () => {\r\n fetchMore({\r\n variables: {\r\n max: 100,\r\n idStore,\r\n search: '',\r\n gender: [],\r\n desc: [],\r\n categories: []\r\n },\r\n updateQuery: (prev, { fetchMoreResult }) => {\r\n if (!fetchMoreResult) return prev\r\n return {\r\n ...prev,\r\n getCatProductsWithProductClient: fetchMoreResult.getCatProductsWithProductClient\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Utiliza useMemo para memorizar el resultado filtrado\r\n const filteredData = useMemo(() => {\r\n return data?.getCatProductsWithProductClient?.filter(\r\n (category) => {return category?.productFoodsAll?.length > 0}\r\n ) || []\r\n }, [data])\r\n\r\n return [filteredData, {\r\n loading,\r\n error,\r\n fetchCategories\r\n }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_CATEGORIES_WITH_PRODUCT_CLIENTS = gql`\r\nquery getCatProductsWithProductClient($search: String, $min: Int, $max: Int, $gender: [String], $desc: [String], $categories: [ID], $carProId: ID $idStore: ID ) {\r\n getCatProductsWithProductClient(search: $search, min: $min, max: $max, gender: $gender, desc: $desc, categories: $categories, carProId: $carProId idStore: $idStore) {\r\n carProId\r\n pState\r\n pState\r\n ProImage\r\n idStore\r\n pName\r\n ProDescription\r\n ProImage\r\n pState\r\n pDatCre\r\n pDatMod\r\n productFoodsAll {\r\n pId\r\n sizeId\r\n stock\r\n colorId\r\n carProId\r\n cId\r\n dId\r\n ValueDelivery\r\n ctId\r\n idStore\r\n caId\r\n fId\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProUniDisponibles\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ProImage\r\n ProStar\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n ProDelivery\r\n ProVoltaje\r\n pState\r\n sTateLogistic\r\n pDatCre\r\n pDatMod\r\n \r\n }\r\n \r\n }\r\n}\r\n`\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_PRODUCT_STORE_RECOMENDED } from './queries'\r\n\r\nexport const useGetFoodRecomended = ({\r\n name = ''\r\n}) => {\r\n const {\r\n data,\r\n called,\r\n fetchMore,\r\n loading,\r\n error\r\n } = useQuery(GET_ALL_PRODUCT_STORE_RECOMENDED, {\r\n fetchPolicy: 'cache-and-network',\r\n skip: !name,\r\n notifyOnNetworkStatusChange: true,\r\n nextFetchPolicy: 'cache-first',\r\n refetchWritePolicy: 'merge',\r\n variables:\r\n {\r\n max: 6,\r\n search: name\r\n }\r\n })\r\n\r\n return [data?.productFoodsAllRecommended, {\r\n called,\r\n fetchMore,\r\n loading,\r\n error\r\n }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_PRODUCT_STORE_RECOMENDED = gql`\r\nquery productFoodsAllRecommended($search: String, $min: Int, $max: Int, $gender: [String], $desc: [String], $categories: [ID], ) {\r\n productFoodsAllRecommended(search: $search, min: $min, max: $max, gender: $gender, desc: $desc, categories: $categories,) {\r\n pId\r\n sizeId #Talla\r\n colorId #Color\r\n cId #Country\r\n dId #Department\r\n ctId #Cuidad\r\n fId #Características\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProUniDisponibles\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ProStar\r\n sTateLogistic\r\n ProImage\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n pDatCre\r\n pDatMod\r\n ProDelivery\r\n ProVoltaje\r\n pState\r\n feat {\r\n fId\r\n thpId\r\n hpqrQuestion\r\n }\r\n area {\r\n aId\r\n aName\r\n }\r\n \r\n }\r\n}\r\n\r\n`\r\n","import { useMutation } from '@apollo/client'\r\nimport { useState } from 'react'\n\r\nimport { days } from './helpers/index'\r\nimport { CREATE_AVAILABLE_PRODUCTS_DAYS } from './queries'\r\n\r\nexport const useSaveAvailableProduct = () => {\r\n const [selectedDays, setSelectedDays] = useState([])\r\n\r\n const handleDaySelection = (day) => {\r\n if (selectedDays.includes(day)) {\r\n setSelectedDays(selectedDays.filter((selectedDay) => { return selectedDay !== day }))\r\n } else {\r\n setSelectedDays([...selectedDays, day])\r\n }\r\n }\r\n const handleCleanSelectedDays = () => {\r\n setSelectedDays([])\r\n }\r\n const [registerAvailableProduct, { loading }] = useMutation(CREATE_AVAILABLE_PRODUCTS_DAYS, {\r\n onError: () => { return console.log({ message: 'Lo sentimos ocurrió un error, vuelve a intentarlo' }) }\r\n })\r\n return {\r\n handleDaySelection,\r\n handleCleanSelectedDays,\r\n selectedDays,\r\n setSelectedDays,\r\n days,\r\n Loading: loading,\r\n registerAvailableProduct\r\n }\r\n}\r\n","export const days = [\r\n {\r\n day: 1,\r\n name: 'L'\r\n },\r\n {\r\n day: 2,\r\n name: 'M'\r\n },\r\n {\r\n day: 3,\r\n name: 'MI'\r\n },\r\n {\r\n day: 4,\r\n name: 'J'\r\n },\r\n {\r\n day: 5,\r\n name: 'V'\r\n },\r\n {\r\n day: 6,\r\n name: 'S'\r\n },\r\n {\r\n day: 0,\r\n name: 'D'\r\n }\r\n]\r\n\r\nexport const arraysAreEqual = (arr1, arr2) => {\r\n if (arr1.length !== arr2.length) return false\r\n for (let i = 0; i < arr1.length; i++) {\r\n if (arr1[i] !== arr2[i]) return false\r\n }\r\n return true\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const CREATE_AVAILABLE_PRODUCTS_DAYS = gql`\r\nmutation registerAvailableProduct($input: [IAvailableProduct]) {\r\n registerAvailableProduct(input: $input) {\r\n success\r\n message\r\n }\r\n}\r\n`\n","import { useEffect, useState } from 'react'\r\n\r\nexport const useSetState = initialState => {\r\n const [state, setState] = useState(initialState)\r\n const increase = () => { return setState(state + 1) }\r\n const decrease = () => { return setState(state - 1) }\r\n const reset = () => { return setState(0) }\r\n useEffect(() => {\r\n if (state === -1) return reset()\r\n return {}\r\n }, [state])\r\n // Cambio de estado\r\n const changeState = () => {\r\n setState(!state)\r\n }\r\n return {\r\n state,\r\n increase,\r\n decrease,\r\n reset,\r\n changeState,\r\n setState\r\n }\r\n}\r\n","export const useStoreCalendar = () => {\r\n return {\r\n true: true\r\n }\r\n}\r\n","export const jaccardSimilarity = (s1, s2) => {\r\n const set1 = new Set(s1)\r\n const set2 = new Set(s2)\r\n const intersection = new Set([...set1].filter(x => { return set2.has(x) }))\r\n const union = new Set([...set1, ...set2])\r\n return intersection.size / union.size\r\n}\r\n","import { jaccardSimilarity } from './helpers'\r\n\r\n/**\r\n * Get categories that contain products with names similar to the given product name.\r\n * Uses the Jaccard similarity coefficient for string comparison.\r\n * @param {Array} data - The array of categories with product information.\r\n * @param {string} productName - The name of the product to search for.\r\n * @param {number} similarityThreshold - The minimum similarity threshold for products (0.0 to 1.0).\r\n * @returns {Array} - An array of categories containing similar products.\r\n */\r\nexport const getCategoriesWithProduct = (\r\n data = [],\r\n productName = '',\r\n similarityThreshold = 0.0) => {\r\n // Validate input data\r\n if (!data || !Array.isArray(data)) {\r\n return data || []\r\n }\r\n\r\n if (typeof productName !== 'string' || productName.trim() === '') {\r\n return data\r\n }\r\n\r\n // Convert product name to lowercase for case-insensitive comparison\r\n const productNameLower = productName.toLowerCase()\r\n\r\n // Use a Set to store unique product names for better performance\r\n const uniqueProductNames = new Set()\r\n\r\n // Store unique product names in the Set\r\n data.forEach(category => {\r\n if (category?.productFoodsAll && Array.isArray(category.productFoodsAll)) {\r\n category.productFoodsAll.forEach(product => {\r\n const productLower = product.pName.toLowerCase()\r\n uniqueProductNames.add(productLower)\r\n })\r\n }\r\n })\r\n\r\n // Filter categories that contain products with names similar to the given product name\r\n const matchingCategories = data.filter(category => {\r\n if (category?.productFoodsAll && Array.isArray(category.productFoodsAll)) {\r\n const products = category.productFoodsAll.some(product => {\r\n const productLower = product?.pName?.toLowerCase()\r\n return jaccardSimilarity(productNameLower, productLower) >= similarityThreshold\r\n })\r\n return products\r\n }\r\n return false\r\n })\r\n\r\n // Find similar products in each matching category\r\n const findProduct = matchingCategories?.map(categories => {\r\n const similarProducts = categories.productFoodsAll.filter(product => {\r\n const productLower = product?.pName?.toLowerCase()\r\n return productLower.includes(productNameLower)\r\n })\r\n return similarProducts.length > 0 ? { ...categories, productFoodsAll: similarProducts } : null\r\n }).filter(Boolean)\r\n\r\n return findProduct\r\n}\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_INCOMING_ORDERS } from './queries' // Asegúrate de importar tu consulta GraphQL\r\n\r\nexport const useIncomingOrders = ({ statusOrder, idStore }) => {\r\n const { data, loading, error } = useQuery(GET_ALL_INCOMING_ORDERS, {\r\n variables: (statusOrder && idStore) ? { statusOrder, idStore } : {}\r\n })\r\n\r\n return [data?.getAllIncomingToDayOrders || [], { loading, error }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_ALL_INCOMING_ORDERS = gql`\r\n query getAllIncomingToDayOrders($statusOrder: Int, $idStore: ID) {\r\n getAllIncomingToDayOrders(statusOrder: $statusOrder, idStore: $idStore) {\r\n pdpId\r\n pCodeRef\r\n idStore\r\n pPDate\r\n channel\r\n pSState\r\n pDatCre\r\n pDatMod\r\n pPRecoger\r\n payId\r\n pdpId\r\n totalProductsPrice\r\n locationUser\r\n getAllPedidoStore {\r\n pdpId\r\n idStore\r\n pCodeRef\r\n ShoppingCard\r\n getAllShoppingCard {\r\n ShoppingCard\r\n cantProducts\r\n priceProduct\r\n refCodePid\r\n subProductsId\r\n comments\r\n pId\r\n salesExtProductFoodOptional {\r\n pId\r\n opExPid\r\n OptionalProName\r\n state\r\n code\r\n required\r\n numbersOptionalOnly\r\n pDatCre\r\n pDatMod\r\n saleExtProductFoodsSubOptionalAll {\r\n pId\r\n opExPid\r\n idStore\r\n opSubExPid\r\n OptionalSubProName\r\n exCodeOptionExtra\r\n exCode\r\n state\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n ExtProductFoodsAll {\r\n pId\r\n exPid\r\n exState\r\n extraName\r\n extraPrice\r\n newExtraPrice\r\n quantity\r\n state\r\n pDatCre\r\n pDatMod\r\n }\r\n productFood {\r\n pId\r\n carProId\r\n colorId\r\n idStore\r\n pName\r\n ProPrice\r\n ProDescuento\r\n ProDescription\r\n ValueDelivery\r\n ProImage\r\n ProStar\r\n pState\r\n pDatCre\r\n pDatMod\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`\r\n","import { useEffect, useState } from 'react'\r\n\r\nconst DATE_UNITS: [unit: Intl.RelativeTimeFormatUnit, secondsInUnit: number][] = [\r\n ['day', 86400],\r\n ['hour', 3600],\r\n ['minute', 60],\r\n ['second', 1]\r\n]\r\n\r\ntype DateDiff = { value: number; unit: Intl.RelativeTimeFormatUnit }\r\n\r\nconst getDateDiffs = (timestamp: number): DateDiff | undefined => {\r\n const now = Date.now()\r\n const elapsed = (timestamp - now) / 1000\r\n\r\n for (const [unit, secondsInUnit] of DATE_UNITS) {\r\n if (Math.abs(elapsed) > secondsInUnit || unit === 'second') {\r\n const value = Math.round(elapsed / secondsInUnit)\r\n return { value, unit }\r\n }\r\n }\r\n}\r\n\r\nexport const useTimeAgo = (timestamp: number) => {\r\n const [timeAgo, setTimeAgo] = useState<DateDiff | undefined>(() => getDateDiffs(timestamp))\r\n\r\n useEffect(() => {\r\n const interval = setInterval(() => {\r\n const newTimeAgo = getDateDiffs(timestamp)\r\n setTimeAgo(newTimeAgo)\r\n }, 5000)\r\n\r\n return () => { return clearInterval(interval) }\r\n }, [timestamp])\r\n\r\n const rtf = new Intl.RelativeTimeFormat('es', { style: 'short' })\r\n\r\n return rtf?.format(timeAgo?.value ?? 0, (timeAgo?.unit ?? 'second'))\r\n}\r\n","import debounce from 'lodash'\r\nimport { useState, useEffect } from 'react'\n\r\nimport { Cookies } from '../../cookies'\r\nimport { getCurrentDomain } from '../../utils'\r\nimport { trigger } from '../useEvent'\r\n\r\n// EXAMPLE\r\n// https://codesandbox.io/s/nextjs-cart-system-tfg1e?file=/pages/_app.js\r\n\r\n// Method to execute the event to add all items of the app.cart cookie\r\nconst updateCart = debounce.debounce((items = []) => {\r\n trigger({ eventType: 'app.cart', data: { loading: true, items } })\r\n}, 3000)\r\n\r\nconst EMPTY_CART = {\r\n items: [],\r\n total: 0\r\n}\r\n\r\nexport const useUpdateCart = () => {\r\n const domain = getCurrentDomain()\r\n const keyToSaveData = 'app.cart'\r\n const saveDataState = JSON.parse(Cookies.get(keyToSaveData) || '[]')\r\n const [cart, setCart] = useState(EMPTY_CART)\r\n\r\n useEffect(() => {\r\n // restore cart from cookie, this could also be tracked in a db\r\n const cart = Cookies.get(keyToSaveData)\r\n\r\n // if items in cart, set items and total to state\r\n if (typeof cart === 'string' && cart !== 'undefined') {\r\n const cartData = JSON.parse(cart)\r\n const total = cartData.reduce(\r\n (total, item) => { return total + item.price * item.quantity },\r\n 0\r\n )\r\n\r\n setCart({ items: cartData, total })\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n Cookies.set(keyToSaveData, JSON.stringify(cart.items), { domain, path: '/' })\r\n }, [cart, domain])\r\n\r\n const handleAdd = (item) => {\r\n // check for item already in cart\r\n // if not in cart, add item else if item is found increment quantity\r\n const itemExists = cart.items.find((i) => { return i.pId === item.pId })\r\n\r\n if (!itemExists) {\r\n setCart((prevCart) => {\n return {\r\n items: [...prevCart.items, { ...item, quantity: 1 }],\r\n total: prevCart.total + item.price\r\n }\n })\r\n\r\n return\r\n }\r\n\r\n setCart((prevCart) => {\n return {\r\n items: prevCart.items.map((i) => {\r\n if (i.pId === item.pId) {\r\n return { ...i, quantity: i.quantity + 1 }\r\n }\r\n\r\n return i\r\n }),\r\n total: prevCart.total + item.price\r\n }\n })\r\n updateCart(cart)\r\n }\r\n\r\n const deleteProductCart = (item) => {\r\n setCart((prevCart) => {\r\n const items = prevCart.items\r\n const index = items.findIndex((i) => { return i.pId === item.pId })\r\n\r\n items.splice(index, 1)\r\n\r\n const total = items.reduce((t, i) => { return t + i.quantity * i.price }, 0)\r\n\r\n return { items, total }\r\n })\r\n }\r\n\r\n const decreaseItemFromCart = (item) => {\r\n // check for item already in cart\r\n // if quantity is more then in cart, subtract item else remove item\r\n const itemInCart = cart.items.find((i) => { return i.pId === item.pId })\r\n\r\n if (!itemInCart) {\r\n return\r\n }\r\n\r\n if (itemInCart.quantity === 1) {\r\n deleteProductCart(item)\r\n\r\n return\r\n }\r\n\r\n setCart((prevCart) => {\n return {\r\n items: prevCart.items.map((i) => {\r\n if (i.pId === item.pId) {\r\n return { ...i, quantity: item.quantity - 1 }\r\n }\r\n\r\n return i\r\n }),\r\n total: prevCart.total - item.price\r\n }\n })\r\n }\r\n\r\n const clearCart = () => {\r\n setCart(EMPTY_CART)\r\n }\r\n\r\n return {\r\n saveDataState,\r\n clearCart,\r\n deleteProductCart,\r\n decreaseItemFromCart,\r\n handleAdd\r\n }\r\n}\r\n","import { useMutation, useQuery } from '@apollo/client'\n\r\nimport { GET_USER, GET_USER_PROFILE, SET_USER_PROFILE } from './queries'\r\n\r\nexport const useUser = (email) => {\r\n const { data, loading, error } = useQuery(GET_USER, email !== ''\r\n ? {\r\n variables: {\r\n email\r\n }\r\n }\r\n : {})\r\n return [data?.getUser, { loading, error }]\r\n}\r\n\r\nexport const useUserProfile = () => {\r\n const { data, loading, error } = useQuery(GET_USER_PROFILE)\r\n return [data, { loading, error }]\r\n}\r\n\r\nexport const useSetUserProfile = () => {\r\n const [setUserProfile, { loading, error }] = useMutation(SET_USER_PROFILE)\r\n return [setUserProfile, { loading, error }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const LOGIN = gql`\r\nmutation login($input: LoginInput){\r\n login(input: $input){\r\n token\r\n }\r\n}\r\n`\r\nexport const GET_USER_PROFILE = gql`\r\nquery getOneUserProfile($id: ID) {\r\n getOneUserProfile(id: $id){\r\n upId\r\n id\r\n upPhone\r\n upImage\r\n upDateBir\r\n upBloodG\r\n upAddress\r\n ctId\r\n dId\r\n upZipCode\r\n cId\r\n upLatitude\r\n upLongitude\r\n user {\r\n id\r\n name\r\n username\r\n lastName\r\n email\r\n avatar\r\n uToken\r\n uPhoNum\r\n ULocation\r\n upLat\r\n uState\r\n upLon\r\n upIdeDoc\r\n siteWeb\r\n description\r\n password\r\n createAt\r\n\r\n }\r\n }\r\n}\r\n`\r\n\r\nexport const GET_USER = gql`\r\nquery getUser($id: ID, $email: String){\r\ngetUser(id: $id email: $email){\r\nid\r\nname\r\nusername\r\nlastName\r\nemail\r\navatar\r\nuToken\r\nuPhoNum\r\nULocation\r\nupLat\r\nuState\r\nidRole\r\nupLon\r\nupIdeDoc\r\nsiteWeb\r\ndescription\r\nassociateStore\r\n role {\r\n name\r\n permissions\r\n description\r\n createdAt\r\n updatedAt\r\n \r\n }\r\n}\r\n}\r\n`\r\nexport const GET_ALL_USER = gql`\r\nquery getAllUser($search: String){\r\n getAllUser(search: $search){\r\n id\r\n name\r\n username\r\n lastName\r\n email\r\n email\r\n siteWeb\r\n description\r\n uPhoNum\r\n upLat\r\n upLon\r\n createAt\r\n avatar\r\n latestMessage {\r\n uuid\r\n content\r\n from\r\n to\r\n }\r\n }\r\n}\r\n`\r\nexport const UPDATE_AVATAR = gql`\r\nmutation updateAvatar($file: Upload){\r\n UpdateAvatar(file: $file){\r\n status\r\n urlAvatar\r\n }\r\n}\r\n`\r\n\r\nexport const SET_USER_PROFILE = gql`\r\n mutation setUserProfile($data: IUserProfile!) {\r\n setUserProfile(input: $data){\r\n upId\r\n id\r\n upPhone\r\n upDateBir\r\n upImage\r\n upBloodG\r\n cId\r\n ctId\r\n dId\r\n upAddress\r\n upZipCode\r\n }\r\n }\r\n`\r\n","import Cookies from 'js-cookie'\r\nimport { useState, useEffect } from 'react'\r\n\r\nexport const useGetStoreCookie = () => {\r\n const [vpStoreCookie, setVpStoreCookie] = useState(null)\r\n\r\n useEffect(() => {\r\n const getCookieValue = () => {\r\n const cookieValue = Cookies.get(process.env.NEXT_PUBLIC_SESSION_NAME)\r\n console.log('Cookie Value:', cookieValue)\r\n\r\n if (cookieValue) {\r\n setVpStoreCookie(cookieValue)\r\n }\r\n }\r\n\r\n getCookieValue()\r\n }, []) // Empty dependency array, so this effect runs once\r\n\r\n return vpStoreCookie\r\n}\r\n","import crypto from 'crypto'\r\n\r\n/**\r\n *\r\n * @param password\r\n * @param salt\r\n */\r\nfunction generateEncryptionKey(password: string, salt: string): string {\r\n return crypto\r\n .pbkdf2Sync(password, salt, 100000, 32, 'sha256')\r\n .toString('hex')\r\n .slice(0, 32)\r\n}\r\n\r\nconst ENCRYPTION_KEY = generateEncryptionKey(\r\n 'tu-contraseña',\r\n 'alguna-sal-segura'\r\n)\r\nconst IV_LENGTH = 12 // Para AES-GCM, el IV recomendado es 12 bytes\r\n\r\nexport const encryptSession = (text: string): string | null => {\r\n try {\r\n const iv = crypto.randomBytes(IV_LENGTH)\r\n const cipher = crypto.createCipheriv(\r\n 'aes-256-gcm',\r\n Buffer.from(ENCRYPTION_KEY),\r\n iv\r\n )\r\n let encrypted = cipher.update(text, 'utf8')\r\n encrypted = Buffer.concat([encrypted, cipher.final()])\r\n const authTag = cipher.getAuthTag()\r\n // Concatenar IV, AuthTag y el texto cifrado, separados por ':'\r\n return [\r\n iv.toString('hex'),\r\n authTag.toString('hex'),\r\n encrypted.toString('hex')\r\n ].join(':')\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n console.error('Error de cifrado:', error.message)\r\n }\r\n return null\r\n }\r\n}\r\n\r\nexport const decryptSession = (text: string): string | null => {\r\n try {\r\n if (!text) return null\r\n const textParts = text.split(':')\r\n if (textParts.length !== 3) return null\r\n const iv = Buffer.from(textParts[0], 'hex')\r\n const authTag = Buffer.from(textParts[1], 'hex')\r\n const encryptedText = Buffer.from(textParts[2], 'hex')\r\n const decipher = crypto.createDecipheriv(\r\n 'aes-256-gcm',\r\n Buffer.from(ENCRYPTION_KEY),\r\n iv\r\n )\r\n decipher.setAuthTag(authTag)\r\n let decrypted = decipher.update(encryptedText)\r\n decrypted = Buffer.concat([decrypted, decipher.final()])\r\n return decrypted.toString('utf8')\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n console.error('Error de descifrado:', error.message)\r\n }\r\n return null\r\n }\r\n}\r\n","/**\n *\n * @param body\n */\nexport async function handleLogin (body) {\r\n const response = await fetch(`${process.env.URL_BASE}/api/auth/login`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n credentials: 'include'\r\n })\r\n\r\n return response.json()\r\n}\r\n","import { useQuery } from '@apollo/client'\n\r\nimport { GET_PRODUCTS_IN_STOCK } from './queries'\r\n\r\nexport const useGetProductsInStock = (storeId) => {\r\n const { data, loading, error } = useQuery(GET_PRODUCTS_IN_STOCK, {\r\n variables: { storeId },\r\n skip: !storeId\r\n })\r\n\r\n return {\r\n data: data?.getProductsInStock || [],\r\n loading,\r\n error\r\n }\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_PRODUCTS_IN_STOCK = gql`\r\nquery getProductsInStock($limit: Int, $offset: Int) {\r\n getProductsInStock(limit: $limit, offset: $offset) {\r\n pId\r\n sizeId #Talla\r\n colorId #Color\r\n carProId #Categoria a la cual pertenece el producto\r\n caId\r\n cId #Country\r\n dId #Department\r\n ctId #Cuidad\r\n fId #Características\r\n pName\r\n getOneTags {\r\n tgId\r\n idUser\r\n idStore\r\n pId\r\n nameTag\r\n }\r\n ProPrice\r\n ProDescuento\r\n free\r\n ProUniDisponibles\r\n ProDescription\r\n ProProtegido\r\n ProAssurance\r\n ValueDelivery\r\n ProStar\r\n sTateLogistic\r\n ProImage\r\n ProWidth\r\n ProHeight\r\n ProLength\r\n ProWeight\r\n ProQuantity\r\n ProOutstanding\r\n pDatCre\r\n pDatMod\r\n ProDelivery\r\n ProVoltaje\r\n pState\r\n feat {\r\n fId\r\n thpId\r\n hpqrQuestion\r\n }\r\n area {\r\n aId\r\n aName\r\n }\r\n \r\n }\r\n}\r\n\r\n`\r\n","import { gql, useMutation } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL Mutation for updating stock and manageStock\r\n */\r\nconst UPDATE_MANAGE_STOCK = gql`\r\n mutation UpdateManageStock($input: InputManageStock) {\r\n updateManageStock(input: $input) {\r\n success\r\n message\r\n data {\r\n pId\r\n manageStock\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to update stock and manageStock\r\n * @returns {object} { updateManageStock, data, loading, error }\r\n */\r\nexport const useUpdateManageStock = () => {\r\n const [updateManageStockMutation, { data, loading, error }] = useMutation(UPDATE_MANAGE_STOCK)\r\n\r\n /**\r\n * Function to call the mutation with given input\r\n * @param {Object} input - { pId, stock, manageStock }\r\n * @returns {Promise<Object>} Mutation response\r\n */\r\n const updateManageStock = async (input) => {\r\n try {\r\n const { data } = await updateManageStockMutation({ variables: { input } })\r\n return data?.updateManageStock\r\n } catch (err) {\r\n return { success: false, message: err.message }\r\n }\r\n }\r\n\r\n return [updateManageStock, { data, loading, error }]\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\nimport { useState, useEffect } from 'react'\n\r\nimport { fillMissingDates } from './helpers'\r\n\r\nconst GET_STOCK_MOVEMENTS = gql`\r\n query {\r\n getStockMovementsByDay {\r\n date\r\n total_in,\r\n total_adjustment\r\n total_out\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch stock movements data for visualization.\r\n * @returns {Object} { data, loading, error }\r\n */\r\nexport const useStockMovements = () => {\r\n const { data, loading, error } = useQuery(GET_STOCK_MOVEMENTS)\r\n const [chartData, setChartData] = useState([])\r\n\r\n useEffect(() => {\r\n if (data && data.getStockMovementsByDay) {\r\n // Transform data to be compatible with Recharts\r\n const formattedData = data.getStockMovementsByDay.map(entry => {return {\r\n date: entry.date,\r\n TotalIn: entry.total_in ?? 0,\r\n TotalOut: entry.total_out ?? 0,\r\n TotalAdjustment: entry.total_adjustment ?? 0\r\n }})\r\n setChartData(formattedData)\r\n }\r\n }, [data])\r\n\r\n return [fillMissingDates(chartData), { loading, error }]\r\n}\r\n","export const fillMissingDates = (data, days = 7) => {\r\n const today = new Date()\r\n const filledData = []\r\n\r\n for (let i = days - 1; i >= 0; i--) {\r\n const date = new Date()\r\n date.setDate(today.getDate() - i)\r\n\r\n const formattedDate = date.toISOString().split('T')[0] // \"YYYY-MM-DD\"\r\n const existingData = data.find(item => {return item.date === formattedDate})\r\n\r\n filledData.push(existingData || { date: formattedDate, TotalIn: 0, TotalOut: 0, TotalAdjustment: 0 })\r\n }\r\n\r\n return filledData\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL query to fetch top-selling products movements\r\n */\r\nconst GET_TOP_PRODUCTS_MOVEMENTS = gql`\r\n query {\r\n getTopProductsMovements {\r\n productName\r\n idProduct\r\n totalMovements\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch and return the top-selling products movements\r\n * @returns {Object} - { data, loading, error }\r\n */\r\nexport const useTopProductsMovements = () => {\r\n const { data, loading, error } = useQuery(GET_TOP_PRODUCTS_MOVEMENTS)\r\n\r\n return [data?.getTopProductsMovements, {\r\n loading,\r\n error\r\n }]\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL query to fetch total products sold.\r\n */\r\nconst GET_TOTAL_PRODUCTS_SOLD = gql`\r\n query getTotalSalesSold {\r\n getTotalSalesSold\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch total products sold.\r\n * @returns {Object} - { totalProductsSold, loading, error }\r\n */\r\nexport const useTotalProductsSold = () => {\r\n const { data, loading, error } = useQuery(GET_TOTAL_PRODUCTS_SOLD)\r\n\r\n return [data?.getTotalSalesSold || 0, {\r\n loading,\r\n error\r\n }]\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL query to fetch total products in stock.\r\n */\r\nconst GET_TOTAL_PRODUCTS_IN_STOCK = gql`\r\n query getTotalProductsInStock {\r\n getTotalProductsInStock\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch total products in stock.\r\n * @returns {Object} - { totalProductsInStock, loading, error }\r\n */\r\nexport const useTotalProductsInStock = () => {\r\n const { data, loading, error } = useQuery(GET_TOTAL_PRODUCTS_IN_STOCK)\r\n\r\n return [data?.getTotalProductsInStock ?? 0, {\r\n loading,\r\n error\r\n }]\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\n\r\nconst GET_TOTAL_SALES = gql`\r\n query totalSales {\r\n totalSales {\r\n success\r\n message\r\n totalSales\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch total sales from GraphQL API.\r\n * @returns {Object} An object containing total sales, loading state, error, and refetch function.\r\n */\r\nexport const useTotalAllSales = () => {\r\n const { data, loading, error, refetch } = useQuery(GET_TOTAL_SALES)\r\n\r\n return [data?.totalSales?.totalSales, {\r\n loading,\r\n error,\r\n refetch\r\n }]\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\n\r\nconst GET_TOTAL_PRODUCTS_SOLD = gql`\r\n query {\r\n getTotalProductsSold\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch the total number of products sold.\r\n * @returns {{ totalSold: number, loading: boolean, error: any }}\r\n */\r\nexport const useTotalProductsSolded = () => {\r\n const { data, loading, error } = useQuery(GET_TOTAL_PRODUCTS_SOLD)\r\n\r\n return [data?.getTotalProductsSold, {\r\n loading,\r\n error\r\n }]\r\n}\r\n","import { gql, useQuery } from '@apollo/client'\n\r\nimport { fillLast7Weeks } from './helpers' // Asegúrate de importar el helper\r\n\r\nconst GET_WEEKLY_STOCK_MOVEMENT = gql`\r\n query GetStockMovementPercentageChange {\r\n getStockMovementWeeklyComparison {\r\n weekStart\r\n totalOut\r\n prevTotalOut\r\n percentageChange\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch and format weekly stock movement data.\r\n * @returns {Object} - { data, loading, error, formattedData }\r\n */\r\nexport const useWeeklyStockMovement = () => {\r\n const { data, loading, error } = useQuery(GET_WEEKLY_STOCK_MOVEMENT)\r\n\r\n // Transform data and fill missing weeks\r\n const rawData = data?.getStockMovementWeeklyComparison || []\r\n const formattedData = fillLast7Weeks(\r\n rawData.map(item => {return {\r\n ...item,\r\n percentageChange: formatPercentageChange(item.percentageChange)\r\n }})\r\n )\r\n\r\n return [formattedData, { loading, error }]\r\n}\r\n\r\n/**\r\n * Ensures percentageChange is a valid string percentage, clamping between -100% and 100%.\r\n *\r\n * @param {string | null} percentageChange - Raw percentage change value.\r\n * @returns {string} - Formatted and clamped percentage change.\r\n */\r\nconst formatPercentageChange = (percentageChange) => {\r\n if (percentageChange === null) return 'N/A'\r\n\r\n // Convertir a número\r\n let parsedValue = parseFloat(percentageChange)\r\n\r\n // Clampear entre -100% y 100%\r\n if (isNaN(parsedValue)) return 'N/A'\r\n parsedValue = Math.max(-100, Math.min(100, parsedValue))\r\n\r\n return `${parsedValue.toFixed(1)}`\r\n}\r\n","/**\r\n * Fills missing weeks for the last 7 weeks, ensuring continuous data.\r\n * If a week is missing, it fills it with totalOut: 0 and percentageChange: \"N/A\".\r\n *\r\n * @param {Array} data - Array of weekly stock movement objects.\r\n * @returns {Array} - Filled data ensuring the last 7 weeks are covered.\r\n */\r\nexport const fillLast7Weeks = (data) => {\r\n const today = new Date()\r\n const last7Weeks = []\r\n\r\n // Generar las últimas 7 semanas (cada lunes)\r\n for (let i = 6; i >= 0; i--) {\r\n const weekDate = new Date(today)\r\n weekDate.setDate(today.getDate() - today.getDay() - (i * 7) + 1) // Ajustar para que sea lunes\r\n const weekStart = weekDate.toISOString().split('T')[0] // Formato YYYY-MM-DD\r\n last7Weeks.push(weekStart)\r\n }\r\n\r\n // Mapear los datos existentes para acceso rápido\r\n const dataMap = new Map(data.map(item => {return [item.weekStart, item]}))\r\n\r\n // Construir la nueva lista asegurando que todas las semanas estén presentes\r\n return last7Weeks.map(weekStart => {return (\r\n dataMap.get(weekStart) || {\r\n weekStart,\r\n totalOut: 0,\r\n prevTotalOut: null,\r\n percentageChange: 'N/A'\r\n }\r\n )})\r\n}\r\n","import { gql, useQuery } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL query to get today's total sales amount.\r\n */\r\nconst GET_SALES_AMOUNT_TODAY = gql`\r\n query GetSalesAmountToday {\r\n getSalesAmountToday {\r\n success\r\n message\r\n total\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch today's sales amount.\r\n * @returns {{\r\n * data: { success: boolean, message: string, total: number } | undefined,\r\n * loading: boolean,\r\n * error: any,\r\n * refetch: () => void\r\n * }}\r\n */\r\nexport const useGetSalesAmountToday = () => {\r\n const { data, loading, error, refetch } = useQuery(GET_SALES_AMOUNT_TODAY, {\r\n fetchPolicy: 'network-only'\r\n })\r\n\r\n return [data?.getSalesAmountToday, { loading, error, refetch }]\r\n}\r\n","import { gql, useMutation } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL mutation to upsert (create or update) the daily goal.\r\n */\r\nconst UPSERT_GOAL = gql`\r\n mutation UpsertGoal($input: CreateGoalInput!) {\r\n upsertGoal(input: $input) {\r\n success\r\n message\r\n data {\r\n idStore\r\n dailyGoal\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to handle the upsert of the daily goal.\r\n * @param {Object} input - The goal data (e.g. dailyGoal).\r\n * @param input.sendNotification\n * @returns {{\r\n * upsertGoal: (input: { dailyGoal: number }) => void,\r\n * data: { success: boolean, message: string, dailyGoal: number } | undefined,\r\n * loading: boolean,\r\n * error: any\r\n * }}\r\n */\r\nexport const useUpsertGoal = ({\r\n sendNotification = () => {}\r\n} = {}) => {\r\n const [upsertGoalMutation, { data, loading, error }] = useMutation(UPSERT_GOAL, {\r\n onCompleted (data) {\r\n const { upsertGoal } = data || {}\r\n sendNotification({\r\n title: upsertGoal.success ? 'Exito' : 'Error',\r\n description: upsertGoal?.message || 'Meta actualizada correctamente',\r\n backgroundColor: upsertGoal.success ? 'success' : 'warning'\r\n })\r\n },\r\n update (cache, { data: { upsertGoal } }) {\r\n if (!upsertGoal?.success) return\r\n\r\n cache.modify({\r\n fields: {\r\n getStore (dataOld = []) {\r\n return {\r\n ...dataOld,\r\n dailyGoal: upsertGoal.data.dailyGoal\r\n }\r\n }\r\n }\r\n })\r\n }\r\n })\r\n const upsertGoal = (input) => {\r\n upsertGoalMutation({\r\n variables: { input }\r\n })\r\n }\r\n\r\n return [upsertGoal, {\r\n data: data?.upsertGoal,\r\n loading,\r\n error\r\n }]\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL query to fetch dashboard components\r\n */\r\nconst GET_DASHBOARD_COMPONENTS = gql`\r\n query dashboardComponents {\r\n dashboardComponents {\r\n id\r\n idStore\r\n idUser\r\n coordinates\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch dashboard components\r\n * @returns {{\r\n * data: Array,\r\n * loading: boolean,\r\n * error: any,\r\n * refetch: () => void\r\n * }}\r\n */\r\n\r\nexport const useDashboardComponents = ({ callback = () => {} }) => {\r\n const {\r\n data,\r\n loading,\r\n error,\r\n refetch\r\n } = useQuery(GET_DASHBOARD_COMPONENTS, {\r\n fetchPolicy: 'cache-and-network',\r\n onCompleted: (data) => {\r\n if (Array.isArray(data?.dashboardComponents)) {\r\n try {\r\n callback(data.dashboardComponents ?? [])\r\n } catch (err) {\r\n console.error('Error executing callback:', err)\r\n }\r\n }\r\n },\r\n onError: (err) => {\r\n console.error('Error fetching dashboard components:', err)\r\n }\r\n })\r\n\r\n return { data: data?.dashboardComponents ?? [], loading, error, refetch }\r\n}\r\n","import { gql, useMutation } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL mutation for updating a dashboard component.\r\n */\r\nconst UPDATE_DASHBOARD_COMPONENT = gql`\r\n mutation UpdateDashboardComponent($input: [DashboardComponentUpdateInput]) {\r\n updateDashboardComponent(input: $input) {\r\n success\r\n message\r\n data {\r\n id\r\n idStore\r\n idUser\r\n coordinates\r\n createAt\r\n updateAt\r\n title\r\n }\r\n errors {\r\n path\r\n message\r\n type\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Types for the mutation response and input.\r\n */\r\ninterface DashboardComponent {\r\n id: string;\r\n idStore: string;\r\n idUser: string;\r\n coordinates: any;\r\n createAt: string;\r\n updateAt: string;\r\n title: string;\r\n}\r\n\r\ninterface ErrorResponse {\r\n message: string;\r\n field?: string;\r\n}\r\n\r\ninterface UpdateDashboardComponentResponse {\r\n updateDashboardComponent: {\r\n success: boolean;\r\n message?: string;\r\n data?: DashboardComponent;\r\n errors?: ErrorResponse[];\r\n };\r\n}\r\n\r\ninterface UpdateDashboardComponentInput {\r\n id: string;\r\n coordinates?: any;\r\n title?: string;\r\n}\r\n\r\n/**\r\n * Custom hook to update a dashboard component.\r\n */\r\nexport const useUpdateDashboardComponent = () => {\r\n const [mutate, { loading, error, data }] = useMutation<\r\n UpdateDashboardComponentResponse,\r\n { input: UpdateDashboardComponentInput[] }\r\n >(UPDATE_DASHBOARD_COMPONENT)\r\n\r\n /**\r\n * Calls the mutation with the provided input.\r\n * @param input DashboardComponentUpdateInput\r\n */\r\n const updateComponent = async (input: UpdateDashboardComponentInput[]) => {\r\n try {\r\n const response = await mutate({ variables: { input } })\r\n return response.data?.updateDashboardComponent\r\n } catch (err) {\r\n console.error('UpdateDashboardComponent Error:', err)\r\n throw err\r\n }\r\n }\r\n\r\n return {\r\n updateComponent,\r\n loading,\r\n error,\r\n data: data?.updateDashboardComponent\r\n }\r\n}\r\n","import { gql, useMutation } from '@apollo/client'\r\nimport { useCallback } from 'react'\r\n\r\nconst UPDATE_MODULE_ORDER = gql`\r\n mutation UpdateModuleOrder($input: [UpdateModuleOrderInput]!) {\r\n updateModuleOrder(input: $input) {\r\n success\r\n message\r\n modules {\r\n mId\r\n mPriority\r\n }\r\n errors {\r\n path\r\n message\r\n }\r\n }\r\n }\r\n`\r\n\r\nexport const useUpdateModuleOrder = () => {\r\n const [updateModuleOrderMutation] = useMutation(UPDATE_MODULE_ORDER)\r\n\r\n const updateModulesOrder = useCallback(async (newOrder) => {\r\n // Enviar la actualización a la API (GraphQL)\r\n try {\r\n await updateModuleOrderMutation({\r\n variables: { input: newOrder.map(({ mId, mPriority }) => {return { mId, mPriority }}) }\r\n })\r\n } catch (error) {\r\n console.error('Error updating module order:', error)\r\n throw new Error('Failed to update module order')\r\n }\r\n }, [updateModuleOrderMutation])\r\n\r\n return [updateModulesOrder]\r\n}\r\n","import { useLazyQuery } from '@apollo/client'\r\nimport { gql } from '@apollo/client'\r\nimport { useState } from 'react'\n\r\nimport { downloadFileFromResponse } from '../helpers/downloadFileFromResponse'\r\n\r\n\r\n/**\r\n * GraphQL query to get the report for a specific day.\r\n */\r\nconst GET_REPORT_DAY_NUMBER = gql`\r\n query getReportDayNumber($day: Int!) {\r\n getReportDayNumber(day: $day) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n }\r\n data {\r\n id\r\n name\r\n description\r\n url\r\n createdAt\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to trigger the report download when the GraphQL query resolves.\r\n *\r\n * @param root0\n * @param root0.sendNotification\n * @returns {{\r\n * downloadReport: (day: number) => void,\r\n * loading: boolean,\r\n * error: Error | undefined\r\n * }} Object containing the trigger function, loading state and error.\r\n */\r\nexport const useDownloadReportByDay = ({\r\n sendNotification = (\r\n { description = '', title = '', backgroundColor = 'info' } = {}\r\n ) => {\r\n return {\r\n description,\r\n title,\r\n backgroundColor\r\n }\r\n }\r\n} = {}) => {\r\n const [finished, setFinished] = useState(false)\r\n const [fetchReport, { loading, error }] = useLazyQuery(GET_REPORT_DAY_NUMBER, {\r\n fetchPolicy: 'network-only',\r\n onCompleted: async ({ getReportDayNumber }) => {\r\n setFinished(false)\r\n try {\r\n const {\r\n success,\r\n data,\r\n message\r\n } = getReportDayNumber || {}\r\n if (!success || !data) {\r\n setFinished(true)\r\n return sendNotification({\r\n description: message,\r\n title: 'Error al descargar reporte',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n const { url = '', name = '' } = data\r\n const response = await fetch(`/api/files/${encodeURIComponent(url)}`)\r\n await downloadFileFromResponse(response, name)\r\n setFinished(true)\r\n return sendNotification({\r\n description: message ?? 'Reporte descargado exitosamente',\r\n title: 'Reporte descargado',\r\n backgroundColor: 'success'\r\n })\r\n } catch (e) {\r\n setFinished(false)\r\n }\r\n },\r\n onError: () => {\r\n setFinished(true)\r\n }\r\n })\r\n\r\n /**\r\n * Triggers the report download process.\r\n * @param {number} day - The report day number to fetch.\r\n */\r\n const downloadReport = (day: number) => {\r\n setFinished(false)\r\n if (!day || typeof day !== 'number') {\r\n console.warn('Invalid day for report download')\r\n return\r\n }\r\n fetchReport({ variables: { day } })\r\n }\r\n\r\n return [downloadReport, { loading, error, finished }] as const\r\n}\r\n","export const downloadFileFromResponse = async (response, fileName) => {\r\n try {\r\n if (!response.ok) {\r\n throw new Error(`Failed to download file: ${response.statusText}`)\r\n }\r\n\r\n const blob = await response.blob()\r\n const url = window.URL.createObjectURL(blob)\r\n const link = document.createElement('a')\r\n link.href = url\r\n link.setAttribute('download', fileName)\r\n document.body.appendChild(link)\r\n link.click()\r\n document.body.removeChild(link)\r\n window.URL.revokeObjectURL(url)\r\n } catch (error) {\r\n console.error('Error downloading file:', error)\r\n throw error\r\n }\r\n\r\n}","import { useLazyQuery } from '@apollo/client'\r\nimport { gql } from '@apollo/client'\nimport { useState } from 'react'\n\r\nimport { downloadFileFromResponse } from '../helpers/downloadFileFromResponse'\r\n\r\n/**\r\n * GraphQL query to get report by date range\r\n */\r\nconst GET_REPORT_BY_DATE_RANGE = gql`\r\n query getReportByDateRange($startDate: DateTime!, $endDate: DateTime!) {\r\n getReportBydateRange(startDate: $startDate, endDate: $endDate) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n type\r\n }\r\n data {\r\n id\r\n name\r\n description\r\n url\r\n createdAt\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to fetch report by a date range\r\n * @param {Object} options\r\n * @param {Function} options.sendNotification - Function to notify user\r\n * @returns {[Function, { loading: boolean, error: any, data: any }]}\r\n */\r\nexport const useGetReportByDateRange = ({\r\n sendNotification = ({ description = '', title = '', backgroundColor = 'info' } = {}) => {\r\n return { description, title, backgroundColor }\r\n }\r\n} = {}) => {\r\n const [loading, setLoading] = useState(false)\r\n const [finished, setFinished] = useState(false)\r\n\r\n const [getReportQuery, { data, error }] = useLazyQuery(GET_REPORT_BY_DATE_RANGE, {\r\n onCompleted: () => {\r\n setFinished(true)\r\n }\r\n })\r\n\r\n /**\r\n * Triggers the report generation and handles download\r\n * @param {string} startDate - Start date in YYYY-MM-DD format\r\n * @param {string} endDate - End date in YYYY-MM-DD format\r\n * @returns {Promise<any>}\r\n */\r\n const getReport = async (startDate, endDate) => {\r\n try {\r\n setLoading(true)\r\n const response = await getReportQuery({\r\n variables: { startDate, endDate },\r\n fetchPolicy: 'network-only'\r\n })\r\n\r\n const reportResult = response?.data?.getReportBydateRange ?? {\r\n success: false,\r\n message: 'No report data found',\r\n data: null\r\n }\r\n\r\n if (!reportResult) {\r\n setLoading(false)\r\n return {\r\n success: false,\r\n message: 'No report data found',\r\n data: null\r\n }\r\n }\r\n\r\n const {\r\n success,\r\n message,\r\n data\r\n } = reportResult\r\n\r\n sendNotification({\r\n description: message,\r\n title: success ? 'Success' : 'Error',\r\n backgroundColor: success ? 'success' : 'error'\r\n })\r\n\r\n if (success && data?.url && data?.name) {\r\n setLoading(true)\r\n const res = await fetch(`/api/files/${encodeURIComponent(data.url)}`)\r\n await downloadFileFromResponse(res, data.name)\r\n setLoading(false)\r\n }\r\n return reportResult\r\n } catch (err) {\r\n setLoading(false)\r\n sendNotification({\r\n description: err.message || 'Unexpected error',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n return { success: false, message: err.message, data: null }\r\n }\r\n }\r\n\r\n return [getReport, {\r\n loading,\r\n error,\r\n finished,\r\n data: data?.getReportBydateRange\r\n }]\r\n}\r\n","import { useEffect, useState } from 'react'\r\n\r\n/**\r\n * Custom hook to fetch a free port from the API route `/api/port`.\r\n *\r\n * @returns {Object} Object containing the fetched port and loading/error states\r\n */\r\nexport const usePortFetcher = () => {\r\n const [port, setPort] = useState<string | null>(null)\r\n const [loading, setLoading] = useState(true)\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n useEffect(() => {\r\n const fetchPort = async () => {\r\n try {\r\n const res = await fetch('/api/port')\r\n if (!res.ok) throw new Error('Failed to fetch port')\r\n\r\n const data = await res.json()\r\n setPort(data.port)\r\n } catch (err: any) {\r\n console.error('Error fetching port:', err)\r\n setError(err.message || 'Unknown error')\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n fetchPort()\r\n }, [])\r\n\r\n return { port, loading, error }\r\n}\r\n","import { useRef, useState } from 'react'\n\r\nimport { ORIENTATION_TO_ANGLE } from './helper'\r\nimport { getCroppedImg, getRotatedImage } from './helper/canvasUtils'\r\nimport { getOrientation } from './helper/getOrientation'\r\n\r\n/**\n *\n * @param file\n */\nfunction readFile(file: File): Promise<string> {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader()\r\n reader.addEventListener('load', () => {return resolve(reader.result as string)}, false)\r\n reader.readAsDataURL(file)\r\n })\r\n}\r\n\r\nexport type SendNotificationFn = (params: {\r\n description: string\r\n title: string\r\n backgroundColor: string\r\n}) => void\r\n\r\ninterface UseImageUploaderOptions {\r\n maxSizeMB?: number\r\n minHeight?: number\r\n minWidth?: number\r\n validTypes?: string[]\r\n sendNotification: SendNotificationFn\r\n}\r\n\r\ninterface UseImageUploaderResult {\r\n crop: { x: number, y: number }\r\n croppedImage: string | null\r\n error: string\r\n image: File\r\n imageSrc: string | null\r\n inputRef: React.RefObject<HTMLInputElement>\r\n loading: boolean\r\n open: boolean\r\n preview: string | null\r\n formattedList: string\r\n rotation: number\r\n zoom: number\r\n validTypes: string[]\r\n handleClose: () => void\r\n handleRemoveImage: () => void\r\n onCropComplete: (croppedArea: any, croppedPixels: any) => void\r\n onFileChange: (e: React.ChangeEvent<HTMLInputElement>) => Promise<void>\r\n setCrop: React.Dispatch<React.SetStateAction<{ x: number, y: number }>>\r\n setRotation: React.Dispatch<React.SetStateAction<number>>\r\n setZoom: React.Dispatch<React.SetStateAction<number>>\r\n handleDrop: (event: React.DragEvent<HTMLDivElement>) => Promise<void>\r\n showCroppedImage: () => Promise<void>\r\n}\r\n\r\n/**\r\n * Hook for managing image selection, preview, validation and cropping\r\n * @param {UseImageUploaderOptions} options\r\n * @returns {UseImageUploaderResult}\r\n */\r\nexport const useImageUploaderProduct = (\r\n options?: UseImageUploaderOptions\r\n): UseImageUploaderResult => {\r\n const {\r\n validTypes = ['image/jpeg', 'image/jpg', 'image/png'],\r\n maxSizeMB = 20,\r\n minWidth = 300,\r\n minHeight = 275,\r\n sendNotification\r\n } = options ?? {\r\n\r\n }\r\n const readableFormats = validTypes\r\n .map((type) => {return type.split('/')[1].toUpperCase()})\r\n\r\n const formatter = new Intl.ListFormat('es', {\r\n style: 'long',\r\n type: 'conjunction'\r\n })\r\n\r\n const formattedList = formatter.format(readableFormats)\r\n\r\n const [loading, setLoading] = useState(false)\r\n const inputRef = useRef<HTMLInputElement>(null)\r\n const [open, setOpen] = useState(false)\r\n const [preview, setPreview] = useState<string | null>(null)\r\n const [imageSrc, setImageSrc] = useState<string | null>(null)\r\n const [croppedImage, setCroppedImage] = useState<string | null>(null)\r\n const [crop, setCrop] = useState({ x: 0, y: 0 })\r\n const [zoom, setZoom] = useState(1)\r\n const [rotation, setRotation] = useState(0)\r\n const [croppedAreaPixels, setCroppedAreaPixels] = useState(null)\r\n const [error, setError] = useState('')\r\n const [image, setImage] = useState<File | null>(null)\r\n\r\n\r\n const onCropComplete = (_: any, croppedPixels: any) => {\r\n setCroppedAreaPixels(croppedPixels)\r\n }\r\n\r\n const showCroppedImage = async () => {\r\n if (!imageSrc || !croppedAreaPixels) return\r\n try {\r\n setLoading(true)\r\n const base64Image = await getCroppedImg(imageSrc, croppedAreaPixels, rotation) as string\r\n\r\n setCroppedImage(base64Image)\r\n setPreview(base64Image)\r\n\r\n // ✅ Convert base64 to blob and file\r\n const blob = await (await fetch(base64Image)).blob()\r\n const file = new File([blob], image?.name ?? 'cropped.jpeg', { type: blob.type })\r\n setImage(file)\r\n setLoading(false)\r\n } catch (e) {\r\n setLoading(false)\r\n return sendNotification({\r\n description: e ?? 'Ocurrió un error',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Removes the selected image and resets relevant states\r\n */\r\n const handleRemoveImage = () => {\r\n setImage(null)\r\n setPreview(null)\r\n setImageSrc(null)\r\n setCroppedImage(null)\r\n setZoom(1)\r\n setCrop({ x: 0, y: 0 })\r\n setRotation(0)\r\n setError('')\r\n if (inputRef.current) inputRef.current.value = ''\r\n }\r\n\r\n const onFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const file = e.target.files?.[0]\r\n handleRemoveImage()\r\n if (!file) return\r\n\r\n if (!validTypes.includes(file.type)) {\r\n\r\n\r\n const error = `Formato inválido. Solo se permiten: ${formattedList}.`\r\n sendNotification({\r\n description: error,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n return setError(error)\r\n }\r\n\r\n if (file.size > maxSizeMB * 1024 * 1024) {\r\n const error = `El archivo supera los ${maxSizeMB} MB.`\r\n sendNotification({\r\n description: error,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n return setError(`El archivo supera los ${maxSizeMB} MB.`)\r\n }\r\n\r\n let imageDataUrl = await readFile(file)\r\n\r\n try {\r\n const orientation = await getOrientation(file, validTypes)\r\n const rotation = ORIENTATION_TO_ANGLE[orientation]\r\n if (rotation) {\r\n imageDataUrl = await getRotatedImage(imageDataUrl, rotation) as string\r\n setRotation(rotation)\r\n }\r\n } catch (e) {\r\n return sendNotification({\r\n description: 'Error desconocido',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n\r\n const image = new Image()\r\n image.src = imageDataUrl\r\n image.onload = () => {\r\n if (image.width < minWidth || image.height < minHeight) {\r\n const error = `Resolución mínima: ${minWidth}x${minHeight}px.`\r\n sendNotification({\r\n description: error,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n setError(error)\r\n return\r\n }\r\n setImageSrc(imageDataUrl)\r\n setOpen(true)\r\n }\r\n }\r\n\r\n const handleClose = () => {\r\n setOpen(!open)\r\n }\r\n\r\n const handleDrop = async (event: React.DragEvent<HTMLDivElement>): Promise<void> => {\r\n event.preventDefault()\r\n handleRemoveImage()\r\n const file = event.dataTransfer.files?.[0]\r\n if (!file) return\r\n\r\n if (!validTypes.includes(file.type)) {\r\n const error = `Formato inválido. Solo se permiten: ${formattedList}.`\r\n sendNotification({\r\n description: error,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n return setError(error)\r\n }\r\n\r\n if (file.size > maxSizeMB * 1024 * 1024) {\r\n const error = `El archivo supera los ${maxSizeMB} MB.`\r\n sendNotification({\r\n description: error,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n return setError(error)\r\n }\r\n\r\n let imageDataUrl = await readFile(file)\r\n\r\n try {\r\n const orientation = await getOrientation(file, validTypes)\r\n const rotation = ORIENTATION_TO_ANGLE[orientation]\r\n if (rotation) {\r\n imageDataUrl = await getRotatedImage(imageDataUrl, rotation) as string\r\n setRotation(rotation)\r\n }\r\n } catch (e) {\r\n return sendNotification({\r\n description: 'Error al procesar la orientación de la imagen',\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n }\r\n\r\n const image = new Image()\r\n image.src = imageDataUrl\r\n image.onload = () => {\r\n if (image.width < minWidth || image.height < minHeight) {\r\n const error = `Resolución mínima: ${minWidth}x${minHeight}px.`\r\n sendNotification({\r\n description: error,\r\n title: 'Error',\r\n backgroundColor: 'error'\r\n })\r\n setError(error)\r\n return\r\n }\r\n setImageSrc(imageDataUrl)\r\n setImage(file)\r\n setOpen(true)\r\n }\r\n }\r\n\r\n\r\n return {\r\n inputRef,\r\n open,\r\n imageSrc,\r\n preview,\r\n croppedImage,\r\n crop,\r\n zoom,\r\n image,\r\n rotation,\r\n error,\r\n formattedList,\r\n loading,\r\n validTypes,\r\n onCropComplete,\r\n showCroppedImage,\r\n handleRemoveImage,\r\n handleDrop,\r\n onFileChange,\r\n handleClose,\r\n setCrop,\r\n setZoom,\r\n setRotation\r\n }\r\n}\r\n","export const ORIENTATION_TO_ANGLE = {\r\n 3: 180,\r\n 6: 90,\r\n 8: -90\r\n}\r\n","export const createImage = (url) =>\r\n{return new Promise((resolve, reject) => {\r\n const image = new Image()\r\n image.addEventListener('load', () => {return resolve(image)})\r\n image.addEventListener('error', (error) => {return reject(error)})\r\n image.setAttribute('crossOrigin', 'anonymous') // needed to avoid cross-origin issues on CodeSandbox\r\n image.src = url\r\n})}\r\n\r\n/**\n *\n * @param degreeValue\n */\nexport function getRadianAngle(degreeValue) {\r\n return (degreeValue * Math.PI) / 180\r\n}\r\n\r\n/**\r\n * Returns the new bounding area of a rotated rectangle.\r\n * @param width\n * @param height\n * @param rotation\n */\r\nexport function rotateSize(width, height, rotation) {\r\n const rotRad = getRadianAngle(rotation)\r\n\r\n return {\r\n width:\r\n Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\r\n height:\r\n Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height)\r\n }\r\n}\r\n\r\n/**\r\n * This function was adapted from the one in the ReadMe of https://github.com/DominicTobias/react-image-crop\r\n */\r\n/**\r\n * This function was adapted from the one in the ReadMe of https://github.com/DominicTobias/react-image-crop\r\n * @param imageSrc\n * @param pixelCrop\n * @param rotation\n * @param flip\n */\r\nexport async function getCroppedImg(\r\n imageSrc,\r\n pixelCrop,\r\n rotation = 0,\r\n flip = { horizontal: false, vertical: false }\r\n) {\r\n const image = await createImage(imageSrc)\r\n const canvas = document.createElement('canvas')\r\n const ctx = canvas.getContext('2d')\r\n\r\n if (!ctx) {\r\n return null\r\n }\r\n\r\n const rotRad = getRadianAngle(rotation)\r\n\r\n // calculate bounding box of the rotated image\r\n const { width: bBoxWidth, height: bBoxHeight } = rotateSize(\r\n image.width,\r\n image.height,\r\n rotation\r\n )\r\n\r\n // set canvas size to match the bounding box\r\n canvas.width = bBoxWidth\r\n canvas.height = bBoxHeight\r\n\r\n // translate canvas context to a central location to allow rotating and flipping around the center\r\n ctx.translate(bBoxWidth / 2, bBoxHeight / 2)\r\n ctx.rotate(rotRad)\r\n ctx.scale(flip.horizontal ? -1 : 1, flip.vertical ? -1 : 1)\r\n ctx.translate(-image.width / 2, -image.height / 2)\r\n\r\n // draw rotated image\r\n ctx.drawImage(image, 0, 0)\r\n\r\n const croppedCanvas = document.createElement('canvas')\r\n\r\n const croppedCtx = croppedCanvas.getContext('2d')\r\n\r\n if (!croppedCtx) {\r\n return null\r\n }\r\n\r\n // Set the size of the cropped canvas\r\n croppedCanvas.width = pixelCrop.width\r\n croppedCanvas.height = pixelCrop.height\r\n\r\n // Draw the cropped image onto the new canvas\r\n croppedCtx.drawImage(\r\n canvas,\r\n pixelCrop.x,\r\n pixelCrop.y,\r\n pixelCrop.width,\r\n pixelCrop.height,\r\n 0,\r\n 0,\r\n pixelCrop.width,\r\n pixelCrop.height\r\n )\r\n\r\n // As Base64 string\r\n // return croppedCanvas.toDataURL('image/jpeg');\r\n\r\n // As a blob\r\n return new Promise((resolve, reject) => {\r\n croppedCanvas.toBlob((file) => {\r\n resolve(URL.createObjectURL(file))\r\n }, 'image/png')\r\n })\r\n}\r\n\r\n/**\n *\n * @param imageSrc\n * @param rotation\n */\nexport async function getRotatedImage(imageSrc, rotation = 0) {\r\n const image = await createImage(imageSrc)\r\n const canvas = document.createElement('canvas')\r\n const ctx = canvas.getContext('2d')\r\n\r\n const orientationChanged =\r\n rotation === 90 || rotation === -90 || rotation === 270 || rotation === -270\r\n if (orientationChanged) {\r\n canvas.width = image.height\r\n canvas.height = image.width\r\n } else {\r\n canvas.width = image.width\r\n canvas.height = image.height\r\n }\r\n\r\n ctx.translate(canvas.width / 2, canvas.height / 2)\r\n ctx.rotate((rotation * Math.PI) / 180)\r\n ctx.drawImage(image, -image.width / 2, -image.height / 2)\r\n\r\n return new Promise((resolve) => {\r\n canvas.toBlob((file) => {\r\n resolve(URL.createObjectURL(file))\r\n }, 'image/png')\r\n })\r\n}\r\n","/**\r\n * Reads EXIF orientation from a JPEG file (native, no dependencies)\r\n * @param {File} file\r\n * @param validTypes\n * @returns {Promise<number>} Orientation value from 1 to 8\r\n */\r\nexport const getOrientation = (file: File, validTypes: string[]): Promise<number> => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onload = (event) => {\r\n const view = new DataView(event.target?.result as ArrayBuffer)\r\n\r\n if (!validTypes.includes(file.type)) {\r\n return reject(new Error(`Archivo no soportado: ${file.type}`))\r\n }\r\n\r\n let offset = 2\r\n const length = view.byteLength\r\n\r\n while (offset < length) {\r\n if (view.getUint16(offset + 2, false) <= 8) return resolve(1)\r\n\r\n const marker = view.getUint16(offset, false)\r\n offset += 2\r\n\r\n if (marker === 0xFFE1) {\r\n const little = view.getUint16(offset + 8, false) === 0x4949\r\n offset += 10\r\n\r\n const tags = view.getUint16(offset, little)\r\n offset += 2\r\n\r\n for (let i = 0; i < tags; i++) {\r\n const tagOffset = offset + i * 12\r\n const tag = view.getUint16(tagOffset, little)\r\n if (tag === 0x0112) {\r\n const orientation = view.getUint16(tagOffset + 8, little)\r\n return resolve(orientation)\r\n }\r\n }\r\n } else if ((marker & 0xFF00) !== 0xFF00) {\r\n break\r\n } else {\r\n offset += view.getUint16(offset, false)\r\n }\r\n }\r\n\r\n resolve(1) // por defecto\r\n }\r\n\r\n reader.onerror = () => {return reject(new Error('Error leyendo archivo'))}\r\n reader.readAsArrayBuffer(file)\r\n })\r\n}\r\n","import { gql, useMutation } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL mutation to update the priority of order statuses.\r\n */\r\nconst UPDATE_ORDER_STATUS_PRIORITIES = gql`\r\n mutation UpdateOrderStatusPriorities($data: [OrderStatusPriorityInput!]!) {\r\n updateOrderStatusPriorities(data: $data) {\r\n success\r\n message\r\n errors {\r\n path\r\n message\r\n }\r\n data {\r\n idStatus\r\n name\r\n priority\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Custom hook to update the priority of order statuses.\r\n *\r\n * @param root0\n * @param root0.sendNotification\n * @returns {{\r\n * updatePriorities: (input: OrderStatusPriorityInput[]) => Promise<UpdateStatusPriorityResponse>,\r\n * loading: boolean,\r\n * error: any\r\n * }}\r\n */\r\nexport const useUpdateOrderStatusPriorities = ({\r\n sendNotification = (...res) => { }\r\n} = {}) => {\r\n const [mutate, { loading, error }] = useMutation(UPDATE_ORDER_STATUS_PRIORITIES)\r\n\r\n /**\r\n * Executes the mutation to update order status priorities.\r\n *\r\n * @param {OrderStatusPriorityInput[]} input - Array of objects containing idStatus and priority.\r\n * @returns {Promise<UpdateStatusPriorityResponse>} Response from the server.\r\n */\r\n const updatePriorities = async (input) => {\r\n if (!Array.isArray(input) || input.length === 0) {\r\n return {\r\n success: false,\r\n message: 'Input must be a non-empty array.',\r\n data: [],\r\n errors: [{ path: 'input', message: 'Invalid or empty input array.' }]\r\n }\r\n }\r\n\r\n const isValid = input.every(\r\n ({ idStatus, priority }) =>\r\n {return typeof idStatus === 'string' &&\r\n idStatus.length > 0 &&\r\n typeof priority === 'number' &&\r\n priority >= 0}\r\n )\r\n\r\n if (!isValid) {\r\n return {\r\n success: false,\r\n message: 'Validation failed for one or more input items.',\r\n data: [],\r\n errors: [{ path: 'input', message: 'Each item must have a valid idStatus and priority.' }]\r\n }\r\n }\r\n\r\n try {\r\n const { data } = await mutate({ variables: { data: input } })\r\n if (data) {\r\n const { updateOrderStatusPriorities } = data ?? {}\r\n const { success, message } = updateOrderStatusPriorities ?? {\r\n success: false,\r\n message: ''\r\n }\r\n return sendNotification({\r\n title: success ? 'Exitoso' : 'Error',\r\n description: message,\r\n backgroundColor: success ? 'success' : 'error'\r\n })\r\n }\r\n return data.updateOrderStatusPriorities\r\n } catch (err) {\r\n return {\r\n success: false,\r\n message: 'Unexpected error while updating priorities.',\r\n data: [],\r\n errors: [{ path: 'mutation', message: err.message }]\r\n }\r\n }\r\n }\r\n\r\n return [updatePriorities, { loading, error }]\r\n}\r\n","import { useQuery, gql } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL query to fetch order status types.\r\n */\r\nconst GET_ORDER_STATUS_TYPES = gql`\r\n query getAllOrderStatusTypes {\r\n getAllOrderStatusTypes {\r\n message\r\n success\r\n __typename\r\n data {\r\n backgroundColor\r\n color\r\n createdAt\r\n description\r\n idStatus\r\n name\r\n priority\r\n state\r\n updatedAt\r\n __typename\r\n }\r\n pagination {\r\n currentPage\r\n totalPages\r\n totalRecords\r\n __typename\r\n }\r\n errors {\r\n context {\r\n key\r\n label\r\n limit\r\n value\r\n __typename\r\n }\r\n }\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * @typedef {Object} OrderStatusType\r\n * @property {string} idStatus - Unique identifier for the status\r\n * @property {string} name - Name of the status\r\n * @property {number} priority - Priority level\r\n * @property {string} backgroundColor - Background color in hex\r\n * @property {string} color - Text color in hex\r\n * @property {number} state - Status state (e.g. active/inactive)\r\n */\r\n\r\n/**\r\n * Custom hook to fetch order status types.\r\n *\r\n * @returns {{\r\n * statusTypes: OrderStatusType[] | null,\r\n * loading: boolean,\r\n * error: Error | undefined,\r\n * refetch: () => void\r\n * }}\r\n */\r\n/**\r\n * Retrieves order status types via the corresponding GraphQL query and exposes loading state, errors, and refetch capabilities.\r\n *\r\n * @param options - Optional configuration values for the hook.\r\n * @param options.callback - Callback invoked when the query completes successfully, receiving the raw query response.\r\n * @returns An object containing the normalized status types data along with loading, error, and refetch helpers.\r\n */\r\nexport interface OrderStatusType {\r\n idStatus: string\r\n name: string\r\n priority: number\r\n backgroundColor: string\r\n color: string\r\n state: number\r\n description: string\r\n createdAt: string\r\n updatedAt: string\r\n __typename: string\r\n}\r\n\r\nexport interface OrderStatusTypeErrorContext {\r\n key: string\r\n label: string\r\n limit: number\r\n value: string\r\n __typename: string\r\n}\r\n\r\nexport interface OrderStatusTypeError {\r\n context: OrderStatusTypeErrorContext[]\r\n __typename: string\r\n}\r\n\r\nexport interface GetAllOrderStatusTypesResponse {\r\n message: string\r\n success: boolean\r\n __typename: string\r\n data: OrderStatusType[]\r\n errors?: OrderStatusTypeError[] | null\r\n}\r\n\r\nexport interface OrderStatusTypesQueryResult {\r\n getAllOrderStatusTypes: GetAllOrderStatusTypesResponse\r\n}\r\n\r\nexport interface UseOrderStatusTypesOptions {\r\n callback?: (payload: OrderStatusTypesQueryResult) => void\r\n}\r\n\r\nexport const useOrderStatusTypes = ({\r\n callback = () => {return undefined}\r\n}: UseOrderStatusTypesOptions = {}) => {\r\n const {\r\n data,\r\n loading,\r\n error,\r\n refetch\r\n } = useQuery<OrderStatusTypesQueryResult>(GET_ORDER_STATUS_TYPES, {\r\n onCompleted: callback,\r\n fetchPolicy: 'cache-and-network'\r\n })\r\n\r\n const statusTypes = data?.getAllOrderStatusTypes?.data ?? null\r\n\r\n return {\r\n data: statusTypes,\r\n loading,\r\n error,\r\n refetch\r\n }\r\n}\r\n","import { gql, useMutation } from '@apollo/client'\r\n\r\nconst CREATE_ORDER_STATUS_TYPE = gql`\r\n mutation CreateOrderStatusType($data: OrderStatusTypeInput!) {\r\n createOrderStatusType(data: $data) {\r\n success\r\n message\r\n data {\r\n idStatus\r\n name\r\n description\r\n color\r\n priority\r\n createdAt\r\n updatedAt\r\n }\r\n errors {\r\n message\r\n path\r\n type\r\n __typename\r\n }\r\n }\r\n }\r\n`\r\n\r\ninterface OrderStatusTypeInput {\r\n name: string\r\n description?: string\r\n color?: string\r\n priority?: number\r\n state?: number\r\n}\r\n\r\ninterface OrderStatusType {\r\n idStatus: string\r\n name: string\r\n description: string\r\n color: string\r\n priority: number\r\n createdAt: string\r\n updatedAt: string\r\n}\r\n\r\ninterface ResponseOrderStatusType {\r\n success: boolean\r\n message: string\r\n data?: OrderStatusType\r\n errors?: Array<{\r\n message: string\r\n path?: string\r\n type?: string\r\n __typename?: string\r\n }>\r\n}\r\n\r\n/**\r\n * 🧩 Hook personalizado para crear un OrderStatusType\r\n * @param root0\n * @param root0.sendNotification\n */\r\nexport const useCreateOrderStatusType = ({\r\n sendNotification\r\n}: {\r\n sendNotification: (options: {\r\n title: string\r\n description: string\r\n backgroundColor: 'success' | 'error' | 'info' | 'warning'\r\n }) => void\r\n}) => {\r\n const [createOrderStatusType, { data, loading, error }] =\r\n useMutation<{ createOrderStatusType: ResponseOrderStatusType }>(\r\n CREATE_ORDER_STATUS_TYPE,\r\n {\r\n update(cache, { data }) {\r\n console.log('🚀 ~ useCreateOrderStatusType ~ data:', data, cache)\r\n const newItem = data?.createOrderStatusType?.data\r\n if (!newItem) return\r\n\r\n cache.modify({\r\n fields: {\r\n getAllOrderStatusTypes(existing = {}) {\r\n console.log('🚀 ~ useCreateOrderStatusType ~ existing:', existing)\r\n \r\n }\r\n }\r\n })\r\n },\r\n\r\n onCompleted: (data) => {\r\n const res = data.createOrderStatusType\r\n const { success, message } = res ?? {\r\n success: false,\r\n message: 'Error desconocido'\r\n }\r\n\r\n sendNotification({\r\n title: success\r\n ? 'Estado de orden creado'\r\n : 'Error al crear el estado de orden',\r\n description: message,\r\n backgroundColor: success ? 'success' : 'error'\r\n })\r\n }\r\n }\r\n )\r\n\r\n const handleCreateStatus = async (input: OrderStatusTypeInput) => {\r\n try {\r\n const response = await createOrderStatusType({\r\n variables: { data: input }\r\n })\r\n\r\n return response.data?.createOrderStatusType\r\n } catch (err) {\r\n sendNotification({\r\n title: 'Error al crear el estado de orden',\r\n description: 'Ha ocurrido un error inesperado al crear el estado de orden.',\r\n backgroundColor: 'error'\r\n })\r\n throw err\r\n }\r\n }\r\n\r\n return [\r\n handleCreateStatus,\r\n {\r\n data: data?.createOrderStatusType,\r\n loading,\r\n error\r\n }\r\n ]\r\n}\r\n\r\n","'use client'\r\nimport { useEffect, useRef, useState } from 'react'\r\n\r\nexport const useDevWS = () => {\r\n const [status, setStatus] = useState('loading')\r\n const wsRef = useRef<WebSocket | null>(null)\r\n\r\n useEffect(() => {\r\n let reconnectTimer: any\r\n\r\n const connect = async () => {\r\n try {\r\n const r = await fetch('/api/ws-port')\r\n const { port } = await r.json()\r\n\r\n if (!port) {\r\n setStatus('down')\r\n reconnectTimer = setTimeout(connect, 2000)\r\n return\r\n }\r\n\r\n const ws = new WebSocket(`ws://localhost:${port}`)\r\n wsRef.current = ws\r\n\r\n ws.onopen = () => {\r\n setStatus('up')\r\n }\r\n\r\n ws.onerror = () => {\r\n setStatus('down')\r\n ws.close()\r\n }\r\n\r\n ws.onclose = () => {\r\n setStatus('down')\r\n reconnectTimer = setTimeout(connect, 2000)\r\n }\r\n } catch {\r\n setStatus('down')\r\n reconnectTimer = setTimeout(connect, 2000)\r\n }\r\n }\r\n\r\n connect()\r\n\r\n return () => {\r\n wsRef.current?.close()\r\n clearTimeout(reconnectTimer)\r\n }\r\n }, [])\r\n\r\n return status\r\n}\r\n","// usePrintSaleTicket.ts\r\nimport { gql, useMutation, MutationHookOptions } from '@apollo/client'\r\nimport { useCallback } from 'react'\r\n\r\n/* ------------------------------\r\n TYPES\r\n------------------------------ */\r\n\r\nexport interface PrintSaleTicketResponse {\r\n printSaleTicket: {\r\n message: string\r\n success: boolean\r\n data: string | null\r\n __typename: string\r\n }\r\n}\r\n\r\nexport interface PrintSaleTicketVars {\r\n saleId: string\r\n}\r\n\r\n/* ------------------------------\r\n GQL\r\n------------------------------ */\r\n\r\nconst PRINT_SALE_TICKET = gql`\r\n mutation printSaleTicket($saleId: ID!) {\r\n printSaleTicket(saleId: $saleId) {\r\n message\r\n success\r\n data\r\n __typename\r\n }\r\n }\r\n`\r\n\r\n/* ------------------------------\r\n HOOK\r\n------------------------------ */\r\n\r\n/**\n *\n * @param options\n */\nexport function usePrintSaleTicket(\r\n options?: MutationHookOptions<PrintSaleTicketResponse, PrintSaleTicketVars>\r\n) {\r\n const [runMutation, { loading, data, error }] = useMutation<\r\n PrintSaleTicketResponse,\r\n PrintSaleTicketVars\r\n >(PRINT_SALE_TICKET, options)\r\n\r\n const printSale = useCallback(\r\n async (saleId: string) => {\r\n const result = await runMutation({\r\n variables: { saleId }\r\n })\r\n return result.data?.printSaleTicket\r\n },\r\n [runMutation]\r\n )\r\n\r\n return [printSale, {\r\n loading,\r\n data: data?.printSaleTicket,\r\n error\r\n }]\r\n}\r\n","'use client'\r\n\r\nimport { useMutation } from '@apollo/client'\n\r\nimport { CREATE_PAYMENT_METHOD, GET_ALL_PAYMENT_METHODS } from '../paymentMethod.gql'\r\nimport { CreatePaymentMethodInput, PaymentMethod } from '../paymentMethod.types'\r\n\r\n\r\nexport const useCreatePaymentMethod = () => {\r\n const [createPaymentMethod, { loading, error }] = useMutation<\r\n { createPaymentMethod: PaymentMethod },\r\n { input: CreatePaymentMethodInput }\r\n >(CREATE_PAYMENT_METHOD, {\r\n refetchQueries: [{ query: GET_ALL_PAYMENT_METHODS }]\r\n })\r\n\r\n const handleCreate = async (input: CreatePaymentMethodInput) => {\r\n const res = await createPaymentMethod({ variables: { input } })\r\n return res.data?.createPaymentMethod\r\n }\r\n return [handleCreate, {\r\n loading,\r\n error\r\n }]\r\n}\r\n","import { gql } from '@apollo/client'\r\n\r\nexport const GET_PAYMENT_METHOD = gql`\r\n query getPaymentMethod($payId: ID!) {\r\n getPaymentMethod(payId: $payId) {\r\n payId\r\n name\r\n icon\r\n state\r\n paymentPriority\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n`\r\n\r\nexport const GET_ALL_PAYMENT_METHODS = gql`\r\n query getAllPaymentMethods {\r\n getAllPaymentMethods {\r\n payId\r\n name\r\n icon\r\n state\r\n paymentPriority\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n`\r\n\r\nexport const CREATE_PAYMENT_METHOD = gql`\r\n mutation createPaymentMethod($input: CreatePaymentMethodInput!) {\r\n createPaymentMethod(input: $input) {\r\n payId\r\n name\r\n icon\r\n state\r\n paymentPriority\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n`\r\n\r\nexport const UPDATE_PAYMENT_METHOD = gql`\r\n mutation updatePaymentMethod($payId: ID!, $input: UpdatePaymentMethodInput!) {\r\n updatePaymentMethod(payId: $payId, input: $input) {\r\n payId\r\n name\r\n icon\r\n state\r\n paymentPriority\r\n updatedAt\r\n }\r\n }\r\n`\r\n\r\nexport const DELETE_PAYMENT_METHOD = gql`\r\n mutation deletePaymentMethod($payId: ID!) {\r\n deletePaymentMethod(payId: $payId)\r\n }\r\n`\r\n","'use client'\r\n\r\nimport { useQuery } from '@apollo/client'\n\r\nimport { GET_ALL_PAYMENT_METHODS } from '../paymentMethod.gql'\r\nimport { PaymentMethod } from '../paymentMethod.types'\r\n\r\nexport const useGetAllPaymentMethods = () => {\r\n const { data, loading, error, refetch } = useQuery<{\r\n getAllPaymentMethods: PaymentMethod[]\r\n }>(GET_ALL_PAYMENT_METHODS)\r\n\r\n return {\r\n data: data?.getAllPaymentMethods ?? [],\r\n loading,\r\n error,\r\n refetch\r\n }\r\n}\r\n","'use client'\r\n\r\nimport { useQuery } from '@apollo/client'\n\r\nimport { GET_PAYMENT_METHOD } from '../paymentMethod.gql'\r\nimport { PaymentMethod } from '../paymentMethod.types'\r\n\r\ninterface Props {\r\n payId: string\r\n}\r\n\r\nexport const useGetPaymentMethod = ({ payId }: Props) => {\r\n const { data, loading, error } = useQuery<{ getPaymentMethod: PaymentMethod }>(\r\n GET_PAYMENT_METHOD,\r\n {\r\n variables: { payId },\r\n skip: !payId\r\n }\r\n )\r\n\r\n return {\r\n paymentMethod: data?.getPaymentMethod,\r\n loading,\r\n error\r\n }\r\n}\r\n","import { useState } from 'react'\n\r\nimport { Cookies } from '../../cookies'\r\n\r\nenum Theme {\r\n LIGHT = 'light',\r\n DARK = 'dark',\r\n}\r\n\r\n/**\r\n * Handles light/dark theme switching using data-theme attribute.\r\n * Cookie is used only for persistence, not as source of truth.\r\n */\r\nexport const useTheme = () => {\r\n\r\n // STATES\r\n const [theme, setTheme] = useState<Theme>(Theme.LIGHT)\r\n /**\r\n * Applies theme to DOM and persists it.\r\n * @param theme\n */\r\n const applyTheme = (theme: Theme): void => {\r\n document.documentElement.setAttribute('data-theme', theme)\r\n Cookies.set('theme', theme, { expires: 365 })\r\n setTheme(theme)\r\n }\r\n\r\n /**\r\n * Toggles between light and dark themes.\r\n */\r\n const toggleTheme = (): void => {\r\n if (typeof document === 'undefined') return\r\n\r\n const current =\r\n (document.documentElement.getAttribute('data-theme') as Theme) ??\r\n Theme.LIGHT\r\n\r\n applyTheme(current === Theme.DARK ? Theme.LIGHT : Theme.DARK)\r\n setTheme(current === Theme.DARK ? Theme.LIGHT : Theme.DARK)\r\n }\r\n\r\n /**\r\n * Initializes theme from cookie or system preference.\r\n */\r\n const initTheme = (): void => {\r\n if (typeof document === 'undefined') return\r\n\r\n const cookieTheme = Cookies.get('theme') as Theme | undefined\r\n\r\n const systemTheme =\r\n window.matchMedia?.('(prefers-color-scheme: dark)').matches\r\n ? Theme.DARK\r\n : Theme.LIGHT\r\n\r\n applyTheme(cookieTheme ?? systemTheme)\r\n setTheme(cookieTheme ?? systemTheme)\r\n }\r\n\r\n return {\r\n setTheme: applyTheme,\r\n toggleTheme,\r\n initTheme,\r\n theme\r\n }\r\n}\r\n","// useFilterConfigs.ts\r\nimport { gql, useQuery } from '@apollo/client'\r\n\r\n/**\r\n * GraphQL query: expects the backend to return a JSON (or custom scalar) containing filterTabs\r\n */\r\nconst GET_FILTER_CONFIGS = gql`\r\n query GetFilterConfigs($idStore: String) {\r\n filterConfigs(idStore: $idStore) {\r\n id\r\n idStore\r\n filterTabs\r\n active\r\n priority\r\n createdAt\r\n updatedAt\r\n }\r\n }\r\n`\r\n\r\n/**\r\n * Type definitions matching DB/json structure\r\n */\r\n\r\n/**\r\n * @typedef {Object} FilterValue\r\n * @property {string} [id]\r\n * @property {string} description\r\n * @property {number|string|null} [value]\r\n * @property {string|null} [imageUrn]\r\n */\r\nexport type FilterValue = {\r\n id?: string\r\n description: string\r\n value?: number | string | null\r\n imageUrn?: string | null\r\n}\r\n\r\n/**\r\n * @typedef {Object} FilterGroup\r\n * @property {string} id\r\n * @property {string} description\r\n * @property {string} displayType\r\n * @property {FilterValue[]} values\r\n */\r\nexport type FilterGroup = {\r\n id: string\r\n description: string\r\n displayType: string\r\n values: FilterValue[]\r\n}\r\n\r\n/**\r\n * @typedef {Object} FilterTab\r\n * @property {string} id\r\n * @property {string} name\r\n * @property {FilterGroup[]} filterGroups\r\n */\r\nexport type FilterTab = {\r\n id: string\r\n name: string\r\n filterGroups: FilterGroup[]\r\n}\r\n\r\n/**\r\n * @typedef {Object} FilterConfigRecord\r\n * @property {string} id\r\n * @property {string|null} idStore\r\n * @property {FilterTab[]} filterTabs\r\n * @property {boolean} active\r\n * @property {number} priority\r\n */\r\nexport type FilterConfigRecord = {\r\n id: string\r\n idStore: string | null\r\n filterTabs: FilterTab[]\r\n active: boolean\r\n priority: number\r\n}\r\n\r\n/**\r\n * Runtime guard to ensure shape is roughly correct\r\n * @param anyData any\r\n * @returns boolean\r\n */\r\nconst isFilterTabs = (anyData: any): any is FilterTab[] => {\r\n if (!Array.isArray(anyData)) return false\r\n for (const tab of anyData) {\r\n if (typeof tab?.id !== 'string' || typeof tab?.name !== 'string') return false\r\n if (!Array.isArray(tab.filterGroups)) return false\r\n for (const g of tab.filterGroups) {\r\n if (typeof g?.id !== 'string') return false\r\n if (!Array.isArray(g.values)) return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\n/**\r\n * Hook options\r\n */\r\nexport type UseFilterConfigsOptions = {\r\n idStore?: string | null\r\n pollIntervalMs?: number\r\n skip?: boolean\r\n onError?: (err: Error) => void\r\n}\r\n\r\n/**\r\n * Hook return\r\n */\r\nexport type UseFilterConfigsResult = {\r\n data: FilterTab[]\r\n rawRecords: FilterConfigRecord[] | null\r\n loading: boolean\r\n error: Error | null\r\n refetch: () => Promise<void>\r\n}\r\n\r\n/**\r\n * Custom hook to fetch filter configs from GraphQL and expose typed, validated tabs.\r\n * - Returns empty array when data is invalid (defensive).\r\n * - Accepts idStore and poll interval as parameters for flexibility.\r\n *\r\n * @param {UseFilterConfigsOptions} options\r\n * @returns {UseFilterConfigsResult}\r\n */\r\nexport const useFilterConfigs = ({\r\n skip = false,\r\n onError\r\n}: UseFilterConfigsOptions = {}): UseFilterConfigsResult => {\r\n const { data, loading, error, refetch } = useQuery(\r\n GET_FILTER_CONFIGS,\r\n {\r\n skip\r\n }\r\n )\r\n\r\n if (error && onError) onError(error as Error)\r\n\r\n const rawRecords =\r\n Array.isArray((data as any)?.filterConfigs) ? (data as any).filterConfigs as FilterConfigRecord[] : null\r\n\r\n let tabs: FilterTab[] = []\r\n\r\n if (rawRecords && rawRecords.length > 0) {\r\n // pick the active config with highest priority (lowest number)\r\n const active = rawRecords\r\n .filter(r => {return r.active !== false})\r\n .sort((a, b) => {return (a.priority ?? 9999) - (b.priority ?? 9999)})[0]\r\n\r\n const candidate = active ?? rawRecords[0]\r\n\r\n if (candidate && isFilterTabs(candidate.filterTabs)) {\r\n tabs = candidate.filterTabs\r\n } else {\r\n // defensive logging — don't throw to avoid crashing UI, return empty array\r\n \r\n console.warn('useFilterConfigs: invalid filterTabs structure', candidate?.filterTabs)\r\n tabs = []\r\n }\r\n }\r\n\r\n return {\r\n data: [{ 'id': 'BASIC', 'name': 'Básicos', 'filterGroups': [{ 'id': 'DELIVERY_MODE', 'description': 'Modo de entrega', 'displayType': 'WORD_CLOUD_SINGLE', 'values': [{ 'id': 'DELIVERY', 'description': 'Entrega' }, { 'id': 'TAKEOUT', 'description': 'Pra retirar' }] }, { 'id': 'SORTING', 'description': 'Ordenar por', 'displayType': 'GRID', 'values': [{ 'id': 'DEFAULT', 'description': 'Ordenação Padrão' }, { 'id': 'PRICE_RANGE:ASC', 'description': 'Preço' }, { 'id': 'USER_RATING:DESC', 'description': 'Avaliação' }, { 'id': 'DELIVERY_TIME:ASC', 'description': 'Tempo de Entrega' }, { 'id': 'DELIVERY_FEE:ASC', 'description': 'Taxa de Entrega' }, { 'id': 'DISTANCE:ASC', 'description': 'Menor distância' }] }, { 'id': 'DISTANCE', 'description': 'Distância', 'displayType': 'SLIDER', 'values': [{ 'id': 'MIN_VALUE', 'description': '1' }, { 'id': 'MAX_VALUE', 'description': '10' }] }, { 'id': 'DELIVERY_FEE', 'description': 'Taxa de entrega', 'displayType': 'WORD_CLOUD_SINGLE', 'values': [{ 'id': 'FREE', 'description': 'Grátis', 'value': 0 }, { 'id': 'MAX_FIVE', 'description': 'até R$ 5,00', 'value': 5 }, { 'id': 'MAX_TEN', 'description': 'até R$ 10,00', 'value': 10 }] }, { 'id': 'TAGS', 'description': 'Filtros especiais', 'displayType': 'CHECKBOX', 'values': [{ 'id': 'SUPER_RESTAURANT', 'imageUrn': 'SUPER_RESTAURANT.png', 'description': 'Super-Restaurantes' }, { 'id': 'SUPPORTS_ORDER_TRACKING', 'imageUrn': 'SUPPORTS_ORDER_TRACKING.png', 'description': 'Entrega Parceira' }, { 'id': 'SUPPORTS_ANY_TRACKING', 'imageUrn': 'SUPPORTS_ANY_TRACKING.png', 'description': 'Entrega Rastreável' }, { 'id': 'SUPPORTS_SCHEDULING', 'imageUrn': 'SUPPORTS_SCHEDULING.png', 'description': 'Aceita agendamento' }] }] }, { 'id': 'CATEGORY', 'name': 'Categorias', 'filterGroups': [{ 'id': 'MERCHANT_TYPE', 'description': 'Tipo de loja', 'displayType': 'GRID', 'values': [{ 'id': 'ALL', 'description': 'Todas as lojas' }, { 'id': 'RESTAURANT', 'description': 'Restaurante' }, { 'id': 'MARKET', 'description': 'Mercado' }] }, { 'id': 'AVAILABLE_CATEGORIES', 'description': 'Categorias', 'displayType': 'WORD_CLOUD', 'values': [{ 'description': 'Africana', 'id': 'AF1' }, { 'description': 'Alemã', 'id': 'ALE' }, { 'description': 'Árabe', 'id': 'ARA' }, { 'description': 'Argentina', 'id': 'AR1' }, { 'description': 'Asiática', 'id': 'ASI' }, { 'description': 'Açaí', 'id': 'AC1' }, { 'description': 'Baiana', 'id': 'BA1' }, { 'description': 'Bebidas', 'id': 'BEB' }, { 'description': 'Brasileira', 'id': 'BRA' }, { 'description': 'Cafeteria', 'id': 'CA1' }, { 'description': 'Carnes', 'id': 'CAR' }, { 'description': 'Casa de Sucos', 'id': 'CS1' }, { 'description': 'Chinesa', 'id': 'CHI' }, { 'description': 'Colombiana', 'id': 'CO1' }, { 'description': 'Congelados Fit', 'id': 'CF1' }, { 'description': 'Congelados', 'id': 'CN1' }, { 'description': 'Contemporânea', 'id': 'CNT' }, { 'description': 'Conveniência', 'id': 'CV1' }, { 'description': 'Coreana', 'id': 'CR1' }, { 'description': 'Cozinha rápida', 'id': 'CRP' }, { 'description': 'Crepe', 'id': 'CP1' }, { 'description': 'Doces & Bolos', 'id': 'DCE' }, { 'description': 'Espanhola', 'id': 'ES1' }, { 'description': 'Francesa', 'id': 'FRA' }, { 'description': 'Frangos', 'id': 'FR1' }, { 'description': 'Frutos do mar', 'id': 'FRU' }, { 'description': 'Gaúcha', 'id': 'GA1' }, { 'description': 'Grega', 'id': 'GRC' }, { 'description': 'Hambúrguer', 'id': 'BUR' }, { 'description': 'Indiana', 'id': 'IND' }, { 'description': 'Italiana', 'id': 'ITA' }, { 'description': 'Japonesa', 'id': 'JAP' }, { 'description': 'Lanches', 'id': 'LCH' }, { 'description': 'Marmita', 'id': 'MA1' }, { 'description': 'Marroquina', 'id': 'MAR' }, { 'description': 'Mediterrânea', 'id': 'MED' }, { 'description': 'Mercado 🛒', 'id': 'MER' }, { 'description': 'Mexicana', 'id': 'MEX' }, { 'description': 'Mineira', 'id': 'MI1' }, { 'description': 'Nordestina', 'id': 'NO1' }, { 'description': 'Padaria', 'id': 'PA1' }, { 'description': 'Panqueca', 'id': 'PQC' }, { 'description': 'Paranaense', 'id': 'PR1' }, { 'description': 'Pastel', 'id': 'PAS' }, { 'description': 'Peixes', 'id': 'PX1' }, { 'description': 'Peruana', 'id': 'PER' }, { 'description': 'Pizza', 'id': 'PIZ' }, { 'description': 'Portuguesa', 'id': 'POR' }, { 'description': 'Presentes', 'id': 'PRE' }, { 'description': 'Salgados', 'id': 'SAG' }, { 'description': 'Saudável', 'id': 'SAU' }, { 'description': 'Sopas & Caldos', 'id': 'SP1' }, { 'description': 'Sorvetes', 'id': 'SOR' }, { 'description': 'Tailandesa', 'id': 'THA' }, { 'description': 'Tapioca', 'id': 'TA1' }, { 'description': 'Típica do Norte', 'id': 'TN1' }, { 'description': 'Variada', 'id': 'VAR' }, { 'description': 'Vegana', 'id': 'VE1' }, { 'description': 'Vegetariana', 'id': 'VEG' }, { 'description': 'Xis', 'id': 'XI1' }, { 'description': 'Yakisoba', 'id': 'YA1' }] }] }, { 'id': 'PAYMENT', 'name': 'Pagamentos', 'filterGroups': [{ 'id': 'MEDIUM_PRICE', 'description': 'Preço médio', 'displayType': 'WORD_CLOUD_SINGLE', 'values': [{ 'id': 'CHEAPEST', 'description': '$' }, { 'id': 'CHEAP', 'description': '$$' }, { 'id': 'MODERATE', 'description': '$$$' }, { 'id': 'EXPENSIVE', 'description': '$$$$' }, { 'id': 'MOST_EXPENSIVE', 'description': '$$$$$' }] }, { 'id': 'ONLINE_PAYMENTS', 'description': 'Pagamento pelo app', 'displayType': 'WORD_CLOUD', 'values': [{ 'id': 'PIX', 'description': 'pix' }, { 'id': 'ELO', 'description': 'Elo' }, { 'id': 'MC', 'description': 'Mastercard' }, { 'id': 'MCMA', 'description': 'Mastercard Maestro' }, { 'id': 'VIS', 'description': 'Visa' }, { 'id': 'VISE', 'description': 'Visa Electron' }, { 'id': 'AM', 'description': 'Amex' }, { 'id': 'DNR', 'description': 'Diners' }] }, { 'id': 'ONLINE_PAYMENTS_VR', 'description': 'Vale-refeição/alimentação pelo app', 'displayType': 'WORD_CLOUD', 'values': [{ 'id': 'IMV', 'description': 'iFood Refeição' }, { 'id': 'VRO', 'description': 'VR Refeição' }, { 'id': 'SRP', 'description': 'Sodexo Refeição' }, { 'id': 'ALR', 'description': 'Alelo Refeição' }, { 'id': 'TRO', 'description': 'Ticket' }, { 'id': 'BENRON', 'description': 'Ben Refeição' }] }, { 'id': 'OFFLINE_PAYMENTS', 'description': 'Pagamento na entrega', 'displayType': 'WORD_CLOUD', 'values': [{ 'id': 'DIN', 'description': 'Dinheiro' }, { 'id': 'RSODEX', 'description': 'Sodexo' }, { 'id': 'VVREST', 'description': 'Vale Alelo Refeição' }, { 'id': 'VR_SMA', 'description': 'VR Refeição' }, { 'id': 'BENVVR', 'description': 'Ben Refeição' }, { 'id': 'TRE', 'description': 'Ticket' }, { 'id': 'RDREST', 'description': 'Mastercard - Crédito' }, { 'id': 'MEREST', 'description': 'Mastercard' }, { 'id': 'VSREST', 'description': 'Visa - Crédito' }, { 'id': 'VIREST', 'description': 'Visa' }, { 'id': 'REC', 'description': 'Elo - Crédito' }, { 'id': 'RED', 'description': 'Elo' }, { 'id': 'RHIP', 'description': 'Hipercard' }, { 'id': 'TVER', 'description': 'Verocard' }, { 'id': 'RAM', 'description': 'American Express' }, { 'id': 'CPRCAR', 'description': 'Cooper Card' }, { 'id': 'GRNCAR', 'description': 'Green Card' }, { 'id': 'GRNCPL', 'description': 'Green Card (papel)' }, { 'id': 'RSELE', 'description': 'Refeisul' }, { 'id': 'VALECA', 'description': 'Vale Card' }, { 'id': 'BANRC', 'description': 'Banricompras - Crédito' }, { 'id': 'BANRD', 'description': 'Banricompras' }, { 'id': 'DNREST', 'description': 'Diners' }, { 'id': 'GOODC', 'description': 'Goodcard' }, { 'id': 'VERDEC', 'description': 'Verdecard' }, { 'id': 'CHE', 'description': 'Cheque' }] }] }],\r\n rawRecords,\r\n loading,\r\n error: error ? (error as Error) : null,\r\n refetch: async () => {\r\n await refetch()\r\n }\r\n }\r\n}\r\n","import { Cookies } from '../../cookies'\r\n\r\n/**\r\n * Decodes a JWT safely without verifying signature.\r\n * Use ONLY for reading payload data.\r\n *\r\n * @param {string} token - JWT string\r\n * @returns {Record<string, any> | null}\r\n */\r\nconst decodeJwtPayload = (token: string): Record<string, any> | null => {\r\n try {\r\n const [, payload] = token.split('.')\r\n if (!payload) return null\r\n\r\n const decoded = Buffer.from(payload, 'base64').toString('utf-8')\r\n return JSON.parse(decoded)\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n/**\r\n * Gets session data from cookie \"session\".\r\n * Designed for Next.js 15 App Router (server-side).\r\n *\r\n * @returns {Promise<{\r\n * isSession: boolean\r\n * token?: string\r\n * user?: Record<string, any>\r\n * deviceid?: string\r\n * error?: string\r\n * }>}\r\n */\r\nexport const getSession = async () => {\r\n try {\r\n const token = Cookies.get('session')\r\n return new Promise((resolve) => {\r\n if (!token) {\r\n resolve({ isSession: false })\r\n return\r\n } \r\n const payload = decodeJwtPayload(token)\r\n if (!payload) {\r\n resolve({ isSession: false })\r\n return\r\n }\r\n const { user, deviceid, exp } = payload\r\n const currentTime = Math.floor(Date.now() / 1000)\r\n if (exp && currentTime >= exp) {\r\n resolve({ isSession: false })\r\n return\r\n }\r\n resolve({\r\n isSession: true,\r\n token,\r\n user,\r\n deviceid\r\n })\r\n })\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n return {\r\n isSession: false,\r\n error: String(error.message)\r\n }\r\n }\r\n return {\r\n isSession: false,\r\n error: 'Unexpected session error'\r\n }\r\n }\r\n}\r\n","export const future = null\n","import pkg from '../package.json';\r\nexport * from './hooks/index'\r\nexport * from './utils'\r\nexport * from './utils/generateCode'\r\nexport * from './cookies'\r\nexport * from './security'\r\nexport * from './config/client'\r\nexport * from './cookies/index'\r\n\r\n// Export the version from package.json\r\nexport const version = pkg.version;\r\n\r\n"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsLrB,IAAM,qCAAqCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+E3C,IAAMI,iBAAgBJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","names":["filters","useQuery","useApolloClient","useState","__NEXTAUTH","__NEXTAUTH","logger","logger","__NEXTAUTH","error","gql","useApolloClient","useState","useQuery","useMutation","useQuery","useState","gql","useState","useMutation","useQuery","data","useQuery","gql","useQuery","useQuery","gql","CREATE_FOOD_PRODUCT","GET_BANNER_PROMO_DASHBOARD","CREATE_STORE_CALENDAR","DELETE_ONE_CAT_PRODUCTS","DELETE_ONE_CAT_PRODUCTS_FINAL","DELETE_EXTRA_PRODUCTS","EDIT_EXTRA_PRODUCTS","DELETE_CAT_EXTRA_PRODUCTS","DELETE_CAT_EXTRA_SUB_OPTIONAL_PRODUCTS","UPDATE_CAT_IN_PRODUCT","GET_ULTIMATE_CATEGORY_PRODUCTS","GET_ALL_EXTRA_PRODUCT","GET_ALL_CATEGORIES_WITH_PRODUCT","useQuery","GET_ALL_CATEGORIES_WITH_PRODUCT","data","useEffect","useState","gql","useQuery","gql","useQuery","days","totalMinutes","useMutation","useQuery","gql","GET_ULTIMATE_CATEGORY_PRODUCTS","useQuery","GET_ULTIMATE_CATEGORY_PRODUCTS","gql","useMutation","useState","responseData","error","useMutation","useState","gql","useState","useMutation","storeTableCreate","useQuery","useQuery","gql","useQuery","useEffect","useState","useMutation","gql","useMutation","useQuery","useQuery","useMutation","gql","useMutation","gql","data","useQuery","gql","days","openings","days","gql","useMutation","useState","useState","data","product","useState","inputValue","key","gql","useState","useEffect","Cookies","useMutation","gql","error","useEffect","useEffect","useEffect","useState","useMutation","useQuery","gql","CREATE_STORE_CALENDAR","GET_SCHEDULE_STORE","GET_ONE_SCHEDULE_STORE","useQuery","useMutation","useMutation","useQuery","useMutation","CREATE_STORE_CALENDAR","days","useState","data","selectedDay","GET_SCHEDULE_STORE","GET_ONE_SCHEDULE_STORE","useEffect","useEffect","useState","useEffect","useState","date","year","month","day","days","getTimeString","getCurrentDayAndTime","sortOpeningsByDay","getOpeningKeyFromDay","weekDays","timeToInt","useState","open","dataSchedules","timeToInt","weekDays","days","getCurrentDayAndTime","useEffect","getOpeningKeyFromDay","getTimeString","sortOpeningsByDay","useMutation","gql","useSubscription","gql","useSubscription","gql","days","useQuery","gql","gql","gql","useApolloClient","useMutation","CHANGE_STATE_STORE_ORDER","data","useQuery","statusOrder","onError","useQuery","data","useState","useEffect","useState","useEffect","useState","gql","useQuery","gql","useQuery","version","useQuery","gql","useQuery","useMutation","useEffect","useRef","useState","useMutation","gql","DELETE_EXTRA_PRODUCTS","useMutation","DELETE_EXTRA_PRODUCTS","useMutation","gql","useMutation","useState","useMutation","useRef","useEffect","transformedData","i","useMutation","gql","useMutation","useLazyQuery","gql","useLazyQuery","useMutation","gql","useMutation","useQuery","gql","useQuery","useLazyQuery","gql","useLazyQuery","gql","useMutation","useQuery","gql","useQuery","useMutation","useState","onError","useMutation","useState","useCallback","useState","elem","useMutation","gql","DELETE_CAT_EXTRA_PRODUCTS","GET_EXTRAS_PRODUCT_FOOD_OPTIONAL","useMutation","DELETE_CAT_EXTRA_PRODUCTS","useMutation","gql","DELETE_CAT_EXTRA_SUB_OPTIONAL_PRODUCTS","useMutation","DELETE_CAT_EXTRA_SUB_OPTIONAL_PRODUCTS","GET_EXTRAS_PRODUCT_FOOD_OPTIONAL","useLazyQuery","useState","gql","useState","useLazyQuery","useQuery","gql","useQuery","useMutation","useState","useEffect","useMemo","useMutation","useState","useCallback","useEffect","useLazyQuery","useLazyQuery","useApolloClient","useLazyQuery","useMutation","useQuery","useCallback","useMemo","useState","useSubscription","gql","NEW_STORE_ORDER_SUBSCRIPTION","useMutation","useMutation","editProductFoods","error","useState","useApolloClient","useMemo","useQuery","data","useCallback","useMutation","product","useLazyQuery","gql","useQuery","useQuery","data","useState","useMutation","comments","newItem","quantity","useCallback","item","idStore","useEffect","gql","useState","useMemo","useEffect","useMutation","useQuery","useState","useEffect","gql","GET_All_RATING_STORE","useQuery","GET_All_RATING_STORE","useState","useEffect","useQuery","useState","gql","useQuery","gql","GET_ALL_SALES","GET_ALL_SALES_STATISTICS","CREATE_SHOPPING_CARD","GET_ALL_ORDER","useQuery","GET_ALL_SALES_STATISTICS","data","currentValue","useQuery","useState","year","data","useQuery","gql","useQuery","useMutation","gql","useQuery","useMutation","useLazyQuery","gql","CREATE_CLIENTS","DELETE_ONE_CLIENTS","GET_ALL_CLIENTS","GET_ONE_CLIENT","CREATE_SHOPPING_CARD","CREATE_SHOPPING_CARD_TO_USER_STORE","useQuery","GET_ALL_CLIENTS","useMutation","DELETE_ONE_CLIENTS","CREATE_CLIENTS","data","useLazyQuery","GET_ONE_CLIENT","useEffect","useState","useQuery","gql","useQuery","useEffect","useState","useState","useEffect","useMutation","useRef","useState","useState","useMutation","useState","useMutation","gql","useApolloClient","useQuery","gql","gql","useApolloClient","useMutation","data","error","gql","useMutation","data","useMutation","useState","data","useMutation","useApolloClient","gql","useApolloClient","useMutation","useRef","useState","crop","zoom","useState","STEPS","useRef","useMutation","data","pId","errors","useState","useEffect","useMutation","gql","useMutation","useMutation","useMutation","updateExtProductSubOptional","useState","useEffect","GET_EXTRAS_PRODUCT_FOOD_OPTIONAL","title","editExtFoodSubsOptional","currentList","data","listId","useEffect","useState","useEffect","useCallback","useEffect","useState","useState","useCallback","errors","useEffect","useRef","useState","useEffect","useEffect","useState","optimizedUrl","useMutation","useRef","useState","gql","CREATE_SCHEDULE_STORE","GET_SCHEDULE_STORE","GET_ONE_SCHEDULE_STORE","GET_CAT_OF_PRODUCTS","REGISTER_CAT_OF_PRODUCTS","REGISTER_CONTRACT_STORE","GET_ALL_EMPLOYEE_STORE","GET_ALL_RATING_START_STORE","GET_ALL_VISITOR_STORE","GET_MIN_PEDIDO","GET_All_RATING_STORE","CREATE_LOGO","CREATE_BANNER_STORE","DELETE_ONE_LOGO_STORE","GET_ONE_BANNER_STORE","DELETE_ONE_BANNER_STORE","useRef","useState","useMutation","registerBanner","registerLogo","deleteOneBanner","deleteALogoStore","useEffect","useState","useEffect","useState","useEffect","useState","useEffect","useState","useEffect","useState","onError","useEffect","useRef","useState","useEffect","useRef","useState","useQuery","useLazyQuery","useLazyQuery","useQuery","useApolloClient","useQuery","useApolloClient","useQuery","useQuery","useMutation","useLazyQuery","useState","gql","useState","useQuery","useLazyQuery","useMutation","useLazyQuery","useEffect","useState","gql","useState","useLazyQuery","useEffect","error","useApolloClient","useLazyQuery","useMutation","useCallback","useEffect","useReducer","useMemo","useState","useLazyQuery","useLazyQuery","useState","data","useMutation","useLazyQuery","product","useReducer","useCallback","item","useEffect","useMemo","dataOptional","ExtProductFoodsSubOptionalAll","__typename","useApolloClient","code","registerSalesStore","success","PRODUCT","newItem","productsFood","sendNotification","useQuery","gql","GET_MIN_PEDIDO","useQuery","GET_MIN_PEDIDO","useQuery","useMemo","gql","useQuery","useMemo","useQuery","gql","useQuery","useMutation","useState","days","gql","useState","useMutation","days","useEffect","useState","useQuery","gql","statusOrder","useQuery","useEffect","useState","useState","useEffect","useState","useEffect","cart","total","useMutation","useQuery","gql","useQuery","useMutation","Cookies","useState","useEffect","crypto","useQuery","gql","useQuery","gql","useMutation","data","useQuery","gql","useState","useEffect","days","gql","useQuery","useState","useEffect","useQuery","gql","useQuery","gql","useQuery","gql","useQuery","gql","useQuery","gql","GET_TOTAL_PRODUCTS_SOLD","gql","useQuery","gql","useQuery","gql","useQuery","gql","useMutation","data","upsertGoal","useQuery","gql","data","gql","useMutation","gql","useMutation","useCallback","useLazyQuery","gql","useState","gql","useState","useLazyQuery","useLazyQuery","gql","useState","gql","useState","useLazyQuery","data","useEffect","useState","useRef","useState","validTypes","validTypes","useState","useRef","error","rotation","e","image","gql","useMutation","useQuery","gql","gql","useMutation","data","useEffect","useRef","useState","gql","useMutation","useCallback","useMutation","gql","useMutation","useQuery","useQuery","useQuery","useQuery","useState","useState","theme","gql","useQuery","onError"]}
|