npm-pkg-hook 1.12.4 → 1.12.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +57529 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +57315 -0
- package/dist/index.mjs.map +1 -0
- package/eslint.config.mts +153 -0
- package/package.json +30 -45
- package/src/config/client/errors.ts +39 -0
- package/src/hooks/addTenMinutes/{index.js → index.ts} +4 -4
- package/src/hooks/calculateLogLatHaversine/{index.js → index.ts} +15 -4
- package/src/hooks/completeSchedules/{index.js → index.ts} +4 -4
- package/src/hooks/convertToMilitaryTime/index.ts +18 -0
- package/src/hooks/generateStoreURL/index.ts +41 -0
- package/src/hooks/generateTemplate/{index.js → index.ts} +15 -11
- package/src/hooks/getCardType/{index.js → index.ts} +1 -1
- 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.js → index.ts} +18 -12
- package/src/hooks/getTotalHours/index.ts +76 -0
- package/src/hooks/handleLogin/{index.js → index.ts} +4 -0
- package/src/hooks/index.ts +8 -2
- package/src/hooks/statusOpenStores/helpers/{index.js → index.ts} +24 -1
- package/src/hooks/statusOpenStores/index.ts +221 -0
- package/src/hooks/updateExtProductFoodsOptional/{index.js → index.ts} +12 -3
- package/src/hooks/useAcumulateDate/index.ts +18 -0
- package/src/hooks/useAllStoresPendingToRegister/{index.js → index.ts} +3 -0
- package/src/hooks/useAmountInput/index.ts +42 -32
- package/src/hooks/useAnimationText/{index.jsx → index.ts} +2 -2
- package/src/hooks/useAsideCart/{index.js → index.ts} +22 -19
- package/src/hooks/useBanner/{index.js → index.ts} +2 -1
- package/src/hooks/useCart/useCart/helpers/{index.js → index.ts} +10 -6
- package/src/hooks/useCart/useCart/{index.js → index.ts} +29 -17
- package/src/hooks/useCart/useGetCart/{index.js → index.ts} +2 -1
- package/src/hooks/useCatWithProduct/{index.js → index.ts} +11 -5
- package/src/hooks/useCatWithProduct/types/index.ts +104 -0
- package/src/hooks/useCatWithProductClient/{index.js → index.ts} +3 -2
- package/src/hooks/useCategoriesProduct/{index.js → index.ts} +2 -1
- package/src/hooks/useCategoryInStore/index.ts +167 -0
- package/src/hooks/useCategoryStore/{index.js → index.ts} +2 -1
- package/src/hooks/useCategoryStore/{queries.js → queries.ts} +2 -2
- package/src/hooks/useChartData/{index.js → index.ts} +9 -8
- package/src/hooks/useChartData/useChartData/{index.js → index.ts} +31 -30
- package/src/hooks/useChartData/useChartDataAllOrders/{index.js → index.ts} +2 -2
- package/src/hooks/useCheckbox/{index.js → index.ts} +1 -1
- package/src/hooks/useCities/{index.js → index.ts} +2 -1
- package/src/hooks/useClients/{index.js → index.ts} +2 -1
- package/src/hooks/useClients/{queries.js → queries.ts} +7 -4
- package/src/hooks/useColorByLetters/helpers/{alea.js → alea.ts} +19 -0
- package/src/hooks/useColorByLetters/helpers/{index.js → index.ts} +5 -1
- package/src/hooks/useColorByLetters/helpers/{mersenne_twister.js → mersenne_twister.ts} +1 -1
- package/src/hooks/useColorByLetters/{index.js → index.ts} +3 -6
- package/src/hooks/useConnection/{index.js → index.ts} +3 -3
- package/src/hooks/useCountries/{index.js → index.ts} +2 -1
- package/src/hooks/useCreateOrderStatusType/index.ts +8 -6
- package/src/hooks/useCreateProduct/helpers/{index.js → index.ts} +1 -1
- 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.js → index.ts} +22 -19
- package/src/hooks/useCreateStorePendingToRegister/{index.js → index.ts} +5 -1
- package/src/hooks/useDeleteExtraProductFoods/{index.js → index.ts} +2 -1
- package/src/hooks/useDeleteSubProductOptional/{index.js → index.ts} +5 -3
- package/src/hooks/useDeliveryTime/{index.js → index.ts} +3 -1
- package/src/hooks/useDepartments/{index.js → index.ts} +2 -1
- package/src/hooks/useDessert/{index.js → index.ts} +56 -52
- package/src/hooks/useDessertWithPrice/helpers/{index.js → index.ts} +4 -4
- package/src/hooks/useDessertWithPrice/{index.js → index.ts} +34 -26
- package/src/hooks/useDevWS/index.ts +43 -43
- package/src/hooks/useDevices/{useGetDevices.js → useGetDevices.ts} +3 -3
- package/src/hooks/useDevices/{useRegisterDevices.js → useRegisterDevices.ts} +5 -5
- package/src/hooks/useDownloadReports/helpers/downloadFileFromResponse.ts +17 -17
- package/src/hooks/useDownloadReports/useDownloadReportByDay/index.ts +4 -2
- package/src/hooks/useDownloadReports/useGetReportByDateRange/index.ts +3 -2
- 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} +5 -5
- 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.js → index.ts} +2 -1
- package/src/hooks/useEmployee/{queries.js → queries.ts} +1 -1
- package/src/hooks/useEmployee/{useCreateEmployee.js → useCreateEmployee.ts} +6 -2
- package/src/hooks/useFavoriteStores/{index.js → index.ts} +5 -3
- package/src/hooks/useFetchMoreInteractions/index.jsx +26 -26
- package/src/hooks/useFilterConfigs/index.ts +173 -0
- package/src/hooks/useFingerprintjs/{index.js → index.ts} +29 -4
- package/src/hooks/useFormTools/{index.js → index.ts} +38 -11
- package/src/hooks/useFormatDate/{index.js → index.ts} +10 -5
- package/src/hooks/useFullScreenMode/{index.js → index.ts} +1 -5
- package/src/hooks/useGetAllLocationUser/{index.js → index.ts} +2 -1
- package/src/hooks/useGetAllLocationUser/{queries.js → queries.ts} +2 -2
- package/src/hooks/{useSales/useGetAllSales/index.js → useGetAllSales/index.ts} +3 -2
- package/src/hooks/useGetExtProductFoodsSubOptionalAll/{index.js → index.ts} +2 -1
- package/src/hooks/useGetFoodRecomended/{index.js → index.ts} +2 -1
- package/src/hooks/useGetMinPrice/{index.js → index.ts} +2 -1
- package/src/hooks/useGetOneStoreRating/{index.js → index.ts} +2 -1
- package/src/hooks/useGetStoreCookie/{index.js → index.ts} +1 -1
- 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 +25 -9
- package/src/hooks/useImageUploaderProduct/helper/getOrientation.ts +5 -4
- package/src/hooks/useImageUploaderProduct/index.ts +227 -224
- package/src/hooks/useImageWeight/{index.js → index.ts} +4 -0
- package/src/hooks/useImagesStore/{index.js → index.ts} +7 -5
- package/src/hooks/useImagesStore/{queries.js → queries.ts} +1 -1
- package/src/hooks/useIncomingOrders/{index.js → index.ts} +2 -1
- package/src/hooks/useIncomingOrders/{queries.js → queries.ts} +1 -1
- package/src/hooks/useIntersection/{index.js → index.ts} +1 -1
- package/src/hooks/useInventory/{queries.js → queries.ts} +2 -2
- package/src/hooks/useInventory/{useGetProductsInStock.js → useGetProductsInStock.ts} +2 -1
- package/src/hooks/useLazyScript/{index.js → index.ts} +3 -0
- package/src/hooks/useLocalSorage/{index.js → index.ts} +3 -3
- package/src/hooks/useLocationManager/{index.js → index.ts} +3 -3
- package/src/hooks/useLoginEmployeeInStore/{index.js → index.ts} +1 -1
- package/src/hooks/useLogout/helpers/BroadcastChannel.ts +74 -0
- package/src/hooks/useLogout/helpers/{apiBaseUrl.js → apiBaseUrl.ts} +4 -0
- package/src/hooks/useLogout/helpers/{fetchData.js → fetchData.ts} +10 -1
- package/src/hooks/useLogout/helpers/{getCsrfToken.js → getCsrfToken.ts} +8 -1
- package/src/hooks/useLogout/helpers/{index.js → index.ts} +14 -6
- package/src/hooks/useLogout/helpers/{logger.js → logger.ts} +26 -8
- package/src/hooks/useLogout/helpers/{parseUrl.js → parseUrl.ts} +5 -2
- package/src/hooks/useLogout/{index.js → index.ts} +29 -20
- package/src/hooks/useManageNewOrder/helpers/{index.js → index.ts} +1 -1
- package/src/hooks/useManageNewOrder/{index.js → index.ts} +6 -4
- package/src/hooks/useManageQueryParams/index.ts +120 -0
- package/src/hooks/useModules/helpers/{validateModules.js → validateModules.ts} +1 -1
- package/src/hooks/useModules/index.ts +124 -0
- package/src/hooks/useMouse/index.ts +23 -18
- package/src/hooks/useOrderStatusTypes/useOrderStatusTypes/index.ts +1 -1
- package/src/hooks/useOrderStatusTypes/useUpdateOrderStatusPriorities/index.ts +7 -5
- package/src/hooks/useOrders/{queries.js → queries.ts} +30 -20
- package/src/hooks/useOrders/useChangeOrderState/index.ts +79 -76
- package/src/hooks/useOrders/useOrdersFromStore/index.ts +4 -3
- 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/usePrintSaleTicket/index.ts +4 -0
- package/src/hooks/useProductsFood/{index.js → index.ts} +115 -27
- package/src/hooks/useProductsFood/{queriesStore.js → queriesStore.ts} +1 -1
- package/src/hooks/useProductsFood/{useEditProduct.js → useEditProduct.ts} +2 -1
- package/src/hooks/useProductsFood/{usetagsProducts.js → usetagsProducts.ts} +6 -3
- 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.js → index.ts} +1 -1
- package/src/hooks/usePushNotifications/helpers/{index.js → index.ts} +9 -0
- package/src/hooks/usePushNotifications/{index.js → index.ts} +2 -1
- package/src/hooks/useQueryLocationsMap/{index.js → index.ts} +2 -1
- package/src/hooks/useRatingArrayData/{index.js → index.ts} +4 -4
- package/src/hooks/useRatingArrayData/{queries.js → queries.ts} +1 -1
- package/src/hooks/useRemoveExtraProductFoodsOptional/{index.js → index.ts} +2 -1
- package/src/hooks/useReport/{index.js → index.ts} +2 -1
- package/src/hooks/useReport/{queries.js → queries.ts} +2 -53
- package/src/hooks/useRestaurant/helpers/{index.js → index.ts} +4 -0
- package/src/hooks/useRestaurant/helpers/{manageStatusOpen.js → manageStatusOpen.ts} +1 -1
- package/src/hooks/useRestaurant/{index.js → index.ts} +5 -3
- package/src/hooks/useRoads/{index.js → index.ts} +2 -1
- package/src/hooks/useRoles/{queries.js → queries.ts} +1 -1
- package/src/hooks/useRoles/{useCreateRole.js → useCreateRole.ts} +4 -1
- package/src/hooks/useRoles/{useGetRoles.js → useGetRoles.ts} +2 -1
- 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.js → index.ts} +559 -522
- package/src/hooks/useSales/{queries.js → queries.ts} +187 -79
- 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.js → useGetSale.ts} +10 -2
- package/src/hooks/useSales/{useTotalSales.js → useTotalSales.ts} +2 -1
- package/src/hooks/useSaveAvailableProduct/helpers/{index.js → index.ts} +4 -4
- package/src/hooks/useSaveAvailableProduct/{index.js → index.ts} +2 -1
- package/src/hooks/useSaveLocation/{index.js → index.ts} +2 -1
- package/src/hooks/useSaveLocation/{queries.js → queries.ts} +1 -1
- package/src/hooks/useSchedule/{index.jsx → index.ts} +14 -1
- package/src/hooks/useSchedule/{index.js → schedule.ts} +2 -1
- package/src/hooks/useScheduleData/{index.js → index.ts} +21 -9
- package/src/hooks/useSetImageProducts/{index.js → index.ts} +4 -2
- package/src/hooks/useSetupSchedule/{index.js → index.ts} +40 -28
- package/src/hooks/useStatusOpenStore/helpers/{index.js → index.ts} +24 -1
- package/src/hooks/useStatusOpenStore/{index.js → index.ts} +30 -14
- 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.js → index.ts} +1 -1
- package/src/hooks/useStockMovements/{index.js → index.ts} +4 -3
- package/src/hooks/useStore/{index.js → index.ts} +30 -27
- package/src/hooks/useStoreContacts/{index.js → index.ts} +11 -5
- package/src/hooks/useStoreTable/{useStoreTableCreate.js → useStoreTableCreate.ts} +3 -2
- package/src/hooks/useStoreTable/{useStoreTables.js → useStoreTables.ts} +2 -1
- package/src/hooks/useSubscriptionValidation/index.ts +112 -0
- package/src/hooks/useTagProducts/useDeleteOneTag.ts +66 -66
- package/src/hooks/useTagProducts/useGetAllTags.ts +2 -2
- package/src/hooks/useTagProducts/useRegisterMultipleTags.ts +27 -26
- package/src/hooks/useTheme/index.ts +65 -0
- package/src/hooks/useTimeAgo/{useTimeAgo.js → useTimeAgo.ts} +7 -7
- package/src/hooks/useTokenCards/{index.js → index.ts} +7 -3
- package/src/hooks/useUpdateCart/{index.js → index.ts} +3 -2
- package/src/hooks/useUpdateCartCookie/{index.js → index.ts} +23 -6
- package/src/hooks/useUpdateDashboardComponent/index.ts +11 -11
- package/src/hooks/useUpdateExtProductFoodsSubOptional/{index.js → index.ts} +2 -1
- package/src/hooks/useUpdateModuleOrder/{index.js → index.ts} +2 -2
- package/src/hooks/useUpdateMultipleExtProduct/{index.js → index.ts} +2 -1
- package/src/hooks/useUpdateMultipleProducts/{index.js → index.ts} +57 -20
- package/src/hooks/useUploadProducts/helpers/{parseNumber.js → parseNumber.ts} +3 -3
- package/src/hooks/useUploadProducts/{index.js → index.ts} +89 -69
- package/src/hooks/useUpsertGoal/{index.js → index.ts} +1 -1
- package/src/hooks/useUser/{index.js → index.ts} +5 -4
- package/src/hooks/useWeeklyStockMovement/helpers/{index.js → index.ts} +3 -3
- package/src/hooks/useWeeklyStockMovement/{index.js → index.ts} +4 -3
- package/src/hooks/useWindowSize/{index.js → index.ts} +9 -2
- package/src/index.ts +13 -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/{index.js → utils.ts} +69 -31
- package/tsconfig.eslint.json +16 -0
- package/tsconfig.json +18 -2
- package/tsup.config.ts +24 -0
- package/.eslintrc.js +0 -38
- package/.eslintrc.json +0 -127
- package/src/config/client/errors.js +0 -26
- package/src/hooks/convertToMilitaryTime/index.js +0 -14
- package/src/hooks/generateStoreURL/index.js +0 -38
- package/src/hooks/getGlobalSession/index.js +0 -49
- package/src/hooks/getSession/index.js +0 -18
- package/src/hooks/getTotalHours/index.js +0 -48
- package/src/hooks/statusOpenStores/index.js +0 -156
- package/src/hooks/useAcumulateDate/index.js +0 -16
- package/src/hooks/useCategoryInStore/index.js +0 -100
- package/src/hooks/useEditOneExtProductFoodOptional/index.js +0 -28
- package/src/hooks/useEditSubProductOptional/index.js +0 -11
- package/src/hooks/useLogout/helpers/BroadcastChannel.js +0 -31
- package/src/hooks/useManageQueryParams/index.js +0 -40
- package/src/hooks/useModules/index.js +0 -58
- package/src/hooks/useSales/helpers/index.js +0 -55
- package/src/hooks/useSubscriptionValidation/index.js +0 -41
- package/src/index.jsx +0 -9
- package/src/security/index.js +0 -1
- package/src/utils/UtilDateRange.js +0 -31
- /package/src/config/client/{index.js → index.ts} +0 -0
- /package/src/config/content/{index.js → index.ts} +0 -0
- /package/src/cookies/{index.js → index.ts} +0 -0
- /package/src/hooks/getCategoriesWithProduct/helpers/{index.js → index.ts} +0 -0
- /package/src/hooks/isTokenExpired/{index.js → index.ts} +0 -0
- /package/src/hooks/newMessageSubscription/{index.js → index.ts} +0 -0
- /package/src/hooks/newStoreOrderSubscription/{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/useCart/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useCatWithProduct/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useCatWithProductClient/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useCategoriesProduct/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useCategoryInStore/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useChatRoomSubscription/{index.js → index.ts} +0 -0
- /package/src/hooks/useCities/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useColorByLetters/helpers/{colors.js → colors.ts} +0 -0
- /package/src/hooks/useCountries/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useCreateDeliveryTime/{index.js → index.ts} +0 -0
- /package/src/hooks/useCreateStorePendingToRegister/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useDashboardComponents/{index.js → index.ts} +0 -0
- /package/src/hooks/useDeleteSubProductOptional/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useDepartments/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useDessert/helpers/{index.js → index.ts} +0 -0
- /package/src/hooks/useDessertWithPrice/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useDevices/{index.js → index.ts} +0 -0
- /package/src/hooks/useDevices/{queries.js → queries.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/useEvent/{index.js → index.ts} +0 -0
- /package/src/hooks/useFavoriteStores/{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/useGetCookies/{index.js → index.ts} +0 -0
- /package/src/hooks/useGetFoodRecomended/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useGetMessagesToRoom/{index.js → index.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/useGetSalesAmountToday/{index.js → index.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/useImagesStore/utils/{index.js → index.ts} +0 -0
- /package/src/hooks/useInnerHtml/{index.js → index.ts} +0 -0
- /package/src/hooks/useInventory/{index.js → index.ts} +0 -0
- /package/src/hooks/useInventory/{useUpdateManageStock.js → useUpdateManageStock.ts} +0 -0
- /package/src/hooks/useKeypress/{index.js → index.ts} +0 -0
- /package/src/hooks/useLocalBackendIp/{index.js → index.ts} +0 -0
- /package/src/hooks/useLocationNavigate/{index.js → index.ts} +0 -0
- /package/src/hooks/useManageNewOrder/helpers/{mock.js → mock.ts} +0 -0
- /package/src/hooks/useMobile/{index.js → index.ts} +0 -0
- /package/src/hooks/useModules/helpers/{index.js → index.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/useOrders/{index.js → index.ts} +0 -0
- /package/src/hooks/usePWAInstall/{index.js → index.ts} +0 -0
- /package/src/{services/index.js → hooks/useProductsFood/types/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/useQueryLocationsMap/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useReactToPrint/{index.js → index.txt} +0 -0
- /package/src/hooks/useRemoveExtraProductFoodsOptional/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useRestaurant/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useRoads/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useRoles/{index.js → index.ts} +0 -0
- /package/src/hooks/useRoles/{useRemoveRoles.js → useRemoveRoles.ts} +0 -0
- /package/src/hooks/useRoles/{useUpdateRolesPriority.js → useUpdateRolesPriority.ts} +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/useSetImageProducts/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useSetSession/{index.js → index.ts} +0 -0
- /package/src/hooks/useSetState/{index.js → index.ts} +0 -0
- /package/src/hooks/useSetupSchedule/helpers/{index.js → index.ts} +0 -0
- /package/src/hooks/useStatusOrdersClient/helpers/{index.js → index.ts} +0 -0
- /package/src/hooks/useStore/{queries.js → queries.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/hooks/useStoreTable/{index.js → index.ts} +0 -0
- /package/src/hooks/useStoreTable/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useTopProductsMovements/{index.js → index.ts} +0 -0
- /package/src/hooks/useTotalAllSales/{index.js → index.ts} +0 -0
- /package/src/hooks/useTotalProductsInStock/{index.js → index.ts} +0 -0
- /package/src/hooks/useTotalProductsSold/{index.js → index.ts} +0 -0
- /package/src/hooks/useTotalProductsSolded/{index.js → index.ts} +0 -0
- /package/src/hooks/useUpdateExistingOrders/{index.js → index.ts} +0 -0
- /package/src/hooks/useUpdateMultipleExtProduct/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useUpdateMultipleProducts/{queries.js → queries.ts} +0 -0
- /package/src/hooks/useUploadProducts/helpers/{index.js → index.ts} +0 -0
- /package/src/hooks/useUploadProducts/helpers/{validateProductDataExcel.js → validateProductDataExcel.ts} +0 -0
- /package/src/hooks/useUser/{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,222 @@
|
|
|
1
|
+
// ticket-generator.ts
|
|
2
|
+
/**
|
|
3
|
+
* Ticket generator for POS systems.
|
|
4
|
+
* - Provides numeric and alphanumeric strategies.
|
|
5
|
+
* - Supports prefix, timestamp embedding, synchronous generation and async uniqueness check.
|
|
6
|
+
*
|
|
7
|
+
* JSDoc comments are in English as requested.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
type Strategy = 'alphanumeric' | 'numeric';
|
|
11
|
+
|
|
12
|
+
export interface TicketConfig {
|
|
13
|
+
/** Total length of the generated code excluding prefix. Minimum 4. */
|
|
14
|
+
length?: number;
|
|
15
|
+
/** Strategy: 'alphanumeric' | 'numeric' */
|
|
16
|
+
strategy?: Strategy;
|
|
17
|
+
/** Optional human-readable prefix (e.g. 'TKT-', 'POS1-') */
|
|
18
|
+
prefix?: string;
|
|
19
|
+
/** If true, embed a short timestamp chunk (base36) at start of payload */
|
|
20
|
+
timestamp?: boolean;
|
|
21
|
+
/** Maximum attempts for uniqueness check when using generateUniqueAsync */
|
|
22
|
+
maxAttempts?: number;
|
|
23
|
+
/** Padding char for numeric sequences (only used if `useSequential` provided) */
|
|
24
|
+
padChar?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Result returned by generators.
|
|
29
|
+
*/
|
|
30
|
+
export type TicketResult =
|
|
31
|
+
| { success: true; code: string; error?: undefined }
|
|
32
|
+
| { success: false; error: string; code?: string };
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Async uniqueness checker signature.
|
|
36
|
+
* Implement with DB query that returns true if code is unique (not found).
|
|
37
|
+
*/
|
|
38
|
+
export type IsUniqueFn = (code: string) => Promise<boolean>;
|
|
39
|
+
|
|
40
|
+
/* -------------------- Implementation -------------------- */
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Secure random integer in [0, max)
|
|
44
|
+
* @param max
|
|
45
|
+
* @returns random integer in [0, max)
|
|
46
|
+
*/
|
|
47
|
+
const secureRandomInt = (max: number): number => {
|
|
48
|
+
if (typeof crypto !== 'undefined' && typeof (crypto as any).getRandomValues === 'function') {
|
|
49
|
+
// browser
|
|
50
|
+
const arr = new Uint32Array(1);
|
|
51
|
+
(crypto as any).getRandomValues(arr)
|
|
52
|
+
return arr[0] % max
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
// node
|
|
56
|
+
|
|
57
|
+
const nodeCrypto = require('crypto')
|
|
58
|
+
const buf = nodeCrypto.randomBytes(4)
|
|
59
|
+
const val = buf.readUInt32BE(0)
|
|
60
|
+
return val % max
|
|
61
|
+
} catch {
|
|
62
|
+
// fallback (less secure)
|
|
63
|
+
return Math.floor(Math.random() * max)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Build a random string from charset.
|
|
69
|
+
* @param length
|
|
70
|
+
* @param charset
|
|
71
|
+
*/
|
|
72
|
+
const randomFromCharset = (length: number, charset: string): string => {
|
|
73
|
+
const out: string[] = []
|
|
74
|
+
const m = charset.length
|
|
75
|
+
for (let i = 0; i < length; i += 1) {
|
|
76
|
+
out.push(charset[secureRandomInt(m)])
|
|
77
|
+
}
|
|
78
|
+
return out.join('')
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Short fixed-size timestamp chunk that respects strategy.
|
|
83
|
+
* - For 'numeric' returns decimal digits (zero-padded).
|
|
84
|
+
* - For 'alphanumeric' returns base36 chars.
|
|
85
|
+
*
|
|
86
|
+
* @param strategy generation strategy
|
|
87
|
+
* @param size chunk length (default 4)
|
|
88
|
+
* @returns timestamp chunk string of length `size`
|
|
89
|
+
*/
|
|
90
|
+
const timestampChunk = (strategy: Strategy, size = 4): string => {
|
|
91
|
+
const now = Date.now()
|
|
92
|
+
if (strategy === 'numeric') {
|
|
93
|
+
const mod = Math.pow(10, size)
|
|
94
|
+
const n = (now % mod).toString().padStart(size, '0')
|
|
95
|
+
return n
|
|
96
|
+
}
|
|
97
|
+
// alphanumeric: compact base36 slice (keeps letters & digits)
|
|
98
|
+
return now.toString(36).slice(-size).padStart(size, '0')
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Validate config and return normalized defaults or error string.
|
|
103
|
+
* @param cfg
|
|
104
|
+
*/
|
|
105
|
+
const normalizeConfig = (cfg?: TicketConfig): { cfg?: Required<TicketConfig>; error?: string } => {
|
|
106
|
+
const defaultCfg: Required<TicketConfig> = {
|
|
107
|
+
length: 10,
|
|
108
|
+
strategy: 'alphanumeric',
|
|
109
|
+
prefix: '',
|
|
110
|
+
timestamp: false,
|
|
111
|
+
maxAttempts: 5,
|
|
112
|
+
padChar: '0'
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (!cfg) return { cfg: defaultCfg }
|
|
116
|
+
|
|
117
|
+
const merged = { ...defaultCfg, ...cfg }
|
|
118
|
+
|
|
119
|
+
if (!Number.isInteger(merged.length) || merged.length < 4) {
|
|
120
|
+
return { error: 'length must be an integer >= 4' }
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (!['alphanumeric', 'numeric'].includes(merged.strategy)) {
|
|
124
|
+
return { error: "strategy must be 'alphanumeric' or 'numeric'" }
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (typeof merged.prefix !== 'string' || /[^A-Za-z0-9-_]/.test(merged.prefix)) {
|
|
128
|
+
return { error: 'prefix must be alphanumeric, dash or underscore only' }
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (typeof merged.maxAttempts !== 'number' || merged.maxAttempts < 1) {
|
|
132
|
+
merged.maxAttempts = defaultCfg.maxAttempts
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (typeof merged.padChar !== 'string' || merged.padChar.length !== 1) {
|
|
136
|
+
merged.padChar = defaultCfg.padChar
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return { cfg: merged }
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Generate a ticket code (synchronous, no uniqueness guarantee).
|
|
144
|
+
* Use generateUniqueAsync if you need persistence-level uniqueness.
|
|
145
|
+
*
|
|
146
|
+
* @param config Ticket generation options
|
|
147
|
+
* @returns TicketResult with code or error
|
|
148
|
+
*/
|
|
149
|
+
export const generateTicket = (config?: TicketConfig): TicketResult => {
|
|
150
|
+
const normalized = normalizeConfig(config)
|
|
151
|
+
if (normalized.error) return { success: false, error: normalized.error }
|
|
152
|
+
const cfg = normalized.cfg!
|
|
153
|
+
|
|
154
|
+
const payloadLen = cfg.length
|
|
155
|
+
const prefix = cfg.prefix || ''
|
|
156
|
+
|
|
157
|
+
// decide charset
|
|
158
|
+
const numericCharset = '0123456789'
|
|
159
|
+
const alphaNumCharset = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz0123456789' // removed O/0/l for readability
|
|
160
|
+
const charset = cfg.strategy === 'numeric' ? numericCharset : alphaNumCharset
|
|
161
|
+
|
|
162
|
+
// prepare timestamp chunk if requested (keep it short and strategy-aware)
|
|
163
|
+
const ts = cfg.timestamp ? timestampChunk(cfg.strategy, 4) : ''
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
// calc remaining length for random part
|
|
167
|
+
const remaining = payloadLen - ts.length
|
|
168
|
+
if (remaining < 1) return { success: false, error: 'length too small for timestamp embedding' }
|
|
169
|
+
|
|
170
|
+
const randomPart = randomFromCharset(remaining, charset)
|
|
171
|
+
|
|
172
|
+
const code = `${prefix}${ts}${randomPart}`
|
|
173
|
+
return { success: true, code }
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Generate a ticket code with uniqueness guarantee using an async uniqueness checker.
|
|
178
|
+
* Tries up to config.maxAttempts times.
|
|
179
|
+
*
|
|
180
|
+
* @param isUnique Async function that returns true if code is unique (not present)
|
|
181
|
+
* @param config Ticket generation options
|
|
182
|
+
* @returns TicketResult with unique code or error
|
|
183
|
+
*/
|
|
184
|
+
export const generateUniqueAsync = async (isUnique: IsUniqueFn, config?: TicketConfig): Promise<TicketResult> => {
|
|
185
|
+
const normalized = normalizeConfig(config)
|
|
186
|
+
if (normalized.error) return { success: false, error: normalized.error }
|
|
187
|
+
const cfg = normalized.cfg!
|
|
188
|
+
|
|
189
|
+
for (let attempt = 1; attempt <= cfg.maxAttempts; attempt += 1) {
|
|
190
|
+
const candidateRes = generateTicket(cfg)
|
|
191
|
+
if (!candidateRes.success) return candidateRes
|
|
192
|
+
|
|
193
|
+
const candidate = candidateRes.code
|
|
194
|
+
try {
|
|
195
|
+
const unique = await isUnique(candidate)
|
|
196
|
+
if (unique) return { success: true, code: candidate }
|
|
197
|
+
// else collision -> retry
|
|
198
|
+
} catch (err) {
|
|
199
|
+
return { success: false, error: `isUnique function threw: ${(err as Error).message}` }
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return { success: false, error: 'unable to generate unique ticket after max attempts' }
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* -------------------- Example usage -------------------- */
|
|
207
|
+
|
|
208
|
+
/*
|
|
209
|
+
Example (sync):
|
|
210
|
+
const res = generateTicket({ length: 8, strategy: 'numeric', prefix: 'T-', timestamp: true });
|
|
211
|
+
if (!res.success) console.error(res.error);
|
|
212
|
+
else console.log('Ticket:', res.code);
|
|
213
|
+
|
|
214
|
+
Example (async uniqueness check, e.g. DB):
|
|
215
|
+
const isUniqueInDb = async (code: string) => {
|
|
216
|
+
// query DB to see if code exists; return true if NOT exist
|
|
217
|
+
return !(await db.exists({ ticketCode: code }));
|
|
218
|
+
};
|
|
219
|
+
const unique = await generateUniqueAsync(isUniqueInDb, { length: 10, strategy: 'alphanumeric', prefix: 'POS1-', timestamp: true });
|
|
220
|
+
if (unique.success) console.log('Unique ticket:', unique.code);
|
|
221
|
+
else console.error('Error generating unique:', unique.error);
|
|
222
|
+
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { randomBytes } from 'crypto'
|
|
1
|
+
import { randomBytes } from 'node:crypto'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @description It takes an array of elements and returns an object with a submit hook for each element.
|
|
@@ -6,7 +6,7 @@ import { randomBytes } from 'crypto'
|
|
|
6
6
|
* @param {array} elements elementos del formulario
|
|
7
7
|
* @return {array} devuelve un array de booleanos con el nombre identificador para cada estado en react.
|
|
8
8
|
*/
|
|
9
|
-
const validTypes = {
|
|
9
|
+
const validTypes: Record<string, boolean> = {
|
|
10
10
|
text: true,
|
|
11
11
|
password: true,
|
|
12
12
|
email: true,
|
|
@@ -29,17 +29,17 @@ export const statusProduct = {
|
|
|
29
29
|
active: 1
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
export const validationSubmitHooks = elements => {
|
|
32
|
+
export const validationSubmitHooks = (elements: Array<HTMLElement & { name?: string; type?: string; value?: any; dataset?: DOMStringMap }>) => {
|
|
33
33
|
if (!elements || elements.length === 0) {
|
|
34
34
|
return {}
|
|
35
35
|
}
|
|
36
|
-
let errorForm = {}
|
|
36
|
+
let errorForm: Record<string, boolean> = {}
|
|
37
37
|
|
|
38
38
|
for (const element of elements) {
|
|
39
39
|
if (element.name) {
|
|
40
|
-
const elementType = element.type || element.tagName.toLowerCase()
|
|
40
|
+
const elementType = (element.type as string) || element.tagName.toLowerCase()
|
|
41
41
|
if (validTypes[elementType]) {
|
|
42
|
-
if (element.dataset.required === 'true') {
|
|
42
|
+
if (element.dataset && element.dataset.required === 'true') {
|
|
43
43
|
if (!element.value) {
|
|
44
44
|
errorForm = { ...errorForm, [element.name]: true }
|
|
45
45
|
} else {
|
|
@@ -55,10 +55,16 @@ export const validationSubmitHooks = elements => {
|
|
|
55
55
|
return errorForm
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
export const getCurrentDomain = () => {
|
|
58
|
+
export const getCurrentDomain = (): string | boolean => {
|
|
59
59
|
return typeof window !== 'undefined' && window.location.hostname
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
+
|
|
63
|
+
interface RandomCodeOptions {
|
|
64
|
+
prefix?: string;
|
|
65
|
+
suffix?: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
62
68
|
/**
|
|
63
69
|
* Generates a cryptographically secure random string of given length.
|
|
64
70
|
* @param length - Desired length of the generated code.
|
|
@@ -66,9 +72,9 @@ export const getCurrentDomain = () => {
|
|
|
66
72
|
* @returns Random alphanumeric string with optional prefix and suffix.
|
|
67
73
|
*/
|
|
68
74
|
export const RandomCode = (
|
|
69
|
-
length,
|
|
70
|
-
options
|
|
71
|
-
) => {
|
|
75
|
+
length: number,
|
|
76
|
+
options: RandomCodeOptions = {}
|
|
77
|
+
): string => {
|
|
72
78
|
if (length <= 0) {
|
|
73
79
|
throw new Error('Length must be greater than 0')
|
|
74
80
|
}
|
|
@@ -93,10 +99,19 @@ export const RandomCode = (
|
|
|
93
99
|
* @param {{ cache: object, query: object, nameFun: string, dataNew: object, type: number, id: string }} params Parámetros para actualizar el cachet de apollo
|
|
94
100
|
* @returns {null} no hay retorno
|
|
95
101
|
*/
|
|
96
|
-
export
|
|
102
|
+
export interface UpdateCacheModParams {
|
|
103
|
+
cache: any;
|
|
104
|
+
query: any;
|
|
105
|
+
nameFun: string;
|
|
106
|
+
dataNew?: any;
|
|
107
|
+
type: number;
|
|
108
|
+
id?: string;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export const updateCacheMod = async ({ cache, query, nameFun, dataNew, type, id }: UpdateCacheModParams): Promise<any> => {
|
|
97
112
|
return cache.modify({
|
|
98
113
|
fields: {
|
|
99
|
-
[nameFun]
|
|
114
|
+
[nameFun](dataOld = []) {
|
|
100
115
|
if (type === 1) return cache.writeQuery({ query, data: [...(dataOld || []), { ...(dataNew || {}) }] })
|
|
101
116
|
if (type === 2) return cache.writeQuery({ query, data: { ...(dataOld || {}), ...(dataNew || {}) } })
|
|
102
117
|
if (type === 3) return cache.writeQuery({ query, data: dataOld.filter(x => { return x === id }) })
|
|
@@ -111,7 +126,7 @@ export const updateCacheMod = async ({ cache, query, nameFun, dataNew, type, id
|
|
|
111
126
|
* @param {string|number} value - El valor a formatear.
|
|
112
127
|
* @returns {string} El valor formateado como número o el valor original si no es numérico.
|
|
113
128
|
*/
|
|
114
|
-
export const numberFormat = value => {
|
|
129
|
+
export const numberFormat = (value: string | number) => {
|
|
115
130
|
// Verifica si el valor es nulo o indefinido, devolviendo el mismo valor.
|
|
116
131
|
if (value === null || value === undefined) {
|
|
117
132
|
return value
|
|
@@ -140,7 +155,7 @@ export const numberFormat = value => {
|
|
|
140
155
|
* @param {boolean} dataFilter booleano para devolver los datos filtrados o no
|
|
141
156
|
* @return {Object} devuelve un objeto con los datos filtrados
|
|
142
157
|
*/
|
|
143
|
-
export const filterKeyObject = (data, filters, dataFilter) => {
|
|
158
|
+
export const filterKeyObject = (data: Record<string, any>, filters: string[], dataFilter: boolean) => {
|
|
144
159
|
let values = {}; let valuesFilter = {}
|
|
145
160
|
for (const elem in data) {
|
|
146
161
|
let coincidence = false
|
|
@@ -155,7 +170,8 @@ export const filterKeyObject = (data, filters, dataFilter) => {
|
|
|
155
170
|
if (!dataFilter) return values
|
|
156
171
|
if (dataFilter) return { values, valuesFilter }
|
|
157
172
|
}
|
|
158
|
-
|
|
173
|
+
|
|
174
|
+
export const MONTHS: readonly string[] = [
|
|
159
175
|
'January',
|
|
160
176
|
'February',
|
|
161
177
|
'March',
|
|
@@ -168,8 +184,9 @@ export const MONTHS = [
|
|
|
168
184
|
'October',
|
|
169
185
|
'November',
|
|
170
186
|
'December'
|
|
171
|
-
]
|
|
172
|
-
|
|
187
|
+
] as const
|
|
188
|
+
|
|
189
|
+
export const SPANISH_MONTHS: Readonly<Record<number, string>> = {
|
|
173
190
|
0: 'Enero',
|
|
174
191
|
1: 'Febrero',
|
|
175
192
|
2: 'Marzo',
|
|
@@ -182,9 +199,9 @@ export const SPANISH_MONTHS = {
|
|
|
182
199
|
9: 'Octubre',
|
|
183
200
|
10: 'Noviembre ',
|
|
184
201
|
11: 'Diciembre'
|
|
185
|
-
}
|
|
202
|
+
} as const
|
|
186
203
|
|
|
187
|
-
export const days = {
|
|
204
|
+
export const days: Readonly<Record<number, string>> = {
|
|
188
205
|
1: 'Lunes',
|
|
189
206
|
2: 'Martes',
|
|
190
207
|
3: 'Miércoles',
|
|
@@ -192,9 +209,9 @@ export const days = {
|
|
|
192
209
|
5: 'Viernes',
|
|
193
210
|
6: 'Sábado',
|
|
194
211
|
0: 'Domingo'
|
|
195
|
-
}
|
|
212
|
+
} as const
|
|
196
213
|
|
|
197
|
-
export const convertBase64 = file => {
|
|
214
|
+
export const convertBase64 = (file: File): Promise<string | ArrayBuffer | null> => {
|
|
198
215
|
return new Promise((resolve, reject) => {
|
|
199
216
|
const reader = new FileReader()
|
|
200
217
|
if (file) {
|
|
@@ -209,7 +226,7 @@ export const convertBase64 = file => {
|
|
|
209
226
|
})
|
|
210
227
|
}
|
|
211
228
|
|
|
212
|
-
export const validationImg = file => { return (/\.(jpg|png|gif|jpeg)$/i).test(file.name) }
|
|
229
|
+
export const validationImg = (file: File): boolean => { return (/\.(jpg|png|gif|jpeg)$/i).test(file.name) }
|
|
213
230
|
|
|
214
231
|
export const SERVICES = Object.freeze({
|
|
215
232
|
WEB_SOCKET_CHAT: 'web-socket-chat',
|
|
@@ -231,9 +248,26 @@ export const paymentMethodCards = [
|
|
|
231
248
|
|
|
232
249
|
export const CATEGORY_EMPTY = 'NINGUNO'
|
|
233
250
|
|
|
234
|
-
export * from './UtilDateRange'
|
|
235
251
|
|
|
236
|
-
|
|
252
|
+
interface CleanValueOptions {
|
|
253
|
+
value: string;
|
|
254
|
+
decimalSeparator?: string;
|
|
255
|
+
groupSeparator?: string;
|
|
256
|
+
allowDecimals?: boolean;
|
|
257
|
+
decimalsLimit?: number;
|
|
258
|
+
allowNegativeValue?: boolean;
|
|
259
|
+
disableAbbreviations?: boolean;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const cleanValue = ({
|
|
263
|
+
value,
|
|
264
|
+
decimalSeparator,
|
|
265
|
+
groupSeparator,
|
|
266
|
+
allowDecimals,
|
|
267
|
+
decimalsLimit,
|
|
268
|
+
allowNegativeValue,
|
|
269
|
+
disableAbbreviations
|
|
270
|
+
}: CleanValueOptions): string | null => {
|
|
237
271
|
if (typeof value !== 'string') return null
|
|
238
272
|
|
|
239
273
|
// Remove currency symbols and whitespace
|
|
@@ -242,8 +276,9 @@ const cleanValue = ({ value, decimalSeparator, groupSeparator, allowDecimals, de
|
|
|
242
276
|
// Handle abbreviations like K, M, B
|
|
243
277
|
if (!disableAbbreviations) {
|
|
244
278
|
cleaned = cleaned.replace(/([kmb])\b/i, (match) => {
|
|
245
|
-
const multipliers = { k: 1e3, m: 1e6, b: 1e9 }
|
|
246
|
-
|
|
279
|
+
const multipliers: Record<string, number> = { k: 1e3, m: 1e6, b: 1e9 }
|
|
280
|
+
const key = match.toLowerCase()
|
|
281
|
+
return multipliers[key] ? `*${multipliers[key]}` : ''
|
|
247
282
|
})
|
|
248
283
|
}
|
|
249
284
|
|
|
@@ -261,7 +296,7 @@ const cleanValue = ({ value, decimalSeparator, groupSeparator, allowDecimals, de
|
|
|
261
296
|
cleaned = cleaned.replace(/[^0-9.-]/g, '')
|
|
262
297
|
|
|
263
298
|
// Limit decimals if specified
|
|
264
|
-
if (allowDecimals && decimalsLimit > 0) {
|
|
299
|
+
if (allowDecimals && typeof decimalsLimit === 'number' && decimalsLimit > 0) {
|
|
265
300
|
const parts = cleaned.split('.')
|
|
266
301
|
if (parts.length > 1) {
|
|
267
302
|
parts[1] = parts[1].slice(0, decimalsLimit)
|
|
@@ -284,7 +319,7 @@ const cleanValue = ({ value, decimalSeparator, groupSeparator, allowDecimals, de
|
|
|
284
319
|
* @param groupSeparator - The character used as group/thousands separator, e.g., '.'
|
|
285
320
|
* @returns The parsed float value or null if input is invalid
|
|
286
321
|
*/
|
|
287
|
-
export function parseFormattedFloat
|
|
322
|
+
export function parseFormattedFloat(value: string): number {
|
|
288
323
|
if (!value) return 0
|
|
289
324
|
const options = {
|
|
290
325
|
decimalSeparator: ',',
|
|
@@ -296,11 +331,14 @@ export function parseFormattedFloat (value) {
|
|
|
296
331
|
}
|
|
297
332
|
const cleaned = cleanValue({ value, ...options })
|
|
298
333
|
|
|
334
|
+
// If cleaned is null/undefined/empty, return 0 to avoid calling replace on null
|
|
335
|
+
if (cleaned === null || cleaned === undefined || cleaned === '') return 0
|
|
336
|
+
|
|
299
337
|
const normalized = (typeof options.decimalSeparator === 'string' && options.decimalSeparator !== '')
|
|
300
|
-
|
|
338
|
+
// Replace the decimal separator with a dot for parsing
|
|
301
339
|
? cleaned.replace(options.decimalSeparator, '.')
|
|
302
340
|
: cleaned
|
|
303
341
|
|
|
304
|
-
const num = parseFloat(normalized)
|
|
305
|
-
return isNaN(num) ? 0 : num
|
|
342
|
+
const num = Number.parseFloat(normalized)
|
|
343
|
+
return Number.isNaN(num) ? 0 : num
|
|
306
344
|
}
|
package/tsconfig.json
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
-
"
|
|
4
|
-
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"lib": ["ES2022", "DOM"],
|
|
6
|
+
"declaration": true,
|
|
7
|
+
"declarationMap": true,
|
|
8
|
+
"emitDeclarationOnly": false,
|
|
9
|
+
"outDir": "dist",
|
|
10
|
+
"strict": true,
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"esModuleInterop": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"resolveJsonModule": true,
|
|
15
|
+
"jsx": "react-jsx",
|
|
16
|
+
"sourceMap": true,
|
|
17
|
+
"composite": false
|
|
18
|
+
},
|
|
19
|
+
"include": ["src"],
|
|
20
|
+
"exclude": ["node_modules", "dist", "example"]
|
|
5
21
|
}
|
package/tsup.config.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// tsup.config.ts
|
|
2
|
+
import { defineConfig } from "tsup";
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
entry: ["src/index.ts"],
|
|
6
|
+
format: ["cjs", "esm"],
|
|
7
|
+
dts: false,
|
|
8
|
+
outDir: "dist",
|
|
9
|
+
clean: true,
|
|
10
|
+
sourcemap: true,
|
|
11
|
+
target: "es2022",
|
|
12
|
+
external: [
|
|
13
|
+
"react",
|
|
14
|
+
"react-dom",
|
|
15
|
+
"next",
|
|
16
|
+
"@apollo/client",
|
|
17
|
+
"graphql",
|
|
18
|
+
"js-cookie"
|
|
19
|
+
],
|
|
20
|
+
esbuildOptions: (ctx) => {
|
|
21
|
+
// Si necesitas tweaks extra a esbuild, los pones aquí
|
|
22
|
+
return ctx;
|
|
23
|
+
}
|
|
24
|
+
});
|
package/.eslintrc.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
settings: {
|
|
3
|
-
react: {
|
|
4
|
-
version: 'detect'
|
|
5
|
-
}
|
|
6
|
-
},
|
|
7
|
-
env: {
|
|
8
|
-
browser: true,
|
|
9
|
-
es2021: true,
|
|
10
|
-
node: true
|
|
11
|
-
},
|
|
12
|
-
extends: [
|
|
13
|
-
'standard',
|
|
14
|
-
'plugin:react/recommended'
|
|
15
|
-
],
|
|
16
|
-
overrides: [
|
|
17
|
-
{
|
|
18
|
-
env: {
|
|
19
|
-
node: true
|
|
20
|
-
},
|
|
21
|
-
files: [
|
|
22
|
-
'.eslintrc.{js,cjs}'
|
|
23
|
-
],
|
|
24
|
-
parserOptions: {
|
|
25
|
-
sourceType: 'script'
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
],
|
|
29
|
-
parserOptions: {
|
|
30
|
-
ecmaVersion: 'latest',
|
|
31
|
-
sourceType: 'module'
|
|
32
|
-
},
|
|
33
|
-
plugins: [
|
|
34
|
-
'react'
|
|
35
|
-
],
|
|
36
|
-
rules: {
|
|
37
|
-
}
|
|
38
|
-
}
|
package/.eslintrc.json
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"settings": {
|
|
3
|
-
"react": {
|
|
4
|
-
"version": "detect"
|
|
5
|
-
}
|
|
6
|
-
},
|
|
7
|
-
"env": {
|
|
8
|
-
"browser": true,
|
|
9
|
-
"es2021": true,
|
|
10
|
-
"node": true
|
|
11
|
-
},
|
|
12
|
-
"extends": "eslint:recommended",
|
|
13
|
-
"parserOptions": {
|
|
14
|
-
"ecmaVersion": "latest",
|
|
15
|
-
"sourceType": "module"
|
|
16
|
-
},
|
|
17
|
-
"rules": {
|
|
18
|
-
"import/no-anonymous-default-export": ["error", {
|
|
19
|
-
"allowArray": false,
|
|
20
|
-
"allowArrowFunction": false,
|
|
21
|
-
"allowAnonymousClass": false,
|
|
22
|
-
"allowAnonymousFunction": false,
|
|
23
|
-
"allowCallExpression": true, // The true value here is for backward compatibility
|
|
24
|
-
"allowLiteral": false,
|
|
25
|
-
"allowObject": true // anonymous-default-export
|
|
26
|
-
}],
|
|
27
|
-
// react hooks validations
|
|
28
|
-
"react-hooks/exhaustive-deps": "warn",
|
|
29
|
-
"react-hooks/rules-of-hooks": "error",
|
|
30
|
-
// allow jsx syntax in js files (for next.js project)
|
|
31
|
-
"react/jsx-filename-extension": [
|
|
32
|
-
1,
|
|
33
|
-
{
|
|
34
|
-
"extensions": [
|
|
35
|
-
".js",
|
|
36
|
-
".jsx",
|
|
37
|
-
".ts",
|
|
38
|
-
".tsx"
|
|
39
|
-
]
|
|
40
|
-
}
|
|
41
|
-
],
|
|
42
|
-
"quotes": [
|
|
43
|
-
2,
|
|
44
|
-
"single",
|
|
45
|
-
{
|
|
46
|
-
"avoidEscape": true,
|
|
47
|
-
"allowTemplateLiterals": true
|
|
48
|
-
}
|
|
49
|
-
],
|
|
50
|
-
"consistent-return": 2,
|
|
51
|
-
"indent": [
|
|
52
|
-
2,
|
|
53
|
-
2,
|
|
54
|
-
{
|
|
55
|
-
"SwitchCase": 1
|
|
56
|
-
}
|
|
57
|
-
],
|
|
58
|
-
"no-else-return": 1,
|
|
59
|
-
"semi": [
|
|
60
|
-
1,
|
|
61
|
-
"never"
|
|
62
|
-
],
|
|
63
|
-
"space-unary-ops": 2,
|
|
64
|
-
"comma-dangle": [
|
|
65
|
-
"error",
|
|
66
|
-
{
|
|
67
|
-
"arrays": "never",
|
|
68
|
-
"objects": "never",
|
|
69
|
-
"imports": "never",
|
|
70
|
-
"exports": "never",
|
|
71
|
-
"functions": "never"
|
|
72
|
-
}
|
|
73
|
-
],
|
|
74
|
-
"one-var": [
|
|
75
|
-
2,
|
|
76
|
-
"never"
|
|
77
|
-
],
|
|
78
|
-
"no-var": "error",
|
|
79
|
-
"arrow-body-style": [
|
|
80
|
-
"error",
|
|
81
|
-
"always"
|
|
82
|
-
],
|
|
83
|
-
"no-console": "error",
|
|
84
|
-
"no-multi-spaces": [
|
|
85
|
-
"error",
|
|
86
|
-
{
|
|
87
|
-
"exceptions": {
|
|
88
|
-
"BinaryExpression": true
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
],
|
|
92
|
-
"no-multiple-empty-lines": [
|
|
93
|
-
"error",
|
|
94
|
-
{
|
|
95
|
-
"max": 2,
|
|
96
|
-
"maxBOF": 2
|
|
97
|
-
}
|
|
98
|
-
],
|
|
99
|
-
"jsx-quotes": [
|
|
100
|
-
"error",
|
|
101
|
-
"prefer-single"
|
|
102
|
-
],
|
|
103
|
-
"react/jsx-sort-props": [
|
|
104
|
-
"error",
|
|
105
|
-
{
|
|
106
|
-
"noSortAlphabetically": false
|
|
107
|
-
}
|
|
108
|
-
],
|
|
109
|
-
"react/jsx-first-prop-new-line": [
|
|
110
|
-
"error",
|
|
111
|
-
"multiline"
|
|
112
|
-
],
|
|
113
|
-
"react/jsx-max-props-per-line": [
|
|
114
|
-
"error",
|
|
115
|
-
{
|
|
116
|
-
"maximum": {
|
|
117
|
-
"single": 2,
|
|
118
|
-
"multi": 1
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
],
|
|
122
|
-
"react/jsx-closing-bracket-location": [
|
|
123
|
-
"error",
|
|
124
|
-
"line-aligned"
|
|
125
|
-
]
|
|
126
|
-
}
|
|
127
|
-
}
|