erp-pos-ecommerce-shared 0.2.20 → 0.2.22

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/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/services/config.ts","../src/services/auth.service.ts","../src/queries/auth.queries.ts","../src/hooks/auth.hooks.ts","../src/services/attributes.service.ts","../src/utils/notifications.tsx","../src/queries/attributes.queries.ts","../src/hooks/attributes.hooks.ts","../src/interfaces/datatable.interface.ts","../src/hooks/useDataTable.ts","../src/services/bankTerminal.service.ts","../src/queries/bankTerminal.queries.ts","../src/hooks/bankTerminal.hooks.ts","../src/services/batch.service.ts","../src/queries/batch.queries.ts","../src/hooks/batch.hooks.ts","../src/services/category.service.ts","../src/queries/category.queries.ts","../src/hooks/category.hooks.ts","../src/services/client.service.ts","../src/queries/client.queries.ts","../src/hooks/client.hooks.ts","../src/services/exchange.service.ts","../src/queries/exchange.queries.ts","../src/hooks/exchange.hooks.ts","../src/services/folio.service.ts","../src/queries/folio.queries.ts","../src/hooks/folio.hooks.ts","../src/services/gender.service.ts","../src/queries/gender.queries.ts","../src/hooks/gender.hooks.ts","../src/services/health.service.ts","../src/queries/health.queries.ts","../src/hooks/health.hooks.ts","../src/services/location.service.ts","../src/queries/location.queries.ts","../src/hooks/location.hooks.ts","../src/services/material.service.ts","../src/queries/material.queries.ts","../src/hooks/material.hooks.ts","../src/services/module.service.ts","../src/queries/module.queries.ts","../src/hooks/module.hooks.ts","../src/services/order.service.ts","../src/queries/order.queries.ts","../src/hooks/order.hooks.ts","../src/services/payment.service.ts","../src/queries/payment.queries.ts","../src/hooks/payment.hooks.ts","../src/services/permission.service.ts","../src/queries/permission.queries.ts","../src/hooks/permission.hooks.ts","../src/services/pricePerGram.service.ts","../src/queries/pricePerGram.queries.ts","../src/hooks/pricePerGram.hooks.ts","../src/services/priceType.service.ts","../src/queries/priceType.queries.ts","../src/hooks/priceType.hooks.ts","../src/services/product.service.ts","../src/queries/product.queries.ts","../src/hooks/product.hooks.ts","../src/services/productTags.service.ts","../src/queries/productTags.queries.ts","../src/hooks/productTags.hooks.ts","../src/services/promotion.service.ts","../src/queries/promotion.queries.ts","../src/hooks/promotion.hooks.ts","../src/services/provider.service.ts","../src/queries/provider.queries.ts","../src/hooks/provider.hooks.ts","../src/services/qr.service.ts","../src/queries/qr.queries.ts","../src/hooks/qr.hooks.ts","../src/services/report.service.ts","../src/queries/report.queries.ts","../src/hooks/report.hooks.ts","../src/services/return.service.ts","../src/queries/return.queries.ts","../src/hooks/return.hooks.ts","../src/services/role.service.ts","../src/queries/role.queries.ts","../src/hooks/role.hooks.ts","../src/services/shift.service.ts","../src/queries/shift.queries.ts","../src/hooks/shift.hooks.ts","../src/services/state.service.ts","../src/queries/state.queries.ts","../src/hooks/state.hooks.ts","../src/services/stockmovement.service.ts","../src/queries/stockmovement.queries.ts","../src/hooks/stockmovement.hooks.ts","../src/services/tax.service.ts","../src/queries/tax.queries.ts","../src/hooks/tax.hooks.ts","../src/services/user.service.ts","../src/queries/user.queries.ts","../src/hooks/user.hooks.ts","../src/services/warehouse.service.ts","../src/queries/warehouse.queries.ts","../src/hooks/warehouse.hooks.ts","../src/hooks/useMediaQuery.ts"],"names":["attributes","useMutation","queryOptions","useQuery","useQueryClient","defaultColumnMap","getFilterValue","parseNumber","useMantineMediaQuery"],"mappings":"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","file":"hooks.js","sourcesContent":["import axios, { type AxiosInstance } from 'axios'\n\n/**\n * Configuration for the shared API client.\n * Each consuming app must call configureApi() with its own baseURL and auth.\n */\nexport interface IApiConfig {\n /** Backend base URL (e.g. \"http://localhost:4000/\" or \"https://api.myapp.com/\") */\n baseURL: string\n /** Returns the current auth token for request headers */\n getToken: () => string | undefined\n /** Called when a new token is received after refresh (e.g. update your store) */\n onTokenRefresh?: (newToken: string) => void\n /** Called when refresh fails (e.g. clear session, redirect to login) */\n onUnauthorized?: () => void\n}\n\n// Default instance; replaced when configureApi() is called by the consuming app\nlet api: AxiosInstance = axios.create({\n baseURL: '',\n headers: { 'Content-Type': 'application/json' }\n})\n\n/**\n * Configure the shared API client. Must be called by the consuming app before using any service.\n * @example\n * // In your app (e.g. main.tsx or before first API call):\n * import { configureApi } from 'erp-pos-ecommerce-shared'\n * import { useAuthStore } from './store/authStore'\n *\n * configureApi({\n * baseURL: import.meta.env.VITE_API_URL ?? 'http://localhost:4000/',\n * getToken: () => useAuthStore.getState().token,\n * onTokenRefresh: (newToken) => useAuthStore.setState({ token: newToken }),\n * onUnauthorized: () => { useAuthStore.setState({ token: undefined }); redirectToLogin() }\n * })\n */\nexport function configureApi(config: IApiConfig): AxiosInstance {\n const { baseURL, getToken, onTokenRefresh, onUnauthorized } = config\n\n const newApi = axios.create({\n baseURL,\n headers: {\n 'Content-Type': 'application/json',\n ...(getToken() && { Authorization: `Bearer ${getToken()}` })\n }\n })\n\n newApi.interceptors.request.use((reqConfig) => {\n const token = getToken()\n if (token) {\n reqConfig.headers.Authorization = `Bearer ${token}`\n }\n return reqConfig\n })\n\n const refreshAxios = axios.create({ baseURL })\n\n newApi.interceptors.response.use(\n (response) => response,\n async (error) => {\n const originalRequest = error.config\n\n if (error.response?.status === 401 && !originalRequest._retry && onTokenRefresh && onUnauthorized) {\n originalRequest._retry = true\n\n try {\n const response = await refreshAxios.get('/auth/refresh', {\n headers: getToken() ? { Authorization: `Bearer ${getToken()}` } : {}\n })\n const newToken = response.data?.token\n if (newToken) {\n onTokenRefresh(newToken)\n originalRequest.headers.Authorization = `Bearer ${newToken}`\n return newApi(originalRequest)\n }\n } catch {\n onUnauthorized()\n return Promise.reject(error)\n }\n }\n\n return Promise.reject(error)\n }\n )\n\n api = newApi\n return api\n}\n\n/**\n * Shared axios instance used by all services.\n * Valid only after the consuming app has called configureApi().\n */\nexport { api }\n","import type { IUser } from '../interfaces/user.interface'\nimport { api } from './config'\n\nexport interface LoginResponse {\n user: IUser\n token: string\n}\n\nexport const login = async ({\n email,\n password\n}: {\n email: string\n password: string\n}): Promise<LoginResponse> => {\n const { data } = await api.post<LoginResponse>('auth/login', { email, password })\n return data\n}\n","import type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { login } from \"../services/auth.service\";\nimport type { LoginResponse } from \"../services/auth.service\";\n\nexport const auth = {\n queries: {\n all: [\"auth\"] as const,\n },\n\n mutations: {\n login: (): UseMutationOptions<\n LoginResponse,\n Error,\n { email: string; password: string }\n > => ({\n mutationFn: login,\n }),\n },\n};\n","import { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { auth } from \"../queries/auth.queries\";\nimport type { LoginResponse } from \"../services/auth.service\";\n\nexport const useLogin = (\n options?: UseMutationOptions<\n LoginResponse,\n Error,\n { email: string; password: string }\n >,\n) =>\n useMutation({\n ...auth.mutations.login(),\n ...options,\n });\n","import type {\n IAttribute,\n IAttributeFilter,\n IAttributeResponse,\n IAttributeValue\n} from '../interfaces/attribute.interface'\nimport { api } from './config'\n\nexport const getAttributes = async ({\n skip,\n limit,\n query\n}: {\n skip: number\n limit: number\n query: string\n}): Promise<IAttributeResponse> => {\n const { data } = await api.get('/attribute/category', { params: { skip, limit, query } })\n return data\n}\n\nexport const getAttributesForSelect = async (): Promise<IAttribute[]> => {\n const { data } = await api.get('/attribute/select')\n return data\n}\n\nexport const getAttributesTable = async ({\n skip,\n limit,\n filters\n}: {\n skip?: number\n limit?: number\n filters?: IAttributeFilter\n}): Promise<IAttributeResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip?.toString() ?? \"\",\n limit: limit?.toString() ?? \"\",\n ...(filters?.query && { query: filters.query }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.productId && { productId: filters.productId.toString() }),\n ...(filters?.materialId && { materialId: filters.materialId.toString() }),\n })\n const { data } = await api.get(`/attribute?${queryParams}`)\n return data\n}\n\nexport const getAttributeById = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.get(`/attribute/${attributeId}`)\n return data\n}\n\nexport const getAttributesByProductID = async ({\n productId\n}: {\n productId: string\n}): Promise<IAttribute[]> => {\n const { data } = await api.get(`/attribute/${productId}/product`)\n return data\n}\n\nexport const getAttributesByCategoryID = async ({\n categoryID\n}: {\n categoryID: string\n}): Promise<IAttribute[]> => {\n const { data } = await api.get(`/attribute/${categoryID}/category/`)\n return data\n}\n\nexport const getAttributeValues = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttributeValue[]> => {\n const { data } = await api.get(`/attribute/${attributeId}/values`)\n return data\n}\n\nexport const createAttribute = async ({\n attribute\n}: {\n attribute: {\n name: string\n values: string[]\n productId: number\n }\n}): Promise<IAttribute> => {\n const { data } = await api.post('/attribute', {\n name: attribute.name,\n values: attribute.values,\n productID: attribute.productId,\n })\n return data\n}\n\nexport const createAttributesValuesBatch = async ({\n productId,\n attributeValues,\n}: {\n productId: number;\n attributeValues: {\n attribute: string;\n values: string[];\n }[];\n}): Promise<IAttributeValue[]> => {\n const { data } = await api.post(`/attribute/batch`, {\n productId,\n attributeValues,\n });\n return data;\n};\n\nexport const createAttributesForCategory = async ({\n attributes\n}: {\n attributes: {\n categoryId: string\n attributes: {\n name: string\n values: string[]\n pricePerGram?: number | null\n }[]\n }\n}): Promise<IAttribute> => {\n const { data } = await api.post(`/attribute/category/`, {\n categoryID: attributes.categoryId,\n attributes: attributes.attributes\n })\n return data\n}\n\nexport const updateAttribute = async ({\n attributeId,\n attribute\n}: {\n attributeId: string\n attribute: IAttribute\n}): Promise<IAttribute> => {\n const { data } = await api.put(`/attribute/${attributeId}`, attribute)\n return data\n}\n\nexport const updateAttributesForCategory = async ({\n categoryId,\n attributes\n}: {\n categoryId: string\n attributes: {\n attributes: string[]\n }\n}): Promise<IAttribute> => {\n const { data } = await api.put(`/attribute/category/${categoryId}`, attributes)\n return data\n}\n\nexport const deleteAttribute = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.delete(`/attribute/${attributeId}`)\n return data\n}\n\nexport const undeleteAttribute = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.patch(`/attribute/${attributeId}`)\n return data\n}\n\n//create attribute value\nexport const createAttributeValue = async ({\n attributeId,\n value\n}: {\n attributeId: number\n value: string\n}): Promise<IAttributeValue> => {\n const { data } = await api.post(`/attribute/${attributeId}/values`, {\n attributeID: attributeId,\n value\n })\n return data\n}\n","import type { ReactNode } from 'react';\nimport { notifications } from '@mantine/notifications';\nimport { Text } from '@mantine/core';\n\n// Icons are provided by the consuming app so this library stays icon-agnostic\nlet defaultSuccessIcon: ReactNode = undefined;\nlet defaultErrorIcon: ReactNode = undefined;\n\n/**\n * Configure default icons for success and error notifications.\n * Call this once at app startup (e.g. in your root layout) with your preferred icon library.\n * @example\n * // With lucide-react\n * configureNotificationIcons({ successIcon: <Check />, errorIcon: <X /> });\n * // With react-icons\n * configureNotificationIcons({ successIcon: <FiCheck />, errorIcon: <FiX /> });\n */\nexport const configureNotificationIcons = (config: {\n successIcon?: ReactNode;\n errorIcon?: ReactNode;\n}): void => {\n if (config.successIcon !== undefined) defaultSuccessIcon = config.successIcon;\n if (config.errorIcon !== undefined) defaultErrorIcon = config.errorIcon;\n};\n\nexport const successNotification = ({\n title,\n message,\n icon,\n}: {\n title: string;\n message: string;\n /** Override the default success icon for this call (optional) */\n icon?: ReactNode;\n}): void => {\n notifications.show({\n title: <Text>{title}</Text>,\n message: message,\n color: 'teal',\n icon: icon ?? defaultSuccessIcon,\n });\n};\n\nexport const errorNotification = ({\n title,\n message,\n icon,\n}: {\n title: string;\n message: string;\n /** Override the default error icon for this call (optional) */\n icon?: ReactNode;\n}): void => {\n notifications.show({\n title: <Text>{title}</Text>,\n message: message,\n color: 'red',\n icon: icon ?? defaultErrorIcon,\n });\n};\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAttributes,\n getAttributesForSelect,\n getAttributeById,\n getAttributesByProductID,\n getAttributesByCategoryID,\n getAttributeValues,\n createAttribute,\n createAttributesValuesBatch,\n createAttributesForCategory,\n createAttributeValue,\n updateAttribute,\n updateAttributesForCategory,\n deleteAttribute,\n undeleteAttribute,\n getAttributesTable,\n} from \"../services/attributes.service\";\nimport type {\n IAttribute,\n IAttributeQueryParams,\n IAttributeResponse,\n IAttributeValue,\n} from \"../interfaces/attribute.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst attributeQueryKeys = {\n all: [\"attributes\"] as const,\n table: (params: IAttributeQueryParams = {}) => [...attributeQueryKeys.all, \"table\", { skip: params.skip, limit: params.limit, filters: params.filters ?? {} }] as const,\n lists: () => [...attributeQueryKeys.all, \"list\"] as const,\n list: (params: TableQueryParams) =>\n [\n ...attributeQueryKeys.lists(),\n { skip: params.skip, limit: params.limit, query: params.query },\n ] as const,\n details: () => [...attributeQueryKeys.all, \"detail\"] as const,\n detail: (id: string) => [...attributeQueryKeys.details(), id] as const,\n forSelect: () => [...attributeQueryKeys.all, \"select\"] as const,\n byProduct: (productId: string) =>\n [...attributeQueryKeys.all, \"product\", productId] as const,\n byCategory: (categoryId: string) =>\n [...attributeQueryKeys.all, \"category\", categoryId] as const,\n values: (attributeId: string) =>\n [...attributeQueryKeys.all, \"values\", attributeId] as const,\n};\n\nexport const attributes = {\n queries: {\n all: [\"attributes\"] as const,\n getAttributes: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAttributes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query ?? \"\",\n }),\n queryKey: attributeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getAttributesTable: (params: IAttributeQueryParams = {}) =>\n queryOptions({\n queryFn: () => getAttributesTable({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n filters: params.filters ?? undefined,\n }),\n queryKey: attributeQueryKeys.table(params),\n staleTime: 30_000,\n }),\n getAttributesForSelect: () =>\n queryOptions({\n queryFn: getAttributesForSelect,\n queryKey: attributeQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAttributeById: (id: string) =>\n queryOptions({\n queryFn: () => getAttributeById({ attributeId: id }),\n queryKey: attributeQueryKeys.detail(id),\n enabled: !!id,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributesByProductID: (productId: string) =>\n queryOptions({\n queryFn: () => getAttributesByProductID({ productId }),\n queryKey: attributeQueryKeys.byProduct(productId),\n enabled: !!productId,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributesByCategoryID: (categoryId: string) =>\n queryOptions({\n queryFn: () => getAttributesByCategoryID({ categoryID: categoryId }),\n queryKey: attributeQueryKeys.byCategory(categoryId),\n enabled: !!categoryId,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributeValues: (attributeId: string) =>\n queryOptions({\n queryFn: () => getAttributeValues({ attributeId }),\n queryKey: attributeQueryKeys.values(attributeId),\n enabled: !!attributeId,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { attribute: { name: string; values: string[]; productId: number } }\n > => ({\n mutationFn: createAttribute,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo creado\",\n message: \"El atributo se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error al crear atributo\",\n message: error.message || \"No se pudo crear el atributo.\",\n });\n },\n }),\n\n createAttributesValuesBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttributeValue[],\n Error,\n {\n productId: number;\n attributeValues: { attribute: string; values: string[] }[];\n }\n > => ({\n mutationFn: createAttributesValuesBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Valores creados\",\n message: \"Los valores de atributos se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear los valores.\",\n });\n },\n }),\n\n createAttributesForCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n {\n attributes: {\n categoryId: string;\n attributes: {\n name: string;\n values: string[];\n pricePerGram?: number | null;\n }[];\n };\n }\n > => ({\n mutationFn: createAttributesForCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributos creados\",\n message: \"Los atributos para la categoría se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear los atributos.\",\n });\n },\n }),\n\n createAttributeValue: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttributeValue,\n Error,\n { attributeId: number; value: string }\n > => ({\n mutationFn: createAttributeValue,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Valor creado\",\n message: \"El valor del atributo se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el valor.\",\n });\n },\n }),\n\n updateAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { attributeId: string; attribute: IAttribute }\n > => ({\n mutationFn: updateAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo actualizado\",\n message: \"El atributo se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el atributo.\",\n });\n },\n }),\n\n updateAttributesForCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { categoryId: string; attributes: { attributes: string[] } }\n > => ({\n mutationFn: updateAttributesForCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributos actualizados\",\n message:\n \"Los atributos de la categoría se han actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron actualizar los atributos.\",\n });\n },\n }),\n\n deleteAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<IAttribute, Error, { attributeId: string }> => ({\n mutationFn: deleteAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n queryClient.removeQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n successNotification({\n title: \"Atributo eliminado\",\n message: \"El atributo se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el atributo.\",\n });\n },\n }),\n\n undeleteAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<IAttribute, Error, { attributeId: string }> => ({\n mutationFn: undeleteAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo restaurado\",\n message: \"El atributo se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el atributo.\",\n });\n },\n }),\n },\n};\n\nexport { attributeQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n attributes,\n attributeQueryKeys,\n} from \"../queries/attributes.queries\";\nimport type {\n IAttribute,\n IAttributeQueryParams,\n IAttributeResponse,\n IAttributeValue,\n} from \"../interfaces/attribute.interface\";\nimport type { TableQueryParams } from \"../queries/types\";\n\n// Re-export query keys for backward compatibility\nexport const attributeKeys = attributeQueryKeys;\n\nexport interface AttributeFilterColumnMap {\n categoryId?: string;\n productId?: string;\n materialId?: string;\n}\n\nconst defaultColumnMap: Required<AttributeFilterColumnMap> = {\n categoryId: \"categoryID\",\n productId: \"productID\",\n materialId: \"materialID\",\n};\n\nfunction getFilterValue(\n columnFilters: TableQueryParams[\"columnFilters\"],\n columnId: string,\n): string | null {\n const filter = columnFilters?.find((f) => f.id === columnId);\n if (filter?.value == null) return null;\n return typeof filter.value === \"string\" ? filter.value : String(filter.value);\n}\n\nfunction parseNumber(value: string | null): number | null {\n if (value == null || value === \"\") return null;\n const n = Number.parseInt(value, 10);\n return Number.isNaN(n) ? null : n;\n}\n\nexport const mapTableParamsToAttributeParams = (\n params: TableQueryParams,\n columnMap?: Partial<AttributeFilterColumnMap>,\n): IAttributeQueryParams => {\n const map = { ...defaultColumnMap, ...columnMap };\n const cf = params.columnFilters;\n\n return {\n skip: params.skip,\n limit: params.limit,\n filters: {\n query: params.query ?? null,\n categoryId: parseNumber(getFilterValue(cf, map.categoryId)),\n productId: parseNumber(getFilterValue(cf, map.productId)),\n materialId: parseNumber(getFilterValue(cf, map.materialId)),\n },\n };\n};\n\nexport const useAttributes = (\n params: { skip: number; limit: number; query: string },\n options?: Omit<\n UseQueryOptions<IAttributeResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...attributes.queries.getAttributes(params),\n ...options,\n } as UseQueryOptions<IAttributeResponse>);\n\n/** Alias for useAttributes - paginated list for tables */\nexport const useAttributesTable = (\n params?: IAttributeQueryParams,\n options?: Omit<UseQueryOptions<IAttributeResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...attributes.queries.getAttributesTable(params),\n ...options,\n } as UseQueryOptions<IAttributeResponse>);\n\nexport const useAttributesForSelect = (\n options?: Omit<UseQueryOptions<IAttribute[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...attributes.queries.getAttributesForSelect(),\n staleTime: 10 * 60 * 1000,\n ...options,\n } as UseQueryOptions<IAttribute[]>);\n\nexport const useAttribute = (\n attributeId: string | undefined,\n options?: Omit<UseQueryOptions<IAttribute>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...attributes.queries.getAttributeById(attributeId ?? \"\"),\n ...options,\n } as UseQueryOptions<IAttribute>);\n\nexport const useAttributesByProductID = (\n productId: string | undefined,\n options?: Omit<UseQueryOptions<IAttribute[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...attributes.queries.getAttributesByProductID(productId ?? \"\"),\n ...options,\n } as UseQueryOptions<IAttribute[]>);\n\nexport const useAttributesByCategoryID = (\n categoryId: string | undefined,\n options?: Omit<UseQueryOptions<IAttribute[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...attributes.queries.getAttributesByCategoryID(categoryId ?? \"\"),\n ...options,\n } as UseQueryOptions<IAttribute[]>);\n\nexport const useAttributeValues = (\n attributeId: string | undefined,\n options?: Omit<\n UseQueryOptions<IAttributeValue[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...attributes.queries.getAttributeValues(attributeId ?? \"\"),\n ...options,\n } as UseQueryOptions<IAttributeValue[]>);\n\nexport const useCreateAttribute = (\n options?: UseMutationOptions<\n IAttribute,\n Error,\n { attribute: { name: string; values: string[]; productId: number } }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.createAttribute(queryClient),\n ...options,\n });\n};\n\nexport const useCreateAttributesValuesBatch = (\n options?: UseMutationOptions<\n IAttributeValue[],\n Error,\n {\n productId: number;\n attributeValues: { attribute: string; values: string[] }[];\n }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.createAttributesValuesBatch(queryClient),\n ...options,\n });\n};\n\nexport const useCreateAttributesForCategory = (\n options?: UseMutationOptions<\n IAttribute,\n Error,\n {\n attributes: {\n categoryId: string;\n attributes: {\n name: string;\n values: string[];\n pricePerGram?: number | null;\n }[];\n };\n }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.createAttributesForCategory(queryClient),\n ...options,\n });\n};\n\nexport const useCreateAttributeValue = (\n options?: UseMutationOptions<\n IAttributeValue,\n Error,\n { attributeId: number; value: string }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.createAttributeValue(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateAttribute = (\n options?: UseMutationOptions<\n IAttribute,\n Error,\n { attributeId: string; attribute: IAttribute }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.updateAttribute(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateAttributesForCategory = (\n options?: UseMutationOptions<\n IAttribute,\n Error,\n { categoryId: string; attributes: { attributes: string[] } }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.updateAttributesForCategory(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteAttribute = (\n options?: UseMutationOptions<IAttribute, Error, { attributeId: string }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.deleteAttribute(queryClient),\n ...options,\n });\n};\n\nexport const useUndeleteAttribute = (\n options?: UseMutationOptions<IAttribute, Error, { attributeId: string }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.undeleteAttribute(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchAttribute = () => {\n const queryClient = useQueryClient();\n const prefetchAttribute = (attributeId: string) =>\n queryClient.prefetchQuery({\n ...attributes.queries.getAttributeById(attributeId),\n });\n return { prefetchAttribute };\n};\n","import type { ColumnFiltersState } from '@tanstack/react-table'\n\n/**\n * State passed to onStateChange on every table interaction.\n * Use these values to build your API request.\n */\nexport interface ServerTableState {\n pageIndex: number\n pageSize: number\n globalFilter: string\n columnFilters: ColumnFiltersState\n sorting: { id: string; desc: boolean }[]\n}\n\n/**\n * Style options for the table header row.\n * Pass as the headerStyle (or legacy headerBgColor) prop to customize appearance.\n */\nexport interface TableHeaderStyle {\n /** Header background color. Use light-dark(light, dark) for theme-aware colors */\n bgColor?: string;\n /** Header text (and icon) color */\n textColor?: string;\n /** Header background color on hover (if not set, a default is used) */\n hoverBgColor?: string;\n /** Header text color on hover (if not set, same as textColor) */\n hoverTextColor?: string;\n /** Header font weight (e.g. 600, 700, \"bold\") */\n fontWeight?: number | string;\n /** Header font size in px */\n fontSize?: number | string;\n /** Horizontal padding for header cells (e.g. \"4px 10px\") */\n padding?: string;\n}\n\n/**\n * Configuration for the DataTable UI.\n * Pass partial overrides via the `config` prop to customize defaults.\n */\nexport interface DataTableConfig {\n /** Page size options for the pagination selector */\n pageSizeOptions: number[];\n /** Default page size when the table first loads */\n defaultPageSize: number;\n /** Placeholder for the search input */\n searchPlaceholder: string;\n /** Whether to show the search input */\n enableGlobalFilter: boolean;\n}\n\nexport const defaultDataTableConfig: DataTableConfig = {\n pageSizeOptions: [5, 10, 15, 20, 50],\n defaultPageSize: 10,\n searchPlaceholder: 'Buscar...',\n enableGlobalFilter: true,\n}\n","import {\n type ColumnFiltersState,\n type ColumnDef,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n defaultDataTableConfig,\n type DataTableConfig,\n type ServerTableState,\n} from '../interfaces/datatable.interface'\n\nexport interface UseDataTableOptions<TData> {\n data: TData[]\n columns: ColumnDef<TData, unknown>[]\n /** Override default config (look, labels, page sizes, etc.) */\n config?: Partial<DataTableConfig>\n /** Enable row selection (checkboxes). When true, selectedRows is returned */\n enableRowSelection?: boolean\n /** Total row count from server. Used to compute pageCount. */\n totalRowCount?: number\n /** Called when table state changes (filters, pagination, search, sort). Use for API calls. */\n onStateChange?: (state: ServerTableState) => void\n}\n\nexport interface UseDataTableReturn<TData> {\n /** TanStack Table instance: use for headers, rows, getRowModel(), etc. */\n table: ReturnType<typeof useReactTable<TData>>\n /** Current global search value (for SearchInput) */\n globalFilter: string\n /** Set global search (for SearchInput onChange) */\n setGlobalFilter: (value: string) => void\n /** Column filters state (for FilterSelect, FilterDate, etc.) */\n columnFilters: ColumnFiltersState\n /** Set column filter value for a specific column */\n setColumnFilter: (columnId: string, value: unknown) => void\n /** Current server table state (pageIndex, pageSize, filters, etc.) */\n serverState: ServerTableState\n /** Merged config (defaults + your overrides) */\n config: DataTableConfig\n /** Selected row data (only when enableRowSelection is true) */\n selectedRows: TData[]\n}\n\nexport function useDataTable<TData>({\n data,\n columns,\n config: configOverride,\n enableRowSelection = false,\n totalRowCount,\n onStateChange,\n}: UseDataTableOptions<TData>): UseDataTableReturn<TData> {\n const mergedConfig = useMemo<DataTableConfig>(\n () => ({ ...defaultDataTableConfig, ...configOverride }),\n [configOverride],\n )\n\n const [pagination, setPagination] = useState({\n pageIndex: 0,\n pageSize: mergedConfig.defaultPageSize,\n })\n const [sorting, setSorting] = useState<{ id: string; desc: boolean }[]>([])\n const [rowSelection, setRowSelection] = useState<Record<string, boolean>>({})\n const [globalFilter, setGlobalFilter] = useState('')\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n\n const setColumnFilter = useMemo(\n () => (columnId: string, value: unknown) => {\n setColumnFilters((prev) => {\n const rest = prev.filter((f) => f.id !== columnId)\n if (value === undefined || value === null || value === '') return rest\n return [...rest, { id: columnId, value }]\n })\n },\n [],\n )\n\n // Reset to page 0 when search or column filters change\n useEffect(() => {\n setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n }, [globalFilter, columnFilters])\n\n const serverState: ServerTableState = useMemo(\n () => ({\n pageIndex: pagination.pageIndex,\n pageSize: pagination.pageSize,\n globalFilter,\n columnFilters,\n sorting,\n }),\n [pagination.pageIndex, pagination.pageSize, globalFilter, columnFilters, sorting],\n )\n\n useEffect(() => {\n onStateChange?.(serverState)\n }, [onStateChange, serverState])\n\n const table = useReactTable<TData>({\n data,\n columns,\n state: {\n pagination,\n sorting,\n rowSelection: enableRowSelection ? rowSelection : undefined,\n globalFilter,\n columnFilters,\n },\n onPaginationChange: setPagination,\n onSortingChange: setSorting,\n onRowSelectionChange: setRowSelection,\n onGlobalFilterChange: setGlobalFilter,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n enableRowSelection,\n manualPagination: true,\n manualFiltering: true,\n /** Sort is applied client-side to the current page only (no server refetch) */\n manualSorting: false,\n pageCount:\n totalRowCount != null\n ? Math.max(1, Math.ceil(totalRowCount / pagination.pageSize))\n : undefined,\n })\n\n const selectedRows = useMemo<TData[]>(\n () =>\n enableRowSelection\n ? table.getSelectedRowModel().rows.map((row) => row.original)\n : [],\n [enableRowSelection, rowSelection],\n )\n\n return {\n table,\n globalFilter,\n setGlobalFilter,\n columnFilters,\n setColumnFilter,\n serverState,\n config: mergedConfig,\n selectedRows,\n }\n}\n","import type {\n IBankTerminal,\n IBankTerminalResponse,\n IBankTerminalForm,\n BankTerminalQuery,\n BankTerminalResponse\n} from '../interfaces/bankTerminal.interface'\nimport { api } from './config'\n\nexport const getBankTerminalsForSelect = async (): Promise<BankTerminalResponse[]> => {\n const { data } = await api.get<BankTerminalResponse[]>('bank-terminals/bankTerminalsSelect')\n return data\n}\n\nexport const getAllBankTerminals = async (): Promise<BankTerminalResponse[]> => {\n const { data } = await api.get<BankTerminalResponse[]>('bank-terminals/')\n return data\n}\n\nexport const getBankTerminals = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: BankTerminalQuery): Promise<IBankTerminalResponse> => {\n const { data } = await api.get<IBankTerminalResponse>(\n `bank-terminals/bankTerminalsTable/?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\nexport const getBankTerminalById = async ({\n terminalId\n}: {\n terminalId: number\n}): Promise<IBankTerminal> => {\n const { data } = await api.get(`/bank-terminals/${terminalId}`)\n return data.data\n}\n\nexport const updateBankTerminal = async ({\n terminalId,\n terminal\n}: {\n terminalId: number\n terminal: IBankTerminalForm\n}): Promise<IBankTerminal> => {\n const { data } = await api.put<IBankTerminal>(`/bank-terminals/${terminalId}`, terminal)\n return data\n}\n\nexport const createBankTerminal = async ({\n terminal\n}: {\n terminal: IBankTerminalForm\n}): Promise<IBankTerminal> => {\n const { data } = await api.post<IBankTerminal>('bank-terminals/', terminal)\n return data\n}\n\nexport const deleteBankTerminal = async ({ terminalId }: { terminalId: number }): Promise<void> => {\n await api.delete(`/bank-terminals/${terminalId}`)\n}\n\nexport const restoreBankTerminal = async ({\n terminalId\n}: {\n terminalId: number\n}): Promise<void> => {\n await api.patch(`/bank-terminals/${terminalId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getBankTerminals,\n getBankTerminalById,\n getBankTerminalsForSelect,\n getAllBankTerminals,\n createBankTerminal,\n updateBankTerminal,\n deleteBankTerminal,\n restoreBankTerminal,\n} from \"../services/bankTerminal.service\";\nimport type {\n IBankTerminal,\n IBankTerminalForm,\n IBankTerminalResponse,\n} from \"../interfaces/bankTerminal.interface\";\nimport type { BankTerminalResponse } from \"../interfaces/bankTerminal.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst bankTerminalQueryKeys = {\n all: [\"bankTerminals\"] as const,\n lists: () => [...bankTerminalQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...bankTerminalQueryKeys.lists(), { filters: params }] as const,\n details: () => [...bankTerminalQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...bankTerminalQueryKeys.details(), id] as const,\n forSelect: () => [...bankTerminalQueryKeys.all, \"select\"] as const,\n allList: () => [...bankTerminalQueryKeys.all, \"all\"] as const,\n};\n\nexport const bankTerminals = {\n queries: {\n all: [\"bankTerminals\"] as const,\n getBankTerminals: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getBankTerminals({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: bankTerminalQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBankTerminalsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getBankTerminals({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: bankTerminalQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBankTerminalById: (id: number) =>\n queryOptions({\n queryFn: () => getBankTerminalById({ terminalId: id }),\n queryKey: bankTerminalQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getBankTerminalsForSelect: () =>\n queryOptions({\n queryFn: getBankTerminalsForSelect,\n queryKey: bankTerminalQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllBankTerminals: () =>\n queryOptions({\n queryFn: getAllBankTerminals,\n queryKey: bankTerminalQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBankTerminal, Error, { terminal: IBankTerminalForm }> => ({\n mutationFn: createBankTerminal,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.all });\n successNotification({\n title: \"Terminal creado\",\n message: \"El terminal se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el terminal.\",\n });\n },\n }),\n updateBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IBankTerminal,\n Error,\n { terminalId: number; terminal: IBankTerminalForm }\n > => ({\n mutationFn: updateBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n successNotification({\n title: \"Terminal actualizado\",\n message: \"El terminal se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el terminal.\",\n });\n },\n }),\n deleteBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { terminalId: number }> => ({\n mutationFn: deleteBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n successNotification({\n title: \"Terminal eliminado\",\n message: \"El terminal se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el terminal.\",\n });\n },\n }),\n restoreBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { terminalId: number }> => ({\n mutationFn: restoreBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n successNotification({\n title: \"Terminal restaurado\",\n message: \"El terminal se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el terminal.\",\n });\n },\n }),\n },\n};\n\nexport { bankTerminalQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n bankTerminals,\n bankTerminalQueryKeys,\n} from \"../queries/bankTerminal.queries\";\nimport type {\n IBankTerminal,\n IBankTerminalForm,\n IBankTerminalResponse,\n} from \"../interfaces/bankTerminal.interface\";\nimport type { BankTerminalResponse } from \"../interfaces/bankTerminal.interface\";\n\nexport const bankTerminalKeys = bankTerminalQueryKeys;\n\ninterface UseBankTerminalsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useBankTerminals = (\n params: UseBankTerminalsParams = {},\n options?: Omit<UseQueryOptions<IBankTerminalResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...bankTerminals.queries.getBankTerminals(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IBankTerminalResponse>);\n\nexport const useBankTerminalsTable = useBankTerminals;\n\nexport const useBankTerminal = (\n terminalId: number | undefined,\n options?: Omit<UseQueryOptions<IBankTerminal>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...bankTerminals.queries.getBankTerminalById(terminalId ?? 0),\n ...options,\n } as UseQueryOptions<IBankTerminal>);\n\nexport const useBankTerminalsForSelect = (\n options?: Omit<UseQueryOptions<BankTerminalResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...bankTerminals.queries.getBankTerminalsForSelect(),\n ...options,\n } as UseQueryOptions<BankTerminalResponse[]>);\n\nexport const useAllBankTerminals = (\n options?: Omit<UseQueryOptions<BankTerminalResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...bankTerminals.queries.getAllBankTerminals(),\n ...options,\n } as UseQueryOptions<BankTerminalResponse[]>);\n\nexport const useCreateBankTerminal = (\n options?: UseMutationOptions<\n IBankTerminal,\n Error,\n { terminal: IBankTerminalForm }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...bankTerminals.mutations.createBankTerminal(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateBankTerminal = (\n options?: UseMutationOptions<\n IBankTerminal,\n Error,\n { terminalId: number; terminal: IBankTerminalForm }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...bankTerminals.mutations.updateBankTerminal(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteBankTerminal = (\n options?: UseMutationOptions<void, Error, { terminalId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...bankTerminals.mutations.deleteBankTerminal(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreBankTerminal = (\n options?: UseMutationOptions<void, Error, { terminalId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...bankTerminals.mutations.restoreBankTerminal(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchBankTerminal = () => {\n const queryClient = useQueryClient();\n const prefetchBankTerminal = (terminalId: number) =>\n queryClient.prefetchQuery({\n ...bankTerminals.queries.getBankTerminalById(terminalId),\n });\n return { prefetchBankTerminal };\n};\n","import type { IBatch, IBatchResponse } from '../interfaces/batch.interface'\nimport { api } from './config'\n\ninterface BatchQuery {\n skip?: number\n limit?: number\n query?: string\n productId?: number\n}\n\nexport const getBatchesForSelect = async (): Promise<IBatch[]> => {\n const { data } = await api.get<IBatch[]>('batch/batches-for-select')\n return data\n}\n\nexport const getBatches = async ({\n skip = 0,\n limit = 10,\n query = '',\n productId = 0\n}: BatchQuery): Promise<IBatchResponse> => {\n const { data } = await api.get<IBatchResponse>(\n `batch?skip=${skip}&limit=${limit}&query=${query}&productID=${productId}`\n )\n return data\n}\n\nexport const createBatch = async (batch: FormData): Promise<IBatch> => {\n const { data } = await api.post<IBatch>('batch/', batch)\n return data\n}\n\nexport const createBatchAndUpdateOtherBatches = async (batch: FormData): Promise<IBatch> => {\n const { data } = await api.post<IBatch>('batch/create-batch-and-update-other-batches', batch)\n return data\n}\n\nexport const getBatchById = async (batchId: number): Promise<IBatch> => {\n const { data } = await api.get<IBatch>(`batch/${batchId}`)\n return data\n}\n\nexport const getMatchedBatches = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<IBatch[]> => {\n const { data } = await api.get<IBatch[]>(\n `batch/matched-batches?productDetailID=${productDetailId}`\n )\n return data\n}\n\nexport interface UpdateBatchData {\n unitCost?: number\n unitSellingPrice?: number\n profitPercentage?: number\n}\n\nexport const updateBatch = async ({\n batchId,\n batchData\n}: {\n batchId: number\n batchData: UpdateBatchData\n}): Promise<IBatch> => {\n const { data } = await api.put<IBatch>(`batch/${batchId}`, batchData)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getBatches,\n getBatchById,\n getBatchesForSelect,\n getMatchedBatches,\n createBatch,\n createBatchAndUpdateOtherBatches,\n updateBatch,\n type UpdateBatchData,\n} from \"../services/batch.service\";\nimport type { IBatch, IBatchResponse } from \"../interfaces/batch.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst batchQueryKeys = {\n all: [\"batches\"] as const,\n lists: () => [...batchQueryKeys.all, \"list\"] as const,\n list: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n productId?: number;\n }) => [...batchQueryKeys.lists(), { filters: params }] as const,\n detail: (batchId: number) =>\n [...batchQueryKeys.all, \"detail\", batchId] as const,\n forSelect: () => [...batchQueryKeys.all, \"select\"] as const,\n matched: (productDetailId: number) =>\n [...batchQueryKeys.all, \"matched\", productDetailId] as const,\n};\n\nexport const batches = {\n queries: {\n all: [\"batches\"] as const,\n getBatches: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n productId?: number;\n }) =>\n queryOptions({\n queryFn: () =>\n getBatches({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n productId: params.productId,\n }),\n queryKey: batchQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBatchById: (batchId: number) =>\n queryOptions({\n queryFn: () => getBatchById(batchId),\n queryKey: batchQueryKeys.detail(batchId),\n enabled: !!batchId && batchId > 0,\n staleTime: 30_000,\n }),\n getBatchesForTable: (params: TableQueryParams & { productId?: number }) =>\n queryOptions({\n queryFn: () =>\n getBatches({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n productId: params.productId,\n }),\n queryKey: batchQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBatchesForSelect: () =>\n queryOptions({\n queryFn: getBatchesForSelect,\n queryKey: batchQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getMatchedBatches: (productDetailId: number) =>\n queryOptions({\n queryFn: () => getMatchedBatches({ productDetailId }),\n queryKey: batchQueryKeys.matched(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, FormData> => ({\n mutationFn: createBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote creado\",\n message: \"El lote se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el lote.\",\n });\n },\n }),\n createBatchAndUpdateOtherBatches: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, FormData> => ({\n mutationFn: createBatchAndUpdateOtherBatches,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote creado\",\n message: \"El lote se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el lote.\",\n });\n },\n }),\n updateBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, { batchId: number; batchData: UpdateBatchData }> => ({\n mutationFn: updateBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote actualizado\",\n message: \"El lote se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el lote.\",\n });\n },\n }),\n },\n};\n\nexport { batchQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { batches, batchQueryKeys } from \"../queries/batch.queries\";\nimport type { IBatch, IBatchResponse } from \"../interfaces/batch.interface\";\nimport type { UpdateBatchData } from \"../services/batch.service\";\n\nexport const batchKeys = batchQueryKeys;\n\ninterface UseBatchesParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n productId?: number;\n}\n\nexport const useBatches = (\n params: UseBatchesParams = {},\n options?: Omit<UseQueryOptions<IBatchResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...batches.queries.getBatches(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IBatchResponse>);\n\nexport const useBatchesTable = useBatches;\n\nexport const useBatchById = (\n batchId: number | undefined,\n options?: Omit<UseQueryOptions<IBatch>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...batches.queries.getBatchById(batchId ?? 0),\n ...options,\n } as UseQueryOptions<IBatch>);\n\nexport const useBatchesForSelect = (\n options?: Omit<UseQueryOptions<IBatch[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...batches.queries.getBatchesForSelect(),\n ...options,\n } as UseQueryOptions<IBatch[]>);\n\nexport const useMatchedBatches = (\n productDetailId: number | undefined,\n options?: Omit<UseQueryOptions<IBatch[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...batches.queries.getMatchedBatches(productDetailId ?? 0),\n ...options,\n } as UseQueryOptions<IBatch[]>);\n\nexport const useCreateBatch = (\n options?: UseMutationOptions<IBatch, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...batches.mutations.createBatch(queryClient),\n ...options,\n });\n};\n\nexport const useCreateBatchAndUpdateOtherBatches = (\n options?: UseMutationOptions<IBatch, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...batches.mutations.createBatchAndUpdateOtherBatches(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateBatch = (\n options?: UseMutationOptions<\n IBatch,\n Error,\n { batchId: number; batchData: UpdateBatchData }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...batches.mutations.updateBatch(queryClient),\n ...options,\n });\n};\n","import type {\n ICategory,\n ICategoryResponse,\n} from '../interfaces/category.interface'\nimport { api } from './config'\n\ninterface CategoryQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getCategoriesForSelect = async (): Promise<ICategory[]> => {\n const { data } = await api.get<ICategory[]>('category/categoriesSelect')\n return data\n}\n\nexport const getAllCategories = async (): Promise<ICategory[]> => {\n const { data } = await api.get<ICategory[]>('category/')\n return data\n}\n\nexport const getCategories = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: CategoryQuery): Promise<ICategoryResponse> => {\n const { data } = await api.get<ICategoryResponse>(\n `category/categoriesTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\nexport const getCategoryById = async ({\n categoryId\n}: {\n categoryId: number\n}): Promise<ICategory> => {\n const { data } = await api.get(`/category/${categoryId}`)\n return data.data\n}\n\nexport const updateCategory = async ({\n categoryId,\n category\n}: {\n categoryId: number\n category: ICategory\n}): Promise<ICategory> => {\n const { data } = await api.put<ICategory>(`/category/${categoryId}`, category)\n return data\n}\n\nexport const createCategory = async ({ category }: { category: ICategory }): Promise<ICategory> => {\n const { data } = await api.post<ICategory>('category/', category)\n return data\n}\n\nexport const deleteCategory = async ({ categoryId }: { categoryId: number }): Promise<void> => {\n await api.delete(`/category/${categoryId}`)\n}\n\nexport const restoreCategory = async ({ categoryId }: { categoryId: number }): Promise<void> => {\n await api.patch(`/category/${categoryId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getCategories,\n getCategoryById,\n getCategoriesForSelect,\n getAllCategories,\n createCategory,\n updateCategory,\n deleteCategory,\n restoreCategory,\n} from \"../services/category.service\";\nimport type {\n ICategory,\n ICategoryResponse,\n} from \"../interfaces/category.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst categoryQueryKeys = {\n all: [\"categories\"] as const,\n lists: () => [...categoryQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...categoryQueryKeys.lists(), { filters: params }] as const,\n details: () => [...categoryQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...categoryQueryKeys.details(), id] as const,\n forSelect: () => [...categoryQueryKeys.all, \"select\"] as const,\n allList: () => [...categoryQueryKeys.all, \"all\"] as const,\n};\n\nexport const categories = {\n queries: {\n all: [\"categories\"] as const,\n getCategories: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n }) =>\n queryOptions({\n queryFn: () =>\n getCategories({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: categoryQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getCategoriesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getCategories({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: categoryQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getCategoryById: (id: number) =>\n queryOptions({\n queryFn: () => getCategoryById({ categoryId: id }),\n queryKey: categoryQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getCategoriesForSelect: () =>\n queryOptions({\n queryFn: getCategoriesForSelect,\n queryKey: categoryQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllCategories: () =>\n queryOptions({\n queryFn: getAllCategories,\n queryKey: categoryQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<ICategory, Error, { category: ICategory }> => ({\n mutationFn: createCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.all });\n successNotification({\n title: \"Categoría creada\",\n message: \"La categoría se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la categoría.\",\n });\n },\n }),\n\n updateCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n ICategory,\n Error,\n { categoryId: number; category: ICategory }\n > => ({\n mutationFn: updateCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n successNotification({\n title: \"Categoría actualizada\",\n message: \"La categoría se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la categoría.\",\n });\n },\n }),\n\n deleteCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { categoryId: number }> => ({\n mutationFn: deleteCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n successNotification({\n title: \"Categoría eliminada\",\n message: \"La categoría se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la categoría.\",\n });\n },\n }),\n\n restoreCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { categoryId: number }> => ({\n mutationFn: restoreCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n successNotification({\n title: \"Categoría restaurada\",\n message: \"La categoría se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la categoría.\",\n });\n },\n }),\n },\n};\n\nexport { categoryQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n categories,\n categoryQueryKeys,\n} from \"../queries/category.queries\";\nimport type { ICategory, ICategoryResponse } from \"../interfaces/category.interface\";\n\n// Re-export query keys for backward compatibility\nexport const categoryKeys = categoryQueryKeys;\n\ninterface UseCategoriesParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useCategories = (\n params: UseCategoriesParams = {},\n options?: Omit<\n UseQueryOptions<ICategoryResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) => {\n const { skip = 0, limit = 10, query = \"\" } = params;\n return useQuery({\n ...categories.queries.getCategories({ skip, limit, query }),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<ICategoryResponse>);\n};\n\n/** Alias for useCategories - paginated list for tables */\nexport const useCategoriesTable = useCategories;\n\nexport const useCategory = (\n categoryId: number | undefined,\n options?: Omit<UseQueryOptions<ICategory>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...categories.queries.getCategoryById(categoryId ?? 0),\n ...options,\n } as UseQueryOptions<ICategory>);\n\nexport const useCategoriesForSelect = (\n options?: Omit<UseQueryOptions<ICategory[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...categories.queries.getCategoriesForSelect(),\n ...options,\n } as UseQueryOptions<ICategory[]>);\n\nexport const useAllCategories = (\n options?: Omit<UseQueryOptions<ICategory[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...categories.queries.getAllCategories(),\n ...options,\n } as UseQueryOptions<ICategory[]>);\n\nexport const useCreateCategory = (\n options?: UseMutationOptions<ICategory, Error, { category: ICategory }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...categories.mutations.createCategory(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateCategory = (\n options?: UseMutationOptions<\n ICategory,\n Error,\n { categoryId: number; category: ICategory }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...categories.mutations.updateCategory(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteCategory = (\n options?: UseMutationOptions<void, Error, { categoryId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...categories.mutations.deleteCategory(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreCategory = (\n options?: UseMutationOptions<void, Error, { categoryId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...categories.mutations.restoreCategory(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchCategory = () => {\n const queryClient = useQueryClient();\n const prefetchCategory = (categoryId: number) =>\n queryClient.prefetchQuery({\n ...categories.queries.getCategoryById(categoryId),\n });\n return { prefetchCategory };\n};\n","import type {\n IClient,\n IClientRequest,\n IClientResponse,\n IClientResponseById\n} from '../interfaces/client.interface'\nimport { api } from './config'\n\nexport const getAllClients = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: {\n skip: number\n limit: number\n query?: string\n}): Promise<IClientResponse> => {\n const { data } = await api.get<IClientResponse>(\n `client/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getClientsForSelect = async (): Promise<IClient[]> => {\n const { data } = await api.get<IClient[]>('client/select')\n return data\n}\n\nexport const getClientById = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponseById> => {\n const { data } = await api.get<IClientResponseById>(`client/${clientId}`)\n return data\n}\n\nexport const createClient = async (client: IClientRequest): Promise<IClientResponse> => {\n const { data } = await api.post<IClientResponse>('client/', client)\n return data\n}\n\nexport const updateClient = async ({\n client,\n id\n}: {\n id: string\n client: IClient\n}): Promise<IClientResponse> => {\n const { data } = await api.put<IClientResponse>(`client/${id}`, client)\n return data\n}\n\nexport const deleteClient = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponse> => {\n const { data } = await api.delete<IClientResponse>(`client/${clientId}`)\n return data\n}\n\nexport const restoreClient = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponse> => {\n const { data } = await api.patch<IClientResponse>(`client/${clientId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllClients,\n getClientById,\n getClientsForSelect,\n createClient,\n updateClient,\n deleteClient,\n restoreClient,\n} from \"../services/client.service\";\nimport type {\n IClient,\n IClientRequest,\n IClientResponse,\n IClientResponseById,\n} from \"../interfaces/client.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst clientQueryKeys = {\n all: [\"clients\"] as const,\n lists: () => [...clientQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...clientQueryKeys.lists(), { filters: params }] as const,\n details: () => [...clientQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...clientQueryKeys.details(), id] as const,\n forSelect: () => [...clientQueryKeys.all, \"select\"] as const,\n};\n\nexport const clients = {\n queries: {\n all: [\"clients\"] as const,\n getClients: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllClients({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: clientQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getClientsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllClients({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: clientQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getClientById: (id: number) =>\n queryOptions({\n queryFn: () => getClientById({ clientId: id }),\n queryKey: clientQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getClientsForSelect: () =>\n queryOptions({\n queryFn: getClientsForSelect,\n queryKey: clientQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, IClientRequest> => ({\n mutationFn: createClient,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.all });\n successNotification({\n title: \"Cliente creado\",\n message: \"El cliente se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el cliente.\",\n });\n },\n }),\n updateClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { id: string; client: IClient }> => ({\n mutationFn: updateClient,\n onSuccess: (_, { id }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.details() });\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n successNotification({\n title: \"Cliente actualizado\",\n message: \"El cliente se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el cliente.\",\n });\n },\n }),\n deleteClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { clientId: number }> => ({\n mutationFn: deleteClient,\n onSuccess: (_, { clientId }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: clientQueryKeys.detail(clientId) });\n successNotification({\n title: \"Cliente eliminado\",\n message: \"El cliente se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el cliente.\",\n });\n },\n }),\n restoreClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { clientId: number }> => ({\n mutationFn: restoreClient,\n onSuccess: (_, { clientId }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.detail(clientId) });\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n successNotification({\n title: \"Cliente restaurado\",\n message: \"El cliente se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el cliente.\",\n });\n },\n }),\n },\n};\n\nexport { clientQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { clients, clientQueryKeys } from \"../queries/client.queries\";\nimport type {\n IClient,\n IClientRequest,\n IClientResponse,\n IClientResponseById,\n} from \"../interfaces/client.interface\";\n\nexport const clientKeys = clientQueryKeys;\n\ninterface UseClientsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useClients = (\n params: UseClientsParams = {},\n options?: Omit<UseQueryOptions<IClientResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...clients.queries.getClients(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IClientResponse>);\n\nexport const useClientsTable = useClients;\n\nexport const useClient = (\n clientId: number | undefined,\n options?: Omit<UseQueryOptions<IClientResponseById>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...clients.queries.getClientById(clientId ?? 0),\n ...options,\n } as UseQueryOptions<IClientResponseById>);\n\nexport const useClientsForSelect = (\n options?: Omit<UseQueryOptions<IClient[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...clients.queries.getClientsForSelect(),\n ...options,\n } as UseQueryOptions<IClient[]>);\n\nexport const useCreateClient = (\n options?: UseMutationOptions<IClientResponse, Error, IClientRequest>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...clients.mutations.createClient(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateClient = (\n options?: UseMutationOptions<\n IClientResponse,\n Error,\n { id: string; client: IClient }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...clients.mutations.updateClient(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteClient = (\n options?: UseMutationOptions<IClientResponse, Error, { clientId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...clients.mutations.deleteClient(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreClient = (\n options?: UseMutationOptions<IClientResponse, Error, { clientId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...clients.mutations.restoreClient(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchClient = () => {\n const queryClient = useQueryClient();\n const prefetchClient = (clientId: number) =>\n queryClient.prefetchQuery({\n ...clients.queries.getClientById(clientId),\n });\n return { prefetchClient };\n};\n","import { api } from './config'\n\ninterface ExchangeQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface IExchange {\n exchangeRateID: number\n valorEnPesos: number\n fromDate: string\n toDate: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport interface PaymentType {\n value: number\n label: string\n}\n\nexport interface IExchangeResponse {\n total: number\n data: IExchange[]\n skip: number\n limit: number\n}\n\nexport const getPaymentTypes = async (): Promise<PaymentType[]> => {\n const { data } = await api.get<PaymentType[]>('exchange/getPaymentTypes')\n return data\n}\n\nexport const getExchangeRates = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: ExchangeQuery): Promise<IExchangeResponse> => {\n const { data } = await api.get<IExchangeResponse>(\n `exchange/exchangesTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\n//obtener el exchange rate mediante fehca y hora\nexport const getExchangeRate = async (): Promise<IExchange> => {\n const { data } = await api.get<IExchange>('exchange/getExchangeRate')\n return data\n}\n\nexport const createExchangeRate = async ({\n exchangeRate\n}: {\n exchangeRate: IExchange\n}): Promise<IExchange> => {\n const { data } = await api.post<IExchange>('exchange/', exchangeRate)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getExchangeRates,\n getExchangeRate,\n getPaymentTypes,\n createExchangeRate,\n} from \"../services/exchange.service\";\nimport type {\n IExchange,\n IExchangeResponse,\n PaymentType,\n} from \"../services/exchange.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst exchangeQueryKeys = {\n all: [\"exchange\"] as const,\n lists: () => [...exchangeQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...exchangeQueryKeys.lists(), { filters: params }] as const,\n rate: () => [...exchangeQueryKeys.all, \"rate\"] as const,\n paymentTypes: () => [...exchangeQueryKeys.all, \"paymentTypes\"] as const,\n};\n\nexport const exchange = {\n queries: {\n all: [\"exchange\"] as const,\n getExchangeRates: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getExchangeRates({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: exchangeQueryKeys.list(params),\n staleTime: 5 * 60 * 1000,\n }),\n getExchangeRate: () =>\n queryOptions({\n queryFn: getExchangeRate,\n queryKey: exchangeQueryKeys.rate(),\n staleTime: 60 * 1000,\n }),\n getPaymentTypes: () =>\n queryOptions({\n queryFn: getPaymentTypes,\n queryKey: exchangeQueryKeys.paymentTypes(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createExchangeRate: (\n queryClient: QueryClient,\n ): UseMutationOptions<IExchange, Error, { exchangeRate: IExchange }> => ({\n mutationFn: createExchangeRate,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: exchangeQueryKeys.all });\n successNotification({\n title: \"Tasa de cambio creada\",\n message: \"La tasa de cambio se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la tasa de cambio.\",\n });\n },\n }),\n },\n};\n\nexport { exchangeQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { exchange, exchangeQueryKeys } from \"../queries/exchange.queries\";\nimport type {\n IExchange,\n IExchangeResponse,\n PaymentType,\n} from \"../services/exchange.service\";\n\nexport const exchangeKeys = exchangeQueryKeys;\n\ninterface UseExchangeRatesParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useExchangeRates = (\n params: UseExchangeRatesParams = {},\n options?: Omit<UseQueryOptions<IExchangeResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...exchange.queries.getExchangeRates(params),\n ...options,\n } as UseQueryOptions<IExchangeResponse>);\n\nexport const useExchangeRatesTable = useExchangeRates;\n\nexport const useExchangeRate = (\n options?: Omit<UseQueryOptions<IExchange>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...exchange.queries.getExchangeRate(),\n ...options,\n } as UseQueryOptions<IExchange>);\n\nexport const usePaymentTypes = (\n options?: Omit<UseQueryOptions<PaymentType[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...exchange.queries.getPaymentTypes(),\n ...options,\n } as UseQueryOptions<PaymentType[]>);\n\nexport const useCreateExchangeRate = (\n options?: UseMutationOptions<IExchange, Error, { exchangeRate: IExchange }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...exchange.mutations.createExchangeRate(queryClient),\n ...options,\n });\n};\n","import { api } from './config'\n\nexport interface FolioResponse {\n folioID: number\n folioType: string\n lastFolioUsed: number\n nextFolioToUse: number\n nextBatchWithFolioToUse: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getNextFolioToUseInBatches = async (): Promise<FolioResponse> => {\n const { data } = await api.get<FolioResponse>('folio/nextFolioToUseInBatches')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getNextFolioToUseInBatches } from \"../services/folio.service\";\nimport type { FolioResponse } from \"../services/folio.service\";\n\nconst folioQueryKeys = {\n all: [\"folio\"] as const,\n nextForBatches: () => [...folioQueryKeys.all, \"nextForBatches\"] as const,\n};\n\nexport const folios = {\n queries: {\n all: [\"folio\"] as const,\n getNextFolioToUseInBatches: () =>\n queryOptions({\n queryFn: getNextFolioToUseInBatches,\n queryKey: folioQueryKeys.nextForBatches(),\n staleTime: 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { folioQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { folios, folioQueryKeys } from \"../queries/folio.queries\";\nimport type { FolioResponse } from \"../services/folio.service\";\n\nexport const folioKeys = folioQueryKeys;\n\nexport const useNextFolioToUseInBatches = (\n options?: Omit<UseQueryOptions<FolioResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...folios.queries.getNextFolioToUseInBatches(),\n ...options,\n } as UseQueryOptions<FolioResponse>);\n","import type { IGender } from '../interfaces/gender.interface'\nimport { api } from './config'\n\ninterface GenderResponse {\n data: IGender[]\n}\n\nexport const getAllGenders = async (): Promise<GenderResponse> => {\n const { data } = await api.get('gender/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllGenders } from \"../services/gender.service\";\nimport type { IGender } from \"../interfaces/gender.interface\";\n\nexport interface GenderResponse {\n data: IGender[];\n}\n\nconst genderQueryKeys = {\n all: [\"genders\"] as const,\n};\n\nexport const genders = {\n queries: {\n all: [\"genders\"] as const,\n getAllGenders: () =>\n queryOptions({\n queryFn: (): Promise<GenderResponse> => getAllGenders(),\n queryKey: genderQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { genderQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport {\n genders,\n genderQueryKeys,\n type GenderResponse,\n} from \"../queries/gender.queries\";\n\nexport const genderKeys = genderQueryKeys;\n\nexport const useAllGenders = (\n options?: Omit<UseQueryOptions<GenderResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...genders.queries.getAllGenders(),\n ...options,\n } as UseQueryOptions<GenderResponse>);\n","import { api } from './config'\n\ninterface HealthCheckResponse {\n status: string\n timestamp: string\n services: {\n backend: {\n status: string\n message?: string\n }\n database: {\n status: string\n message?: string\n }\n }\n}\n\nconst HEALTH_CHECK_TIMEOUT_MS = 10000\n\nexport const healthService = {\n async check(): Promise<HealthCheckResponse> {\n try {\n const response = await api.get<HealthCheckResponse>('/api/health', {\n timeout: HEALTH_CHECK_TIMEOUT_MS\n })\n return response.data\n } catch (error) {\n const isTimeoutError =\n error instanceof Error &&\n (error.message.includes('timeout') || error.message.includes('Network Error'))\n\n return {\n status: 'error',\n timestamp: new Date().toISOString(),\n services: {\n backend: {\n status: 'error',\n message: isTimeoutError\n ? 'No se pudo conectar con el backend. Verifica que el servidor esté corriendo y la URL configurada.'\n : error instanceof Error\n ? error.message\n : 'Error de conexión con el backend'\n },\n database: {\n status: 'unknown',\n message: 'No se puede verificar la base de datos porque el backend no responde'\n }\n }\n }\n }\n }\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { healthService } from \"../services/health.service\";\n\nexport interface HealthCheckResponse {\n status: string;\n timestamp: string;\n services: {\n backend: { status: string; message?: string };\n database: { status: string; message?: string };\n };\n}\n\nconst healthQueryKeys = {\n all: [\"health\"] as const,\n check: () => [...healthQueryKeys.all, \"check\"] as const,\n};\n\nexport const health = {\n queries: {\n all: [\"health\"] as const,\n check: () =>\n queryOptions({\n queryFn: (): Promise<HealthCheckResponse> => healthService.check(),\n queryKey: healthQueryKeys.check(),\n staleTime: 30 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { healthQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { health, healthQueryKeys } from \"../queries/health.queries\";\nimport type { HealthCheckResponse } from \"../queries/health.queries\";\n\nexport const healthKeys = healthQueryKeys;\n\nexport const useHealthCheck = (\n options?: Omit<\n UseQueryOptions<HealthCheckResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...health.queries.check(),\n ...options,\n } as UseQueryOptions<HealthCheckResponse>);\n","import type { ILocation, ILocationResponse } from '../interfaces/location.interface'\nimport { api } from './config'\n\ninterface LocationQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface LocationResponse {\n physicalLocationID: number\n name: string\n addressID: number\n isOpen: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getAllLocations = async (): Promise<LocationResponse[]> => {\n const { data } = await api.get<LocationResponse[]>('location/')\n return data\n}\n\nexport const getLocationsForSelect = async (): Promise<LocationResponse[]> => {\n const { data } = await api.get<LocationResponse[]>('location/locationsForSelect')\n return data\n}\n\nexport const getLocations = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: LocationQuery): Promise<ILocationResponse> => {\n const { data } = await api.get<ILocationResponse>(\n `location/locations?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getLocationById = async ({\n locationId\n}: {\n locationId: number\n}): Promise<ILocation> => {\n const { data } = await api.get(`/location/${locationId}`)\n return data.data\n}\n\nexport const updateLocation = async ({\n locationId,\n location\n}: {\n locationId: number\n location: FormData\n}): Promise<ILocation> => {\n const { data } = await api.put<ILocation>(`/location/${locationId}`, location, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createLocation = async (location: FormData): Promise<ILocation> => {\n const { data } = await api.post<ILocation>('location/', location, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteLocation = async ({\n physicalLocationId\n}: {\n physicalLocationId: number\n}): Promise<void> => {\n await api.delete(`/location/${physicalLocationId}`)\n}\n\nexport const restoreLocation = async ({\n physicalLocationId\n}: {\n physicalLocationId: number\n}): Promise<void> => {\n await api.patch(`/location/${physicalLocationId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getLocations,\n getLocationById,\n getLocationsForSelect,\n getAllLocations,\n createLocation,\n updateLocation,\n deleteLocation,\n restoreLocation,\n} from \"../services/location.service\";\nimport type { ILocation, ILocationResponse } from \"../interfaces/location.interface\";\nimport type { LocationResponse } from \"../services/location.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst locationQueryKeys = {\n all: [\"locations\"] as const,\n lists: () => [...locationQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...locationQueryKeys.lists(), { filters: params }] as const,\n details: () => [...locationQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...locationQueryKeys.details(), id] as const,\n forSelect: () => [...locationQueryKeys.all, \"select\"] as const,\n allList: () => [...locationQueryKeys.all, \"all\"] as const,\n};\n\nexport const locations = {\n queries: {\n all: [\"locations\"] as const,\n getLocations: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getLocations({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: locationQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getLocationsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getLocations({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: locationQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getLocationById: (id: number) =>\n queryOptions({\n queryFn: () => getLocationById({ locationId: id }),\n queryKey: locationQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getLocationsForSelect: () =>\n queryOptions({\n queryFn: getLocationsForSelect,\n queryKey: locationQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllLocations: () =>\n queryOptions({\n queryFn: getAllLocations,\n queryKey: locationQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<ILocation, Error, FormData> => ({\n mutationFn: createLocation,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.all });\n successNotification({\n title: \"Ubicación creada\",\n message: \"La ubicación se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la ubicación.\",\n });\n },\n }),\n updateLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n ILocation,\n Error,\n { locationId: number; location: FormData }\n > => ({\n mutationFn: updateLocation,\n onSuccess: (_, { locationId }) => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.detail(locationId) });\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n successNotification({\n title: \"Ubicación actualizada\",\n message: \"La ubicación se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la ubicación.\",\n });\n },\n }),\n deleteLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { physicalLocationId: number }> => ({\n mutationFn: deleteLocation,\n onSuccess: (_, { physicalLocationId }) => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: locationQueryKeys.detail(physicalLocationId),\n });\n successNotification({\n title: \"Ubicación eliminada\",\n message: \"La ubicación se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la ubicación.\",\n });\n },\n }),\n restoreLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { physicalLocationId: number }> => ({\n mutationFn: restoreLocation,\n onSuccess: (_, { physicalLocationId }) => {\n queryClient.invalidateQueries({\n queryKey: locationQueryKeys.detail(physicalLocationId),\n });\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n successNotification({\n title: \"Ubicación restaurada\",\n message: \"La ubicación se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la ubicación.\",\n });\n },\n }),\n },\n};\n\nexport { locationQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { locations, locationQueryKeys } from \"../queries/location.queries\";\nimport type { ILocation, ILocationResponse } from \"../interfaces/location.interface\";\nimport type { LocationResponse } from \"../services/location.service\";\n\nexport const locationKeys = locationQueryKeys;\n\ninterface UseLocationsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useLocations = (\n params: UseLocationsParams = {},\n options?: Omit<UseQueryOptions<ILocationResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...locations.queries.getLocations(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<ILocationResponse>);\n\nexport const useLocationsTable = useLocations;\n\nexport const useLocation = (\n locationId: number | undefined,\n options?: Omit<UseQueryOptions<ILocation>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...locations.queries.getLocationById(locationId ?? 0),\n ...options,\n } as UseQueryOptions<ILocation>);\n\nexport const useLocationsForSelect = (\n options?: Omit<UseQueryOptions<LocationResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...locations.queries.getLocationsForSelect(),\n ...options,\n } as UseQueryOptions<LocationResponse[]>);\n\nexport const useAllLocations = (\n options?: Omit<UseQueryOptions<LocationResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...locations.queries.getAllLocations(),\n ...options,\n } as UseQueryOptions<LocationResponse[]>);\n\nexport const useCreateLocation = (\n options?: UseMutationOptions<ILocation, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...locations.mutations.createLocation(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateLocation = (\n options?: UseMutationOptions<\n ILocation,\n Error,\n { locationId: number; location: FormData }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...locations.mutations.updateLocation(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteLocation = (\n options?: UseMutationOptions<void, Error, { physicalLocationId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...locations.mutations.deleteLocation(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreLocation = (\n options?: UseMutationOptions<void, Error, { physicalLocationId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...locations.mutations.restoreLocation(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchLocation = () => {\n const queryClient = useQueryClient();\n const prefetchLocation = (locationId: number) =>\n queryClient.prefetchQuery({\n ...locations.queries.getLocationById(locationId),\n });\n return { prefetchLocation };\n};\n","import type { IMaterial } from '../interfaces/material.interface'\nimport { api } from './config'\n\nexport interface MaterialResponse {\n data: IMaterial[]\n total: number\n skip: number\n limit: number\n}\n\ninterface MaterialQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getAllMaterials = async (): Promise<IMaterial[]> => {\n const { data } = await api.get<IMaterial[]>('material/')\n return data\n}\n\nexport const getMaterials = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: MaterialQuery): Promise<MaterialResponse> => {\n const { data } = await api.get<MaterialResponse>(\n `material/materialsTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getMaterialById = async ({\n materialId\n}: {\n materialId: number\n}): Promise<IMaterial> => {\n const { data } = await api.get(`material/${materialId}`)\n return data.data\n}\n\nexport const getMaterialsForSelect = async (): Promise<IMaterial[]> => {\n const { data } = await api.get<IMaterial[]>('material/select')\n return data\n}\n\nexport const createMaterial = async ({ material }: { material: IMaterial }): Promise<IMaterial> => {\n const { data } = await api.post<IMaterial>('material/', material)\n return data\n}\n\nexport const updateMaterial = async ({\n materialId,\n material\n}: {\n materialId: number\n material: IMaterial\n}): Promise<IMaterial> => {\n const { data } = await api.put<IMaterial>(`material/${materialId}`, material)\n return data\n}\n\nexport const deleteMaterial = async ({ materialId }: { materialId: number }): Promise<void> => {\n await api.delete(`material/${materialId}`)\n}\nexport const undeleteMaterial = async ({ materialId }: { materialId: number }): Promise<void> => {\n await api.patch(`material/${materialId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getMaterials,\n getMaterialById,\n getMaterialsForSelect,\n getAllMaterials,\n createMaterial,\n updateMaterial,\n deleteMaterial,\n undeleteMaterial,\n} from \"../services/material.service\";\nimport type { IMaterial } from \"../interfaces/material.interface\";\nimport type { MaterialResponse } from \"../services/material.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst materialQueryKeys = {\n all: [\"materials\"] as const,\n lists: () => [...materialQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...materialQueryKeys.lists(), { filters: params }] as const,\n details: () => [...materialQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...materialQueryKeys.details(), id] as const,\n forSelect: () => [...materialQueryKeys.all, \"select\"] as const,\n allList: () => [...materialQueryKeys.all, \"all\"] as const,\n};\n\nexport const materials = {\n queries: {\n all: [\"materials\"] as const,\n getMaterials: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getMaterials({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: materialQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMaterialsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getMaterials({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: materialQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMaterialById: (id: number) =>\n queryOptions({\n queryFn: () => getMaterialById({ materialId: id }),\n queryKey: materialQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getMaterialsForSelect: () =>\n queryOptions({\n queryFn: getMaterialsForSelect,\n queryKey: materialQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllMaterials: () =>\n queryOptions({\n queryFn: getAllMaterials,\n queryKey: materialQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<IMaterial, Error, { material: IMaterial }> => ({\n mutationFn: createMaterial,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.all });\n successNotification({\n title: \"Material creado\",\n message: \"El material se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el material.\",\n });\n },\n }),\n updateMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<IMaterial, Error, { materialId: number; material: IMaterial }> => ({\n mutationFn: updateMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.detail(materialId) });\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n successNotification({\n title: \"Material actualizado\",\n message: \"El material se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el material.\",\n });\n },\n }),\n deleteMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { materialId: number }> => ({\n mutationFn: deleteMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: materialQueryKeys.detail(materialId) });\n successNotification({\n title: \"Material eliminado\",\n message: \"El material se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el material.\",\n });\n },\n }),\n undeleteMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { materialId: number }> => ({\n mutationFn: undeleteMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.detail(materialId) });\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n successNotification({\n title: \"Material restaurado\",\n message: \"El material se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el material.\",\n });\n },\n }),\n },\n};\n\nexport { materialQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { materials, materialQueryKeys } from \"../queries/material.queries\";\nimport type { IMaterial } from \"../interfaces/material.interface\";\nimport type { MaterialResponse } from \"../services/material.service\";\n\nexport const materialKeys = materialQueryKeys;\n\ninterface UseMaterialsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useMaterials = (\n params: UseMaterialsParams = {},\n options?: Omit<UseQueryOptions<MaterialResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...materials.queries.getMaterials(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<MaterialResponse>);\n\nexport const useMaterialsTable = useMaterials;\n\nexport const useMaterial = (\n materialId: number | undefined,\n options?: Omit<UseQueryOptions<IMaterial>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...materials.queries.getMaterialById(materialId ?? 0),\n ...options,\n } as UseQueryOptions<IMaterial>);\n\nexport const useMaterialsForSelect = (\n options?: Omit<UseQueryOptions<IMaterial[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...materials.queries.getMaterialsForSelect(),\n ...options,\n } as UseQueryOptions<IMaterial[]>);\n\nexport const useAllMaterials = (\n options?: Omit<UseQueryOptions<IMaterial[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...materials.queries.getAllMaterials(),\n ...options,\n } as UseQueryOptions<IMaterial[]>);\n\nexport const useCreateMaterial = (\n options?: UseMutationOptions<IMaterial, Error, { material: IMaterial }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...materials.mutations.createMaterial(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateMaterial = (\n options?: UseMutationOptions<\n IMaterial,\n Error,\n { materialId: number; material: IMaterial }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...materials.mutations.updateMaterial(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteMaterial = (\n options?: UseMutationOptions<void, Error, { materialId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...materials.mutations.deleteMaterial(queryClient),\n ...options,\n });\n};\n\nexport const useUndeleteMaterial = (\n options?: UseMutationOptions<void, Error, { materialId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...materials.mutations.undeleteMaterial(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchMaterial = () => {\n const queryClient = useQueryClient();\n const prefetchMaterial = (materialId: number) =>\n queryClient.prefetchQuery({\n ...materials.queries.getMaterialById(materialId),\n });\n return { prefetchMaterial };\n};\n","import type { IModule } from '../interfaces/module.interface'\nimport { api } from './config'\n\nexport const getAllModules = async (): Promise<IModule[]> => {\n const { data } = await api.get<IModule[]>('module/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllModules } from \"../services/module.service\";\nimport type { IModule } from \"../interfaces/module.interface\";\n\nconst moduleQueryKeys = {\n all: [\"modules\"] as const,\n};\n\nexport const modules = {\n queries: {\n all: [\"modules\"] as const,\n getAllModules: () =>\n queryOptions({\n queryFn: getAllModules,\n queryKey: moduleQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { moduleQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { modules, moduleQueryKeys } from \"../queries/module.queries\";\nimport type { IModule } from \"../interfaces/module.interface\";\n\nexport const moduleKeys = moduleQueryKeys;\n\nexport const useAllModules = (\n options?: Omit<UseQueryOptions<IModule[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...modules.queries.getAllModules(),\n ...options,\n } as UseQueryOptions<IModule[]>);\n","import type { IOrder, IOrderResponse, TblOrderStatus } from '../interfaces/order.interface'\nimport { api } from './config'\n\nexport const getOrders = async ({\n skip = 0,\n limit = 10,\n query = '',\n commissionedBy = '',\n orderStatus = [],\n startDate = '',\n endDate = '',\n showOnlyReturns = false\n}: {\n skip?: number\n limit?: number\n query?: string\n commissionedBy?: string\n orderStatus?: string[]\n startDate?: string | null\n endDate?: string | null\n showOnlyReturns?: boolean\n}): Promise<IOrderResponse> => {\n const { data } = await api.get<IOrderResponse>('order', {\n params: { skip, limit, query, commissionedBy, orderStatus, startDate, endDate, showOnlyReturns }\n })\n return data\n}\n\nexport const getOrderById = async ({ orderId }: { orderId: number }): Promise<IOrder> => {\n const { data } = await api.get<IOrder>(`order/${orderId}`)\n return data\n}\n\nexport const getOrdersStatusForSelect = async (): Promise<TblOrderStatus[]> => {\n const { data } = await api.get<TblOrderStatus[]>('order/status')\n return data\n}\n\nexport interface ChangeProductRequest {\n orderID: number\n oldOrderDetailID: number\n newProductDetailID: number\n quantity: number\n reason?: string\n}\n\nexport interface ChangeProductResponse {\n success: boolean\n message: string\n priceDifference: number\n requiresAdditionalPayment: boolean\n requiresRefund: boolean\n order: IOrder\n}\n\nexport const changeOrderProduct = async (\n changeData: ChangeProductRequest\n): Promise<ChangeProductResponse> => {\n const { data } = await api.post<ChangeProductResponse>('order/change-product', changeData)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getOrders,\n getOrderById,\n getOrdersStatusForSelect,\n changeOrderProduct,\n} from \"../services/order.service\";\nimport type {\n IOrder,\n IOrderResponse,\n TblOrderStatus,\n} from \"../interfaces/order.interface\";\nimport type {\n ChangeProductRequest,\n ChangeProductResponse,\n} from \"../services/order.service\";\n\nexport interface UseOrdersParams {\n skip?: number;\n limit?: number;\n query?: string;\n commissionedBy?: string;\n orderStatus?: string[];\n startDate?: string | null;\n endDate?: string | null;\n showOnlyReturns?: boolean;\n}\n\nconst orderQueryKeys = {\n all: [\"orders\"] as const,\n lists: () => [...orderQueryKeys.all, \"list\"] as const,\n list: (filters: UseOrdersParams) =>\n [...orderQueryKeys.lists(), { filters }] as const,\n details: () => [...orderQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...orderQueryKeys.details(), id] as const,\n statusForSelect: () => [...orderQueryKeys.all, \"status\"] as const,\n};\n\nexport const orders = {\n queries: {\n all: [\"orders\"] as const,\n getOrders: (params: UseOrdersParams = {}) =>\n queryOptions({\n queryFn: () =>\n getOrders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query ?? \"\",\n commissionedBy: params.commissionedBy ?? \"\",\n orderStatus: params.orderStatus ?? [],\n startDate: params.startDate ?? \"\",\n endDate: params.endDate ?? \"\",\n showOnlyReturns: params.showOnlyReturns ?? false,\n }),\n queryKey: orderQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getOrderById: (id: number) =>\n queryOptions({\n queryFn: () => getOrderById({ orderId: id }),\n queryKey: orderQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getOrdersStatusForSelect: () =>\n queryOptions({\n queryFn: getOrdersStatusForSelect,\n queryKey: orderQueryKeys.statusForSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n changeOrderProduct: (): UseMutationOptions<\n ChangeProductResponse,\n Error,\n ChangeProductRequest\n > => ({\n mutationFn: changeOrderProduct,\n }),\n },\n};\n\nexport { orderQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { orders, orderQueryKeys } from \"../queries/order.queries\";\nimport type {\n IOrder,\n IOrderResponse,\n TblOrderStatus,\n} from \"../interfaces/order.interface\";\nimport type {\n ChangeProductRequest,\n ChangeProductResponse,\n} from \"../services/order.service\";\n\nexport const orderKeys = orderQueryKeys;\n\ninterface UseOrdersParams {\n skip?: number;\n limit?: number;\n query?: string;\n commissionedBy?: string;\n orderStatus?: string[];\n startDate?: string | null;\n endDate?: string | null;\n showOnlyReturns?: boolean;\n}\n\nexport const useOrders = (\n params: UseOrdersParams = {},\n options?: Omit<UseQueryOptions<IOrderResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...orders.queries.getOrders(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IOrderResponse>);\n\nexport const useOrdersTable = useOrders;\n\nexport const useOrder = (\n orderId: number | undefined,\n options?: Omit<UseQueryOptions<IOrder>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...orders.queries.getOrderById(orderId ?? 0),\n ...options,\n } as UseQueryOptions<IOrder>);\n\nexport const useOrdersStatusForSelect = (\n options?: Omit<UseQueryOptions<TblOrderStatus[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...orders.queries.getOrdersStatusForSelect(),\n ...options,\n } as UseQueryOptions<TblOrderStatus[]>);\n\nexport const useChangeOrderProduct = (\n options?: UseMutationOptions<\n ChangeProductResponse,\n Error,\n ChangeProductRequest\n >,\n) =>\n useMutation({\n ...orders.mutations.changeOrderProduct(),\n ...options,\n });\n\nexport const usePrefetchOrder = () => {\n const queryClient = useQueryClient();\n const prefetchOrder = (orderId: number) =>\n queryClient.prefetchQuery({\n ...orders.queries.getOrderById(orderId),\n });\n return { prefetchOrder };\n};\n","import { api } from './config'\nimport type {\n IPayment,\n IPaymentMethod,\n IPaymentMethodAmountExpected\n} from '../interfaces/payment.interface'\n\nexport const sendPaymentData = async ({ payment }: { payment: IPayment }): Promise<IPayment> => {\n const { data } = await api.post<IPayment>(\n 'payment/applypayment',\n {\n ...payment\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n\n//metodo para llamar a la api y obtener los metodos de pago\nexport const getPaymentMethods = async (): Promise<IPaymentMethod[]> => {\n const { data } = await api.get('payment/getpaymentmethods')\n return data\n}\n\n//metodo para llamar a la api y obtener los metodos de pago\nexport const getPaymentMethodsWithAmountExpected = async (): Promise<\n IPaymentMethodAmountExpected[]\n> => {\n const { data } = await api.get('payment/getpaymentmethodswithamountexpected')\n return data\n}\n\nexport const sendCreditPaymentData = async ({\n payment,\n orderId\n}: {\n payment: IPayment\n orderId: number\n}): Promise<IPayment> => {\n const { data } = await api.post<IPayment>(\n 'payment/applycreditpayment',\n {\n ...payment,\n orderID: orderId\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n getPaymentMethods,\n getPaymentMethodsWithAmountExpected,\n sendPaymentData,\n sendCreditPaymentData,\n} from \"../services/payment.service\";\nimport type {\n IPayment,\n IPaymentMethod,\n IPaymentMethodAmountExpected,\n} from \"../interfaces/payment.interface\";\n\nconst paymentQueryKeys = {\n all: [\"payments\"] as const,\n methods: () => [...paymentQueryKeys.all, \"methods\"] as const,\n methodsWithAmount: () => [...paymentQueryKeys.all, \"methodsWithAmount\"] as const,\n};\n\nexport const payments = {\n queries: {\n all: [\"payments\"] as const,\n getPaymentMethods: () =>\n queryOptions({\n queryFn: getPaymentMethods,\n queryKey: paymentQueryKeys.methods(),\n staleTime: 5 * 60 * 1000,\n }),\n getPaymentMethodsWithAmountExpected: () =>\n queryOptions({\n queryFn: getPaymentMethodsWithAmountExpected,\n queryKey: paymentQueryKeys.methodsWithAmount(),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n sendPayment: (): UseMutationOptions<IPayment, Error, { payment: IPayment }> => ({\n mutationFn: sendPaymentData,\n }),\n sendCreditPayment: (): UseMutationOptions<\n IPayment,\n Error,\n { payment: IPayment; orderId: number }\n > => ({\n mutationFn: sendCreditPaymentData,\n }),\n },\n};\n\nexport { paymentQueryKeys };\n","import {\n useQuery,\n useMutation,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { payments, paymentQueryKeys } from \"../queries/payment.queries\";\nimport type {\n IPayment,\n IPaymentMethod,\n IPaymentMethodAmountExpected,\n} from \"../interfaces/payment.interface\";\n\nexport const paymentKeys = paymentQueryKeys;\n\nexport const usePaymentMethods = (\n options?: Omit<UseQueryOptions<IPaymentMethod[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...payments.queries.getPaymentMethods(),\n ...options,\n } as UseQueryOptions<IPaymentMethod[]>);\n\nexport const usePaymentMethodsWithAmountExpected = (\n options?: Omit<\n UseQueryOptions<IPaymentMethodAmountExpected[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...payments.queries.getPaymentMethodsWithAmountExpected(),\n ...options,\n } as UseQueryOptions<IPaymentMethodAmountExpected[]>);\n\nexport const useSendPayment = (\n options?: UseMutationOptions<IPayment, Error, { payment: IPayment }>,\n) =>\n useMutation({\n ...payments.mutations.sendPayment(),\n ...options,\n });\n\nexport const useSendCreditPayment = (\n options?: UseMutationOptions<\n IPayment,\n Error,\n { payment: IPayment; orderId: number }\n >,\n) =>\n useMutation({\n ...payments.mutations.sendCreditPayment(),\n ...options,\n });\n","import type { IPermissionRole, PermissionRole } from '../interfaces/permission.interface'\nimport { api } from './config'\n\nexport interface IUpdatePermission {\n id: number\n hasPermission: boolean\n}\n\nexport const getAllPermissions = async (): Promise<IPermissionRole> => {\n const response = await api.get<IPermissionRole>('/permission-role/')\n return response.data\n}\n\nexport const updatePermission = async (\n permission: IUpdatePermission\n): Promise<IUpdatePermission> => {\n const response = await api.put<IUpdatePermission>('/permission-role', permission)\n return response.data\n}\n\nexport const getPermissionRoleByRoleID = async ({\n roleId\n}: {\n roleId: number\n}): Promise<PermissionRole[]> => {\n const { data } = await api.get<PermissionRole[]>(`permission-role/${roleId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllPermissions,\n getPermissionRoleByRoleID,\n updatePermission,\n} from \"../services/permission.service\";\nimport type {\n IPermissionRole,\n PermissionRole,\n} from \"../interfaces/permission.interface\";\nimport type { IUpdatePermission } from \"../services/permission.service\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst permissionQueryKeys = {\n all: [\"permissions\"] as const,\n list: () => [...permissionQueryKeys.all, \"list\"] as const,\n byRole: (roleId: number) => [...permissionQueryKeys.all, \"role\", roleId] as const,\n};\n\nexport const permissions = {\n queries: {\n all: [\"permissions\"] as const,\n getPermissions: () =>\n queryOptions({\n queryFn: getAllPermissions,\n queryKey: permissionQueryKeys.list(),\n staleTime: 10 * 60 * 1000,\n }),\n getPermissionRoleByRoleID: (roleId: number) =>\n queryOptions({\n queryFn: () => getPermissionRoleByRoleID({ roleId }),\n queryKey: permissionQueryKeys.byRole(roleId),\n enabled: !!roleId && roleId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n updatePermission: (\n queryClient: QueryClient,\n ): UseMutationOptions<IUpdatePermission, Error, IUpdatePermission> => ({\n mutationFn: updatePermission,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: permissionQueryKeys.all });\n successNotification({\n title: \"Permisos actualizados\",\n message: \"Los permisos se han actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron actualizar los permisos.\",\n });\n },\n }),\n },\n};\n\nexport { permissionQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n permissions,\n permissionQueryKeys,\n} from \"../queries/permission.queries\";\nimport type {\n IPermissionRole,\n PermissionRole,\n} from \"../interfaces/permission.interface\";\nimport type { IUpdatePermission } from \"../services/permission.service\";\n\nexport const permissionKeys = permissionQueryKeys;\n\nexport const usePermissions = (\n options?: Omit<UseQueryOptions<IPermissionRole>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...permissions.queries.getPermissions(),\n ...options,\n } as UseQueryOptions<IPermissionRole>);\n\nexport const usePermissionRoleByRoleID = (\n roleId: number | undefined,\n options?: Omit<UseQueryOptions<PermissionRole[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...permissions.queries.getPermissionRoleByRoleID(roleId ?? 0),\n ...options,\n } as UseQueryOptions<PermissionRole[]>);\n\nexport const useUpdatePermission = (\n options?: UseMutationOptions<IUpdatePermission, Error, IUpdatePermission>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...permissions.mutations.updatePermission(queryClient),\n ...options,\n });\n};\n","import type {\n PricePerGramResponse,\n PriceCalculationResponse,\n UpdatePriceRequest,\n SchedulePriceRequest,\n CalculatePriceRequest,\n IPricePerGramHistory\n} from '../interfaces/pricePerGram.interface'\nimport { api } from './config'\n\nconst BASE_URL = 'price-per-gram'\n\nexport const pricePerGramService = {\n // 1. Obtener precio con fallback\n async getPrice(params: {\n productDetailId?: number\n productId?: number\n materialId?: number\n }): Promise<PricePerGramResponse> {\n const queryParams = new URLSearchParams()\n\n if (params.productDetailId)\n queryParams.append('productDetailID', params.productDetailId.toString())\n if (params.productId) queryParams.append('productID', params.productId.toString())\n if (params.materialId) queryParams.append('materialID', params.materialId.toString())\n\n const { data } = await api.get<PricePerGramResponse>(\n `${BASE_URL}/price?${queryParams.toString()}`\n )\n return data\n },\n\n // 2. Actualizar precio (crea histórico automáticamente)\n async updatePrice(request: UpdatePriceRequest): Promise<void> {\n await api.put(`${BASE_URL}/price`, request)\n },\n\n // 3. Ver histórico de precios\n async getHistory({\n entityType,\n entityId,\n limit\n }: {\n entityType: 'material' | 'product' | 'productDetail'\n entityId: number\n limit?: number\n }): Promise<IPricePerGramHistory[]> {\n const queryParams = new URLSearchParams()\n if (limit) queryParams.append('limit', limit.toString())\n\n const { data } = await api.get<{ success: boolean; data: IPricePerGramHistory[] }>(\n `${BASE_URL}/history/${entityType}/${entityId}?${queryParams.toString()}`\n )\n console.log('response data:', data)\n return data.data || []\n },\n\n // 4. Programar precio futuro\n async schedulePrice(request: SchedulePriceRequest): Promise<void> {\n await api.post(`${BASE_URL}/scheduled`, request)\n },\n\n // 5. Calcular precio para venta\n async calculatePrice(request: CalculatePriceRequest): Promise<PriceCalculationResponse> {\n const { data } = await api.post<PriceCalculationResponse>(`${BASE_URL}/calculate`, request)\n return data\n },\n\n // 6. Eliminar precio programado\n async deleteFuturePrice({\n historyId\n }: {\n historyId: number\n }): Promise<void> {\n await api.delete(`${BASE_URL}/scheduled/${historyId}`)\n },\n\n // 7. Actualizar precio programado\n async updateFuturePrice({\n historyId,\n request\n }: {\n historyId: number\n request: SchedulePriceRequest\n }): Promise<void> {\n await api.put(`${BASE_URL}/scheduled/${historyId}`, request)\n },\n\n // Verificar si un producto se vende por peso\n async isWeightBased({\n productDetailId\n }: {\n productDetailId: number\n }): Promise<boolean> {\n try {\n const priceInfo = await this.getPrice({ productDetailId })\n return priceInfo.pricePerGram !== null\n } catch (error) {\n console.error('Error verificando si es por peso:', error)\n return false\n }\n }\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { pricePerGramService } from \"../services/pricePerGram.service\";\nimport type {\n PricePerGramResponse,\n PriceCalculationResponse,\n UpdatePriceRequest,\n SchedulePriceRequest,\n CalculatePriceRequest,\n IPricePerGramHistory,\n} from \"../interfaces/pricePerGram.interface\";\n\nconst pricePerGramQueryKeys = {\n all: [\"pricePerGram\"] as const,\n price: (params: {\n productDetailId?: number;\n productId?: number;\n materialId?: number;\n }) => [...pricePerGramQueryKeys.all, \"price\", params] as const,\n history: (params: {\n entityType: \"material\" | \"product\" | \"productDetail\";\n entityId: number;\n limit?: number;\n }) => [...pricePerGramQueryKeys.all, \"history\", params] as const,\n isWeightBased: (productDetailId: number) =>\n [...pricePerGramQueryKeys.all, \"isWeightBased\", productDetailId] as const,\n};\n\nexport const pricePerGram = {\n queries: {\n all: [\"pricePerGram\"] as const,\n getPrice: (params: {\n productDetailId?: number;\n productId?: number;\n materialId?: number;\n } | null) =>\n queryOptions({\n queryFn: () => pricePerGramService.getPrice(params!),\n queryKey: pricePerGramQueryKeys.price(params ?? {}),\n enabled: !!params && (!!params.productDetailId || !!params.productId || !!params.materialId),\n staleTime: 60 * 1000,\n }),\n getHistory: (params: {\n entityType: \"material\" | \"product\" | \"productDetail\";\n entityId: number;\n limit?: number;\n } | null) =>\n queryOptions({\n queryFn: () => pricePerGramService.getHistory(params!),\n queryKey: pricePerGramQueryKeys.history(params!),\n enabled: !!params?.entityId,\n staleTime: 60 * 1000,\n }),\n isWeightBased: (productDetailId: number) =>\n queryOptions({\n queryFn: () =>\n pricePerGramService.isWeightBased({ productDetailId }),\n queryKey: pricePerGramQueryKeys.isWeightBased(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n updatePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, UpdatePriceRequest> => ({\n mutationFn: pricePerGramService.updatePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n schedulePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, SchedulePriceRequest> => ({\n mutationFn: pricePerGramService.schedulePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n calculatePrice: (): UseMutationOptions<\n PriceCalculationResponse,\n Error,\n CalculatePriceRequest\n > => ({\n mutationFn: pricePerGramService.calculatePrice,\n }),\n deleteFuturePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { historyId: number }> => ({\n mutationFn: pricePerGramService.deleteFuturePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n updateFuturePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n void,\n Error,\n { historyId: number; request: SchedulePriceRequest }\n > => ({\n mutationFn: ({ historyId, request }) =>\n pricePerGramService.updateFuturePrice({ historyId, request }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n },\n};\n\nexport { pricePerGramQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n pricePerGram,\n pricePerGramQueryKeys,\n} from \"../queries/pricePerGram.queries\";\nimport type {\n PricePerGramResponse,\n PriceCalculationResponse,\n UpdatePriceRequest,\n SchedulePriceRequest,\n CalculatePriceRequest,\n IPricePerGramHistory,\n} from \"../interfaces/pricePerGram.interface\";\n\nexport const pricePerGramKeys = pricePerGramQueryKeys;\n\nexport const usePricePerGram = (\n params: {\n productDetailId?: number;\n productId?: number;\n materialId?: number;\n } | null,\n options?: Omit<\n UseQueryOptions<PricePerGramResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...pricePerGram.queries.getPrice(params),\n ...options,\n } as UseQueryOptions<PricePerGramResponse>);\n\nexport const usePricePerGramHistory = (\n params: {\n entityType: \"material\" | \"product\" | \"productDetail\";\n entityId: number;\n limit?: number;\n } | null,\n options?: Omit<\n UseQueryOptions<IPricePerGramHistory[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...pricePerGram.queries.getHistory(params),\n ...options,\n } as UseQueryOptions<IPricePerGramHistory[]>);\n\nexport const useIsWeightBased = (\n productDetailId: number | undefined,\n options?: Omit<UseQueryOptions<boolean>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...pricePerGram.queries.isWeightBased(productDetailId ?? 0),\n ...options,\n } as UseQueryOptions<boolean>);\n\nexport const useUpdatePricePerGram = (\n options?: UseMutationOptions<void, Error, UpdatePriceRequest>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...pricePerGram.mutations.updatePrice(queryClient),\n ...options,\n });\n};\n\nexport const useSchedulePricePerGram = (\n options?: UseMutationOptions<void, Error, SchedulePriceRequest>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...pricePerGram.mutations.schedulePrice(queryClient),\n ...options,\n });\n};\n\nexport const useCalculatePricePerGram = (\n options?: UseMutationOptions<\n PriceCalculationResponse,\n Error,\n CalculatePriceRequest\n >,\n) =>\n useMutation({\n ...pricePerGram.mutations.calculatePrice(),\n ...options,\n });\n\nexport const useDeleteFuturePricePerGram = (\n options?: UseMutationOptions<void, Error, { historyId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...pricePerGram.mutations.deleteFuturePrice(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateFuturePricePerGram = (\n options?: UseMutationOptions<\n void,\n Error,\n { historyId: number; request: SchedulePriceRequest }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...pricePerGram.mutations.updateFuturePrice(queryClient),\n ...options,\n });\n};\n","import type { IPriceType, IPriceTypeResponse } from '../interfaces/priceType.interface'\nimport { api } from './config'\nimport type { IRequest } from '../interfaces/util.interface'\n\nexport const getPriceTypesForSelect = async (): Promise<IPriceType[]> => {\n const { data } = await api.get<IPriceType[]>('price-type/select')\n return data\n}\n\nexport const getAllPriceTypes = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: IRequest): Promise<IPriceTypeResponse> => {\n const { data } = await api.get<IPriceTypeResponse>(\n `price-type/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const createPriceType = async ({\n priceType\n}: {\n priceType: IPriceType\n}): Promise<IPriceType> => {\n const { data } = await api.post<IPriceType>('price-type/', priceType)\n return data\n}\n\nexport const getPriceTypeById = async ({\n priceTypeId\n}: {\n priceTypeId: number\n}): Promise<IPriceType> => {\n const { data } = await api.get<IPriceType>(`price-type/${priceTypeId}`)\n return data\n}\n\nexport const updatePriceType = async ({\n priceTypeId,\n priceType\n}: {\n priceTypeId: number\n priceType: IPriceType\n}): Promise<IPriceType> => {\n const { data } = await api.put<IPriceType>(`price-type/${priceTypeId}`, priceType)\n return data\n}\n\nexport const deletePriceType = async ({ priceTypeId }: { priceTypeId: number }): Promise<void> => {\n await api.delete<void>(`price-type/${priceTypeId}`)\n}\n\nexport const undeletePriceType = async ({\n priceTypeId\n}: {\n priceTypeId: number\n}): Promise<void> => {\n await api.patch<void>(`price-type/${priceTypeId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllPriceTypes,\n getPriceTypeById,\n getPriceTypesForSelect,\n createPriceType,\n updatePriceType,\n deletePriceType,\n undeletePriceType,\n} from \"../services/priceType.service\";\nimport type {\n IPriceType,\n IPriceTypeResponse,\n} from \"../interfaces/priceType.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst priceTypeQueryKeys = {\n all: [\"priceTypes\"] as const,\n lists: () => [...priceTypeQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...priceTypeQueryKeys.lists(), { filters: params }] as const,\n details: () => [...priceTypeQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...priceTypeQueryKeys.details(), id] as const,\n forSelect: () => [...priceTypeQueryKeys.all, \"select\"] as const,\n};\n\nexport const priceTypes = {\n queries: {\n all: [\"priceTypes\"] as const,\n getPriceTypes: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllPriceTypes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: priceTypeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPriceTypesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllPriceTypes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: priceTypeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPriceTypeById: (id: number) =>\n queryOptions({\n queryFn: () => getPriceTypeById({ priceTypeId: id }),\n queryKey: priceTypeQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getPriceTypesForSelect: () =>\n queryOptions({\n queryFn: getPriceTypesForSelect,\n queryKey: priceTypeQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createPriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPriceType, Error, { priceType: IPriceType }> => ({\n mutationFn: createPriceType,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.all });\n successNotification({\n title: \"Tipo de precio creado\",\n message: \"El tipo de precio se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el tipo de precio.\",\n });\n },\n }),\n updatePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPriceType, Error, { priceTypeId: number; priceType: IPriceType }> => ({\n mutationFn: updatePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n successNotification({\n title: \"Tipo de precio actualizado\",\n message: \"El tipo de precio se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el tipo de precio.\",\n });\n },\n }),\n deletePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { priceTypeId: number }> => ({\n mutationFn: deletePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n successNotification({\n title: \"Tipo de precio eliminado\",\n message: \"El tipo de precio se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el tipo de precio.\",\n });\n },\n }),\n undeletePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { priceTypeId: number }> => ({\n mutationFn: undeletePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n successNotification({\n title: \"Tipo de precio restaurado\",\n message: \"El tipo de precio se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el tipo de precio.\",\n });\n },\n }),\n },\n};\n\nexport { priceTypeQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n priceTypes,\n priceTypeQueryKeys,\n} from \"../queries/priceType.queries\";\nimport type {\n IPriceType,\n IPriceTypeResponse,\n} from \"../interfaces/priceType.interface\";\n\nexport const priceTypeKeys = priceTypeQueryKeys;\n\ninterface UsePriceTypesParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const usePriceTypes = (\n params: UsePriceTypesParams = {},\n options?: Omit<UseQueryOptions<IPriceTypeResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...priceTypes.queries.getPriceTypes(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IPriceTypeResponse>);\n\nexport const usePriceTypesTable = usePriceTypes;\n\nexport const usePriceType = (\n priceTypeId: number | undefined,\n options?: Omit<UseQueryOptions<IPriceType>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...priceTypes.queries.getPriceTypeById(priceTypeId ?? 0),\n ...options,\n } as UseQueryOptions<IPriceType>);\n\nexport const usePriceTypesForSelect = (\n options?: Omit<UseQueryOptions<IPriceType[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...priceTypes.queries.getPriceTypesForSelect(),\n ...options,\n } as UseQueryOptions<IPriceType[]>);\n\nexport const useCreatePriceType = (\n options?: UseMutationOptions<IPriceType, Error, { priceType: IPriceType }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...priceTypes.mutations.createPriceType(queryClient),\n ...options,\n });\n};\n\nexport const useUpdatePriceType = (\n options?: UseMutationOptions<\n IPriceType,\n Error,\n { priceTypeId: number; priceType: IPriceType }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...priceTypes.mutations.updatePriceType(queryClient),\n ...options,\n });\n};\n\nexport const useDeletePriceType = (\n options?: UseMutationOptions<void, Error, { priceTypeId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...priceTypes.mutations.deletePriceType(queryClient),\n ...options,\n });\n};\n\nexport const useUndeletePriceType = (\n options?: UseMutationOptions<void, Error, { priceTypeId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...priceTypes.mutations.undeletePriceType(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchPriceType = () => {\n const queryClient = useQueryClient();\n const prefetchPriceType = (priceTypeId: number) =>\n queryClient.prefetchQuery({\n ...priceTypes.queries.getPriceTypeById(priceTypeId),\n });\n return { prefetchPriceType };\n};\n","import type { IFilterType } from '../interfaces/filters.interface'\nimport type {\n IProductResponse,\n IProduct,\n IProductDetailsResponse,\n IProductDetails\n} from '../interfaces/product.interface'\nimport { api } from './config'\n\ninterface ProductQuery {\n skip?: number\n limit?: number\n filters?: IFilterType\n}\n\ninterface CategoryQuery {\n category: number\n skip?: number\n limit?: number\n filters?: IFilterType\n}\n\nexport const getProductsForSelect = async (): Promise<IProduct[]> => {\n const { data } = await api.get<IProduct[]>('/product/select')\n return data\n}\n\nexport const getProducts = async ({\n skip = 0,\n limit = 16,\n filters\n}: ProductQuery): Promise<IProductDetailsResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductDetailsResponse>(`product?${queryParams}`)\n return data\n}\n\nexport const getProductsTable = async ({\n skip = 0,\n limit = 16,\n filters\n}: ProductQuery): Promise<IProductResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductResponse>(`product/table?${queryParams}`)\n return data\n}\n\nexport const getProductById = async ({\n productId\n}: {\n productId: number\n}): Promise<IProduct> => {\n const { data } = await api.get(`product/${productId}`)\n return data.data\n}\n\nexport const getProductVariants = async ({\n productId,\n skip = 0,\n limit = 10,\n query = ''\n}: {\n productId: number\n skip?: number\n limit?: number\n query?: string\n}): Promise<IProductDetailsResponse> => {\n const { data } = await api.get<IProductDetailsResponse>(`/product/variants/${productId}`, {\n params: {\n skip: skip.toString(),\n limit: limit.toString(),\n ...(query && { query })\n }\n })\n return data\n}\n\nexport const getProductVariantsForSelect = async ({\n productId\n}: {\n productId: number\n}): Promise<IProductDetails[]> => {\n const { data } = await api.get<IProductDetails[]>(`/product/variants/select/${productId}`)\n return data\n}\n\nexport const getProductVariantById = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<IProductDetails> => {\n const { data } = await api.get<IProductDetails>(`/product/variants/variant/${productDetailId}`)\n return data\n}\n\nexport const createProductVariant = async (variant: FormData): Promise<IProductDetails> => {\n const { data } = await api.post<IProductDetails>('product/variants', variant, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createProductVariants = async (formData: FormData): Promise<IProductDetails[]> => {\n const { data } = await api.post<IProductDetails[]>('product/variants', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const updateProductVariant = async (data: FormData): Promise<IProductDetails> => {\n const { data: response } = await api.put<IProductDetails>(\n `product/variants/update/${data.get('productDetailID')}`,\n data,\n {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n }\n )\n return response\n}\n\nexport const deleteProductVariant = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<void> => {\n await api.delete(`/product/variants/${productDetailId}`)\n}\n\nexport const restoreProductVariant = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<void> => {\n await api.patch(`/product/variants/${productDetailId}`)\n}\n\nexport const createProduct = async (product: FormData): Promise<IProduct> => {\n const { data } = await api.post<IProduct>('product/', product, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const updateProduct = async ({\n productId,\n product\n}: {\n productId: number\n product: FormData\n}): Promise<IProduct> => {\n const { data } = await api.put<IProduct>(`/product/${productId}`, product, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteImageFromProduct = async ({\n imageId\n}: {\n imageId: number\n}): Promise<void> => {\n await api.delete(`/product/images/${imageId}`)\n}\n\nexport const deleteProduct = async ({ productId }: { productId: number }): Promise<void> => {\n await api.delete(`/product/${productId}`)\n}\n\nexport const restoreProduct = async ({ productId }: { productId: number }): Promise<void> => {\n await api.patch(`/product/${productId}`)\n}\n\nexport const getProductsByCategory = async ({\n category,\n skip = 0,\n limit = 10,\n filters\n}: CategoryQuery): Promise<IProductResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductResponse>(`product/category/${category}?${queryParams}`)\n return data\n}\n\nexport interface PrintProductTagResponse {\n message?: string\n [key: string]: unknown\n}\n\nexport const printProductTag = async ({\n stockId,\n productId,\n isSmall\n}: {\n stockId: number\n productId: number\n isSmall: boolean\n}): Promise<PrintProductTagResponse> => {\n const { data } = await api.post<PrintProductTagResponse>(`/product/printproducttag/`, {\n stockID: stockId,\n productID: productId,\n isSmall\n })\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getProducts,\n getProductsTable,\n getProductById,\n getProductsForSelect,\n getProductVariants,\n getProductVariantsForSelect,\n getProductVariantById,\n getProductsByCategory,\n createProduct,\n updateProduct,\n createProductVariant,\n createProductVariants,\n updateProductVariant,\n deleteProductVariant,\n restoreProductVariant,\n deleteImageFromProduct,\n deleteProduct,\n restoreProduct,\n} from \"../services/product.service\";\nimport type { IFilterType } from \"../interfaces/filters.interface\";\nimport type {\n IProduct,\n IProductDetails,\n IProductDetailsResponse,\n IProductResponse,\n} from \"../interfaces/product.interface\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nexport interface ProductQueryParams {\n skip?: number;\n limit?: number;\n filters?: IFilterType;\n}\n\nconst productQueryKeys = {\n all: [\"products\"] as const,\n lists: () => [...productQueryKeys.all, \"list\"] as const,\n list: (filters?: ProductQueryParams) =>\n [...productQueryKeys.lists(), { filters }] as const,\n table: (filters?: ProductQueryParams) =>\n [...productQueryKeys.all, \"table\", { filters }] as const,\n details: () => [...productQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...productQueryKeys.details(), id] as const,\n forSelect: () => [...productQueryKeys.all, \"select\"] as const,\n variants: (productId: number) =>\n [...productQueryKeys.all, \"variants\", productId] as const,\n variantsSelect: (productId: number) =>\n [...productQueryKeys.all, \"variantsSelect\", productId] as const,\n variant: (productDetailId: number) =>\n [...productQueryKeys.all, \"variant\", productDetailId] as const,\n byCategory: (category: number, filters?: IFilterType) =>\n [...productQueryKeys.all, \"category\", category, { filters }] as const,\n};\n\nexport const products = {\n queries: {\n all: [\"products\"] as const,\n getProducts: (params: ProductQueryParams = {}) =>\n queryOptions({\n queryFn: () =>\n getProducts({\n skip: params.skip ?? 0,\n limit: params.limit ?? 16,\n filters: params.filters,\n }),\n queryKey: productQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProductsTable: (params: ProductQueryParams = {}) =>\n queryOptions({\n queryFn: () =>\n getProductsTable({\n skip: params.skip ?? 0,\n limit: params.limit ?? 16,\n filters: params.filters,\n }),\n queryKey: productQueryKeys.table(params),\n staleTime: 30_000,\n }),\n getProductById: (id: number) =>\n queryOptions({\n queryFn: () => getProductById({ productId: id }),\n queryKey: productQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductsForSelect: () =>\n queryOptions({\n queryFn: getProductsForSelect,\n queryKey: productQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getProductVariants: (\n productId: number,\n params?: { skip?: number; limit?: number; query?: string },\n ) =>\n queryOptions({\n queryFn: () =>\n getProductVariants({\n productId,\n skip: params?.skip ?? 0,\n limit: params?.limit ?? 10,\n query: params?.query ?? \"\",\n }),\n queryKey: [...productQueryKeys.variants(productId), params ?? {}] as const,\n enabled: !!productId && productId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductVariantsForSelect: (productId: number) =>\n queryOptions({\n queryFn: () => getProductVariantsForSelect({ productId }),\n queryKey: productQueryKeys.variantsSelect(productId),\n enabled: !!productId && productId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductVariantById: (productDetailId: number) =>\n queryOptions({\n queryFn: () => getProductVariantById({ productDetailId }),\n queryKey: productQueryKeys.variant(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductsByCategory: (category: number, params?: ProductQueryParams) =>\n queryOptions({\n queryFn: () =>\n getProductsByCategory({\n category,\n skip: params?.skip ?? 0,\n limit: params?.limit ?? 10,\n filters: params?.filters,\n }),\n queryKey: productQueryKeys.byCategory(category, params?.filters),\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProduct, Error, FormData> => ({\n mutationFn: createProduct,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto creado\",\n message: \"El producto se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el producto.\",\n });\n },\n }),\n updateProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProduct, Error, { productId: number; product: FormData }> => ({\n mutationFn: updateProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.detail(productId) });\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto actualizado\",\n message: \"El producto se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el producto.\",\n });\n },\n }),\n createProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails, Error, FormData> => ({\n mutationFn: createProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante creada\",\n message: \"La variante se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la variante.\",\n });\n },\n }),\n createProductVariants: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails[], Error, FormData> => ({\n mutationFn: createProductVariants,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variantes creadas\",\n message: \"Las variantes se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear las variantes.\",\n });\n },\n }),\n updateProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails, Error, FormData> => ({\n mutationFn: updateProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante actualizada\",\n message: \"La variante se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la variante.\",\n });\n },\n }),\n deleteProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productDetailId: number }> => ({\n mutationFn: deleteProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante eliminada\",\n message: \"La variante se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la variante.\",\n });\n },\n }),\n restoreProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productDetailId: number }> => ({\n mutationFn: restoreProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante restaurada\",\n message: \"La variante se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la variante.\",\n });\n },\n }),\n deleteImageFromProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { imageId: number }> => ({\n mutationFn: deleteImageFromProduct,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Imagen eliminada\",\n message: \"La imagen se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la imagen.\",\n });\n },\n }),\n deleteProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productId: number }> => ({\n mutationFn: deleteProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n queryClient.removeQueries({ queryKey: productQueryKeys.detail(productId) });\n successNotification({\n title: \"Producto eliminado\",\n message: \"El producto se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el producto.\",\n });\n },\n }),\n restoreProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productId: number }> => ({\n mutationFn: restoreProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.detail(productId) });\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto restaurado\",\n message: \"El producto se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el producto.\",\n });\n },\n }),\n },\n};\n\nexport { productQueryKeys };\n","import type { IFilterType } from \"../interfaces/filters.interface\";\nimport {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { products, productQueryKeys } from \"../queries/product.queries\";\nimport type {\n IProduct,\n IProductDetails,\n IProductDetailsResponse,\n IProductResponse,\n} from \"../interfaces/product.interface\";\nimport type { TableQueryParams } from \"../queries/types\";\n\nexport const productKeys = productQueryKeys;\n\ninterface ProductQueryParams {\n skip?: number;\n limit?: number;\n filters?: IFilterType;\n}\n\n/**\n * Maps table columnIds to product filter keys. Use the same columnIds as in your\n * TablePage filters prop. Any key not provided will be null unless present in columnFilters\n * with that id (e.g. columnId \"batchId\" -> filters.batchId).\n */\nexport interface ProductFilterColumnMap {\n categoryId?: string;\n batchId?: string;\n supplierId?: string;\n warehouseId?: string;\n priceRangeMin?: string;\n priceRangeMax?: string;\n}\n\nconst defaultColumnMap: Required<ProductFilterColumnMap> = {\n categoryId: \"tblCategories.categoryName\",\n batchId: \"batchId\",\n supplierId: \"supplierId\",\n warehouseId: \"warehouseId\",\n priceRangeMin: \"priceRangeMin\",\n priceRangeMax: \"priceRangeMax\",\n};\n\nfunction getFilterValue(\n columnFilters: TableQueryParams[\"columnFilters\"],\n columnId: string,\n): string | null {\n const filter = columnFilters?.find((f) => f.id === columnId);\n if (filter?.value == null) return null;\n return typeof filter.value === \"string\" ? filter.value : String(filter.value);\n}\n\nfunction parseNumber(value: string | null): number | null {\n if (value == null || value === \"\") return null;\n const n = Number.parseInt(value, 10);\n return Number.isNaN(n) ? null : n;\n}\n\nexport const mapTableParamsToProductParams = (\n params: TableQueryParams,\n columnMap?: Partial<ProductFilterColumnMap>,\n): ProductQueryParams => {\n const map = { ...defaultColumnMap, ...columnMap };\n const cf = params.columnFilters;\n\n const categoryId = parseNumber(getFilterValue(cf, map.categoryId));\n const supplierId = parseNumber(getFilterValue(cf, map.supplierId));\n const warehouseId = parseNumber(getFilterValue(cf, map.warehouseId));\n const priceRangeMin = parseNumber(getFilterValue(cf, map.priceRangeMin));\n const priceRangeMax = parseNumber(getFilterValue(cf, map.priceRangeMax));\n const batchRaw = getFilterValue(cf, map.batchId);\n const batchId = batchRaw !== null ? batchRaw : null;\n\n return {\n skip: params.skip,\n limit: params.limit,\n filters: {\n query: params.query ?? null,\n categoryId,\n batchId,\n supplierId,\n warehouseId,\n priceRangeMin,\n priceRangeMax,\n },\n };\n};\n\nexport const useProducts = (\n params: ProductQueryParams = {},\n options?: Omit<\n UseQueryOptions<IProductDetailsResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...products.queries.getProducts(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IProductDetailsResponse>);\n\nexport const useProductsTable = (\n params: ProductQueryParams = {},\n options?: Omit<UseQueryOptions<IProductResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductsTable(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IProductResponse>);\n\nexport const useProduct = (\n productId: number | undefined,\n options?: Omit<UseQueryOptions<IProduct>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductById(productId ?? 0),\n ...options,\n } as UseQueryOptions<IProduct>);\n\nexport const useProductsForSelect = (\n options?: Omit<UseQueryOptions<IProduct[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductsForSelect(),\n ...options,\n } as UseQueryOptions<IProduct[]>);\n\nexport const useProductVariants = (\n productId: number | undefined,\n params?: { skip?: number; limit?: number; query?: string },\n options?: Omit<\n UseQueryOptions<IProductDetailsResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...products.queries.getProductVariants(productId ?? 0, params),\n ...options,\n } as UseQueryOptions<IProductDetailsResponse>);\n\nexport const useProductVariantsForSelect = (\n productId: number | undefined,\n options?: Omit<UseQueryOptions<IProductDetails[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductVariantsForSelect(productId ?? 0),\n ...options,\n } as UseQueryOptions<IProductDetails[]>);\n\nexport const useProductVariant = (\n productDetailId: number | undefined,\n options?: Omit<UseQueryOptions<IProductDetails>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductVariantById(productDetailId ?? 0),\n ...options,\n } as UseQueryOptions<IProductDetails>);\n\nexport const useProductsByCategory = (\n category: number,\n params?: ProductQueryParams,\n options?: Omit<UseQueryOptions<IProductResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductsByCategory(category, params),\n ...options,\n } as UseQueryOptions<IProductResponse>);\n\nexport const useCreateProduct = (\n options?: UseMutationOptions<IProduct, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.createProduct(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateProduct = (\n options?: UseMutationOptions<\n IProduct,\n Error,\n { productId: number; product: FormData }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.updateProduct(queryClient),\n ...options,\n });\n};\n\nexport const useCreateProductVariant = (\n options?: UseMutationOptions<IProductDetails, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.createProductVariant(queryClient),\n ...options,\n });\n};\n\nexport const useCreateProductVariants = (\n options?: UseMutationOptions<IProductDetails[], Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.createProductVariants(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateProductVariant = (\n options?: UseMutationOptions<IProductDetails, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.updateProductVariant(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteProductVariant = (\n options?: UseMutationOptions<void, Error, { productDetailId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.deleteProductVariant(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreProductVariant = (\n options?: UseMutationOptions<void, Error, { productDetailId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.restoreProductVariant(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteImageFromProduct = (\n options?: UseMutationOptions<void, Error, { imageId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.deleteImageFromProduct(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteProduct = (\n options?: UseMutationOptions<void, Error, { productId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.deleteProduct(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreProduct = (\n options?: UseMutationOptions<void, Error, { productId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.restoreProduct(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchProduct = () => {\n const queryClient = useQueryClient();\n const prefetchProduct = (productId: number) =>\n queryClient.prefetchQuery({\n ...products.queries.getProductById(productId),\n });\n return { prefetchProduct };\n};\n","import type { ITag } from '../interfaces/tag.interface'\nimport { api } from './config'\n\nexport const getAllTags = async (): Promise<ITag[]> => {\n const { data } = await api.get<{ data: ITag[] }>('/product-tag')\n return data.data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllTags } from \"../services/productTags.service\";\nimport type { ITag } from \"../interfaces/tag.interface\";\n\nconst productTagQueryKeys = {\n all: [\"productTags\"] as const,\n};\n\nexport const productTags = {\n queries: {\n all: [\"productTags\"] as const,\n getAllTags: () =>\n queryOptions({\n queryFn: getAllTags,\n queryKey: productTagQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { productTagQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { productTags, productTagQueryKeys } from \"../queries/productTags.queries\";\nimport type { ITag } from \"../interfaces/tag.interface\";\n\nexport const productTagKeys = productTagQueryKeys;\n\nexport const useAllProductTags = (\n options?: Omit<UseQueryOptions<ITag[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...productTags.queries.getAllTags(),\n ...options,\n } as UseQueryOptions<ITag[]>);\n","import type {\n IPromotion,\n IPromotionResponse,\n IPromotionType\n} from '../interfaces/promotion.interface'\nimport { api } from './config'\n\nexport const isAValidDiscountCode = async ({\n discountCode\n}: {\n discountCode: string\n}): Promise<boolean> => {\n const { data } = await api.post('promotion/discount-code', { discountCode })\n return data.isValid\n}\n\ninterface PromotionQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getPromotions = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: PromotionQuery): Promise<IPromotionResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n query: query\n })\n const { data } = await api.get(`promotion?${queryParams}`)\n return data\n}\n\nexport const getPromotionsTypeForSelect = async (): Promise<IPromotionType[]> => {\n const { data } = await api.get('promotion/promotions-type/select')\n return data\n}\n\nexport const createPromotion = async (promotion: IPromotion): Promise<IPromotion> => {\n const { data } = await api.post('promotion', promotion)\n return data\n}\n\nexport const getPromotionById = async ({ id }: { id: string }): Promise<IPromotion> => {\n const { data } = await api.get(`promotion/${id}`)\n return data\n}\n\nexport const updatePromotion = async ({\n id,\n promotion\n}: {\n id: string\n promotion: IPromotion\n}): Promise<IPromotion> => {\n const { data } = await api.put(`promotion/${id}`, promotion)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getPromotions,\n getPromotionById,\n getPromotionsTypeForSelect,\n createPromotion,\n updatePromotion,\n isAValidDiscountCode,\n} from \"../services/promotion.service\";\nimport type {\n IPromotion,\n IPromotionResponse,\n IPromotionType,\n} from \"../interfaces/promotion.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst promotionQueryKeys = {\n all: [\"promotions\"] as const,\n lists: () => [...promotionQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...promotionQueryKeys.lists(), { filters: params }] as const,\n details: () => [...promotionQueryKeys.all, \"detail\"] as const,\n detail: (id: string) => [...promotionQueryKeys.details(), id] as const,\n typesForSelect: () => [...promotionQueryKeys.all, \"types\"] as const,\n};\n\nexport const promotions = {\n queries: {\n all: [\"promotions\"] as const,\n getPromotions: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getPromotions({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: promotionQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPromotionsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getPromotions({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: promotionQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPromotionById: (id: string) =>\n queryOptions({\n queryFn: () => getPromotionById({ id }),\n queryKey: promotionQueryKeys.detail(id),\n enabled: !!id,\n staleTime: 5 * 60 * 1000,\n }),\n getPromotionsTypeForSelect: () =>\n queryOptions({\n queryFn: getPromotionsTypeForSelect,\n queryKey: promotionQueryKeys.typesForSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createPromotion: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPromotion, Error, IPromotion> => ({\n mutationFn: createPromotion,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.all });\n successNotification({\n title: \"Promoción creada\",\n message: \"La promoción se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la promoción.\",\n });\n },\n }),\n updatePromotion: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPromotion, Error, { id: string; promotion: IPromotion }> => ({\n mutationFn: updatePromotion,\n onSuccess: (_, { id }) => {\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.detail(id) });\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.lists() });\n successNotification({\n title: \"Promoción actualizada\",\n message: \"La promoción se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la promoción.\",\n });\n },\n }),\n validateDiscountCode: (): UseMutationOptions<\n boolean,\n Error,\n { discountCode: string }\n > => ({\n mutationFn: ({ discountCode }) => isAValidDiscountCode({ discountCode }),\n }),\n },\n};\n\nexport { promotionQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n promotions,\n promotionQueryKeys,\n} from \"../queries/promotion.queries\";\nimport type {\n IPromotion,\n IPromotionResponse,\n IPromotionType,\n} from \"../interfaces/promotion.interface\";\n\nexport const promotionKeys = promotionQueryKeys;\n\ninterface UsePromotionsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const usePromotions = (\n params: UsePromotionsParams = {},\n options?: Omit<UseQueryOptions<IPromotionResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...promotions.queries.getPromotions(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IPromotionResponse>);\n\nexport const usePromotionsTable = usePromotions;\n\nexport const usePromotion = (\n id: string | undefined,\n options?: Omit<UseQueryOptions<IPromotion>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...promotions.queries.getPromotionById(id ?? \"\"),\n ...options,\n } as UseQueryOptions<IPromotion>);\n\nexport const usePromotionsTypeForSelect = (\n options?: Omit<UseQueryOptions<IPromotionType[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...promotions.queries.getPromotionsTypeForSelect(),\n ...options,\n } as UseQueryOptions<IPromotionType[]>);\n\nexport const useCreatePromotion = (\n options?: UseMutationOptions<IPromotion, Error, IPromotion>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...promotions.mutations.createPromotion(queryClient),\n ...options,\n });\n};\n\nexport const useUpdatePromotion = (\n options?: UseMutationOptions<\n IPromotion,\n Error,\n { id: string; promotion: IPromotion }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...promotions.mutations.updatePromotion(queryClient),\n ...options,\n });\n};\n\nexport const useValidateDiscountCode = (\n options?: UseMutationOptions<boolean, Error, { discountCode: string }>,\n) =>\n useMutation({\n ...promotions.mutations.validateDiscountCode(),\n ...options,\n });\n\nexport const usePrefetchPromotion = () => {\n const queryClient = useQueryClient();\n const prefetchPromotion = (id: string) =>\n queryClient.prefetchQuery({\n ...promotions.queries.getPromotionById(id),\n });\n return { prefetchPromotion };\n};\n","import type {\n IProvider,\n IProviderForSelect,\n IProviderRequest,\n IProviderResponse\n} from '../interfaces/provider.interface'\nimport { api } from './config'\n\nexport const getAllProviders = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: {\n skip: number\n limit: number\n query?: string\n}): Promise<IProviderResponse> => {\n const { data } = await api.get<IProviderResponse>(\n `provider/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getProviderById = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProvider> => {\n const { data } = await api.get<IProvider>(`provider/${providerId}`)\n return data\n}\n\nexport const getProvidersForSelect = async (): Promise<IProviderForSelect[]> => {\n const { data } = await api.get<IProviderForSelect[]>('provider/providersForSelect')\n return data\n}\n\nexport const createProvider = async (provider: IProviderRequest): Promise<IProviderResponse> => {\n const { data } = await api.post<IProviderResponse>('provider/', provider)\n return data\n}\n\nexport const updateProvider = async ({\n providerId,\n provider\n}: {\n providerId: string\n provider: IProvider\n}): Promise<IProviderResponse> => {\n const { data } = await api.put<IProviderResponse>(`provider/${providerId}`, provider)\n return data\n}\n\nexport const deleteProvider = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProviderResponse> => {\n const { data } = await api.delete<IProviderResponse>(`provider/${providerId}`)\n return data\n}\n\nexport const restoreProvider = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProviderResponse> => {\n const { data } = await api.patch<IProviderResponse>(`provider/${providerId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllProviders,\n getProviderById,\n getProvidersForSelect,\n createProvider,\n updateProvider,\n deleteProvider,\n restoreProvider,\n} from \"../services/provider.service\";\nimport type {\n IProvider,\n IProviderForSelect,\n IProviderRequest,\n IProviderResponse,\n} from \"../interfaces/provider.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst providerQueryKeys = {\n all: [\"providers\"] as const,\n lists: () => [...providerQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...providerQueryKeys.lists(), { filters: params }] as const,\n details: () => [...providerQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...providerQueryKeys.details(), id] as const,\n forSelect: () => [...providerQueryKeys.all, \"select\"] as const,\n};\n\nexport const providers = {\n queries: {\n all: [\"providers\"] as const,\n getProviders: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllProviders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: providerQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProvidersForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllProviders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: providerQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProviderById: (id: number) =>\n queryOptions({\n queryFn: () => getProviderById({ providerId: id }),\n queryKey: providerQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProvidersForSelect: () =>\n queryOptions({\n queryFn: getProvidersForSelect,\n queryKey: providerQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, IProviderRequest> => ({\n mutationFn: createProvider,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.all });\n successNotification({\n title: \"Proveedor creado\",\n message: \"El proveedor se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el proveedor.\",\n });\n },\n }),\n updateProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IProviderResponse,\n Error,\n { providerId: string; provider: IProvider }\n > => ({\n mutationFn: updateProvider,\n onSuccess: (_, { providerId }) => {\n const id = parseInt(providerId, 10);\n if (!isNaN(id)) {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.detail(id) });\n }\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n successNotification({\n title: \"Proveedor actualizado\",\n message: \"El proveedor se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el proveedor.\",\n });\n },\n }),\n deleteProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, { providerId: number }> => ({\n mutationFn: deleteProvider,\n onSuccess: (_, { providerId }) => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: providerQueryKeys.detail(providerId) });\n successNotification({\n title: \"Proveedor eliminado\",\n message: \"El proveedor se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el proveedor.\",\n });\n },\n }),\n restoreProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, { providerId: number }> => ({\n mutationFn: restoreProvider,\n onSuccess: (_, { providerId }) => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.detail(providerId) });\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n successNotification({\n title: \"Proveedor restaurado\",\n message: \"El proveedor se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el proveedor.\",\n });\n },\n }),\n },\n};\n\nexport { providerQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { providers, providerQueryKeys } from \"../queries/provider.queries\";\nimport type {\n IProvider,\n IProviderForSelect,\n IProviderRequest,\n IProviderResponse,\n} from \"../interfaces/provider.interface\";\n\nexport const providerKeys = providerQueryKeys;\n\ninterface UseProvidersParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useProviders = (\n params: UseProvidersParams = {},\n options?: Omit<UseQueryOptions<IProviderResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...providers.queries.getProviders(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IProviderResponse>);\n\nexport const useProvidersTable = useProviders;\n\nexport const useProvider = (\n providerId: number | undefined,\n options?: Omit<UseQueryOptions<IProvider>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...providers.queries.getProviderById(providerId ?? 0),\n ...options,\n } as UseQueryOptions<IProvider>);\n\nexport const useProvidersForSelect = (\n options?: Omit<UseQueryOptions<IProviderForSelect[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...providers.queries.getProvidersForSelect(),\n ...options,\n } as UseQueryOptions<IProviderForSelect[]>);\n\nexport const useCreateProvider = (\n options?: UseMutationOptions<IProviderResponse, Error, IProviderRequest>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...providers.mutations.createProvider(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateProvider = (\n options?: UseMutationOptions<\n IProviderResponse,\n Error,\n { providerId: string; provider: IProvider }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...providers.mutations.updateProvider(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteProvider = (\n options?: UseMutationOptions<IProviderResponse, Error, { providerId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...providers.mutations.deleteProvider(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreProvider = (\n options?: UseMutationOptions<IProviderResponse, Error, { providerId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...providers.mutations.restoreProvider(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchProvider = () => {\n const queryClient = useQueryClient();\n const prefetchProvider = (providerId: number) =>\n queryClient.prefetchQuery({\n ...providers.queries.getProviderById(providerId),\n });\n return { prefetchProvider };\n};\n","import { api } from './config'\n\nexport interface QRBaseUrlResponse {\n success: boolean\n baseUrl: string\n}\n\nexport interface PrintQRResponse {\n success?: boolean\n message?: string\n data?: {\n url?: string\n productDetailID?: number\n printerResult?: boolean\n }\n [key: string]: unknown\n}\n\n/**\n * Obtiene la URL base configurada para los códigos QR (QR_BASE_URL del backend).\n */\nexport const getQRBaseUrl = async (): Promise<string> => {\n const { data } = await api.get<QRBaseUrlResponse>('/qr/base-url')\n return data?.baseUrl ?? ''\n}\n\n/**\n * Imprime un código QR en la impresora térmica.\n * El backend construye la URL: {QR_BASE_URL}/producto/{productDetailID}\n */\nexport const printQR = async ({\n productDetailId,\n printerName = '4BARCODE'\n}: {\n productDetailId: number\n printerName?: string\n}): Promise<PrintQRResponse> => {\n const { data } = await api.post<PrintQRResponse>('/qr/print', {\n productDetailID: productDetailId,\n printerName\n })\n return data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { getQRBaseUrl, printQR } from \"../services/qr.service\";\nimport type { PrintQRResponse } from \"../services/qr.service\";\n\nconst qrQueryKeys = {\n all: [\"qr\"] as const,\n baseUrl: () => [...qrQueryKeys.all, \"baseUrl\"] as const,\n};\n\nexport const qr = {\n queries: {\n all: [\"qr\"] as const,\n getQRBaseUrl: () =>\n queryOptions({\n queryFn: getQRBaseUrl,\n queryKey: qrQueryKeys.baseUrl(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n printQR: (): UseMutationOptions<\n PrintQRResponse,\n Error,\n { productDetailId: number; printerName?: string }\n > => ({\n mutationFn: printQR,\n }),\n },\n};\n\nexport { qrQueryKeys };\n","import {\n useQuery,\n useMutation,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { qr, qrQueryKeys } from \"../queries/qr.queries\";\nimport type { PrintQRResponse } from \"../services/qr.service\";\n\nexport const qrKeys = qrQueryKeys;\n\nexport const useQRBaseUrl = (\n options?: Omit<UseQueryOptions<string>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...qr.queries.getQRBaseUrl(),\n ...options,\n } as UseQueryOptions<string>);\n\nexport const usePrintQR = (\n options?: UseMutationOptions<\n PrintQRResponse,\n Error,\n { productDetailId: number; printerName?: string }\n >,\n) =>\n useMutation({\n ...qr.mutations.printQR(),\n ...options,\n });\n","import type {\n ComparisonBy,\n IReportComparisonByTimeFrame,\n IReportInventory,\n IReportX,\n IReportZ,\n IStockByWarehouseReport\n} from '../interfaces/report.interface'\nimport { api } from './config'\n\nexport const getStockByWarehouseReport = async ({\n limit = 2,\n allWarehouses = false\n}: {\n limit: number\n allWarehouses: boolean\n}): Promise<IStockByWarehouseReport[]> => {\n const response = await api.get(`/report?limit=${limit}&allWarehouses=${allWarehouses}`)\n return response.data\n}\n\nexport const getReportX = async ({\n startDate,\n sellerID,\n isShiftChange = false\n}: {\n startDate: string\n sellerID: number\n isShiftChange: boolean\n}): Promise<IReportX> => {\n const response = await api.get(\n `/report/report-x?startDate=${startDate}&sellerID=${sellerID}&isShiftChange=${isShiftChange}`\n )\n return response.data\n}\n\nexport const printReportX = async ({\n startDate,\n sellerID\n}: {\n startDate: string\n sellerID: number\n}): Promise<boolean> => {\n const response = await api.get(\n `/report/printReport-x?startDate=${startDate}&sellerID=${sellerID}`\n )\n return response.data\n}\n\nexport const getReportComparisonByTimeFrame = async ({\n startDate,\n endDate,\n comparisonBy,\n productIds\n}: {\n startDate: Date\n endDate: Date\n comparisonBy: ComparisonBy\n productIds: string[]\n}): Promise<IReportComparisonByTimeFrame> => {\n const response = await api.get(\n `/report/comparison?startDate=${startDate.toISOString()}&endDate=${endDate.toISOString()}&comparisonBy=${comparisonBy}&productIds=${productIds}`\n )\n return response.data\n}\n\nexport const getReportByInventory = async ({\n productIDs,\n categoryIDs,\n warehouseIDs,\n providerIDs\n}: {\n productIDs: number[] | null\n categoryIDs: number[] | null\n warehouseIDs: number[] | null\n providerIDs: number[] | null\n}): Promise<IReportInventory[]> => {\n const params = new URLSearchParams()\n \n if (productIDs && productIDs.length > 0) {\n params.append('productIDs', productIDs.join(','))\n }\n if (categoryIDs && categoryIDs.length > 0) {\n params.append('categoryIDs', categoryIDs.join(','))\n }\n if (warehouseIDs && warehouseIDs.length > 0) {\n params.append('warehouseIDs', warehouseIDs.join(','))\n }\n if (providerIDs && providerIDs.length > 0) {\n params.append('providerIDs', providerIDs.join(','))\n }\n\n const queryString = params.toString()\n const url = `/report/inventory${queryString ? `?${queryString}` : ''}`\n \n const response = await api.get(url)\n return response.data\n}\n\nexport const getReportZ = async ({\n startDate,\n sellerID,\n isShiftChange = false\n}: {\n startDate: string\n sellerID: number\n isShiftChange: boolean\n}): Promise<IReportZ> => {\n const response = await api.get(\n `/report/report-z?startDate=${startDate}&sellerID=${sellerID}&isShiftChange=${isShiftChange}`\n )\n return response.data\n}\n\nexport const printReportZ = async ({\n startDate,\n sellerID\n}: {\n startDate: string\n sellerID: number\n}): Promise<boolean> => {\n const response = await api.get(\n `/report/printReport-z?startDate=${startDate}&sellerID=${sellerID}`\n )\n return response.data\n}\n\nexport const checkPendingReportZ = async (): Promise<Date[]> => {\n const response = await api.get('/report/pending-report-z')\n return response.data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n getStockByWarehouseReport,\n getReportX,\n printReportX,\n getReportComparisonByTimeFrame,\n getReportByInventory,\n getReportZ,\n printReportZ,\n checkPendingReportZ,\n} from \"../services/report.service\";\nimport { getPaymentMethodsWithAmountExpected } from \"../services/payment.service\";\nimport type {\n ComparisonBy,\n IReportComparisonByTimeFrame,\n IReportInventory,\n IReportX,\n IReportZ,\n IStockByWarehouseReport,\n} from \"../interfaces/report.interface\";\n\nconst reportQueryKeys = {\n all: [\"reports\"] as const,\n stockByWarehouse: (params: { limit: number; allWarehouses: boolean }) =>\n [...reportQueryKeys.all, \"stockByWarehouse\", params] as const,\n reportX: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n }) => [...reportQueryKeys.all, \"reportX\", params] as const,\n reportZ: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n }) => [...reportQueryKeys.all, \"reportZ\", params] as const,\n comparison: (params: {\n startDate: Date;\n endDate: Date;\n comparisonBy: ComparisonBy;\n productIds: string[];\n }) => [...reportQueryKeys.all, \"comparison\", params] as const,\n inventory: (params: {\n productIDs: number[] | null;\n categoryIDs: number[] | null;\n warehouseIDs: number[] | null;\n providerIDs: number[] | null;\n }) => [...reportQueryKeys.all, \"inventory\", params] as const,\n pendingReportZ: () => [...reportQueryKeys.all, \"pendingReportZ\"] as const,\n paymentMethods: () => [...reportQueryKeys.all, \"paymentMethods\"] as const,\n};\n\nexport const reports = {\n queries: {\n all: [\"reports\"] as const,\n getStockByWarehouseReport: (params: {\n limit?: number;\n allWarehouses?: boolean;\n }) =>\n queryOptions({\n queryFn: () =>\n getStockByWarehouseReport({\n limit: params.limit ?? 2,\n allWarehouses: params.allWarehouses ?? false,\n }),\n queryKey: reportQueryKeys.stockByWarehouse({\n limit: params.limit ?? 2,\n allWarehouses: params.allWarehouses ?? false,\n }),\n staleTime: 60 * 1000,\n }),\n getReportX: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null) =>\n queryOptions({\n queryFn: () =>\n getReportX({\n ...params!,\n isShiftChange: params!.isShiftChange ?? false,\n }),\n queryKey: reportQueryKeys.reportX(params!),\n enabled: !!params?.startDate && !!params?.sellerID,\n staleTime: 60 * 1000,\n }),\n getReportComparisonByTimeFrame: (params: {\n startDate: Date;\n endDate: Date;\n comparisonBy: ComparisonBy;\n productIds: string[];\n } | null) =>\n queryOptions({\n queryFn: () => getReportComparisonByTimeFrame(params!),\n queryKey: reportQueryKeys.comparison(params!),\n enabled: !!params?.startDate && !!params?.endDate,\n staleTime: 60 * 1000,\n }),\n getReportByInventory: (params: {\n productIDs: number[] | null;\n categoryIDs: number[] | null;\n warehouseIDs: number[] | null;\n providerIDs: number[] | null;\n } | null) =>\n queryOptions({\n queryFn: () => getReportByInventory(params!),\n queryKey: reportQueryKeys.inventory(params!),\n enabled: !!params,\n staleTime: 60 * 1000,\n }),\n getReportZ: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null) =>\n queryOptions({\n queryFn: () =>\n getReportZ({\n ...params!,\n isShiftChange: params!.isShiftChange ?? false,\n }),\n queryKey: reportQueryKeys.reportZ(params!),\n enabled: !!params?.startDate && !!params?.sellerID,\n staleTime: 60 * 1000,\n }),\n getPendingReportZ: () =>\n queryOptions({\n queryFn: checkPendingReportZ,\n queryKey: reportQueryKeys.pendingReportZ(),\n staleTime: 30_000,\n }),\n getPaymentMethodsWithAmountExpected: () =>\n queryOptions({\n queryFn: getPaymentMethodsWithAmountExpected,\n queryKey: reportQueryKeys.paymentMethods(),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n printReportX: (): UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n > => ({\n mutationFn: printReportX,\n }),\n printReportZ: (): UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n > => ({\n mutationFn: printReportZ,\n }),\n },\n};\n\nexport { reportQueryKeys };\n","import {\n useQuery,\n useMutation,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { reports, reportQueryKeys } from \"../queries/report.queries\";\nimport type {\n ComparisonBy,\n IReportComparisonByTimeFrame,\n IReportInventory,\n IReportX,\n IReportZ,\n IStockByWarehouseReport,\n} from \"../interfaces/report.interface\";\nimport type { IPaymentMethodAmountExpected } from \"../interfaces/payment.interface\";\n\nexport const reportKeys = reportQueryKeys;\n\nexport const useStockByWarehouseReport = (\n params: { limit?: number; allWarehouses?: boolean },\n options?: Omit<\n UseQueryOptions<IStockByWarehouseReport[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...reports.queries.getStockByWarehouseReport(params),\n ...options,\n } as UseQueryOptions<IStockByWarehouseReport[]>);\n\nexport const useReportX = (\n params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null,\n options?: Omit<UseQueryOptions<IReportX>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...reports.queries.getReportX(params),\n ...options,\n } as UseQueryOptions<IReportX>);\n\nexport const usePrintReportX = (\n options?: UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n >,\n) =>\n useMutation({\n ...reports.mutations.printReportX(),\n ...options,\n });\n\nexport const useReportComparisonByTimeFrame = (\n params: {\n startDate: Date;\n endDate: Date;\n comparisonBy: ComparisonBy;\n productIds: string[];\n } | null,\n options?: Omit<\n UseQueryOptions<IReportComparisonByTimeFrame>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...reports.queries.getReportComparisonByTimeFrame(params),\n ...options,\n } as UseQueryOptions<IReportComparisonByTimeFrame>);\n\nexport const useReportByInventory = (\n params: {\n productIDs: number[] | null;\n categoryIDs: number[] | null;\n warehouseIDs: number[] | null;\n providerIDs: number[] | null;\n } | null,\n options?: Omit<\n UseQueryOptions<IReportInventory[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...reports.queries.getReportByInventory(params),\n ...options,\n } as UseQueryOptions<IReportInventory[]>);\n\nexport const useInventoryTable = useReportByInventory;\n\nexport const useReportZ = (\n params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null,\n options?: Omit<UseQueryOptions<IReportZ>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...reports.queries.getReportZ(params),\n ...options,\n } as UseQueryOptions<IReportZ>);\n\nexport const usePrintReportZ = (\n options?: UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n >,\n) =>\n useMutation({\n ...reports.mutations.printReportZ(),\n ...options,\n });\n\nexport const usePendingReportZ = (\n options?: Omit<UseQueryOptions<Date[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...reports.queries.getPendingReportZ(),\n ...options,\n } as UseQueryOptions<Date[]>);\n\nexport const usePaymentMethodsWithAmount = (\n options?: Omit<\n UseQueryOptions<IPaymentMethodAmountExpected[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...reports.queries.getPaymentMethodsWithAmountExpected(),\n ...options,\n } as UseQueryOptions<IPaymentMethodAmountExpected[]>);\n","import type { TblOrderDetail, TblReturn } from '../interfaces/order.interface'\nimport { api } from './config'\n\nexport const createReturn = async ({\n orderId,\n returnReason,\n orderDetails,\n warehouseDestinationID\n}: {\n orderId: number\n returnReason: string\n orderDetails: TblOrderDetail[]\n warehouseDestinationID: number\n}): Promise<void> => {\n const response = await api.post(`/returns`, {\n orderId,\n returnReason,\n orderDetails,\n warehouseDestinationID\n })\n return response.data\n}\n\nexport interface GetReturnsByOrderIdResponse {\n message: string\n data: TblReturn[]\n}\n\nexport const getReturnsByOrderId = async ({\n orderId\n}: {\n orderId: number\n}): Promise<GetReturnsByOrderIdResponse> => {\n const response = await api.get(`/returns/order/${orderId}`)\n return response.data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getReturnsByOrderId, createReturn } from \"../services/return.service\";\nimport type { TblOrderDetail } from \"../interfaces/order.interface\";\nimport type { GetReturnsByOrderIdResponse } from \"../services/return.service\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst returnQueryKeys = {\n all: [\"returns\"] as const,\n byOrder: (orderId: number) => [...returnQueryKeys.all, \"order\", orderId] as const,\n};\n\nexport const returns = {\n queries: {\n all: [\"returns\"] as const,\n getReturnsByOrderId: (orderId: number) =>\n queryOptions({\n queryFn: () => getReturnsByOrderId({ orderId }),\n queryKey: returnQueryKeys.byOrder(orderId),\n enabled: !!orderId && orderId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createReturn: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n void,\n Error,\n {\n orderId: number;\n returnReason: string;\n orderDetails: TblOrderDetail[];\n warehouseDestinationID: number;\n }\n > => ({\n mutationFn: createReturn,\n onSuccess: (_, variables) => {\n queryClient.invalidateQueries({\n queryKey: returnQueryKeys.byOrder(variables.orderId),\n });\n queryClient.invalidateQueries({ queryKey: returnQueryKeys.all });\n successNotification({\n title: \"Devolución creada\",\n message: \"La devolución se ha registrado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la devolución.\",\n });\n },\n }),\n },\n};\n\nexport { returnQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { returns, returnQueryKeys } from \"../queries/return.queries\";\nimport type { TblOrderDetail } from \"../interfaces/order.interface\";\nimport type { GetReturnsByOrderIdResponse } from \"../services/return.service\";\n\nexport const returnKeys = returnQueryKeys;\n\nexport const useReturnsByOrderId = (\n orderId: number | undefined,\n options?: Omit<\n UseQueryOptions<GetReturnsByOrderIdResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...returns.queries.getReturnsByOrderId(orderId ?? 0),\n ...options,\n } as UseQueryOptions<GetReturnsByOrderIdResponse>);\n\nexport const useCreateReturn = (\n options?: UseMutationOptions<\n void,\n Error,\n {\n orderId: number;\n returnReason: string;\n orderDetails: TblOrderDetail[];\n warehouseDestinationID: number;\n }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...returns.mutations.createReturn(queryClient),\n ...options,\n });\n};\n","import type { IRole } from '../interfaces/role.interface'\nimport { api } from './config'\n\nexport const getRoles = async (): Promise<IRole[]> => {\n const response = await api.get('/role')\n return response.data\n}\n\nexport const getRoleByID = async ({\n roleId\n}: {\n roleId: number\n}): Promise<IRole> => {\n const response = await api.get(`/role/${roleId}`)\n return response.data\n}\n\nexport const createRole = async (role: IRole): Promise<IRole> => {\n const response = await api.post('/role', role)\n return response.data\n}\n\nexport const updateRole = async ({\n roleId,\n role\n}: {\n roleId: number\n role: IRole\n}): Promise<IRole> => {\n const response = await api.put(`/role/${roleId}`, role)\n return response.data\n}\n\nexport const deleteRole = async ({\n roleId\n}: {\n roleId: number\n}): Promise<void> => {\n await api.delete(`/role/${roleId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getRoles,\n getRoleByID,\n createRole,\n updateRole,\n deleteRole,\n} from \"../services/role.service\";\nimport type { IRole } from \"../interfaces/role.interface\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst roleQueryKeys = {\n all: [\"roles\"] as const,\n lists: () => [...roleQueryKeys.all, \"list\"] as const,\n details: () => [...roleQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...roleQueryKeys.details(), id] as const,\n};\n\nexport const roles = {\n queries: {\n all: [\"roles\"] as const,\n getRoles: () =>\n queryOptions({\n queryFn: getRoles,\n queryKey: roleQueryKeys.lists(),\n staleTime: 10 * 60 * 1000,\n }),\n getRoleById: (id: number) =>\n queryOptions({\n queryFn: () => getRoleByID({ roleId: id }),\n queryKey: roleQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<IRole, Error, IRole> => ({\n mutationFn: createRole,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.all });\n successNotification({\n title: \"Rol creado\",\n message: \"El rol se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el rol.\",\n });\n },\n }),\n updateRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<IRole, Error, { roleId: number; role: IRole }> => ({\n mutationFn: updateRole,\n onSuccess: (_, { roleId }) => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.detail(roleId) });\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.lists() });\n successNotification({\n title: \"Rol actualizado\",\n message: \"El rol se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el rol.\",\n });\n },\n }),\n deleteRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { roleId: number }> => ({\n mutationFn: deleteRole,\n onSuccess: (_, { roleId }) => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: roleQueryKeys.detail(roleId) });\n successNotification({\n title: \"Rol eliminado\",\n message: \"El rol se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el rol.\",\n });\n },\n }),\n },\n};\n\nexport { roleQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { roles, roleQueryKeys } from \"../queries/role.queries\";\nimport type { IRole } from \"../interfaces/role.interface\";\n\nexport const roleKeys = roleQueryKeys;\n\nexport const useRoles = (\n options?: Omit<UseQueryOptions<IRole[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...roles.queries.getRoles(),\n ...options,\n } as UseQueryOptions<IRole[]>);\n\nexport const useRolesTable = useRoles;\n\nexport const useRole = (\n roleId: number | undefined,\n options?: Omit<UseQueryOptions<IRole>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...roles.queries.getRoleById(roleId ?? 0),\n ...options,\n } as UseQueryOptions<IRole>);\n\nexport const useCreateRole = (\n options?: UseMutationOptions<IRole, Error, IRole>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...roles.mutations.createRole(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateRole = (\n options?: UseMutationOptions<IRole, Error, { roleId: number; role: IRole }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...roles.mutations.updateRole(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteRole = (\n options?: UseMutationOptions<void, Error, { roleId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...roles.mutations.deleteRole(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchRole = () => {\n const queryClient = useQueryClient();\n const prefetchRole = (roleId: number) =>\n queryClient.prefetchQuery({\n ...roles.queries.getRoleById(roleId),\n });\n return { prefetchRole };\n};\n","import { api } from './config'\n\nexport interface Response {\n status: boolean\n httpStatus: number\n message: string\n data: unknown\n}\n\ninterface CloseShiftData {\n sellerID: number\n date: string\n paymentMethods: {\n paymentMethodId: number\n amount: number\n }[]\n cashBreakdown?: {\n coinsTotal: number\n bills: {\n denomination: number\n quantity: number\n }[]\n }\n}\n\nexport const closeShift = async (data: CloseShiftData): Promise<Response> => {\n const response = await api.post<Response>('/shift/close', data, {\n headers: {\n 'Content-Type': 'application/json'\n }\n })\n return response.data\n}\n\nexport const makeNewCashMovement = async ({\n userID,\n amount,\n comment,\n isWithdrawal\n}: {\n userID: number | undefined\n amount: number\n comment?: string\n isWithdrawal: boolean\n}): Promise<Response> => {\n const { data } = await api.post<Response>(\n 'shift/cashmovement',\n {\n userID,\n amount,\n comment,\n isWithdrawal\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n\nexport const setNewShift = async ({\n userID,\n initialCash\n}: {\n userID: number | undefined\n initialCash: number\n}): Promise<Response> => {\n const { data } = await api.post<Response>(\n 'shift/',\n {\n userID,\n initialCash\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n","import type { UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n closeShift,\n makeNewCashMovement,\n setNewShift,\n} from \"../services/shift.service\";\nimport type { Response } from \"../services/shift.service\";\n\nexport interface CloseShiftData {\n sellerID: number;\n date: string;\n paymentMethods: {\n paymentMethodId: number;\n amount: number;\n }[];\n cashBreakdown?: {\n coinsTotal: number;\n bills: {\n denomination: number;\n quantity: number;\n }[];\n };\n}\n\nexport const shifts = {\n queries: {\n all: [\"shifts\"] as const,\n },\n\n mutations: {\n closeShift: (): UseMutationOptions<Response, Error, CloseShiftData> => ({\n mutationFn: closeShift,\n }),\n makeNewCashMovement: (): UseMutationOptions<\n Response,\n Error,\n {\n userID: number | undefined;\n amount: number;\n comment?: string;\n isWithdrawal: boolean;\n }\n > => ({\n mutationFn: makeNewCashMovement,\n }),\n setNewShift: (): UseMutationOptions<\n Response,\n Error,\n { userID: number | undefined; initialCash: number }\n > => ({\n mutationFn: setNewShift,\n }),\n },\n};\n","import { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { shifts } from \"../queries/shift.queries\";\nimport type { Response } from \"../services/shift.service\";\nimport type { CloseShiftData } from \"../queries/shift.queries\";\n\nexport const useCloseShift = (\n options?: UseMutationOptions<Response, Error, CloseShiftData>,\n) =>\n useMutation({\n ...shifts.mutations.closeShift(),\n ...options,\n });\n\nexport const useMakeNewCashMovement = (\n options?: UseMutationOptions<\n Response,\n Error,\n {\n userID: number | undefined;\n amount: number;\n comment?: string;\n isWithdrawal: boolean;\n }\n >,\n) =>\n useMutation({\n ...shifts.mutations.makeNewCashMovement(),\n ...options,\n });\n\nexport const useSetNewShift = (\n options?: UseMutationOptions<\n Response,\n Error,\n { userID: number | undefined; initialCash: number }\n >,\n) =>\n useMutation({\n ...shifts.mutations.setNewShift(),\n ...options,\n });\n","import { api } from './config'\n\nexport interface StateResponse {\n stateID: number\n state: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getAllStates = async (): Promise<StateResponse[]> => {\n const { data } = await api.get<StateResponse[]>('state/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllStates } from \"../services/state.service\";\nimport type { StateResponse } from \"../services/state.service\";\n\nconst stateQueryKeys = {\n all: [\"states\"] as const,\n};\n\nexport const states = {\n queries: {\n all: [\"states\"] as const,\n getAllStates: () =>\n queryOptions({\n queryFn: getAllStates,\n queryKey: stateQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { stateQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { states, stateQueryKeys } from \"../queries/state.queries\";\nimport type { StateResponse } from \"../services/state.service\";\n\nexport const stateKeys = stateQueryKeys;\n\nexport const useAllStates = (\n options?: Omit<UseQueryOptions<StateResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...states.queries.getAllStates(),\n ...options,\n } as UseQueryOptions<StateResponse[]>);\n","import type { IStockMovement, IStockMovementResponse } from '../interfaces/stockmovement.interface'\nimport { api } from './config'\n\ninterface MovementQuery {\n skip?: number\n limit?: number\n query?: string\n movementType?: number\n}\n\nexport interface MovementResponse {\n stockMovementID: number\n quantity: number\n addressID: number\n isOpen: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const createMovement = async (movement: FormData): Promise<IStockMovement> => {\n const { data } = await api.post<IStockMovement>('movement/', movement, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\n// export const getAllLocations = async (): Promise<LocationResponse[]> => {\n// const { data } = await api.get<LocationResponse[]>('location/')\n// return data\n// }\n\n// export const getLocationsForSelect = async (): Promise<LocationResponse[]> => {\n// const { data } = await api.get<LocationResponse[]>('location/locationsForSelect')\n// return data\n// }\n\nexport const getMovements = async ({\n skip = 0,\n limit = 10,\n query = '',\n movementType = 1\n}: MovementQuery): Promise<IStockMovementResponse> => {\n const { data } = await api.get<IStockMovementResponse>(\n `movement/movements?skip=${skip}&limit=${limit}&query=${query}&movementTypeID=${movementType}`\n )\n return data\n}","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getMovements, createMovement } from \"../services/stockmovement.service\";\nimport type {\n IStockMovement,\n IStockMovementResponse,\n} from \"../interfaces/stockmovement.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst stockMovementQueryKeys = {\n all: [\"stockMovements\"] as const,\n lists: () => [...stockMovementQueryKeys.all, \"list\"] as const,\n list: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n movementType?: number;\n }) => [...stockMovementQueryKeys.lists(), { filters: params }] as const,\n};\n\nexport const stockMovements = {\n queries: {\n all: [\"stockMovements\"] as const,\n getMovements: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n movementType?: number;\n }) =>\n queryOptions({\n queryFn: () =>\n getMovements({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n movementType: params.movementType ?? 1,\n }),\n queryKey: stockMovementQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMovementsForTable: (params: TableQueryParams & { movementType?: number }) =>\n queryOptions({\n queryFn: () =>\n getMovements({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n movementType: params.movementType ?? 1,\n }),\n queryKey: stockMovementQueryKeys.list(params),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n createMovement: (\n queryClient: QueryClient,\n ): UseMutationOptions<IStockMovement, Error, FormData> => ({\n mutationFn: createMovement,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: stockMovementQueryKeys.all });\n successNotification({\n title: \"Movimiento creado\",\n message: \"El movimiento se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el movimiento.\",\n });\n },\n }),\n },\n};\n\nexport { stockMovementQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n stockMovements,\n stockMovementQueryKeys,\n} from \"../queries/stockmovement.queries\";\nimport type {\n IStockMovement,\n IStockMovementResponse,\n} from \"../interfaces/stockmovement.interface\";\n\nexport const stockMovementKeys = stockMovementQueryKeys;\n\ninterface UseMovementsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n movementType?: number;\n}\n\nexport const useMovements = (\n params: UseMovementsParams = {},\n options?: Omit<\n UseQueryOptions<IStockMovementResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...stockMovements.queries.getMovements(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IStockMovementResponse>);\n\nexport const useMovementsTable = useMovements;\n\nexport const useCreateMovement = (\n options?: UseMutationOptions<IStockMovement, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...stockMovements.mutations.createMovement(queryClient),\n ...options,\n });\n};\n","import type { ITax } from '../interfaces/tax.interface'\nimport { api } from './config'\n\nexport const getTaxesForSelect = async (): Promise<ITax[]> => {\n const { data } = await api.get<ITax[]>('tax/taxesForSelect')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getTaxesForSelect } from \"../services/tax.service\";\nimport type { ITax } from \"../interfaces/tax.interface\";\n\nconst taxQueryKeys = {\n all: [\"taxes\"] as const,\n forSelect: () => [...taxQueryKeys.all, \"select\"] as const,\n};\n\nexport const taxes = {\n queries: {\n all: [\"taxes\"] as const,\n getTaxesForSelect: () =>\n queryOptions({\n queryFn: getTaxesForSelect,\n queryKey: taxQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { taxQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { taxes, taxQueryKeys } from \"../queries/tax.queries\";\nimport type { ITax } from \"../interfaces/tax.interface\";\n\nexport const taxKeys = taxQueryKeys;\n\nexport const useTaxesForSelect = (\n options?: Omit<UseQueryOptions<ITax[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...taxes.queries.getTaxesForSelect(),\n ...options,\n } as UseQueryOptions<ITax[]>);\n","import type { AgentResponse, IUser, IUserForm, UserResponse } from '../interfaces/user.interface'\nimport { api } from './config'\n\ninterface UserQuery {\n skip?: number\n limit?: number\n query?: string\n roleId?: string\n}\n\nexport const getSellersWithShift = async (): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>(`user/getSellersWithShift/`)\n return data\n}\n\nexport const getSellersOfDayForSelect = async ({\n date\n}: {\n date: string\n}): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>(`user/getSellersOfDayForSelect/${date}`)\n return data\n}\n\nexport const getAllAgents = async (): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>('user/getallagents')\n return data\n}\n\nexport const getUsers = async ({\n skip = 0,\n limit = 10,\n query = '',\n roleId,\n}: UserQuery): Promise<UserResponse> => {\n const params = new URLSearchParams({\n skip: String(skip),\n limit: String(limit),\n ...(query && { query }),\n ...(roleId && { roleId }),\n });\n const { data } = await api.get<UserResponse>(`user/?${params}`)\n return data\n}\n\nexport const getUserById = async ({ userId }: { userId: number }): Promise<IUser> => {\n const { data } = await api.get<IUser>(`user/${userId}`)\n return data\n}\n\nexport const createUser = async ({ user }: { user: IUserForm }): Promise<void> => {\n await api.post('user/', user)\n}\n\nexport const updateUser = async ({\n userId,\n user\n}: {\n userId: number\n user: IUserForm\n}): Promise<void> => {\n await api.put(`user/${userId}`, user)\n}\n\nexport const deleteUser = async ({ userId }: { userId: number }): Promise<void> => {\n await api.delete(`user/${userId}`)\n}\nexport const restoreUser = async ({ userId }: { userId: number }): Promise<void> => {\n await api.patch(`user/${userId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getUsers,\n getUserById,\n getSellersWithShift,\n getSellersOfDayForSelect,\n getAllAgents,\n createUser,\n updateUser,\n deleteUser,\n restoreUser,\n} from \"../services/user.service\";\nimport type {\n IUserForm,\n} from \"../interfaces/user.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst userQueryKeys = {\n all: [\"users\"] as const,\n lists: () => [...userQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...userQueryKeys.lists(), { filters: params }] as const,\n details: () => [...userQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...userQueryKeys.details(), id] as const,\n sellersWithShift: () => [...userQueryKeys.all, \"sellersWithShift\"] as const,\n sellersOfDay: (date: string) =>\n [...userQueryKeys.all, \"sellersOfDay\", date] as const,\n agents: () => [...userQueryKeys.all, \"agents\"] as const,\n};\n\nexport const users = {\n queries: {\n all: [\"users\"] as const,\n getUsers: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getUsers({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: userQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getUsersForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getUsers({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n roleId: params.columnFilters\n ?.find((f) => f.id === \"tblRoles_tblUsers_roleIDTotblRoles.role\")\n ?.value as string | undefined,\n }),\n queryKey: userQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getUserById: (id: number) =>\n queryOptions({\n queryFn: () => getUserById({ userId: id }),\n queryKey: userQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getSellersWithShift: () =>\n queryOptions({\n queryFn: getSellersWithShift,\n queryKey: userQueryKeys.sellersWithShift(),\n staleTime: 30_000,\n }),\n getSellersOfDayForSelect: (date: string) =>\n queryOptions({\n queryFn: () => getSellersOfDayForSelect({ date }),\n queryKey: userQueryKeys.sellersOfDay(date),\n enabled: !!date,\n staleTime: 5 * 60 * 1000,\n }),\n getAllAgents: () =>\n queryOptions({\n queryFn: getAllAgents,\n queryKey: userQueryKeys.agents(),\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { user: IUserForm }> => ({\n mutationFn: createUser,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: userQueryKeys.all });\n successNotification({\n title: \"Usuario creado\",\n message: \"El usuario se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el usuario.\",\n });\n },\n }),\n\n updateUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number; user: IUserForm }> => ({\n mutationFn: updateUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n successNotification({\n title: \"Usuario actualizado\",\n message: \"El usuario se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el usuario.\",\n });\n },\n }),\n\n deleteUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number }> => ({\n mutationFn: deleteUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n successNotification({\n title: \"Usuario eliminado\",\n message: \"El usuario se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el usuario.\",\n });\n },\n }),\n\n restoreUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number }> => ({\n mutationFn: restoreUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n successNotification({\n title: \"Usuario restaurado\",\n message: \"El usuario se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el usuario.\",\n });\n },\n }),\n },\n};\n\nexport { userQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { users, userQueryKeys } from \"../queries/user.queries\";\nimport type {\n IUser,\n IUserForm,\n AgentResponse,\n UserResponse,\n} from \"../interfaces/user.interface\";\n\n// Re-export query keys for backward compatibility\nexport const userKeys = userQueryKeys;\n\ninterface UseUsersParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useUsers = (\n params: UseUsersParams = {},\n options?: Omit<UseQueryOptions<UserResponse>, \"queryKey\" | \"queryFn\">,\n) => {\n const { skip = 0, limit = 10, query = \"\" } = params;\n return useQuery({\n ...users.queries.getUsers({ skip, limit, query }),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<UserResponse>);\n};\n\n/** Alias for useUsers - paginated list for tables */\nexport const useUsersTable = useUsers;\n\nexport const useUser = (\n userId: number | undefined,\n options?: Omit<UseQueryOptions<IUser>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...users.queries.getUserById(userId ?? 0),\n ...options,\n } as UseQueryOptions<IUser>);\n\nexport const useSellersWithShift = (\n options?: Omit<UseQueryOptions<AgentResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...users.queries.getSellersWithShift(),\n ...options,\n } as UseQueryOptions<AgentResponse>);\n\nexport const useSellersOfDayForSelect = (\n date: string | undefined,\n options?: Omit<UseQueryOptions<AgentResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...users.queries.getSellersOfDayForSelect(date ?? \"\"),\n ...options,\n } as UseQueryOptions<AgentResponse>);\n\nexport const useAllAgents = (\n options?: Omit<UseQueryOptions<AgentResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...users.queries.getAllAgents(),\n ...options,\n } as UseQueryOptions<AgentResponse>);\n\nexport const useCreateUser = (\n options?: UseMutationOptions<void, Error, { user: IUserForm }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...users.mutations.createUser(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateUser = (\n options?: UseMutationOptions<\n void,\n Error,\n { userId: number; user: IUserForm }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...users.mutations.updateUser(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteUser = (\n options?: UseMutationOptions<void, Error, { userId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...users.mutations.deleteUser(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreUser = (\n options?: UseMutationOptions<void, Error, { userId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...users.mutations.restoreUser(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchUser = () => {\n const queryClient = useQueryClient();\n const prefetchUser = (userId: number) =>\n queryClient.prefetchQuery({\n ...users.queries.getUserById(userId),\n });\n return { prefetchUser };\n};\n","import type { IWareHouse, IWareHouseResponse } from '../interfaces/warehouse.interface'\nimport { api } from './config'\n\ninterface WareHouseQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface WarehouseResponse {\n wareHouseID: number\n wareHouse: string\n wareHouseWithLocation: string\n physicialLocationID: number\n isShowroom: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getWarehousesForSelect = async (): Promise<WarehouseResponse[]> => {\n const { data } = await api.get<WarehouseResponse[]>('warehouse/warehousesForSelect')\n return data\n}\n\nexport const getWarehouses = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: WareHouseQuery): Promise<IWareHouseResponse> => {\n const { data } = await api.get<IWareHouseResponse>(\n `warehouse/warehouses?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getWarehouseById = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<IWareHouse> => {\n const { data } = await api.get(`/warehouse/${warehouseId}`)\n return data.data\n}\n\nexport const updateWarehouse = async ({\n warehouseId,\n warehouse\n}: {\n warehouseId: number\n warehouse: FormData\n}): Promise<IWareHouse> => {\n const { data } = await api.put<IWareHouse>(`/warehouse/${warehouseId}`, warehouse, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createWareHouse = async (warehouse: FormData): Promise<IWareHouse> => {\n const { data } = await api.post<IWareHouse>('warehouse/', warehouse, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteWarehouse = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<void> => {\n await api.delete(`/warehouse/${warehouseId}`)\n}\n\nexport const restoreWarehouse = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<void> => {\n await api.patch(`/warehouse/${warehouseId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getWarehouses,\n getWarehouseById,\n getWarehousesForSelect,\n createWareHouse,\n updateWarehouse,\n deleteWarehouse,\n restoreWarehouse,\n} from \"../services/warehouse.service\";\nimport type { IWareHouse, IWareHouseResponse } from \"../interfaces/warehouse.interface\";\nimport type { WarehouseResponse } from \"../services/warehouse.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst warehouseQueryKeys = {\n all: [\"warehouses\"] as const,\n lists: () => [...warehouseQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...warehouseQueryKeys.lists(), { filters: params }] as const,\n details: () => [...warehouseQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...warehouseQueryKeys.details(), id] as const,\n forSelect: () => [...warehouseQueryKeys.all, \"select\"] as const,\n};\n\nexport const warehouses = {\n queries: {\n all: [\"warehouses\"] as const,\n getWarehouses: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getWarehouses({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: warehouseQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getWarehousesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getWarehouses({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: warehouseQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getWarehouseById: (id: number) =>\n queryOptions({\n queryFn: () => getWarehouseById({ warehouseId: id }),\n queryKey: warehouseQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getWarehousesForSelect: () =>\n queryOptions({\n queryFn: getWarehousesForSelect,\n queryKey: warehouseQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<IWareHouse, Error, FormData> => ({\n mutationFn: createWareHouse,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.all });\n successNotification({\n title: \"Almacén creado\",\n message: \"El almacén se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el almacén.\",\n });\n },\n }),\n updateWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<IWareHouse, Error, { warehouseId: number; warehouse: FormData }> => ({\n mutationFn: updateWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n successNotification({\n title: \"Almacén actualizado\",\n message: \"El almacén se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el almacén.\",\n });\n },\n }),\n deleteWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { warehouseId: number }> => ({\n mutationFn: deleteWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n successNotification({\n title: \"Almacén eliminado\",\n message: \"El almacén se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el almacén.\",\n });\n },\n }),\n restoreWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { warehouseId: number }> => ({\n mutationFn: restoreWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n successNotification({\n title: \"Almacén restaurado\",\n message: \"El almacén se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el almacén.\",\n });\n },\n }),\n },\n};\n\nexport { warehouseQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { warehouses, warehouseQueryKeys } from \"../queries/warehouse.queries\";\nimport type { IWareHouse, IWareHouseResponse } from \"../interfaces/warehouse.interface\";\nimport type { WarehouseResponse } from \"../services/warehouse.service\";\n\nexport const warehouseKeys = warehouseQueryKeys;\n\ninterface UseWarehousesParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useWarehouses = (\n params: UseWarehousesParams = {},\n options?: Omit<UseQueryOptions<IWareHouseResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...warehouses.queries.getWarehouses(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IWareHouseResponse>);\n\nexport const useWarehousesTable = useWarehouses;\n\nexport const useWarehouse = (\n warehouseId: number | undefined,\n options?: Omit<UseQueryOptions<IWareHouse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...warehouses.queries.getWarehouseById(warehouseId ?? 0),\n ...options,\n } as UseQueryOptions<IWareHouse>);\n\nexport const useWarehousesForSelect = (\n options?: Omit<UseQueryOptions<WarehouseResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...warehouses.queries.getWarehousesForSelect(),\n ...options,\n } as UseQueryOptions<WarehouseResponse[]>);\n\nexport const useCreateWarehouse = (\n options?: UseMutationOptions<IWareHouse, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...warehouses.mutations.createWarehouse(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateWarehouse = (\n options?: UseMutationOptions<\n IWareHouse,\n Error,\n { warehouseId: number; warehouse: FormData }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...warehouses.mutations.updateWarehouse(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteWarehouse = (\n options?: UseMutationOptions<void, Error, { warehouseId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...warehouses.mutations.deleteWarehouse(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreWarehouse = (\n options?: UseMutationOptions<void, Error, { warehouseId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...warehouses.mutations.restoreWarehouse(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchWarehouse = () => {\n const queryClient = useQueryClient();\n const prefetchWarehouse = (warehouseId: number) =>\n queryClient.prefetchQuery({\n ...warehouses.queries.getWarehouseById(warehouseId),\n });\n return { prefetchWarehouse };\n};\n","import { useMediaQuery as useMantineMediaQuery } from \"@mantine/hooks\";\n\nexport const useMediaQuery = () => {\n const isMobile = useMantineMediaQuery(\"(max-width: 767px)\");\n const isDesktop = useMantineMediaQuery(\"(min-width: 992px)\");\n const isTablet = useMantineMediaQuery(\"(min-width: 768px) and (max-width: 991px)\");\n return { isMobile, isDesktop, isTablet };\n};"]}
1
+ {"version":3,"sources":["../src/services/config.ts","../src/services/auth.service.ts","../src/queries/auth.queries.ts","../src/hooks/auth.hooks.ts","../src/services/attributes.service.ts","../src/utils/notifications.tsx","../src/queries/attributes.queries.ts","../src/hooks/attributes.hooks.ts","../src/interfaces/datatable.interface.ts","../src/hooks/useDataTable.ts","../src/services/bankTerminal.service.ts","../src/queries/bankTerminal.queries.ts","../src/hooks/bankTerminal.hooks.ts","../src/services/batch.service.ts","../src/queries/batch.queries.ts","../src/hooks/batch.hooks.ts","../src/services/category.service.ts","../src/queries/category.queries.ts","../src/hooks/category.hooks.ts","../src/services/client.service.ts","../src/queries/client.queries.ts","../src/hooks/client.hooks.ts","../src/services/exchange.service.ts","../src/queries/exchange.queries.ts","../src/hooks/exchange.hooks.ts","../src/services/folio.service.ts","../src/queries/folio.queries.ts","../src/hooks/folio.hooks.ts","../src/services/gender.service.ts","../src/queries/gender.queries.ts","../src/hooks/gender.hooks.ts","../src/services/health.service.ts","../src/queries/health.queries.ts","../src/hooks/health.hooks.ts","../src/services/location.service.ts","../src/queries/location.queries.ts","../src/hooks/location.hooks.ts","../src/services/material.service.ts","../src/queries/material.queries.ts","../src/hooks/material.hooks.ts","../src/services/module.service.ts","../src/queries/module.queries.ts","../src/hooks/module.hooks.ts","../src/services/order.service.ts","../src/queries/order.queries.ts","../src/hooks/order.hooks.ts","../src/services/payment.service.ts","../src/queries/payment.queries.ts","../src/hooks/payment.hooks.ts","../src/services/permission.service.ts","../src/queries/permission.queries.ts","../src/hooks/permission.hooks.ts","../src/services/pricePerGram.service.ts","../src/queries/pricePerGram.queries.ts","../src/hooks/pricePerGram.hooks.ts","../src/services/priceType.service.ts","../src/queries/priceType.queries.ts","../src/hooks/priceType.hooks.ts","../src/services/product.service.ts","../src/queries/product.queries.ts","../src/hooks/product.hooks.ts","../src/services/productTags.service.ts","../src/queries/productTags.queries.ts","../src/hooks/productTags.hooks.ts","../src/services/promotion.service.ts","../src/queries/promotion.queries.ts","../src/hooks/promotion.hooks.ts","../src/services/provider.service.ts","../src/queries/provider.queries.ts","../src/hooks/provider.hooks.ts","../src/services/qr.service.ts","../src/queries/qr.queries.ts","../src/hooks/qr.hooks.ts","../src/services/report.service.ts","../src/queries/report.queries.ts","../src/hooks/report.hooks.ts","../src/services/return.service.ts","../src/queries/return.queries.ts","../src/hooks/return.hooks.ts","../src/services/role.service.ts","../src/queries/role.queries.ts","../src/hooks/role.hooks.ts","../src/services/shift.service.ts","../src/queries/shift.queries.ts","../src/hooks/shift.hooks.ts","../src/services/state.service.ts","../src/queries/state.queries.ts","../src/hooks/state.hooks.ts","../src/services/stockmovement.service.ts","../src/queries/stockmovement.queries.ts","../src/hooks/stockmovement.hooks.ts","../src/services/tax.service.ts","../src/queries/tax.queries.ts","../src/hooks/tax.hooks.ts","../src/services/user.service.ts","../src/queries/user.queries.ts","../src/hooks/user.hooks.ts","../src/services/userSettings.service.ts","../src/queries/userSettings.queries.ts","../src/hooks/userSettings.hooks.ts","../src/services/warehouse.service.ts","../src/queries/warehouse.queries.ts","../src/hooks/warehouse.hooks.ts","../src/hooks/useMediaQuery.ts"],"names":["attributes","useMutation","queryOptions","useQuery","useQueryClient","defaultColumnMap","getFilterValue","parseNumber","useMantineMediaQuery"],"mappings":"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","file":"hooks.js","sourcesContent":["import axios, { type AxiosInstance } from 'axios'\n\n/**\n * Configuration for the shared API client.\n * Each consuming app must call configureApi() with its own baseURL and auth.\n */\nexport interface IApiConfig {\n /** Backend base URL (e.g. \"http://localhost:4000/\" or \"https://api.myapp.com/\") */\n baseURL: string\n /** Returns the current auth token for request headers */\n getToken: () => string | undefined\n /** Called when a new token is received after refresh (e.g. update your store) */\n onTokenRefresh?: (newToken: string) => void\n /** Called when refresh fails (e.g. clear session, redirect to login) */\n onUnauthorized?: () => void\n}\n\n// Default instance; replaced when configureApi() is called by the consuming app\nlet api: AxiosInstance = axios.create({\n baseURL: '',\n headers: { 'Content-Type': 'application/json' }\n})\n\n/**\n * Configure the shared API client. Must be called by the consuming app before using any service.\n * @example\n * // In your app (e.g. main.tsx or before first API call):\n * import { configureApi } from 'erp-pos-ecommerce-shared'\n * import { useAuthStore } from './store/authStore'\n *\n * configureApi({\n * baseURL: import.meta.env.VITE_API_URL ?? 'http://localhost:4000/',\n * getToken: () => useAuthStore.getState().token,\n * onTokenRefresh: (newToken) => useAuthStore.setState({ token: newToken }),\n * onUnauthorized: () => { useAuthStore.setState({ token: undefined }); redirectToLogin() }\n * })\n */\nexport function configureApi(config: IApiConfig): AxiosInstance {\n const { baseURL, getToken, onTokenRefresh, onUnauthorized } = config\n\n const newApi = axios.create({\n baseURL,\n headers: {\n 'Content-Type': 'application/json',\n ...(getToken() && { Authorization: `Bearer ${getToken()}` })\n }\n })\n\n newApi.interceptors.request.use((reqConfig) => {\n const token = getToken()\n if (token) {\n reqConfig.headers.Authorization = `Bearer ${token}`\n }\n return reqConfig\n })\n\n const refreshAxios = axios.create({ baseURL })\n\n newApi.interceptors.response.use(\n (response) => response,\n async (error) => {\n const originalRequest = error.config\n\n if (error.response?.status === 401 && !originalRequest._retry && onTokenRefresh && onUnauthorized) {\n originalRequest._retry = true\n\n try {\n const response = await refreshAxios.get('/auth/refresh', {\n headers: getToken() ? { Authorization: `Bearer ${getToken()}` } : {}\n })\n const newToken = response.data?.token\n if (newToken) {\n onTokenRefresh(newToken)\n originalRequest.headers.Authorization = `Bearer ${newToken}`\n return newApi(originalRequest)\n }\n } catch {\n onUnauthorized()\n return Promise.reject(error)\n }\n }\n\n return Promise.reject(error)\n }\n )\n\n api = newApi\n return api\n}\n\n/**\n * Shared axios instance used by all services.\n * Valid only after the consuming app has called configureApi().\n */\nexport { api }\n","import type { IUser } from '../interfaces/user.interface'\nimport { api } from './config'\n\nexport interface LoginResponse {\n user: IUser\n token: string\n}\n\nexport const login = async ({\n email,\n password\n}: {\n email: string\n password: string\n}): Promise<LoginResponse> => {\n const { data } = await api.post<LoginResponse>('auth/login', { email, password })\n return data\n}\n","import type { UseMutationOptions } from \"@tanstack/react-query\";\nimport { login } from \"../services/auth.service\";\nimport type { LoginResponse } from \"../services/auth.service\";\n\nexport const auth = {\n queries: {\n all: [\"auth\"] as const,\n },\n\n mutations: {\n login: (): UseMutationOptions<\n LoginResponse,\n Error,\n { email: string; password: string }\n > => ({\n mutationFn: login,\n }),\n },\n};\n","import { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { auth } from \"../queries/auth.queries\";\nimport type { LoginResponse } from \"../services/auth.service\";\n\nexport const useLogin = (\n options?: UseMutationOptions<\n LoginResponse,\n Error,\n { email: string; password: string }\n >,\n) =>\n useMutation({\n ...auth.mutations.login(),\n ...options,\n });\n","import type {\n IAttribute,\n IAttributeFilter,\n IAttributeResponse,\n IAttributeValue\n} from '../interfaces/attribute.interface'\nimport { api } from './config'\n\nexport const getAttributes = async ({\n skip,\n limit,\n query\n}: {\n skip: number\n limit: number\n query: string\n}): Promise<IAttributeResponse> => {\n const { data } = await api.get('/attribute/category', { params: { skip, limit, query } })\n return data\n}\n\nexport const getAttributesForSelect = async (): Promise<IAttribute[]> => {\n const { data } = await api.get('/attribute/select')\n return data\n}\n\nexport const getAttributesTable = async ({\n skip,\n limit,\n filters\n}: {\n skip?: number\n limit?: number\n filters?: IAttributeFilter\n}): Promise<IAttributeResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip?.toString() ?? \"\",\n limit: limit?.toString() ?? \"\",\n ...(filters?.query && { query: filters.query }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.productId && { productId: filters.productId.toString() }),\n ...(filters?.materialId && { materialId: filters.materialId.toString() }),\n })\n const { data } = await api.get(`/attribute?${queryParams}`)\n return data\n}\n\nexport const getAttributeById = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.get(`/attribute/${attributeId}`)\n return data\n}\n\nexport const getAttributesByProductID = async ({\n productId\n}: {\n productId: string\n}): Promise<IAttribute[]> => {\n const { data } = await api.get(`/attribute/${productId}/product`)\n return data\n}\n\nexport const getAttributesByCategoryID = async ({\n categoryID\n}: {\n categoryID: string\n}): Promise<IAttribute[]> => {\n const { data } = await api.get(`/attribute/${categoryID}/category/`)\n return data\n}\n\nexport const getAttributeValues = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttributeValue[]> => {\n const { data } = await api.get(`/attribute/${attributeId}/values`)\n return data\n}\n\nexport const createAttribute = async ({\n attribute\n}: {\n attribute: {\n name: string\n values: string[]\n productId: number\n }\n}): Promise<IAttribute> => {\n const { data } = await api.post('/attribute', {\n name: attribute.name,\n values: attribute.values,\n productID: attribute.productId,\n })\n return data\n}\n\nexport const createAttributesValuesBatch = async ({\n productId,\n attributeValues,\n}: {\n productId: number;\n attributeValues: {\n attribute: string;\n values: string[];\n }[];\n}): Promise<IAttributeValue[]> => {\n const { data } = await api.post(`/attribute/batch`, {\n productId,\n attributeValues,\n });\n return data;\n};\n\nexport const createAttributesForCategory = async ({\n attributes\n}: {\n attributes: {\n categoryId: string\n attributes: {\n name: string\n values: string[]\n pricePerGram?: number | null\n }[]\n }\n}): Promise<IAttribute> => {\n const { data } = await api.post(`/attribute/category/`, {\n categoryID: attributes.categoryId,\n attributes: attributes.attributes\n })\n return data\n}\n\nexport const updateAttribute = async ({\n attributeId,\n attribute\n}: {\n attributeId: string\n attribute: IAttribute\n}): Promise<IAttribute> => {\n const { data } = await api.put(`/attribute/${attributeId}`, attribute)\n return data\n}\n\nexport const updateAttributesForCategory = async ({\n categoryId,\n attributes\n}: {\n categoryId: string\n attributes: {\n attributes: string[]\n }\n}): Promise<IAttribute> => {\n const { data } = await api.put(`/attribute/category/${categoryId}`, attributes)\n return data\n}\n\nexport const deleteAttribute = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.delete(`/attribute/${attributeId}`)\n return data\n}\n\nexport const undeleteAttribute = async ({\n attributeId\n}: {\n attributeId: string\n}): Promise<IAttribute> => {\n const { data } = await api.patch(`/attribute/${attributeId}`)\n return data\n}\n\n//create attribute value\nexport const createAttributeValue = async ({\n attributeId,\n value\n}: {\n attributeId: number\n value: string\n}): Promise<IAttributeValue> => {\n const { data } = await api.post(`/attribute/${attributeId}/values`, {\n attributeID: attributeId,\n value\n })\n return data\n}\n","import type { ReactNode } from 'react';\nimport { notifications } from '@mantine/notifications';\nimport { Text } from '@mantine/core';\n\n// Icons are provided by the consuming app so this library stays icon-agnostic\nlet defaultSuccessIcon: ReactNode = undefined;\nlet defaultErrorIcon: ReactNode = undefined;\n\n/**\n * Configure default icons for success and error notifications.\n * Call this once at app startup (e.g. in your root layout) with your preferred icon library.\n * @example\n * // With lucide-react\n * configureNotificationIcons({ successIcon: <Check />, errorIcon: <X /> });\n * // With react-icons\n * configureNotificationIcons({ successIcon: <FiCheck />, errorIcon: <FiX /> });\n */\nexport const configureNotificationIcons = (config: {\n successIcon?: ReactNode;\n errorIcon?: ReactNode;\n}): void => {\n if (config.successIcon !== undefined) defaultSuccessIcon = config.successIcon;\n if (config.errorIcon !== undefined) defaultErrorIcon = config.errorIcon;\n};\n\nexport const successNotification = ({\n title,\n message,\n icon,\n}: {\n title: string;\n message: string;\n /** Override the default success icon for this call (optional) */\n icon?: ReactNode;\n}): void => {\n notifications.show({\n title: <Text>{title}</Text>,\n message: message,\n color: 'teal',\n icon: icon ?? defaultSuccessIcon,\n });\n};\n\nexport const errorNotification = ({\n title,\n message,\n icon,\n}: {\n title: string;\n message: string;\n /** Override the default error icon for this call (optional) */\n icon?: ReactNode;\n}): void => {\n notifications.show({\n title: <Text>{title}</Text>,\n message: message,\n color: 'red',\n icon: icon ?? defaultErrorIcon,\n });\n};\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAttributes,\n getAttributesForSelect,\n getAttributeById,\n getAttributesByProductID,\n getAttributesByCategoryID,\n getAttributeValues,\n createAttribute,\n createAttributesValuesBatch,\n createAttributesForCategory,\n createAttributeValue,\n updateAttribute,\n updateAttributesForCategory,\n deleteAttribute,\n undeleteAttribute,\n getAttributesTable,\n} from \"../services/attributes.service\";\nimport type {\n IAttribute,\n IAttributeQueryParams,\n IAttributeResponse,\n IAttributeValue,\n} from \"../interfaces/attribute.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst attributeQueryKeys = {\n all: [\"attributes\"] as const,\n table: (params: IAttributeQueryParams = {}) => [...attributeQueryKeys.all, \"table\", { skip: params.skip, limit: params.limit, filters: params.filters ?? {} }] as const,\n lists: () => [...attributeQueryKeys.all, \"list\"] as const,\n list: (params: TableQueryParams) =>\n [\n ...attributeQueryKeys.lists(),\n { skip: params.skip, limit: params.limit, query: params.query },\n ] as const,\n details: () => [...attributeQueryKeys.all, \"detail\"] as const,\n detail: (id: string) => [...attributeQueryKeys.details(), id] as const,\n forSelect: () => [...attributeQueryKeys.all, \"select\"] as const,\n byProduct: (productId: string) =>\n [...attributeQueryKeys.all, \"product\", productId] as const,\n byCategory: (categoryId: string) =>\n [...attributeQueryKeys.all, \"category\", categoryId] as const,\n values: (attributeId: string) =>\n [...attributeQueryKeys.all, \"values\", attributeId] as const,\n};\n\nexport const attributes = {\n queries: {\n all: [\"attributes\"] as const,\n getAttributes: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAttributes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query ?? \"\",\n }),\n queryKey: attributeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getAttributesTable: (params: IAttributeQueryParams = {}) =>\n queryOptions({\n queryFn: () => getAttributesTable({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n filters: params.filters ?? undefined,\n }),\n queryKey: attributeQueryKeys.table(params),\n staleTime: 30_000,\n }),\n getAttributesForSelect: () =>\n queryOptions({\n queryFn: getAttributesForSelect,\n queryKey: attributeQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAttributeById: (id: string) =>\n queryOptions({\n queryFn: () => getAttributeById({ attributeId: id }),\n queryKey: attributeQueryKeys.detail(id),\n enabled: !!id,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributesByProductID: (productId: string) =>\n queryOptions({\n queryFn: () => getAttributesByProductID({ productId }),\n queryKey: attributeQueryKeys.byProduct(productId),\n enabled: !!productId,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributesByCategoryID: (categoryId: string) =>\n queryOptions({\n queryFn: () => getAttributesByCategoryID({ categoryID: categoryId }),\n queryKey: attributeQueryKeys.byCategory(categoryId),\n enabled: !!categoryId,\n staleTime: 5 * 60 * 1000,\n }),\n getAttributeValues: (attributeId: string) =>\n queryOptions({\n queryFn: () => getAttributeValues({ attributeId }),\n queryKey: attributeQueryKeys.values(attributeId),\n enabled: !!attributeId,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { attribute: { name: string; values: string[]; productId: number } }\n > => ({\n mutationFn: createAttribute,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo creado\",\n message: \"El atributo se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error al crear atributo\",\n message: error.message || \"No se pudo crear el atributo.\",\n });\n },\n }),\n\n createAttributesValuesBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttributeValue[],\n Error,\n {\n productId: number;\n attributeValues: { attribute: string; values: string[] }[];\n }\n > => ({\n mutationFn: createAttributesValuesBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Valores creados\",\n message: \"Los valores de atributos se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear los valores.\",\n });\n },\n }),\n\n createAttributesForCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n {\n attributes: {\n categoryId: string;\n attributes: {\n name: string;\n values: string[];\n pricePerGram?: number | null;\n }[];\n };\n }\n > => ({\n mutationFn: createAttributesForCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributos creados\",\n message: \"Los atributos para la categoría se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear los atributos.\",\n });\n },\n }),\n\n createAttributeValue: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttributeValue,\n Error,\n { attributeId: number; value: string }\n > => ({\n mutationFn: createAttributeValue,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Valor creado\",\n message: \"El valor del atributo se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el valor.\",\n });\n },\n }),\n\n updateAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { attributeId: string; attribute: IAttribute }\n > => ({\n mutationFn: updateAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo actualizado\",\n message: \"El atributo se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el atributo.\",\n });\n },\n }),\n\n updateAttributesForCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IAttribute,\n Error,\n { categoryId: string; attributes: { attributes: string[] } }\n > => ({\n mutationFn: updateAttributesForCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributos actualizados\",\n message:\n \"Los atributos de la categoría se han actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron actualizar los atributos.\",\n });\n },\n }),\n\n deleteAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<IAttribute, Error, { attributeId: string }> => ({\n mutationFn: deleteAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n queryClient.removeQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n successNotification({\n title: \"Atributo eliminado\",\n message: \"El atributo se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el atributo.\",\n });\n },\n }),\n\n undeleteAttribute: (\n queryClient: QueryClient,\n ): UseMutationOptions<IAttribute, Error, { attributeId: string }> => ({\n mutationFn: undeleteAttribute,\n onSuccess: (_, { attributeId }) => {\n queryClient.invalidateQueries({\n queryKey: attributeQueryKeys.detail(attributeId),\n });\n queryClient.invalidateQueries({ queryKey: attributeQueryKeys.all });\n successNotification({\n title: \"Atributo restaurado\",\n message: \"El atributo se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el atributo.\",\n });\n },\n }),\n },\n};\n\nexport { attributeQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n attributes,\n attributeQueryKeys,\n} from \"../queries/attributes.queries\";\nimport type {\n IAttribute,\n IAttributeQueryParams,\n IAttributeResponse,\n IAttributeValue,\n} from \"../interfaces/attribute.interface\";\nimport type { TableQueryParams } from \"../queries/types\";\n\n// Re-export query keys for backward compatibility\nexport const attributeKeys = attributeQueryKeys;\n\nexport interface AttributeFilterColumnMap {\n categoryId?: string;\n productId?: string;\n materialId?: string;\n}\n\nconst defaultColumnMap: Required<AttributeFilterColumnMap> = {\n categoryId: \"categoryID\",\n productId: \"productID\",\n materialId: \"materialID\",\n};\n\nfunction getFilterValue(\n columnFilters: TableQueryParams[\"columnFilters\"],\n columnId: string,\n): string | null {\n const filter = columnFilters?.find((f) => f.id === columnId);\n if (filter?.value == null) return null;\n return typeof filter.value === \"string\" ? filter.value : String(filter.value);\n}\n\nfunction parseNumber(value: string | null): number | null {\n if (value == null || value === \"\") return null;\n const n = Number.parseInt(value, 10);\n return Number.isNaN(n) ? null : n;\n}\n\nexport const mapTableParamsToAttributeParams = (\n params: TableQueryParams,\n columnMap?: Partial<AttributeFilterColumnMap>,\n): IAttributeQueryParams => {\n const map = { ...defaultColumnMap, ...columnMap };\n const cf = params.columnFilters;\n\n return {\n skip: params.skip,\n limit: params.limit,\n filters: {\n query: params.query ?? null,\n categoryId: parseNumber(getFilterValue(cf, map.categoryId)),\n productId: parseNumber(getFilterValue(cf, map.productId)),\n materialId: parseNumber(getFilterValue(cf, map.materialId)),\n },\n };\n};\n\nexport const useAttributes = (\n params: { skip: number; limit: number; query: string },\n options?: Omit<\n UseQueryOptions<IAttributeResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...attributes.queries.getAttributes(params),\n ...options,\n } as UseQueryOptions<IAttributeResponse>);\n\n/** Alias for useAttributes - paginated list for tables */\nexport const useAttributesTable = (\n params?: IAttributeQueryParams,\n options?: Omit<UseQueryOptions<IAttributeResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...attributes.queries.getAttributesTable(params),\n ...options,\n } as UseQueryOptions<IAttributeResponse>);\n\nexport const useAttributesForSelect = (\n options?: Omit<UseQueryOptions<IAttribute[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...attributes.queries.getAttributesForSelect(),\n staleTime: 10 * 60 * 1000,\n ...options,\n } as UseQueryOptions<IAttribute[]>);\n\nexport const useAttribute = (\n attributeId: string | undefined,\n options?: Omit<UseQueryOptions<IAttribute>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...attributes.queries.getAttributeById(attributeId ?? \"\"),\n ...options,\n } as UseQueryOptions<IAttribute>);\n\nexport const useAttributesByProductID = (\n productId: string | undefined,\n options?: Omit<UseQueryOptions<IAttribute[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...attributes.queries.getAttributesByProductID(productId ?? \"\"),\n ...options,\n } as UseQueryOptions<IAttribute[]>);\n\nexport const useAttributesByCategoryID = (\n categoryId: string | undefined,\n options?: Omit<UseQueryOptions<IAttribute[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...attributes.queries.getAttributesByCategoryID(categoryId ?? \"\"),\n ...options,\n } as UseQueryOptions<IAttribute[]>);\n\nexport const useAttributeValues = (\n attributeId: string | undefined,\n options?: Omit<\n UseQueryOptions<IAttributeValue[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...attributes.queries.getAttributeValues(attributeId ?? \"\"),\n ...options,\n } as UseQueryOptions<IAttributeValue[]>);\n\nexport const useCreateAttribute = (\n options?: UseMutationOptions<\n IAttribute,\n Error,\n { attribute: { name: string; values: string[]; productId: number } }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.createAttribute(queryClient),\n ...options,\n });\n};\n\nexport const useCreateAttributesValuesBatch = (\n options?: UseMutationOptions<\n IAttributeValue[],\n Error,\n {\n productId: number;\n attributeValues: { attribute: string; values: string[] }[];\n }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.createAttributesValuesBatch(queryClient),\n ...options,\n });\n};\n\nexport const useCreateAttributesForCategory = (\n options?: UseMutationOptions<\n IAttribute,\n Error,\n {\n attributes: {\n categoryId: string;\n attributes: {\n name: string;\n values: string[];\n pricePerGram?: number | null;\n }[];\n };\n }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.createAttributesForCategory(queryClient),\n ...options,\n });\n};\n\nexport const useCreateAttributeValue = (\n options?: UseMutationOptions<\n IAttributeValue,\n Error,\n { attributeId: number; value: string }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.createAttributeValue(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateAttribute = (\n options?: UseMutationOptions<\n IAttribute,\n Error,\n { attributeId: string; attribute: IAttribute }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.updateAttribute(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateAttributesForCategory = (\n options?: UseMutationOptions<\n IAttribute,\n Error,\n { categoryId: string; attributes: { attributes: string[] } }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.updateAttributesForCategory(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteAttribute = (\n options?: UseMutationOptions<IAttribute, Error, { attributeId: string }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.deleteAttribute(queryClient),\n ...options,\n });\n};\n\nexport const useUndeleteAttribute = (\n options?: UseMutationOptions<IAttribute, Error, { attributeId: string }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...attributes.mutations.undeleteAttribute(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchAttribute = () => {\n const queryClient = useQueryClient();\n const prefetchAttribute = (attributeId: string) =>\n queryClient.prefetchQuery({\n ...attributes.queries.getAttributeById(attributeId),\n });\n return { prefetchAttribute };\n};\n","import type { ColumnFiltersState } from '@tanstack/react-table'\n\n/**\n * State passed to onStateChange on every table interaction.\n * Use these values to build your API request.\n */\nexport interface ServerTableState {\n pageIndex: number\n pageSize: number\n globalFilter: string\n columnFilters: ColumnFiltersState\n sorting: { id: string; desc: boolean }[]\n}\n\n/**\n * Style options for the table header row.\n * Pass as the headerStyle (or legacy headerBgColor) prop to customize appearance.\n */\nexport interface TableHeaderStyle {\n /** Header background color. Use light-dark(light, dark) for theme-aware colors */\n bgColor?: string;\n /** Header text (and icon) color */\n textColor?: string;\n /** Header background color on hover (if not set, a default is used) */\n hoverBgColor?: string;\n /** Header text color on hover (if not set, same as textColor) */\n hoverTextColor?: string;\n /** Header font weight (e.g. 600, 700, \"bold\") */\n fontWeight?: number | string;\n /** Header font size in px */\n fontSize?: number | string;\n /** Horizontal padding for header cells (e.g. \"4px 10px\") */\n padding?: string;\n}\n\n/**\n * Configuration for the DataTable UI.\n * Pass partial overrides via the `config` prop to customize defaults.\n */\nexport interface DataTableConfig {\n /** Page size options for the pagination selector */\n pageSizeOptions: number[];\n /** Default page size when the table first loads */\n defaultPageSize: number;\n /** Placeholder for the search input */\n searchPlaceholder: string;\n /** Whether to show the search input */\n enableGlobalFilter: boolean;\n}\n\nexport const defaultDataTableConfig: DataTableConfig = {\n pageSizeOptions: [5, 10, 15, 20, 50],\n defaultPageSize: 10,\n searchPlaceholder: 'Buscar...',\n enableGlobalFilter: true,\n}\n","import {\n type ColumnFiltersState,\n type ColumnDef,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n defaultDataTableConfig,\n type DataTableConfig,\n type ServerTableState,\n} from '../interfaces/datatable.interface'\n\nexport interface UseDataTableOptions<TData> {\n data: TData[]\n columns: ColumnDef<TData, unknown>[]\n /** Override default config (look, labels, page sizes, etc.) */\n config?: Partial<DataTableConfig>\n /** Enable row selection (checkboxes). When true, selectedRows is returned */\n enableRowSelection?: boolean\n /** Total row count from server. Used to compute pageCount. */\n totalRowCount?: number\n /** Called when table state changes (filters, pagination, search, sort). Use for API calls. */\n onStateChange?: (state: ServerTableState) => void\n}\n\nexport interface UseDataTableReturn<TData> {\n /** TanStack Table instance: use for headers, rows, getRowModel(), etc. */\n table: ReturnType<typeof useReactTable<TData>>\n /** Current global search value (for SearchInput) */\n globalFilter: string\n /** Set global search (for SearchInput onChange) */\n setGlobalFilter: (value: string) => void\n /** Column filters state (for FilterSelect, FilterDate, etc.) */\n columnFilters: ColumnFiltersState\n /** Set column filter value for a specific column */\n setColumnFilter: (columnId: string, value: unknown) => void\n /** Current server table state (pageIndex, pageSize, filters, etc.) */\n serverState: ServerTableState\n /** Merged config (defaults + your overrides) */\n config: DataTableConfig\n /** Selected row data (only when enableRowSelection is true) */\n selectedRows: TData[]\n}\n\nexport function useDataTable<TData>({\n data,\n columns,\n config: configOverride,\n enableRowSelection = false,\n totalRowCount,\n onStateChange,\n}: UseDataTableOptions<TData>): UseDataTableReturn<TData> {\n const mergedConfig = useMemo<DataTableConfig>(\n () => ({ ...defaultDataTableConfig, ...configOverride }),\n [configOverride],\n )\n\n const [pagination, setPagination] = useState({\n pageIndex: 0,\n pageSize: mergedConfig.defaultPageSize,\n })\n const [sorting, setSorting] = useState<{ id: string; desc: boolean }[]>([])\n const [rowSelection, setRowSelection] = useState<Record<string, boolean>>({})\n const [globalFilter, setGlobalFilter] = useState('')\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n\n const setColumnFilter = useMemo(\n () => (columnId: string, value: unknown) => {\n setColumnFilters((prev) => {\n const rest = prev.filter((f) => f.id !== columnId)\n if (value === undefined || value === null || value === '') return rest\n return [...rest, { id: columnId, value }]\n })\n },\n [],\n )\n\n // Reset to page 0 when search or column filters change\n useEffect(() => {\n setPagination((prev) => ({ ...prev, pageIndex: 0 }))\n }, [globalFilter, columnFilters])\n\n const serverState: ServerTableState = useMemo(\n () => ({\n pageIndex: pagination.pageIndex,\n pageSize: pagination.pageSize,\n globalFilter,\n columnFilters,\n sorting,\n }),\n [pagination.pageIndex, pagination.pageSize, globalFilter, columnFilters, sorting],\n )\n\n useEffect(() => {\n onStateChange?.(serverState)\n }, [onStateChange, serverState])\n\n const table = useReactTable<TData>({\n data,\n columns,\n state: {\n pagination,\n sorting,\n rowSelection: enableRowSelection ? rowSelection : undefined,\n globalFilter,\n columnFilters,\n },\n onPaginationChange: setPagination,\n onSortingChange: setSorting,\n onRowSelectionChange: setRowSelection,\n onGlobalFilterChange: setGlobalFilter,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n enableRowSelection,\n manualPagination: true,\n manualFiltering: true,\n /** Sort is applied client-side to the current page only (no server refetch) */\n manualSorting: false,\n pageCount:\n totalRowCount != null\n ? Math.max(1, Math.ceil(totalRowCount / pagination.pageSize))\n : undefined,\n })\n\n const selectedRows = useMemo<TData[]>(\n () =>\n enableRowSelection\n ? table.getSelectedRowModel().rows.map((row) => row.original)\n : [],\n [enableRowSelection, rowSelection],\n )\n\n return {\n table,\n globalFilter,\n setGlobalFilter,\n columnFilters,\n setColumnFilter,\n serverState,\n config: mergedConfig,\n selectedRows,\n }\n}\n","import type {\n IBankTerminal,\n IBankTerminalResponse,\n IBankTerminalForm,\n BankTerminalQuery,\n BankTerminalResponse\n} from '../interfaces/bankTerminal.interface'\nimport { api } from './config'\n\nexport const getBankTerminalsForSelect = async (): Promise<BankTerminalResponse[]> => {\n const { data } = await api.get<BankTerminalResponse[]>('bank-terminals/bankTerminalsSelect')\n return data\n}\n\nexport const getAllBankTerminals = async (): Promise<BankTerminalResponse[]> => {\n const { data } = await api.get<BankTerminalResponse[]>('bank-terminals/')\n return data\n}\n\nexport const getBankTerminals = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: BankTerminalQuery): Promise<IBankTerminalResponse> => {\n const { data } = await api.get<IBankTerminalResponse>(\n `bank-terminals/bankTerminalsTable/?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\nexport const getBankTerminalById = async ({\n terminalId\n}: {\n terminalId: number\n}): Promise<IBankTerminal> => {\n const { data } = await api.get(`/bank-terminals/${terminalId}`)\n return data.data\n}\n\nexport const updateBankTerminal = async ({\n terminalId,\n terminal\n}: {\n terminalId: number\n terminal: IBankTerminalForm\n}): Promise<IBankTerminal> => {\n const { data } = await api.put<IBankTerminal>(`/bank-terminals/${terminalId}`, terminal)\n return data\n}\n\nexport const createBankTerminal = async ({\n terminal\n}: {\n terminal: IBankTerminalForm\n}): Promise<IBankTerminal> => {\n const { data } = await api.post<IBankTerminal>('bank-terminals/', terminal)\n return data\n}\n\nexport const deleteBankTerminal = async ({ terminalId }: { terminalId: number }): Promise<void> => {\n await api.delete(`/bank-terminals/${terminalId}`)\n}\n\nexport const restoreBankTerminal = async ({\n terminalId\n}: {\n terminalId: number\n}): Promise<void> => {\n await api.patch(`/bank-terminals/${terminalId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getBankTerminals,\n getBankTerminalById,\n getBankTerminalsForSelect,\n getAllBankTerminals,\n createBankTerminal,\n updateBankTerminal,\n deleteBankTerminal,\n restoreBankTerminal,\n} from \"../services/bankTerminal.service\";\nimport type {\n IBankTerminal,\n IBankTerminalForm,\n IBankTerminalResponse,\n} from \"../interfaces/bankTerminal.interface\";\nimport type { BankTerminalResponse } from \"../interfaces/bankTerminal.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst bankTerminalQueryKeys = {\n all: [\"bankTerminals\"] as const,\n lists: () => [...bankTerminalQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...bankTerminalQueryKeys.lists(), { filters: params }] as const,\n details: () => [...bankTerminalQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...bankTerminalQueryKeys.details(), id] as const,\n forSelect: () => [...bankTerminalQueryKeys.all, \"select\"] as const,\n allList: () => [...bankTerminalQueryKeys.all, \"all\"] as const,\n};\n\nexport const bankTerminals = {\n queries: {\n all: [\"bankTerminals\"] as const,\n getBankTerminals: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getBankTerminals({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: bankTerminalQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBankTerminalsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getBankTerminals({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: bankTerminalQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBankTerminalById: (id: number) =>\n queryOptions({\n queryFn: () => getBankTerminalById({ terminalId: id }),\n queryKey: bankTerminalQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getBankTerminalsForSelect: () =>\n queryOptions({\n queryFn: getBankTerminalsForSelect,\n queryKey: bankTerminalQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllBankTerminals: () =>\n queryOptions({\n queryFn: getAllBankTerminals,\n queryKey: bankTerminalQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBankTerminal, Error, { terminal: IBankTerminalForm }> => ({\n mutationFn: createBankTerminal,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.all });\n successNotification({\n title: \"Terminal creado\",\n message: \"El terminal se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el terminal.\",\n });\n },\n }),\n updateBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IBankTerminal,\n Error,\n { terminalId: number; terminal: IBankTerminalForm }\n > => ({\n mutationFn: updateBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n successNotification({\n title: \"Terminal actualizado\",\n message: \"El terminal se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el terminal.\",\n });\n },\n }),\n deleteBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { terminalId: number }> => ({\n mutationFn: deleteBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n successNotification({\n title: \"Terminal eliminado\",\n message: \"El terminal se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el terminal.\",\n });\n },\n }),\n restoreBankTerminal: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { terminalId: number }> => ({\n mutationFn: restoreBankTerminal,\n onSuccess: (_, { terminalId }) => {\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.detail(terminalId) });\n queryClient.invalidateQueries({ queryKey: bankTerminalQueryKeys.lists() });\n successNotification({\n title: \"Terminal restaurado\",\n message: \"El terminal se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el terminal.\",\n });\n },\n }),\n },\n};\n\nexport { bankTerminalQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n bankTerminals,\n bankTerminalQueryKeys,\n} from \"../queries/bankTerminal.queries\";\nimport type {\n IBankTerminal,\n IBankTerminalForm,\n IBankTerminalResponse,\n} from \"../interfaces/bankTerminal.interface\";\nimport type { BankTerminalResponse } from \"../interfaces/bankTerminal.interface\";\n\nexport const bankTerminalKeys = bankTerminalQueryKeys;\n\ninterface UseBankTerminalsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useBankTerminals = (\n params: UseBankTerminalsParams = {},\n options?: Omit<UseQueryOptions<IBankTerminalResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...bankTerminals.queries.getBankTerminals(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IBankTerminalResponse>);\n\nexport const useBankTerminalsTable = useBankTerminals;\n\nexport const useBankTerminal = (\n terminalId: number | undefined,\n options?: Omit<UseQueryOptions<IBankTerminal>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...bankTerminals.queries.getBankTerminalById(terminalId ?? 0),\n ...options,\n } as UseQueryOptions<IBankTerminal>);\n\nexport const useBankTerminalsForSelect = (\n options?: Omit<UseQueryOptions<BankTerminalResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...bankTerminals.queries.getBankTerminalsForSelect(),\n ...options,\n } as UseQueryOptions<BankTerminalResponse[]>);\n\nexport const useAllBankTerminals = (\n options?: Omit<UseQueryOptions<BankTerminalResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...bankTerminals.queries.getAllBankTerminals(),\n ...options,\n } as UseQueryOptions<BankTerminalResponse[]>);\n\nexport const useCreateBankTerminal = (\n options?: UseMutationOptions<\n IBankTerminal,\n Error,\n { terminal: IBankTerminalForm }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...bankTerminals.mutations.createBankTerminal(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateBankTerminal = (\n options?: UseMutationOptions<\n IBankTerminal,\n Error,\n { terminalId: number; terminal: IBankTerminalForm }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...bankTerminals.mutations.updateBankTerminal(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteBankTerminal = (\n options?: UseMutationOptions<void, Error, { terminalId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...bankTerminals.mutations.deleteBankTerminal(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreBankTerminal = (\n options?: UseMutationOptions<void, Error, { terminalId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...bankTerminals.mutations.restoreBankTerminal(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchBankTerminal = () => {\n const queryClient = useQueryClient();\n const prefetchBankTerminal = (terminalId: number) =>\n queryClient.prefetchQuery({\n ...bankTerminals.queries.getBankTerminalById(terminalId),\n });\n return { prefetchBankTerminal };\n};\n","import type { IBatch, IBatchResponse } from '../interfaces/batch.interface'\nimport { api } from './config'\n\ninterface BatchQuery {\n skip?: number\n limit?: number\n query?: string\n productId?: number\n}\n\nexport const getBatchesForSelect = async (): Promise<IBatch[]> => {\n const { data } = await api.get<IBatch[]>('batch/batches-for-select')\n return data\n}\n\nexport const getBatches = async ({\n skip = 0,\n limit = 10,\n query = '',\n productId = 0\n}: BatchQuery): Promise<IBatchResponse> => {\n const { data } = await api.get<IBatchResponse>(\n `batch?skip=${skip}&limit=${limit}&query=${query}&productID=${productId}`\n )\n return data\n}\n\nexport const createBatch = async (batch: FormData): Promise<IBatch> => {\n const { data } = await api.post<IBatch>('batch/', batch)\n return data\n}\n\nexport const createBatchAndUpdateOtherBatches = async (batch: FormData): Promise<IBatch> => {\n const { data } = await api.post<IBatch>('batch/create-batch-and-update-other-batches', batch)\n return data\n}\n\nexport const getBatchById = async (batchId: number): Promise<IBatch> => {\n const { data } = await api.get<IBatch>(`batch/${batchId}`)\n return data\n}\n\nexport const getMatchedBatches = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<IBatch[]> => {\n const { data } = await api.get<IBatch[]>(\n `batch/matched-batches?productDetailID=${productDetailId}`\n )\n return data\n}\n\nexport interface UpdateBatchData {\n unitCost?: number\n unitSellingPrice?: number\n profitPercentage?: number\n}\n\nexport const updateBatch = async ({\n batchId,\n batchData\n}: {\n batchId: number\n batchData: UpdateBatchData\n}): Promise<IBatch> => {\n const { data } = await api.put<IBatch>(`batch/${batchId}`, batchData)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getBatches,\n getBatchById,\n getBatchesForSelect,\n getMatchedBatches,\n createBatch,\n createBatchAndUpdateOtherBatches,\n updateBatch,\n type UpdateBatchData,\n} from \"../services/batch.service\";\nimport type { IBatch, IBatchResponse } from \"../interfaces/batch.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst batchQueryKeys = {\n all: [\"batches\"] as const,\n lists: () => [...batchQueryKeys.all, \"list\"] as const,\n list: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n productId?: number;\n }) => [...batchQueryKeys.lists(), { filters: params }] as const,\n detail: (batchId: number) =>\n [...batchQueryKeys.all, \"detail\", batchId] as const,\n forSelect: () => [...batchQueryKeys.all, \"select\"] as const,\n matched: (productDetailId: number) =>\n [...batchQueryKeys.all, \"matched\", productDetailId] as const,\n};\n\nexport const batches = {\n queries: {\n all: [\"batches\"] as const,\n getBatches: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n productId?: number;\n }) =>\n queryOptions({\n queryFn: () =>\n getBatches({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n productId: params.productId,\n }),\n queryKey: batchQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBatchById: (batchId: number) =>\n queryOptions({\n queryFn: () => getBatchById(batchId),\n queryKey: batchQueryKeys.detail(batchId),\n enabled: !!batchId && batchId > 0,\n staleTime: 30_000,\n }),\n getBatchesForTable: (params: TableQueryParams & { productId?: number }) =>\n queryOptions({\n queryFn: () =>\n getBatches({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n productId: params.productId,\n }),\n queryKey: batchQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getBatchesForSelect: () =>\n queryOptions({\n queryFn: getBatchesForSelect,\n queryKey: batchQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getMatchedBatches: (productDetailId: number) =>\n queryOptions({\n queryFn: () => getMatchedBatches({ productDetailId }),\n queryKey: batchQueryKeys.matched(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, FormData> => ({\n mutationFn: createBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote creado\",\n message: \"El lote se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el lote.\",\n });\n },\n }),\n createBatchAndUpdateOtherBatches: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, FormData> => ({\n mutationFn: createBatchAndUpdateOtherBatches,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote creado\",\n message: \"El lote se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el lote.\",\n });\n },\n }),\n updateBatch: (\n queryClient: QueryClient,\n ): UseMutationOptions<IBatch, Error, { batchId: number; batchData: UpdateBatchData }> => ({\n mutationFn: updateBatch,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: batchQueryKeys.all });\n successNotification({\n title: \"Lote actualizado\",\n message: \"El lote se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el lote.\",\n });\n },\n }),\n },\n};\n\nexport { batchQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { batches, batchQueryKeys } from \"../queries/batch.queries\";\nimport type { IBatch, IBatchResponse } from \"../interfaces/batch.interface\";\nimport type { UpdateBatchData } from \"../services/batch.service\";\n\nexport const batchKeys = batchQueryKeys;\n\ninterface UseBatchesParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n productId?: number;\n}\n\nexport const useBatches = (\n params: UseBatchesParams = {},\n options?: Omit<UseQueryOptions<IBatchResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...batches.queries.getBatches(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IBatchResponse>);\n\nexport const useBatchesTable = useBatches;\n\nexport const useBatchById = (\n batchId: number | undefined,\n options?: Omit<UseQueryOptions<IBatch>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...batches.queries.getBatchById(batchId ?? 0),\n ...options,\n } as UseQueryOptions<IBatch>);\n\nexport const useBatchesForSelect = (\n options?: Omit<UseQueryOptions<IBatch[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...batches.queries.getBatchesForSelect(),\n ...options,\n } as UseQueryOptions<IBatch[]>);\n\nexport const useMatchedBatches = (\n productDetailId: number | undefined,\n options?: Omit<UseQueryOptions<IBatch[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...batches.queries.getMatchedBatches(productDetailId ?? 0),\n ...options,\n } as UseQueryOptions<IBatch[]>);\n\nexport const useCreateBatch = (\n options?: UseMutationOptions<IBatch, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...batches.mutations.createBatch(queryClient),\n ...options,\n });\n};\n\nexport const useCreateBatchAndUpdateOtherBatches = (\n options?: UseMutationOptions<IBatch, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...batches.mutations.createBatchAndUpdateOtherBatches(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateBatch = (\n options?: UseMutationOptions<\n IBatch,\n Error,\n { batchId: number; batchData: UpdateBatchData }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...batches.mutations.updateBatch(queryClient),\n ...options,\n });\n};\n","import type {\n ICategory,\n ICategoryResponse,\n} from '../interfaces/category.interface'\nimport { api } from './config'\n\ninterface CategoryQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getCategoriesForSelect = async (): Promise<ICategory[]> => {\n const { data } = await api.get<ICategory[]>('category/categoriesSelect')\n return data\n}\n\nexport const getAllCategories = async (): Promise<ICategory[]> => {\n const { data } = await api.get<ICategory[]>('category/')\n return data\n}\n\nexport const getCategories = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: CategoryQuery): Promise<ICategoryResponse> => {\n const { data } = await api.get<ICategoryResponse>(\n `category/categoriesTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\nexport const getCategoryById = async ({\n categoryId\n}: {\n categoryId: number\n}): Promise<ICategory> => {\n const { data } = await api.get(`/category/${categoryId}`)\n return data.data\n}\n\nexport const updateCategory = async ({\n categoryId,\n category\n}: {\n categoryId: number\n category: ICategory\n}): Promise<ICategory> => {\n const { data } = await api.put<ICategory>(`/category/${categoryId}`, category)\n return data\n}\n\nexport const createCategory = async ({ category }: { category: ICategory }): Promise<ICategory> => {\n const { data } = await api.post<ICategory>('category/', category)\n return data\n}\n\nexport const deleteCategory = async ({ categoryId }: { categoryId: number }): Promise<void> => {\n await api.delete(`/category/${categoryId}`)\n}\n\nexport const restoreCategory = async ({ categoryId }: { categoryId: number }): Promise<void> => {\n await api.patch(`/category/${categoryId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getCategories,\n getCategoryById,\n getCategoriesForSelect,\n getAllCategories,\n createCategory,\n updateCategory,\n deleteCategory,\n restoreCategory,\n} from \"../services/category.service\";\nimport type {\n ICategory,\n ICategoryResponse,\n} from \"../interfaces/category.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst categoryQueryKeys = {\n all: [\"categories\"] as const,\n lists: () => [...categoryQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...categoryQueryKeys.lists(), { filters: params }] as const,\n details: () => [...categoryQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...categoryQueryKeys.details(), id] as const,\n forSelect: () => [...categoryQueryKeys.all, \"select\"] as const,\n allList: () => [...categoryQueryKeys.all, \"all\"] as const,\n};\n\nexport const categories = {\n queries: {\n all: [\"categories\"] as const,\n getCategories: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n }) =>\n queryOptions({\n queryFn: () =>\n getCategories({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: categoryQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getCategoriesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getCategories({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: categoryQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getCategoryById: (id: number) =>\n queryOptions({\n queryFn: () => getCategoryById({ categoryId: id }),\n queryKey: categoryQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getCategoriesForSelect: () =>\n queryOptions({\n queryFn: getCategoriesForSelect,\n queryKey: categoryQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllCategories: () =>\n queryOptions({\n queryFn: getAllCategories,\n queryKey: categoryQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<ICategory, Error, { category: ICategory }> => ({\n mutationFn: createCategory,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.all });\n successNotification({\n title: \"Categoría creada\",\n message: \"La categoría se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la categoría.\",\n });\n },\n }),\n\n updateCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n ICategory,\n Error,\n { categoryId: number; category: ICategory }\n > => ({\n mutationFn: updateCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n successNotification({\n title: \"Categoría actualizada\",\n message: \"La categoría se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la categoría.\",\n });\n },\n }),\n\n deleteCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { categoryId: number }> => ({\n mutationFn: deleteCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n successNotification({\n title: \"Categoría eliminada\",\n message: \"La categoría se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la categoría.\",\n });\n },\n }),\n\n restoreCategory: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { categoryId: number }> => ({\n mutationFn: restoreCategory,\n onSuccess: (_, { categoryId }) => {\n queryClient.invalidateQueries({\n queryKey: categoryQueryKeys.detail(categoryId),\n });\n queryClient.invalidateQueries({ queryKey: categoryQueryKeys.lists() });\n successNotification({\n title: \"Categoría restaurada\",\n message: \"La categoría se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la categoría.\",\n });\n },\n }),\n },\n};\n\nexport { categoryQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n categories,\n categoryQueryKeys,\n} from \"../queries/category.queries\";\nimport type { ICategory, ICategoryResponse } from \"../interfaces/category.interface\";\n\n// Re-export query keys for backward compatibility\nexport const categoryKeys = categoryQueryKeys;\n\ninterface UseCategoriesParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useCategories = (\n params: UseCategoriesParams = {},\n options?: Omit<\n UseQueryOptions<ICategoryResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) => {\n const { skip = 0, limit = 10, query = \"\" } = params;\n return useQuery({\n ...categories.queries.getCategories({ skip, limit, query }),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<ICategoryResponse>);\n};\n\n/** Alias for useCategories - paginated list for tables */\nexport const useCategoriesTable = useCategories;\n\nexport const useCategory = (\n categoryId: number | undefined,\n options?: Omit<UseQueryOptions<ICategory>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...categories.queries.getCategoryById(categoryId ?? 0),\n ...options,\n } as UseQueryOptions<ICategory>);\n\nexport const useCategoriesForSelect = (\n options?: Omit<UseQueryOptions<ICategory[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...categories.queries.getCategoriesForSelect(),\n ...options,\n } as UseQueryOptions<ICategory[]>);\n\nexport const useAllCategories = (\n options?: Omit<UseQueryOptions<ICategory[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...categories.queries.getAllCategories(),\n ...options,\n } as UseQueryOptions<ICategory[]>);\n\nexport const useCreateCategory = (\n options?: UseMutationOptions<ICategory, Error, { category: ICategory }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...categories.mutations.createCategory(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateCategory = (\n options?: UseMutationOptions<\n ICategory,\n Error,\n { categoryId: number; category: ICategory }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...categories.mutations.updateCategory(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteCategory = (\n options?: UseMutationOptions<void, Error, { categoryId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...categories.mutations.deleteCategory(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreCategory = (\n options?: UseMutationOptions<void, Error, { categoryId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...categories.mutations.restoreCategory(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchCategory = () => {\n const queryClient = useQueryClient();\n const prefetchCategory = (categoryId: number) =>\n queryClient.prefetchQuery({\n ...categories.queries.getCategoryById(categoryId),\n });\n return { prefetchCategory };\n};\n","import type {\n IClient,\n IClientRequest,\n IClientResponse,\n IClientResponseById\n} from '../interfaces/client.interface'\nimport { api } from './config'\n\nexport const getAllClients = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: {\n skip: number\n limit: number\n query?: string\n}): Promise<IClientResponse> => {\n const { data } = await api.get<IClientResponse>(\n `client/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getClientsForSelect = async (): Promise<IClient[]> => {\n const { data } = await api.get<IClient[]>('client/select')\n return data\n}\n\nexport const getClientById = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponseById> => {\n const { data } = await api.get<IClientResponseById>(`client/${clientId}`)\n return data\n}\n\nexport const createClient = async (client: IClientRequest): Promise<IClientResponse> => {\n const { data } = await api.post<IClientResponse>('client/', client)\n return data\n}\n\nexport const updateClient = async ({\n client,\n id\n}: {\n id: string\n client: IClient\n}): Promise<IClientResponse> => {\n const { data } = await api.put<IClientResponse>(`client/${id}`, client)\n return data\n}\n\nexport const deleteClient = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponse> => {\n const { data } = await api.delete<IClientResponse>(`client/${clientId}`)\n return data\n}\n\nexport const restoreClient = async ({\n clientId\n}: {\n clientId: number\n}): Promise<IClientResponse> => {\n const { data } = await api.patch<IClientResponse>(`client/${clientId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllClients,\n getClientById,\n getClientsForSelect,\n createClient,\n updateClient,\n deleteClient,\n restoreClient,\n} from \"../services/client.service\";\nimport type {\n IClient,\n IClientRequest,\n IClientResponse,\n IClientResponseById,\n} from \"../interfaces/client.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst clientQueryKeys = {\n all: [\"clients\"] as const,\n lists: () => [...clientQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...clientQueryKeys.lists(), { filters: params }] as const,\n details: () => [...clientQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...clientQueryKeys.details(), id] as const,\n forSelect: () => [...clientQueryKeys.all, \"select\"] as const,\n};\n\nexport const clients = {\n queries: {\n all: [\"clients\"] as const,\n getClients: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllClients({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: clientQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getClientsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllClients({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: clientQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getClientById: (id: number) =>\n queryOptions({\n queryFn: () => getClientById({ clientId: id }),\n queryKey: clientQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getClientsForSelect: () =>\n queryOptions({\n queryFn: getClientsForSelect,\n queryKey: clientQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, IClientRequest> => ({\n mutationFn: createClient,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.all });\n successNotification({\n title: \"Cliente creado\",\n message: \"El cliente se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el cliente.\",\n });\n },\n }),\n updateClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { id: string; client: IClient }> => ({\n mutationFn: updateClient,\n onSuccess: (_, { id }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.details() });\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n successNotification({\n title: \"Cliente actualizado\",\n message: \"El cliente se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el cliente.\",\n });\n },\n }),\n deleteClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { clientId: number }> => ({\n mutationFn: deleteClient,\n onSuccess: (_, { clientId }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: clientQueryKeys.detail(clientId) });\n successNotification({\n title: \"Cliente eliminado\",\n message: \"El cliente se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el cliente.\",\n });\n },\n }),\n restoreClient: (\n queryClient: QueryClient,\n ): UseMutationOptions<IClientResponse, Error, { clientId: number }> => ({\n mutationFn: restoreClient,\n onSuccess: (_, { clientId }) => {\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.detail(clientId) });\n queryClient.invalidateQueries({ queryKey: clientQueryKeys.lists() });\n successNotification({\n title: \"Cliente restaurado\",\n message: \"El cliente se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el cliente.\",\n });\n },\n }),\n },\n};\n\nexport { clientQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { clients, clientQueryKeys } from \"../queries/client.queries\";\nimport type {\n IClient,\n IClientRequest,\n IClientResponse,\n IClientResponseById,\n} from \"../interfaces/client.interface\";\n\nexport const clientKeys = clientQueryKeys;\n\ninterface UseClientsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useClients = (\n params: UseClientsParams = {},\n options?: Omit<UseQueryOptions<IClientResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...clients.queries.getClients(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IClientResponse>);\n\nexport const useClientsTable = useClients;\n\nexport const useClient = (\n clientId: number | undefined,\n options?: Omit<UseQueryOptions<IClientResponseById>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...clients.queries.getClientById(clientId ?? 0),\n ...options,\n } as UseQueryOptions<IClientResponseById>);\n\nexport const useClientsForSelect = (\n options?: Omit<UseQueryOptions<IClient[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...clients.queries.getClientsForSelect(),\n ...options,\n } as UseQueryOptions<IClient[]>);\n\nexport const useCreateClient = (\n options?: UseMutationOptions<IClientResponse, Error, IClientRequest>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...clients.mutations.createClient(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateClient = (\n options?: UseMutationOptions<\n IClientResponse,\n Error,\n { id: string; client: IClient }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...clients.mutations.updateClient(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteClient = (\n options?: UseMutationOptions<IClientResponse, Error, { clientId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...clients.mutations.deleteClient(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreClient = (\n options?: UseMutationOptions<IClientResponse, Error, { clientId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...clients.mutations.restoreClient(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchClient = () => {\n const queryClient = useQueryClient();\n const prefetchClient = (clientId: number) =>\n queryClient.prefetchQuery({\n ...clients.queries.getClientById(clientId),\n });\n return { prefetchClient };\n};\n","import { api } from './config'\n\ninterface ExchangeQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface IExchange {\n exchangeRateID: number\n valorEnPesos: number\n fromDate: string\n toDate: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport interface PaymentType {\n value: number\n label: string\n}\n\nexport interface IExchangeResponse {\n total: number\n data: IExchange[]\n skip: number\n limit: number\n}\n\nexport const getPaymentTypes = async (): Promise<PaymentType[]> => {\n const { data } = await api.get<PaymentType[]>('exchange/getPaymentTypes')\n return data\n}\n\nexport const getExchangeRates = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: ExchangeQuery): Promise<IExchangeResponse> => {\n const { data } = await api.get<IExchangeResponse>(\n `exchange/exchangesTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n\n return data\n}\n\n//obtener el exchange rate mediante fehca y hora\nexport const getExchangeRate = async (): Promise<IExchange> => {\n const { data } = await api.get<IExchange>('exchange/getExchangeRate')\n return data\n}\n\nexport const createExchangeRate = async ({\n exchangeRate\n}: {\n exchangeRate: IExchange\n}): Promise<IExchange> => {\n const { data } = await api.post<IExchange>('exchange/', exchangeRate)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getExchangeRates,\n getExchangeRate,\n getPaymentTypes,\n createExchangeRate,\n} from \"../services/exchange.service\";\nimport type {\n IExchange,\n IExchangeResponse,\n PaymentType,\n} from \"../services/exchange.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst exchangeQueryKeys = {\n all: [\"exchange\"] as const,\n lists: () => [...exchangeQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...exchangeQueryKeys.lists(), { filters: params }] as const,\n rate: () => [...exchangeQueryKeys.all, \"rate\"] as const,\n paymentTypes: () => [...exchangeQueryKeys.all, \"paymentTypes\"] as const,\n};\n\nexport const exchange = {\n queries: {\n all: [\"exchange\"] as const,\n getExchangeRates: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getExchangeRates({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: exchangeQueryKeys.list(params),\n staleTime: 5 * 60 * 1000,\n }),\n getExchangeRate: () =>\n queryOptions({\n queryFn: getExchangeRate,\n queryKey: exchangeQueryKeys.rate(),\n staleTime: 60 * 1000,\n }),\n getPaymentTypes: () =>\n queryOptions({\n queryFn: getPaymentTypes,\n queryKey: exchangeQueryKeys.paymentTypes(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createExchangeRate: (\n queryClient: QueryClient,\n ): UseMutationOptions<IExchange, Error, { exchangeRate: IExchange }> => ({\n mutationFn: createExchangeRate,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: exchangeQueryKeys.all });\n successNotification({\n title: \"Tasa de cambio creada\",\n message: \"La tasa de cambio se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la tasa de cambio.\",\n });\n },\n }),\n },\n};\n\nexport { exchangeQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { exchange, exchangeQueryKeys } from \"../queries/exchange.queries\";\nimport type {\n IExchange,\n IExchangeResponse,\n PaymentType,\n} from \"../services/exchange.service\";\n\nexport const exchangeKeys = exchangeQueryKeys;\n\ninterface UseExchangeRatesParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useExchangeRates = (\n params: UseExchangeRatesParams = {},\n options?: Omit<UseQueryOptions<IExchangeResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...exchange.queries.getExchangeRates(params),\n ...options,\n } as UseQueryOptions<IExchangeResponse>);\n\nexport const useExchangeRatesTable = useExchangeRates;\n\nexport const useExchangeRate = (\n options?: Omit<UseQueryOptions<IExchange>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...exchange.queries.getExchangeRate(),\n ...options,\n } as UseQueryOptions<IExchange>);\n\nexport const usePaymentTypes = (\n options?: Omit<UseQueryOptions<PaymentType[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...exchange.queries.getPaymentTypes(),\n ...options,\n } as UseQueryOptions<PaymentType[]>);\n\nexport const useCreateExchangeRate = (\n options?: UseMutationOptions<IExchange, Error, { exchangeRate: IExchange }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...exchange.mutations.createExchangeRate(queryClient),\n ...options,\n });\n};\n","import { api } from './config'\n\nexport interface FolioResponse {\n folioID: number\n folioType: string\n lastFolioUsed: number\n nextFolioToUse: number\n nextBatchWithFolioToUse: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getNextFolioToUseInBatches = async (): Promise<FolioResponse> => {\n const { data } = await api.get<FolioResponse>('folio/nextFolioToUseInBatches')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getNextFolioToUseInBatches } from \"../services/folio.service\";\nimport type { FolioResponse } from \"../services/folio.service\";\n\nconst folioQueryKeys = {\n all: [\"folio\"] as const,\n nextForBatches: () => [...folioQueryKeys.all, \"nextForBatches\"] as const,\n};\n\nexport const folios = {\n queries: {\n all: [\"folio\"] as const,\n getNextFolioToUseInBatches: () =>\n queryOptions({\n queryFn: getNextFolioToUseInBatches,\n queryKey: folioQueryKeys.nextForBatches(),\n staleTime: 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { folioQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { folios, folioQueryKeys } from \"../queries/folio.queries\";\nimport type { FolioResponse } from \"../services/folio.service\";\n\nexport const folioKeys = folioQueryKeys;\n\nexport const useNextFolioToUseInBatches = (\n options?: Omit<UseQueryOptions<FolioResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...folios.queries.getNextFolioToUseInBatches(),\n ...options,\n } as UseQueryOptions<FolioResponse>);\n","import type { IGender } from '../interfaces/gender.interface'\nimport { api } from './config'\n\ninterface GenderResponse {\n data: IGender[]\n}\n\nexport const getAllGenders = async (): Promise<GenderResponse> => {\n const { data } = await api.get('gender/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllGenders } from \"../services/gender.service\";\nimport type { IGender } from \"../interfaces/gender.interface\";\n\nexport interface GenderResponse {\n data: IGender[];\n}\n\nconst genderQueryKeys = {\n all: [\"genders\"] as const,\n};\n\nexport const genders = {\n queries: {\n all: [\"genders\"] as const,\n getAllGenders: () =>\n queryOptions({\n queryFn: (): Promise<GenderResponse> => getAllGenders(),\n queryKey: genderQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { genderQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport {\n genders,\n genderQueryKeys,\n type GenderResponse,\n} from \"../queries/gender.queries\";\n\nexport const genderKeys = genderQueryKeys;\n\nexport const useAllGenders = (\n options?: Omit<UseQueryOptions<GenderResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...genders.queries.getAllGenders(),\n ...options,\n } as UseQueryOptions<GenderResponse>);\n","import { api } from './config'\n\ninterface HealthCheckResponse {\n status: string\n timestamp: string\n services: {\n backend: {\n status: string\n message?: string\n }\n database: {\n status: string\n message?: string\n }\n }\n}\n\nconst HEALTH_CHECK_TIMEOUT_MS = 10000\n\nexport const healthService = {\n async check(): Promise<HealthCheckResponse> {\n try {\n const response = await api.get<HealthCheckResponse>('/api/health', {\n timeout: HEALTH_CHECK_TIMEOUT_MS\n })\n return response.data\n } catch (error) {\n const isTimeoutError =\n error instanceof Error &&\n (error.message.includes('timeout') || error.message.includes('Network Error'))\n\n return {\n status: 'error',\n timestamp: new Date().toISOString(),\n services: {\n backend: {\n status: 'error',\n message: isTimeoutError\n ? 'No se pudo conectar con el backend. Verifica que el servidor esté corriendo y la URL configurada.'\n : error instanceof Error\n ? error.message\n : 'Error de conexión con el backend'\n },\n database: {\n status: 'unknown',\n message: 'No se puede verificar la base de datos porque el backend no responde'\n }\n }\n }\n }\n }\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { healthService } from \"../services/health.service\";\n\nexport interface HealthCheckResponse {\n status: string;\n timestamp: string;\n services: {\n backend: { status: string; message?: string };\n database: { status: string; message?: string };\n };\n}\n\nconst healthQueryKeys = {\n all: [\"health\"] as const,\n check: () => [...healthQueryKeys.all, \"check\"] as const,\n};\n\nexport const health = {\n queries: {\n all: [\"health\"] as const,\n check: () =>\n queryOptions({\n queryFn: (): Promise<HealthCheckResponse> => healthService.check(),\n queryKey: healthQueryKeys.check(),\n staleTime: 30 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { healthQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { health, healthQueryKeys } from \"../queries/health.queries\";\nimport type { HealthCheckResponse } from \"../queries/health.queries\";\n\nexport const healthKeys = healthQueryKeys;\n\nexport const useHealthCheck = (\n options?: Omit<\n UseQueryOptions<HealthCheckResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...health.queries.check(),\n ...options,\n } as UseQueryOptions<HealthCheckResponse>);\n","import type { ILocation, ILocationResponse } from '../interfaces/location.interface'\nimport { api } from './config'\n\ninterface LocationQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface LocationResponse {\n physicalLocationID: number\n name: string\n addressID: number\n isOpen: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getAllLocations = async (): Promise<LocationResponse[]> => {\n const { data } = await api.get<LocationResponse[]>('location/')\n return data\n}\n\nexport const getLocationsForSelect = async (): Promise<LocationResponse[]> => {\n const { data } = await api.get<LocationResponse[]>('location/locationsForSelect')\n return data\n}\n\nexport const getLocations = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: LocationQuery): Promise<ILocationResponse> => {\n const { data } = await api.get<ILocationResponse>(\n `location/locations?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getLocationById = async ({\n locationId\n}: {\n locationId: number\n}): Promise<ILocation> => {\n const { data } = await api.get(`/location/${locationId}`)\n return data.data\n}\n\nexport const updateLocation = async ({\n locationId,\n location\n}: {\n locationId: number\n location: FormData\n}): Promise<ILocation> => {\n const { data } = await api.put<ILocation>(`/location/${locationId}`, location, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createLocation = async (location: FormData): Promise<ILocation> => {\n const { data } = await api.post<ILocation>('location/', location, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteLocation = async ({\n physicalLocationId\n}: {\n physicalLocationId: number\n}): Promise<void> => {\n await api.delete(`/location/${physicalLocationId}`)\n}\n\nexport const restoreLocation = async ({\n physicalLocationId\n}: {\n physicalLocationId: number\n}): Promise<void> => {\n await api.patch(`/location/${physicalLocationId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getLocations,\n getLocationById,\n getLocationsForSelect,\n getAllLocations,\n createLocation,\n updateLocation,\n deleteLocation,\n restoreLocation,\n} from \"../services/location.service\";\nimport type { ILocation, ILocationResponse } from \"../interfaces/location.interface\";\nimport type { LocationResponse } from \"../services/location.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst locationQueryKeys = {\n all: [\"locations\"] as const,\n lists: () => [...locationQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...locationQueryKeys.lists(), { filters: params }] as const,\n details: () => [...locationQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...locationQueryKeys.details(), id] as const,\n forSelect: () => [...locationQueryKeys.all, \"select\"] as const,\n allList: () => [...locationQueryKeys.all, \"all\"] as const,\n};\n\nexport const locations = {\n queries: {\n all: [\"locations\"] as const,\n getLocations: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getLocations({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: locationQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getLocationsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getLocations({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: locationQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getLocationById: (id: number) =>\n queryOptions({\n queryFn: () => getLocationById({ locationId: id }),\n queryKey: locationQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getLocationsForSelect: () =>\n queryOptions({\n queryFn: getLocationsForSelect,\n queryKey: locationQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllLocations: () =>\n queryOptions({\n queryFn: getAllLocations,\n queryKey: locationQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<ILocation, Error, FormData> => ({\n mutationFn: createLocation,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.all });\n successNotification({\n title: \"Ubicación creada\",\n message: \"La ubicación se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la ubicación.\",\n });\n },\n }),\n updateLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n ILocation,\n Error,\n { locationId: number; location: FormData }\n > => ({\n mutationFn: updateLocation,\n onSuccess: (_, { locationId }) => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.detail(locationId) });\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n successNotification({\n title: \"Ubicación actualizada\",\n message: \"La ubicación se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la ubicación.\",\n });\n },\n }),\n deleteLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { physicalLocationId: number }> => ({\n mutationFn: deleteLocation,\n onSuccess: (_, { physicalLocationId }) => {\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: locationQueryKeys.detail(physicalLocationId),\n });\n successNotification({\n title: \"Ubicación eliminada\",\n message: \"La ubicación se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la ubicación.\",\n });\n },\n }),\n restoreLocation: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { physicalLocationId: number }> => ({\n mutationFn: restoreLocation,\n onSuccess: (_, { physicalLocationId }) => {\n queryClient.invalidateQueries({\n queryKey: locationQueryKeys.detail(physicalLocationId),\n });\n queryClient.invalidateQueries({ queryKey: locationQueryKeys.lists() });\n successNotification({\n title: \"Ubicación restaurada\",\n message: \"La ubicación se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la ubicación.\",\n });\n },\n }),\n },\n};\n\nexport { locationQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { locations, locationQueryKeys } from \"../queries/location.queries\";\nimport type { ILocation, ILocationResponse } from \"../interfaces/location.interface\";\nimport type { LocationResponse } from \"../services/location.service\";\n\nexport const locationKeys = locationQueryKeys;\n\ninterface UseLocationsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useLocations = (\n params: UseLocationsParams = {},\n options?: Omit<UseQueryOptions<ILocationResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...locations.queries.getLocations(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<ILocationResponse>);\n\nexport const useLocationsTable = useLocations;\n\nexport const useLocation = (\n locationId: number | undefined,\n options?: Omit<UseQueryOptions<ILocation>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...locations.queries.getLocationById(locationId ?? 0),\n ...options,\n } as UseQueryOptions<ILocation>);\n\nexport const useLocationsForSelect = (\n options?: Omit<UseQueryOptions<LocationResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...locations.queries.getLocationsForSelect(),\n ...options,\n } as UseQueryOptions<LocationResponse[]>);\n\nexport const useAllLocations = (\n options?: Omit<UseQueryOptions<LocationResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...locations.queries.getAllLocations(),\n ...options,\n } as UseQueryOptions<LocationResponse[]>);\n\nexport const useCreateLocation = (\n options?: UseMutationOptions<ILocation, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...locations.mutations.createLocation(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateLocation = (\n options?: UseMutationOptions<\n ILocation,\n Error,\n { locationId: number; location: FormData }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...locations.mutations.updateLocation(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteLocation = (\n options?: UseMutationOptions<void, Error, { physicalLocationId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...locations.mutations.deleteLocation(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreLocation = (\n options?: UseMutationOptions<void, Error, { physicalLocationId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...locations.mutations.restoreLocation(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchLocation = () => {\n const queryClient = useQueryClient();\n const prefetchLocation = (locationId: number) =>\n queryClient.prefetchQuery({\n ...locations.queries.getLocationById(locationId),\n });\n return { prefetchLocation };\n};\n","import type { IMaterial } from '../interfaces/material.interface'\nimport { api } from './config'\n\nexport interface MaterialResponse {\n data: IMaterial[]\n total: number\n skip: number\n limit: number\n}\n\ninterface MaterialQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getAllMaterials = async (): Promise<IMaterial[]> => {\n const { data } = await api.get<IMaterial[]>('material/')\n return data\n}\n\nexport const getMaterials = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: MaterialQuery): Promise<MaterialResponse> => {\n const { data } = await api.get<MaterialResponse>(\n `material/materialsTable?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getMaterialById = async ({\n materialId\n}: {\n materialId: number\n}): Promise<IMaterial> => {\n const { data } = await api.get(`material/${materialId}`)\n return data.data\n}\n\nexport const getMaterialsForSelect = async (): Promise<IMaterial[]> => {\n const { data } = await api.get<IMaterial[]>('material/select')\n return data\n}\n\nexport const createMaterial = async ({ material }: { material: IMaterial }): Promise<IMaterial> => {\n const { data } = await api.post<IMaterial>('material/', material)\n return data\n}\n\nexport const updateMaterial = async ({\n materialId,\n material\n}: {\n materialId: number\n material: IMaterial\n}): Promise<IMaterial> => {\n const { data } = await api.put<IMaterial>(`material/${materialId}`, material)\n return data\n}\n\nexport const deleteMaterial = async ({ materialId }: { materialId: number }): Promise<void> => {\n await api.delete(`material/${materialId}`)\n}\nexport const undeleteMaterial = async ({ materialId }: { materialId: number }): Promise<void> => {\n await api.patch(`material/${materialId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getMaterials,\n getMaterialById,\n getMaterialsForSelect,\n getAllMaterials,\n createMaterial,\n updateMaterial,\n deleteMaterial,\n undeleteMaterial,\n} from \"../services/material.service\";\nimport type { IMaterial } from \"../interfaces/material.interface\";\nimport type { MaterialResponse } from \"../services/material.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst materialQueryKeys = {\n all: [\"materials\"] as const,\n lists: () => [...materialQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...materialQueryKeys.lists(), { filters: params }] as const,\n details: () => [...materialQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...materialQueryKeys.details(), id] as const,\n forSelect: () => [...materialQueryKeys.all, \"select\"] as const,\n allList: () => [...materialQueryKeys.all, \"all\"] as const,\n};\n\nexport const materials = {\n queries: {\n all: [\"materials\"] as const,\n getMaterials: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getMaterials({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: materialQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMaterialsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getMaterials({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: materialQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMaterialById: (id: number) =>\n queryOptions({\n queryFn: () => getMaterialById({ materialId: id }),\n queryKey: materialQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getMaterialsForSelect: () =>\n queryOptions({\n queryFn: getMaterialsForSelect,\n queryKey: materialQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getAllMaterials: () =>\n queryOptions({\n queryFn: getAllMaterials,\n queryKey: materialQueryKeys.allList(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<IMaterial, Error, { material: IMaterial }> => ({\n mutationFn: createMaterial,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.all });\n successNotification({\n title: \"Material creado\",\n message: \"El material se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el material.\",\n });\n },\n }),\n updateMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<IMaterial, Error, { materialId: number; material: IMaterial }> => ({\n mutationFn: updateMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.detail(materialId) });\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n successNotification({\n title: \"Material actualizado\",\n message: \"El material se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el material.\",\n });\n },\n }),\n deleteMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { materialId: number }> => ({\n mutationFn: deleteMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: materialQueryKeys.detail(materialId) });\n successNotification({\n title: \"Material eliminado\",\n message: \"El material se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el material.\",\n });\n },\n }),\n undeleteMaterial: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { materialId: number }> => ({\n mutationFn: undeleteMaterial,\n onSuccess: (_, { materialId }) => {\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.detail(materialId) });\n queryClient.invalidateQueries({ queryKey: materialQueryKeys.lists() });\n successNotification({\n title: \"Material restaurado\",\n message: \"El material se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el material.\",\n });\n },\n }),\n },\n};\n\nexport { materialQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { materials, materialQueryKeys } from \"../queries/material.queries\";\nimport type { IMaterial } from \"../interfaces/material.interface\";\nimport type { MaterialResponse } from \"../services/material.service\";\n\nexport const materialKeys = materialQueryKeys;\n\ninterface UseMaterialsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useMaterials = (\n params: UseMaterialsParams = {},\n options?: Omit<UseQueryOptions<MaterialResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...materials.queries.getMaterials(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<MaterialResponse>);\n\nexport const useMaterialsTable = useMaterials;\n\nexport const useMaterial = (\n materialId: number | undefined,\n options?: Omit<UseQueryOptions<IMaterial>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...materials.queries.getMaterialById(materialId ?? 0),\n ...options,\n } as UseQueryOptions<IMaterial>);\n\nexport const useMaterialsForSelect = (\n options?: Omit<UseQueryOptions<IMaterial[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...materials.queries.getMaterialsForSelect(),\n ...options,\n } as UseQueryOptions<IMaterial[]>);\n\nexport const useAllMaterials = (\n options?: Omit<UseQueryOptions<IMaterial[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...materials.queries.getAllMaterials(),\n ...options,\n } as UseQueryOptions<IMaterial[]>);\n\nexport const useCreateMaterial = (\n options?: UseMutationOptions<IMaterial, Error, { material: IMaterial }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...materials.mutations.createMaterial(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateMaterial = (\n options?: UseMutationOptions<\n IMaterial,\n Error,\n { materialId: number; material: IMaterial }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...materials.mutations.updateMaterial(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteMaterial = (\n options?: UseMutationOptions<void, Error, { materialId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...materials.mutations.deleteMaterial(queryClient),\n ...options,\n });\n};\n\nexport const useUndeleteMaterial = (\n options?: UseMutationOptions<void, Error, { materialId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...materials.mutations.undeleteMaterial(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchMaterial = () => {\n const queryClient = useQueryClient();\n const prefetchMaterial = (materialId: number) =>\n queryClient.prefetchQuery({\n ...materials.queries.getMaterialById(materialId),\n });\n return { prefetchMaterial };\n};\n","import type { IModule } from '../interfaces/module.interface'\nimport { api } from './config'\n\nexport const getAllModules = async (): Promise<IModule[]> => {\n const { data } = await api.get<IModule[]>('module/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllModules } from \"../services/module.service\";\nimport type { IModule } from \"../interfaces/module.interface\";\n\nconst moduleQueryKeys = {\n all: [\"modules\"] as const,\n};\n\nexport const modules = {\n queries: {\n all: [\"modules\"] as const,\n getAllModules: () =>\n queryOptions({\n queryFn: getAllModules,\n queryKey: moduleQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { moduleQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { modules, moduleQueryKeys } from \"../queries/module.queries\";\nimport type { IModule } from \"../interfaces/module.interface\";\n\nexport const moduleKeys = moduleQueryKeys;\n\nexport const useAllModules = (\n options?: Omit<UseQueryOptions<IModule[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...modules.queries.getAllModules(),\n ...options,\n } as UseQueryOptions<IModule[]>);\n","import type { IOrder, IOrderResponse, TblOrderStatus } from '../interfaces/order.interface'\nimport { api } from './config'\n\nexport const getOrders = async ({\n skip = 0,\n limit = 10,\n query = '',\n commissionedBy = '',\n orderStatus = [],\n startDate = '',\n endDate = '',\n showOnlyReturns = false\n}: {\n skip?: number\n limit?: number\n query?: string\n commissionedBy?: string\n orderStatus?: string[]\n startDate?: string | null\n endDate?: string | null\n showOnlyReturns?: boolean\n}): Promise<IOrderResponse> => {\n const { data } = await api.get<IOrderResponse>('order', {\n params: { skip, limit, query, commissionedBy, orderStatus, startDate, endDate, showOnlyReturns }\n })\n return data\n}\n\nexport const getOrderById = async ({ orderId }: { orderId: number }): Promise<IOrder> => {\n const { data } = await api.get<IOrder>(`order/${orderId}`)\n return data\n}\n\nexport const getOrdersStatusForSelect = async (): Promise<TblOrderStatus[]> => {\n const { data } = await api.get<TblOrderStatus[]>('order/status')\n return data\n}\n\nexport interface ChangeProductRequest {\n orderID: number\n oldOrderDetailID: number\n newProductDetailID: number\n quantity: number\n reason?: string\n}\n\nexport interface ChangeProductResponse {\n success: boolean\n message: string\n priceDifference: number\n requiresAdditionalPayment: boolean\n requiresRefund: boolean\n order: IOrder\n}\n\nexport const changeOrderProduct = async (\n changeData: ChangeProductRequest\n): Promise<ChangeProductResponse> => {\n const { data } = await api.post<ChangeProductResponse>('order/change-product', changeData)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getOrders,\n getOrderById,\n getOrdersStatusForSelect,\n changeOrderProduct,\n} from \"../services/order.service\";\nimport type {\n IOrder,\n IOrderResponse,\n TblOrderStatus,\n} from \"../interfaces/order.interface\";\nimport type {\n ChangeProductRequest,\n ChangeProductResponse,\n} from \"../services/order.service\";\n\nexport interface UseOrdersParams {\n skip?: number;\n limit?: number;\n query?: string;\n commissionedBy?: string;\n orderStatus?: string[];\n startDate?: string | null;\n endDate?: string | null;\n showOnlyReturns?: boolean;\n}\n\nconst orderQueryKeys = {\n all: [\"orders\"] as const,\n lists: () => [...orderQueryKeys.all, \"list\"] as const,\n list: (filters: UseOrdersParams) =>\n [...orderQueryKeys.lists(), { filters }] as const,\n details: () => [...orderQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...orderQueryKeys.details(), id] as const,\n statusForSelect: () => [...orderQueryKeys.all, \"status\"] as const,\n};\n\nexport const orders = {\n queries: {\n all: [\"orders\"] as const,\n getOrders: (params: UseOrdersParams = {}) =>\n queryOptions({\n queryFn: () =>\n getOrders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query ?? \"\",\n commissionedBy: params.commissionedBy ?? \"\",\n orderStatus: params.orderStatus ?? [],\n startDate: params.startDate ?? \"\",\n endDate: params.endDate ?? \"\",\n showOnlyReturns: params.showOnlyReturns ?? false,\n }),\n queryKey: orderQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getOrderById: (id: number) =>\n queryOptions({\n queryFn: () => getOrderById({ orderId: id }),\n queryKey: orderQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getOrdersStatusForSelect: () =>\n queryOptions({\n queryFn: getOrdersStatusForSelect,\n queryKey: orderQueryKeys.statusForSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n changeOrderProduct: (): UseMutationOptions<\n ChangeProductResponse,\n Error,\n ChangeProductRequest\n > => ({\n mutationFn: changeOrderProduct,\n }),\n },\n};\n\nexport { orderQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { orders, orderQueryKeys } from \"../queries/order.queries\";\nimport type {\n IOrder,\n IOrderResponse,\n TblOrderStatus,\n} from \"../interfaces/order.interface\";\nimport type {\n ChangeProductRequest,\n ChangeProductResponse,\n} from \"../services/order.service\";\n\nexport const orderKeys = orderQueryKeys;\n\ninterface UseOrdersParams {\n skip?: number;\n limit?: number;\n query?: string;\n commissionedBy?: string;\n orderStatus?: string[];\n startDate?: string | null;\n endDate?: string | null;\n showOnlyReturns?: boolean;\n}\n\nexport const useOrders = (\n params: UseOrdersParams = {},\n options?: Omit<UseQueryOptions<IOrderResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...orders.queries.getOrders(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IOrderResponse>);\n\nexport const useOrdersTable = useOrders;\n\nexport const useOrder = (\n orderId: number | undefined,\n options?: Omit<UseQueryOptions<IOrder>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...orders.queries.getOrderById(orderId ?? 0),\n ...options,\n } as UseQueryOptions<IOrder>);\n\nexport const useOrdersStatusForSelect = (\n options?: Omit<UseQueryOptions<TblOrderStatus[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...orders.queries.getOrdersStatusForSelect(),\n ...options,\n } as UseQueryOptions<TblOrderStatus[]>);\n\nexport const useChangeOrderProduct = (\n options?: UseMutationOptions<\n ChangeProductResponse,\n Error,\n ChangeProductRequest\n >,\n) =>\n useMutation({\n ...orders.mutations.changeOrderProduct(),\n ...options,\n });\n\nexport const usePrefetchOrder = () => {\n const queryClient = useQueryClient();\n const prefetchOrder = (orderId: number) =>\n queryClient.prefetchQuery({\n ...orders.queries.getOrderById(orderId),\n });\n return { prefetchOrder };\n};\n","import { api } from './config'\nimport type {\n IPayment,\n IPaymentMethod,\n IPaymentMethodAmountExpected\n} from '../interfaces/payment.interface'\n\nexport const sendPaymentData = async ({ payment }: { payment: IPayment }): Promise<IPayment> => {\n const { data } = await api.post<IPayment>(\n 'payment/applypayment',\n {\n ...payment\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n\n//metodo para llamar a la api y obtener los metodos de pago\nexport const getPaymentMethods = async (): Promise<IPaymentMethod[]> => {\n const { data } = await api.get('payment/getpaymentmethods')\n return data\n}\n\n//metodo para llamar a la api y obtener los metodos de pago\nexport const getPaymentMethodsWithAmountExpected = async (): Promise<\n IPaymentMethodAmountExpected[]\n> => {\n const { data } = await api.get('payment/getpaymentmethodswithamountexpected')\n return data\n}\n\nexport const sendCreditPaymentData = async ({\n payment,\n orderId\n}: {\n payment: IPayment\n orderId: number\n}): Promise<IPayment> => {\n const { data } = await api.post<IPayment>(\n 'payment/applycreditpayment',\n {\n ...payment,\n orderID: orderId\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n getPaymentMethods,\n getPaymentMethodsWithAmountExpected,\n sendPaymentData,\n sendCreditPaymentData,\n} from \"../services/payment.service\";\nimport type {\n IPayment,\n IPaymentMethod,\n IPaymentMethodAmountExpected,\n} from \"../interfaces/payment.interface\";\n\nconst paymentQueryKeys = {\n all: [\"payments\"] as const,\n methods: () => [...paymentQueryKeys.all, \"methods\"] as const,\n methodsWithAmount: () => [...paymentQueryKeys.all, \"methodsWithAmount\"] as const,\n};\n\nexport const payments = {\n queries: {\n all: [\"payments\"] as const,\n getPaymentMethods: () =>\n queryOptions({\n queryFn: getPaymentMethods,\n queryKey: paymentQueryKeys.methods(),\n staleTime: 5 * 60 * 1000,\n }),\n getPaymentMethodsWithAmountExpected: () =>\n queryOptions({\n queryFn: getPaymentMethodsWithAmountExpected,\n queryKey: paymentQueryKeys.methodsWithAmount(),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n sendPayment: (): UseMutationOptions<IPayment, Error, { payment: IPayment }> => ({\n mutationFn: sendPaymentData,\n }),\n sendCreditPayment: (): UseMutationOptions<\n IPayment,\n Error,\n { payment: IPayment; orderId: number }\n > => ({\n mutationFn: sendCreditPaymentData,\n }),\n },\n};\n\nexport { paymentQueryKeys };\n","import {\n useQuery,\n useMutation,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { payments, paymentQueryKeys } from \"../queries/payment.queries\";\nimport type {\n IPayment,\n IPaymentMethod,\n IPaymentMethodAmountExpected,\n} from \"../interfaces/payment.interface\";\n\nexport const paymentKeys = paymentQueryKeys;\n\nexport const usePaymentMethods = (\n options?: Omit<UseQueryOptions<IPaymentMethod[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...payments.queries.getPaymentMethods(),\n ...options,\n } as UseQueryOptions<IPaymentMethod[]>);\n\nexport const usePaymentMethodsWithAmountExpected = (\n options?: Omit<\n UseQueryOptions<IPaymentMethodAmountExpected[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...payments.queries.getPaymentMethodsWithAmountExpected(),\n ...options,\n } as UseQueryOptions<IPaymentMethodAmountExpected[]>);\n\nexport const useSendPayment = (\n options?: UseMutationOptions<IPayment, Error, { payment: IPayment }>,\n) =>\n useMutation({\n ...payments.mutations.sendPayment(),\n ...options,\n });\n\nexport const useSendCreditPayment = (\n options?: UseMutationOptions<\n IPayment,\n Error,\n { payment: IPayment; orderId: number }\n >,\n) =>\n useMutation({\n ...payments.mutations.sendCreditPayment(),\n ...options,\n });\n","import type { IPermissionRole, PermissionRole } from '../interfaces/permission.interface'\nimport { api } from './config'\n\nexport interface IUpdatePermission {\n id: number\n hasPermission: boolean\n}\n\nexport const getAllPermissions = async (): Promise<IPermissionRole> => {\n const response = await api.get<IPermissionRole>('/permission-role/')\n return response.data\n}\n\nexport const updatePermission = async (\n permission: IUpdatePermission\n): Promise<IUpdatePermission> => {\n const response = await api.put<IUpdatePermission>('/permission-role', permission)\n return response.data\n}\n\nexport const getPermissionRoleByRoleID = async ({\n roleId\n}: {\n roleId: number\n}): Promise<PermissionRole[]> => {\n const { data } = await api.get<PermissionRole[]>(`permission-role/${roleId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllPermissions,\n getPermissionRoleByRoleID,\n updatePermission,\n} from \"../services/permission.service\";\nimport type {\n IPermissionRole,\n PermissionRole,\n} from \"../interfaces/permission.interface\";\nimport type { IUpdatePermission } from \"../services/permission.service\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst permissionQueryKeys = {\n all: [\"permissions\"] as const,\n list: () => [...permissionQueryKeys.all, \"list\"] as const,\n byRole: (roleId: number) => [...permissionQueryKeys.all, \"role\", roleId] as const,\n};\n\nexport const permissions = {\n queries: {\n all: [\"permissions\"] as const,\n getPermissions: () =>\n queryOptions({\n queryFn: getAllPermissions,\n queryKey: permissionQueryKeys.list(),\n staleTime: 10 * 60 * 1000,\n }),\n getPermissionRoleByRoleID: (roleId: number) =>\n queryOptions({\n queryFn: () => getPermissionRoleByRoleID({ roleId }),\n queryKey: permissionQueryKeys.byRole(roleId),\n enabled: !!roleId && roleId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n updatePermission: (\n queryClient: QueryClient,\n ): UseMutationOptions<IUpdatePermission, Error, IUpdatePermission> => ({\n mutationFn: updatePermission,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: permissionQueryKeys.all });\n successNotification({\n title: \"Permisos actualizados\",\n message: \"Los permisos se han actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron actualizar los permisos.\",\n });\n },\n }),\n },\n};\n\nexport { permissionQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n permissions,\n permissionQueryKeys,\n} from \"../queries/permission.queries\";\nimport type {\n IPermissionRole,\n PermissionRole,\n} from \"../interfaces/permission.interface\";\nimport type { IUpdatePermission } from \"../services/permission.service\";\n\nexport const permissionKeys = permissionQueryKeys;\n\nexport const usePermissions = (\n options?: Omit<UseQueryOptions<IPermissionRole>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...permissions.queries.getPermissions(),\n ...options,\n } as UseQueryOptions<IPermissionRole>);\n\nexport const usePermissionRoleByRoleID = (\n roleId: number | undefined,\n options?: Omit<UseQueryOptions<PermissionRole[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...permissions.queries.getPermissionRoleByRoleID(roleId ?? 0),\n ...options,\n } as UseQueryOptions<PermissionRole[]>);\n\nexport const useUpdatePermission = (\n options?: UseMutationOptions<IUpdatePermission, Error, IUpdatePermission>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...permissions.mutations.updatePermission(queryClient),\n ...options,\n });\n};\n","import type {\n PricePerGramResponse,\n PriceCalculationResponse,\n UpdatePriceRequest,\n SchedulePriceRequest,\n CalculatePriceRequest,\n IPricePerGramHistory\n} from '../interfaces/pricePerGram.interface'\nimport { api } from './config'\n\nconst BASE_URL = 'price-per-gram'\n\nexport const pricePerGramService = {\n // 1. Obtener precio con fallback\n async getPrice(params: {\n productDetailId?: number\n productId?: number\n materialId?: number\n }): Promise<PricePerGramResponse> {\n const queryParams = new URLSearchParams()\n\n if (params.productDetailId)\n queryParams.append('productDetailID', params.productDetailId.toString())\n if (params.productId) queryParams.append('productID', params.productId.toString())\n if (params.materialId) queryParams.append('materialID', params.materialId.toString())\n\n const { data } = await api.get<PricePerGramResponse>(\n `${BASE_URL}/price?${queryParams.toString()}`\n )\n return data\n },\n\n // 2. Actualizar precio (crea histórico automáticamente)\n async updatePrice(request: UpdatePriceRequest): Promise<void> {\n await api.put(`${BASE_URL}/price`, request)\n },\n\n // 3. Ver histórico de precios\n async getHistory({\n entityType,\n entityId,\n limit\n }: {\n entityType: 'material' | 'product' | 'productDetail'\n entityId: number\n limit?: number\n }): Promise<IPricePerGramHistory[]> {\n const queryParams = new URLSearchParams()\n if (limit) queryParams.append('limit', limit.toString())\n\n const { data } = await api.get<{ success: boolean; data: IPricePerGramHistory[] }>(\n `${BASE_URL}/history/${entityType}/${entityId}?${queryParams.toString()}`\n )\n console.log('response data:', data)\n return data.data || []\n },\n\n // 4. Programar precio futuro\n async schedulePrice(request: SchedulePriceRequest): Promise<void> {\n await api.post(`${BASE_URL}/scheduled`, request)\n },\n\n // 5. Calcular precio para venta\n async calculatePrice(request: CalculatePriceRequest): Promise<PriceCalculationResponse> {\n const { data } = await api.post<PriceCalculationResponse>(`${BASE_URL}/calculate`, request)\n return data\n },\n\n // 6. Eliminar precio programado\n async deleteFuturePrice({\n historyId\n }: {\n historyId: number\n }): Promise<void> {\n await api.delete(`${BASE_URL}/scheduled/${historyId}`)\n },\n\n // 7. Actualizar precio programado\n async updateFuturePrice({\n historyId,\n request\n }: {\n historyId: number\n request: SchedulePriceRequest\n }): Promise<void> {\n await api.put(`${BASE_URL}/scheduled/${historyId}`, request)\n },\n\n // Verificar si un producto se vende por peso\n async isWeightBased({\n productDetailId\n }: {\n productDetailId: number\n }): Promise<boolean> {\n try {\n const priceInfo = await this.getPrice({ productDetailId })\n return priceInfo.pricePerGram !== null\n } catch (error) {\n console.error('Error verificando si es por peso:', error)\n return false\n }\n }\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { pricePerGramService } from \"../services/pricePerGram.service\";\nimport type {\n PricePerGramResponse,\n PriceCalculationResponse,\n UpdatePriceRequest,\n SchedulePriceRequest,\n CalculatePriceRequest,\n IPricePerGramHistory,\n} from \"../interfaces/pricePerGram.interface\";\n\nconst pricePerGramQueryKeys = {\n all: [\"pricePerGram\"] as const,\n price: (params: {\n productDetailId?: number;\n productId?: number;\n materialId?: number;\n }) => [...pricePerGramQueryKeys.all, \"price\", params] as const,\n history: (params: {\n entityType: \"material\" | \"product\" | \"productDetail\";\n entityId: number;\n limit?: number;\n }) => [...pricePerGramQueryKeys.all, \"history\", params] as const,\n isWeightBased: (productDetailId: number) =>\n [...pricePerGramQueryKeys.all, \"isWeightBased\", productDetailId] as const,\n};\n\nexport const pricePerGram = {\n queries: {\n all: [\"pricePerGram\"] as const,\n getPrice: (params: {\n productDetailId?: number;\n productId?: number;\n materialId?: number;\n } | null) =>\n queryOptions({\n queryFn: () => pricePerGramService.getPrice(params!),\n queryKey: pricePerGramQueryKeys.price(params ?? {}),\n enabled: !!params && (!!params.productDetailId || !!params.productId || !!params.materialId),\n staleTime: 60 * 1000,\n }),\n getHistory: (params: {\n entityType: \"material\" | \"product\" | \"productDetail\";\n entityId: number;\n limit?: number;\n } | null) =>\n queryOptions({\n queryFn: () => pricePerGramService.getHistory(params!),\n queryKey: pricePerGramQueryKeys.history(params!),\n enabled: !!params?.entityId,\n staleTime: 60 * 1000,\n }),\n isWeightBased: (productDetailId: number) =>\n queryOptions({\n queryFn: () =>\n pricePerGramService.isWeightBased({ productDetailId }),\n queryKey: pricePerGramQueryKeys.isWeightBased(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n updatePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, UpdatePriceRequest> => ({\n mutationFn: pricePerGramService.updatePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n schedulePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, SchedulePriceRequest> => ({\n mutationFn: pricePerGramService.schedulePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n calculatePrice: (): UseMutationOptions<\n PriceCalculationResponse,\n Error,\n CalculatePriceRequest\n > => ({\n mutationFn: pricePerGramService.calculatePrice,\n }),\n deleteFuturePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { historyId: number }> => ({\n mutationFn: pricePerGramService.deleteFuturePrice,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n updateFuturePrice: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n void,\n Error,\n { historyId: number; request: SchedulePriceRequest }\n > => ({\n mutationFn: ({ historyId, request }) =>\n pricePerGramService.updateFuturePrice({ historyId, request }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: pricePerGramQueryKeys.all });\n },\n }),\n },\n};\n\nexport { pricePerGramQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n pricePerGram,\n pricePerGramQueryKeys,\n} from \"../queries/pricePerGram.queries\";\nimport type {\n PricePerGramResponse,\n PriceCalculationResponse,\n UpdatePriceRequest,\n SchedulePriceRequest,\n CalculatePriceRequest,\n IPricePerGramHistory,\n} from \"../interfaces/pricePerGram.interface\";\n\nexport const pricePerGramKeys = pricePerGramQueryKeys;\n\nexport const usePricePerGram = (\n params: {\n productDetailId?: number;\n productId?: number;\n materialId?: number;\n } | null,\n options?: Omit<\n UseQueryOptions<PricePerGramResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...pricePerGram.queries.getPrice(params),\n ...options,\n } as UseQueryOptions<PricePerGramResponse>);\n\nexport const usePricePerGramHistory = (\n params: {\n entityType: \"material\" | \"product\" | \"productDetail\";\n entityId: number;\n limit?: number;\n } | null,\n options?: Omit<\n UseQueryOptions<IPricePerGramHistory[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...pricePerGram.queries.getHistory(params),\n ...options,\n } as UseQueryOptions<IPricePerGramHistory[]>);\n\nexport const useIsWeightBased = (\n productDetailId: number | undefined,\n options?: Omit<UseQueryOptions<boolean>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...pricePerGram.queries.isWeightBased(productDetailId ?? 0),\n ...options,\n } as UseQueryOptions<boolean>);\n\nexport const useUpdatePricePerGram = (\n options?: UseMutationOptions<void, Error, UpdatePriceRequest>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...pricePerGram.mutations.updatePrice(queryClient),\n ...options,\n });\n};\n\nexport const useSchedulePricePerGram = (\n options?: UseMutationOptions<void, Error, SchedulePriceRequest>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...pricePerGram.mutations.schedulePrice(queryClient),\n ...options,\n });\n};\n\nexport const useCalculatePricePerGram = (\n options?: UseMutationOptions<\n PriceCalculationResponse,\n Error,\n CalculatePriceRequest\n >,\n) =>\n useMutation({\n ...pricePerGram.mutations.calculatePrice(),\n ...options,\n });\n\nexport const useDeleteFuturePricePerGram = (\n options?: UseMutationOptions<void, Error, { historyId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...pricePerGram.mutations.deleteFuturePrice(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateFuturePricePerGram = (\n options?: UseMutationOptions<\n void,\n Error,\n { historyId: number; request: SchedulePriceRequest }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...pricePerGram.mutations.updateFuturePrice(queryClient),\n ...options,\n });\n};\n","import type { IPriceType, IPriceTypeResponse } from '../interfaces/priceType.interface'\nimport { api } from './config'\nimport type { IRequest } from '../interfaces/util.interface'\n\nexport const getPriceTypesForSelect = async (): Promise<IPriceType[]> => {\n const { data } = await api.get<IPriceType[]>('price-type/select')\n return data\n}\n\nexport const getAllPriceTypes = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: IRequest): Promise<IPriceTypeResponse> => {\n const { data } = await api.get<IPriceTypeResponse>(\n `price-type/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const createPriceType = async ({\n priceType\n}: {\n priceType: IPriceType\n}): Promise<IPriceType> => {\n const { data } = await api.post<IPriceType>('price-type/', priceType)\n return data\n}\n\nexport const getPriceTypeById = async ({\n priceTypeId\n}: {\n priceTypeId: number\n}): Promise<IPriceType> => {\n const { data } = await api.get<IPriceType>(`price-type/${priceTypeId}`)\n return data\n}\n\nexport const updatePriceType = async ({\n priceTypeId,\n priceType\n}: {\n priceTypeId: number\n priceType: IPriceType\n}): Promise<IPriceType> => {\n const { data } = await api.put<IPriceType>(`price-type/${priceTypeId}`, priceType)\n return data\n}\n\nexport const deletePriceType = async ({ priceTypeId }: { priceTypeId: number }): Promise<void> => {\n await api.delete<void>(`price-type/${priceTypeId}`)\n}\n\nexport const undeletePriceType = async ({\n priceTypeId\n}: {\n priceTypeId: number\n}): Promise<void> => {\n await api.patch<void>(`price-type/${priceTypeId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllPriceTypes,\n getPriceTypeById,\n getPriceTypesForSelect,\n createPriceType,\n updatePriceType,\n deletePriceType,\n undeletePriceType,\n} from \"../services/priceType.service\";\nimport type {\n IPriceType,\n IPriceTypeResponse,\n} from \"../interfaces/priceType.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst priceTypeQueryKeys = {\n all: [\"priceTypes\"] as const,\n lists: () => [...priceTypeQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...priceTypeQueryKeys.lists(), { filters: params }] as const,\n details: () => [...priceTypeQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...priceTypeQueryKeys.details(), id] as const,\n forSelect: () => [...priceTypeQueryKeys.all, \"select\"] as const,\n};\n\nexport const priceTypes = {\n queries: {\n all: [\"priceTypes\"] as const,\n getPriceTypes: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllPriceTypes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: priceTypeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPriceTypesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllPriceTypes({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: priceTypeQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPriceTypeById: (id: number) =>\n queryOptions({\n queryFn: () => getPriceTypeById({ priceTypeId: id }),\n queryKey: priceTypeQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getPriceTypesForSelect: () =>\n queryOptions({\n queryFn: getPriceTypesForSelect,\n queryKey: priceTypeQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createPriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPriceType, Error, { priceType: IPriceType }> => ({\n mutationFn: createPriceType,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.all });\n successNotification({\n title: \"Tipo de precio creado\",\n message: \"El tipo de precio se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el tipo de precio.\",\n });\n },\n }),\n updatePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPriceType, Error, { priceTypeId: number; priceType: IPriceType }> => ({\n mutationFn: updatePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n successNotification({\n title: \"Tipo de precio actualizado\",\n message: \"El tipo de precio se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el tipo de precio.\",\n });\n },\n }),\n deletePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { priceTypeId: number }> => ({\n mutationFn: deletePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n successNotification({\n title: \"Tipo de precio eliminado\",\n message: \"El tipo de precio se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el tipo de precio.\",\n });\n },\n }),\n undeletePriceType: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { priceTypeId: number }> => ({\n mutationFn: undeletePriceType,\n onSuccess: (_, { priceTypeId }) => {\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.detail(priceTypeId) });\n queryClient.invalidateQueries({ queryKey: priceTypeQueryKeys.lists() });\n successNotification({\n title: \"Tipo de precio restaurado\",\n message: \"El tipo de precio se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el tipo de precio.\",\n });\n },\n }),\n },\n};\n\nexport { priceTypeQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n priceTypes,\n priceTypeQueryKeys,\n} from \"../queries/priceType.queries\";\nimport type {\n IPriceType,\n IPriceTypeResponse,\n} from \"../interfaces/priceType.interface\";\n\nexport const priceTypeKeys = priceTypeQueryKeys;\n\ninterface UsePriceTypesParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const usePriceTypes = (\n params: UsePriceTypesParams = {},\n options?: Omit<UseQueryOptions<IPriceTypeResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...priceTypes.queries.getPriceTypes(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IPriceTypeResponse>);\n\nexport const usePriceTypesTable = usePriceTypes;\n\nexport const usePriceType = (\n priceTypeId: number | undefined,\n options?: Omit<UseQueryOptions<IPriceType>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...priceTypes.queries.getPriceTypeById(priceTypeId ?? 0),\n ...options,\n } as UseQueryOptions<IPriceType>);\n\nexport const usePriceTypesForSelect = (\n options?: Omit<UseQueryOptions<IPriceType[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...priceTypes.queries.getPriceTypesForSelect(),\n ...options,\n } as UseQueryOptions<IPriceType[]>);\n\nexport const useCreatePriceType = (\n options?: UseMutationOptions<IPriceType, Error, { priceType: IPriceType }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...priceTypes.mutations.createPriceType(queryClient),\n ...options,\n });\n};\n\nexport const useUpdatePriceType = (\n options?: UseMutationOptions<\n IPriceType,\n Error,\n { priceTypeId: number; priceType: IPriceType }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...priceTypes.mutations.updatePriceType(queryClient),\n ...options,\n });\n};\n\nexport const useDeletePriceType = (\n options?: UseMutationOptions<void, Error, { priceTypeId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...priceTypes.mutations.deletePriceType(queryClient),\n ...options,\n });\n};\n\nexport const useUndeletePriceType = (\n options?: UseMutationOptions<void, Error, { priceTypeId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...priceTypes.mutations.undeletePriceType(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchPriceType = () => {\n const queryClient = useQueryClient();\n const prefetchPriceType = (priceTypeId: number) =>\n queryClient.prefetchQuery({\n ...priceTypes.queries.getPriceTypeById(priceTypeId),\n });\n return { prefetchPriceType };\n};\n","import type { IFilterType } from '../interfaces/filters.interface'\nimport type {\n IProductResponse,\n IProduct,\n IProductDetailsResponse,\n IProductDetails\n} from '../interfaces/product.interface'\nimport { api } from './config'\n\ninterface ProductQuery {\n skip?: number\n limit?: number\n filters?: IFilterType\n}\n\ninterface CategoryQuery {\n category: number\n skip?: number\n limit?: number\n filters?: IFilterType\n}\n\nexport const getProductsForSelect = async (): Promise<IProduct[]> => {\n const { data } = await api.get<IProduct[]>('/product/select')\n return data\n}\n\nexport const getProducts = async ({\n skip = 0,\n limit = 16,\n filters\n}: ProductQuery): Promise<IProductDetailsResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductDetailsResponse>(`product?${queryParams}`)\n return data\n}\n\nexport const getProductsTable = async ({\n skip = 0,\n limit = 16,\n filters\n}: ProductQuery): Promise<IProductResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.categoryId && { categoryId: filters.categoryId.toString() }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductResponse>(`product/table?${queryParams}`)\n return data\n}\n\nexport const getProductById = async ({\n productId\n}: {\n productId: number\n}): Promise<IProduct> => {\n const { data } = await api.get(`product/${productId}`)\n return data.data\n}\n\nexport const getProductVariants = async ({\n productId,\n skip = 0,\n limit = 10,\n query = ''\n}: {\n productId: number\n skip?: number\n limit?: number\n query?: string\n}): Promise<IProductDetailsResponse> => {\n const { data } = await api.get<IProductDetailsResponse>(`/product/variants/${productId}`, {\n params: {\n skip: skip.toString(),\n limit: limit.toString(),\n ...(query && { query })\n }\n })\n return data\n}\n\nexport const getProductVariantsForSelect = async ({\n productId\n}: {\n productId: number\n}): Promise<IProductDetails[]> => {\n const { data } = await api.get<IProductDetails[]>(`/product/variants/select/${productId}`)\n return data\n}\n\nexport const getProductVariantById = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<IProductDetails> => {\n const { data } = await api.get<IProductDetails>(`/product/variants/variant/${productDetailId}`)\n return data\n}\n\nexport const createProductVariant = async (variant: FormData): Promise<IProductDetails> => {\n const { data } = await api.post<IProductDetails>('product/variants', variant, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createProductVariants = async (formData: FormData): Promise<IProductDetails[]> => {\n const { data } = await api.post<IProductDetails[]>('product/variants', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const updateProductVariant = async (data: FormData): Promise<IProductDetails> => {\n const { data: response } = await api.put<IProductDetails>(\n `product/variants/update/${data.get('productDetailID')}`,\n data,\n {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n }\n )\n return response\n}\n\nexport const deleteProductVariant = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<void> => {\n await api.delete(`/product/variants/${productDetailId}`)\n}\n\nexport const restoreProductVariant = async ({\n productDetailId\n}: {\n productDetailId: number\n}): Promise<void> => {\n await api.patch(`/product/variants/${productDetailId}`)\n}\n\nexport const createProduct = async (product: FormData): Promise<IProduct> => {\n const { data } = await api.post<IProduct>('product/', product, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const updateProduct = async ({\n productId,\n product\n}: {\n productId: number\n product: FormData\n}): Promise<IProduct> => {\n const { data } = await api.put<IProduct>(`/product/${productId}`, product, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteImageFromProduct = async ({\n imageId\n}: {\n imageId: number\n}): Promise<void> => {\n await api.delete(`/product/images/${imageId}`)\n}\n\nexport const deleteProduct = async ({ productId }: { productId: number }): Promise<void> => {\n await api.delete(`/product/${productId}`)\n}\n\nexport const restoreProduct = async ({ productId }: { productId: number }): Promise<void> => {\n await api.patch(`/product/${productId}`)\n}\n\nexport const getProductsByCategory = async ({\n category,\n skip = 0,\n limit = 10,\n filters\n}: CategoryQuery): Promise<IProductResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n ...(filters?.query && { query: filters.query }),\n ...(filters?.batchId && { batchId: filters.batchId }),\n ...(filters?.supplierId && { supplierId: filters.supplierId.toString() }),\n ...(filters?.warehouseId && { warehouseId: filters.warehouseId.toString() }),\n ...(filters?.priceRangeMin && { minPrice: filters.priceRangeMin.toString() }),\n ...(filters?.priceRangeMax && { maxPrice: filters.priceRangeMax.toString() })\n })\n\n const { data } = await api.get<IProductResponse>(`product/category/${category}?${queryParams}`)\n return data\n}\n\nexport interface PrintProductTagResponse {\n message?: string\n [key: string]: unknown\n}\n\nexport const printProductTag = async ({\n stockId,\n productId,\n isSmall\n}: {\n stockId: number\n productId: number\n isSmall: boolean\n}): Promise<PrintProductTagResponse> => {\n const { data } = await api.post<PrintProductTagResponse>(`/product/printproducttag/`, {\n stockID: stockId,\n productID: productId,\n isSmall\n })\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getProducts,\n getProductsTable,\n getProductById,\n getProductsForSelect,\n getProductVariants,\n getProductVariantsForSelect,\n getProductVariantById,\n getProductsByCategory,\n createProduct,\n updateProduct,\n createProductVariant,\n createProductVariants,\n updateProductVariant,\n deleteProductVariant,\n restoreProductVariant,\n deleteImageFromProduct,\n deleteProduct,\n restoreProduct,\n} from \"../services/product.service\";\nimport type { IFilterType } from \"../interfaces/filters.interface\";\nimport type {\n IProduct,\n IProductDetails,\n IProductDetailsResponse,\n IProductResponse,\n} from \"../interfaces/product.interface\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nexport interface ProductQueryParams {\n skip?: number;\n limit?: number;\n filters?: IFilterType;\n}\n\nconst productQueryKeys = {\n all: [\"products\"] as const,\n lists: () => [...productQueryKeys.all, \"list\"] as const,\n list: (filters?: ProductQueryParams) =>\n [...productQueryKeys.lists(), { filters }] as const,\n table: (filters?: ProductQueryParams) =>\n [...productQueryKeys.all, \"table\", { filters }] as const,\n details: () => [...productQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...productQueryKeys.details(), id] as const,\n forSelect: () => [...productQueryKeys.all, \"select\"] as const,\n variants: (productId: number) =>\n [...productQueryKeys.all, \"variants\", productId] as const,\n variantsSelect: (productId: number) =>\n [...productQueryKeys.all, \"variantsSelect\", productId] as const,\n variant: (productDetailId: number) =>\n [...productQueryKeys.all, \"variant\", productDetailId] as const,\n byCategory: (category: number, filters?: IFilterType) =>\n [...productQueryKeys.all, \"category\", category, { filters }] as const,\n};\n\nexport const products = {\n queries: {\n all: [\"products\"] as const,\n getProducts: (params: ProductQueryParams = {}) =>\n queryOptions({\n queryFn: () =>\n getProducts({\n skip: params.skip ?? 0,\n limit: params.limit ?? 16,\n filters: params.filters,\n }),\n queryKey: productQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProductsTable: (params: ProductQueryParams = {}) =>\n queryOptions({\n queryFn: () =>\n getProductsTable({\n skip: params.skip ?? 0,\n limit: params.limit ?? 16,\n filters: params.filters,\n }),\n queryKey: productQueryKeys.table(params),\n staleTime: 30_000,\n }),\n getProductById: (id: number) =>\n queryOptions({\n queryFn: () => getProductById({ productId: id }),\n queryKey: productQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductsForSelect: () =>\n queryOptions({\n queryFn: getProductsForSelect,\n queryKey: productQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n getProductVariants: (\n productId: number,\n params?: { skip?: number; limit?: number; query?: string },\n ) =>\n queryOptions({\n queryFn: () =>\n getProductVariants({\n productId,\n skip: params?.skip ?? 0,\n limit: params?.limit ?? 10,\n query: params?.query ?? \"\",\n }),\n queryKey: [...productQueryKeys.variants(productId), params ?? {}] as const,\n enabled: !!productId && productId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductVariantsForSelect: (productId: number) =>\n queryOptions({\n queryFn: () => getProductVariantsForSelect({ productId }),\n queryKey: productQueryKeys.variantsSelect(productId),\n enabled: !!productId && productId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductVariantById: (productDetailId: number) =>\n queryOptions({\n queryFn: () => getProductVariantById({ productDetailId }),\n queryKey: productQueryKeys.variant(productDetailId),\n enabled: !!productDetailId && productDetailId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProductsByCategory: (category: number, params?: ProductQueryParams) =>\n queryOptions({\n queryFn: () =>\n getProductsByCategory({\n category,\n skip: params?.skip ?? 0,\n limit: params?.limit ?? 10,\n filters: params?.filters,\n }),\n queryKey: productQueryKeys.byCategory(category, params?.filters),\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProduct, Error, FormData> => ({\n mutationFn: createProduct,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto creado\",\n message: \"El producto se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el producto.\",\n });\n },\n }),\n updateProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProduct, Error, { productId: number; product: FormData }> => ({\n mutationFn: updateProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.detail(productId) });\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto actualizado\",\n message: \"El producto se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el producto.\",\n });\n },\n }),\n createProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails, Error, FormData> => ({\n mutationFn: createProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante creada\",\n message: \"La variante se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la variante.\",\n });\n },\n }),\n createProductVariants: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails[], Error, FormData> => ({\n mutationFn: createProductVariants,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variantes creadas\",\n message: \"Las variantes se han creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudieron crear las variantes.\",\n });\n },\n }),\n updateProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProductDetails, Error, FormData> => ({\n mutationFn: updateProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante actualizada\",\n message: \"La variante se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la variante.\",\n });\n },\n }),\n deleteProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productDetailId: number }> => ({\n mutationFn: deleteProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante eliminada\",\n message: \"La variante se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la variante.\",\n });\n },\n }),\n restoreProductVariant: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productDetailId: number }> => ({\n mutationFn: restoreProductVariant,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Variante restaurada\",\n message: \"La variante se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar la variante.\",\n });\n },\n }),\n deleteImageFromProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { imageId: number }> => ({\n mutationFn: deleteImageFromProduct,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Imagen eliminada\",\n message: \"La imagen se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar la imagen.\",\n });\n },\n }),\n deleteProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productId: number }> => ({\n mutationFn: deleteProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n queryClient.removeQueries({ queryKey: productQueryKeys.detail(productId) });\n successNotification({\n title: \"Producto eliminado\",\n message: \"El producto se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el producto.\",\n });\n },\n }),\n restoreProduct: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { productId: number }> => ({\n mutationFn: restoreProduct,\n onSuccess: (_, { productId }) => {\n queryClient.invalidateQueries({ queryKey: productQueryKeys.detail(productId) });\n queryClient.invalidateQueries({ queryKey: productQueryKeys.all });\n successNotification({\n title: \"Producto restaurado\",\n message: \"El producto se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el producto.\",\n });\n },\n }),\n },\n};\n\nexport { productQueryKeys };\n","import type { IFilterType } from \"../interfaces/filters.interface\";\nimport {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { products, productQueryKeys } from \"../queries/product.queries\";\nimport type {\n IProduct,\n IProductDetails,\n IProductDetailsResponse,\n IProductResponse,\n} from \"../interfaces/product.interface\";\nimport type { TableQueryParams } from \"../queries/types\";\n\nexport const productKeys = productQueryKeys;\n\ninterface ProductQueryParams {\n skip?: number;\n limit?: number;\n filters?: IFilterType;\n}\n\n/**\n * Maps table columnIds to product filter keys. Use the same columnIds as in your\n * TablePage filters prop. Any key not provided will be null unless present in columnFilters\n * with that id (e.g. columnId \"batchId\" -> filters.batchId).\n */\nexport interface ProductFilterColumnMap {\n categoryId?: string;\n batchId?: string;\n supplierId?: string;\n warehouseId?: string;\n priceRangeMin?: string;\n priceRangeMax?: string;\n}\n\nconst defaultColumnMap: Required<ProductFilterColumnMap> = {\n categoryId: \"tblCategories.categoryName\",\n batchId: \"batchId\",\n supplierId: \"supplierId\",\n warehouseId: \"warehouseId\",\n priceRangeMin: \"priceRangeMin\",\n priceRangeMax: \"priceRangeMax\",\n};\n\nfunction getFilterValue(\n columnFilters: TableQueryParams[\"columnFilters\"],\n columnId: string,\n): string | null {\n const filter = columnFilters?.find((f) => f.id === columnId);\n if (filter?.value == null) return null;\n return typeof filter.value === \"string\" ? filter.value : String(filter.value);\n}\n\nfunction parseNumber(value: string | null): number | null {\n if (value == null || value === \"\") return null;\n const n = Number.parseInt(value, 10);\n return Number.isNaN(n) ? null : n;\n}\n\nexport const mapTableParamsToProductParams = (\n params: TableQueryParams,\n columnMap?: Partial<ProductFilterColumnMap>,\n): ProductQueryParams => {\n const map = { ...defaultColumnMap, ...columnMap };\n const cf = params.columnFilters;\n\n const categoryId = parseNumber(getFilterValue(cf, map.categoryId));\n const supplierId = parseNumber(getFilterValue(cf, map.supplierId));\n const warehouseId = parseNumber(getFilterValue(cf, map.warehouseId));\n const priceRangeMin = parseNumber(getFilterValue(cf, map.priceRangeMin));\n const priceRangeMax = parseNumber(getFilterValue(cf, map.priceRangeMax));\n const batchRaw = getFilterValue(cf, map.batchId);\n const batchId = batchRaw !== null ? batchRaw : null;\n\n return {\n skip: params.skip,\n limit: params.limit,\n filters: {\n query: params.query ?? null,\n categoryId,\n batchId,\n supplierId,\n warehouseId,\n priceRangeMin,\n priceRangeMax,\n },\n };\n};\n\nexport const useProducts = (\n params: ProductQueryParams = {},\n options?: Omit<\n UseQueryOptions<IProductDetailsResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...products.queries.getProducts(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IProductDetailsResponse>);\n\nexport const useProductsTable = (\n params: ProductQueryParams = {},\n options?: Omit<UseQueryOptions<IProductResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductsTable(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IProductResponse>);\n\nexport const useProduct = (\n productId: number | undefined,\n options?: Omit<UseQueryOptions<IProduct>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductById(productId ?? 0),\n ...options,\n } as UseQueryOptions<IProduct>);\n\nexport const useProductsForSelect = (\n options?: Omit<UseQueryOptions<IProduct[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductsForSelect(),\n ...options,\n } as UseQueryOptions<IProduct[]>);\n\nexport const useProductVariants = (\n productId: number | undefined,\n params?: { skip?: number; limit?: number; query?: string },\n options?: Omit<\n UseQueryOptions<IProductDetailsResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...products.queries.getProductVariants(productId ?? 0, params),\n ...options,\n } as UseQueryOptions<IProductDetailsResponse>);\n\nexport const useProductVariantsForSelect = (\n productId: number | undefined,\n options?: Omit<UseQueryOptions<IProductDetails[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductVariantsForSelect(productId ?? 0),\n ...options,\n } as UseQueryOptions<IProductDetails[]>);\n\nexport const useProductVariant = (\n productDetailId: number | undefined,\n options?: Omit<UseQueryOptions<IProductDetails>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductVariantById(productDetailId ?? 0),\n ...options,\n } as UseQueryOptions<IProductDetails>);\n\nexport const useProductsByCategory = (\n category: number,\n params?: ProductQueryParams,\n options?: Omit<UseQueryOptions<IProductResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...products.queries.getProductsByCategory(category, params),\n ...options,\n } as UseQueryOptions<IProductResponse>);\n\nexport const useCreateProduct = (\n options?: UseMutationOptions<IProduct, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.createProduct(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateProduct = (\n options?: UseMutationOptions<\n IProduct,\n Error,\n { productId: number; product: FormData }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.updateProduct(queryClient),\n ...options,\n });\n};\n\nexport const useCreateProductVariant = (\n options?: UseMutationOptions<IProductDetails, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.createProductVariant(queryClient),\n ...options,\n });\n};\n\nexport const useCreateProductVariants = (\n options?: UseMutationOptions<IProductDetails[], Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.createProductVariants(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateProductVariant = (\n options?: UseMutationOptions<IProductDetails, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.updateProductVariant(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteProductVariant = (\n options?: UseMutationOptions<void, Error, { productDetailId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.deleteProductVariant(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreProductVariant = (\n options?: UseMutationOptions<void, Error, { productDetailId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.restoreProductVariant(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteImageFromProduct = (\n options?: UseMutationOptions<void, Error, { imageId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.deleteImageFromProduct(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteProduct = (\n options?: UseMutationOptions<void, Error, { productId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.deleteProduct(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreProduct = (\n options?: UseMutationOptions<void, Error, { productId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...products.mutations.restoreProduct(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchProduct = () => {\n const queryClient = useQueryClient();\n const prefetchProduct = (productId: number) =>\n queryClient.prefetchQuery({\n ...products.queries.getProductById(productId),\n });\n return { prefetchProduct };\n};\n","import type { ITag } from '../interfaces/tag.interface'\nimport { api } from './config'\n\nexport const getAllTags = async (): Promise<ITag[]> => {\n const { data } = await api.get<{ data: ITag[] }>('/product-tag')\n return data.data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllTags } from \"../services/productTags.service\";\nimport type { ITag } from \"../interfaces/tag.interface\";\n\nconst productTagQueryKeys = {\n all: [\"productTags\"] as const,\n};\n\nexport const productTags = {\n queries: {\n all: [\"productTags\"] as const,\n getAllTags: () =>\n queryOptions({\n queryFn: getAllTags,\n queryKey: productTagQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { productTagQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { productTags, productTagQueryKeys } from \"../queries/productTags.queries\";\nimport type { ITag } from \"../interfaces/tag.interface\";\n\nexport const productTagKeys = productTagQueryKeys;\n\nexport const useAllProductTags = (\n options?: Omit<UseQueryOptions<ITag[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...productTags.queries.getAllTags(),\n ...options,\n } as UseQueryOptions<ITag[]>);\n","import type {\n IPromotion,\n IPromotionResponse,\n IPromotionType\n} from '../interfaces/promotion.interface'\nimport { api } from './config'\n\nexport const isAValidDiscountCode = async ({\n discountCode\n}: {\n discountCode: string\n}): Promise<boolean> => {\n const { data } = await api.post('promotion/discount-code', { discountCode })\n return data.isValid\n}\n\ninterface PromotionQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport const getPromotions = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: PromotionQuery): Promise<IPromotionResponse> => {\n const queryParams = new URLSearchParams({\n skip: skip.toString(),\n limit: limit.toString(),\n query: query\n })\n const { data } = await api.get(`promotion?${queryParams}`)\n return data\n}\n\nexport const getPromotionsTypeForSelect = async (): Promise<IPromotionType[]> => {\n const { data } = await api.get('promotion/promotions-type/select')\n return data\n}\n\nexport const createPromotion = async (promotion: IPromotion): Promise<IPromotion> => {\n const { data } = await api.post('promotion', promotion)\n return data\n}\n\nexport const getPromotionById = async ({ id }: { id: string }): Promise<IPromotion> => {\n const { data } = await api.get(`promotion/${id}`)\n return data\n}\n\nexport const updatePromotion = async ({\n id,\n promotion\n}: {\n id: string\n promotion: IPromotion\n}): Promise<IPromotion> => {\n const { data } = await api.put(`promotion/${id}`, promotion)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getPromotions,\n getPromotionById,\n getPromotionsTypeForSelect,\n createPromotion,\n updatePromotion,\n isAValidDiscountCode,\n} from \"../services/promotion.service\";\nimport type {\n IPromotion,\n IPromotionResponse,\n IPromotionType,\n} from \"../interfaces/promotion.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst promotionQueryKeys = {\n all: [\"promotions\"] as const,\n lists: () => [...promotionQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...promotionQueryKeys.lists(), { filters: params }] as const,\n details: () => [...promotionQueryKeys.all, \"detail\"] as const,\n detail: (id: string) => [...promotionQueryKeys.details(), id] as const,\n typesForSelect: () => [...promotionQueryKeys.all, \"types\"] as const,\n};\n\nexport const promotions = {\n queries: {\n all: [\"promotions\"] as const,\n getPromotions: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getPromotions({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: promotionQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPromotionsForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getPromotions({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: promotionQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getPromotionById: (id: string) =>\n queryOptions({\n queryFn: () => getPromotionById({ id }),\n queryKey: promotionQueryKeys.detail(id),\n enabled: !!id,\n staleTime: 5 * 60 * 1000,\n }),\n getPromotionsTypeForSelect: () =>\n queryOptions({\n queryFn: getPromotionsTypeForSelect,\n queryKey: promotionQueryKeys.typesForSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createPromotion: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPromotion, Error, IPromotion> => ({\n mutationFn: createPromotion,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.all });\n successNotification({\n title: \"Promoción creada\",\n message: \"La promoción se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la promoción.\",\n });\n },\n }),\n updatePromotion: (\n queryClient: QueryClient,\n ): UseMutationOptions<IPromotion, Error, { id: string; promotion: IPromotion }> => ({\n mutationFn: updatePromotion,\n onSuccess: (_, { id }) => {\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.detail(id) });\n queryClient.invalidateQueries({ queryKey: promotionQueryKeys.lists() });\n successNotification({\n title: \"Promoción actualizada\",\n message: \"La promoción se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar la promoción.\",\n });\n },\n }),\n validateDiscountCode: (): UseMutationOptions<\n boolean,\n Error,\n { discountCode: string }\n > => ({\n mutationFn: ({ discountCode }) => isAValidDiscountCode({ discountCode }),\n }),\n },\n};\n\nexport { promotionQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n promotions,\n promotionQueryKeys,\n} from \"../queries/promotion.queries\";\nimport type {\n IPromotion,\n IPromotionResponse,\n IPromotionType,\n} from \"../interfaces/promotion.interface\";\n\nexport const promotionKeys = promotionQueryKeys;\n\ninterface UsePromotionsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const usePromotions = (\n params: UsePromotionsParams = {},\n options?: Omit<UseQueryOptions<IPromotionResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...promotions.queries.getPromotions(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IPromotionResponse>);\n\nexport const usePromotionsTable = usePromotions;\n\nexport const usePromotion = (\n id: string | undefined,\n options?: Omit<UseQueryOptions<IPromotion>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...promotions.queries.getPromotionById(id ?? \"\"),\n ...options,\n } as UseQueryOptions<IPromotion>);\n\nexport const usePromotionsTypeForSelect = (\n options?: Omit<UseQueryOptions<IPromotionType[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...promotions.queries.getPromotionsTypeForSelect(),\n ...options,\n } as UseQueryOptions<IPromotionType[]>);\n\nexport const useCreatePromotion = (\n options?: UseMutationOptions<IPromotion, Error, IPromotion>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...promotions.mutations.createPromotion(queryClient),\n ...options,\n });\n};\n\nexport const useUpdatePromotion = (\n options?: UseMutationOptions<\n IPromotion,\n Error,\n { id: string; promotion: IPromotion }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...promotions.mutations.updatePromotion(queryClient),\n ...options,\n });\n};\n\nexport const useValidateDiscountCode = (\n options?: UseMutationOptions<boolean, Error, { discountCode: string }>,\n) =>\n useMutation({\n ...promotions.mutations.validateDiscountCode(),\n ...options,\n });\n\nexport const usePrefetchPromotion = () => {\n const queryClient = useQueryClient();\n const prefetchPromotion = (id: string) =>\n queryClient.prefetchQuery({\n ...promotions.queries.getPromotionById(id),\n });\n return { prefetchPromotion };\n};\n","import type {\n IProvider,\n IProviderForSelect,\n IProviderRequest,\n IProviderResponse\n} from '../interfaces/provider.interface'\nimport { api } from './config'\n\nexport const getAllProviders = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: {\n skip: number\n limit: number\n query?: string\n}): Promise<IProviderResponse> => {\n const { data } = await api.get<IProviderResponse>(\n `provider/?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getProviderById = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProvider> => {\n const { data } = await api.get<IProvider>(`provider/${providerId}`)\n return data\n}\n\nexport const getProvidersForSelect = async (): Promise<IProviderForSelect[]> => {\n const { data } = await api.get<IProviderForSelect[]>('provider/providersForSelect')\n return data\n}\n\nexport const createProvider = async (provider: IProviderRequest): Promise<IProviderResponse> => {\n const { data } = await api.post<IProviderResponse>('provider/', provider)\n return data\n}\n\nexport const updateProvider = async ({\n providerId,\n provider\n}: {\n providerId: string\n provider: IProvider\n}): Promise<IProviderResponse> => {\n const { data } = await api.put<IProviderResponse>(`provider/${providerId}`, provider)\n return data\n}\n\nexport const deleteProvider = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProviderResponse> => {\n const { data } = await api.delete<IProviderResponse>(`provider/${providerId}`)\n return data\n}\n\nexport const restoreProvider = async ({\n providerId\n}: {\n providerId: number\n}): Promise<IProviderResponse> => {\n const { data } = await api.patch<IProviderResponse>(`provider/${providerId}`)\n return data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getAllProviders,\n getProviderById,\n getProvidersForSelect,\n createProvider,\n updateProvider,\n deleteProvider,\n restoreProvider,\n} from \"../services/provider.service\";\nimport type {\n IProvider,\n IProviderForSelect,\n IProviderRequest,\n IProviderResponse,\n} from \"../interfaces/provider.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst providerQueryKeys = {\n all: [\"providers\"] as const,\n lists: () => [...providerQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...providerQueryKeys.lists(), { filters: params }] as const,\n details: () => [...providerQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...providerQueryKeys.details(), id] as const,\n forSelect: () => [...providerQueryKeys.all, \"select\"] as const,\n};\n\nexport const providers = {\n queries: {\n all: [\"providers\"] as const,\n getProviders: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getAllProviders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: providerQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProvidersForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getAllProviders({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: providerQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getProviderById: (id: number) =>\n queryOptions({\n queryFn: () => getProviderById({ providerId: id }),\n queryKey: providerQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getProvidersForSelect: () =>\n queryOptions({\n queryFn: getProvidersForSelect,\n queryKey: providerQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, IProviderRequest> => ({\n mutationFn: createProvider,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.all });\n successNotification({\n title: \"Proveedor creado\",\n message: \"El proveedor se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el proveedor.\",\n });\n },\n }),\n updateProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n IProviderResponse,\n Error,\n { providerId: string; provider: IProvider }\n > => ({\n mutationFn: updateProvider,\n onSuccess: (_, { providerId }) => {\n const id = parseInt(providerId, 10);\n if (!isNaN(id)) {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.detail(id) });\n }\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n successNotification({\n title: \"Proveedor actualizado\",\n message: \"El proveedor se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el proveedor.\",\n });\n },\n }),\n deleteProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, { providerId: number }> => ({\n mutationFn: deleteProvider,\n onSuccess: (_, { providerId }) => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: providerQueryKeys.detail(providerId) });\n successNotification({\n title: \"Proveedor eliminado\",\n message: \"El proveedor se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el proveedor.\",\n });\n },\n }),\n restoreProvider: (\n queryClient: QueryClient,\n ): UseMutationOptions<IProviderResponse, Error, { providerId: number }> => ({\n mutationFn: restoreProvider,\n onSuccess: (_, { providerId }) => {\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.detail(providerId) });\n queryClient.invalidateQueries({ queryKey: providerQueryKeys.lists() });\n successNotification({\n title: \"Proveedor restaurado\",\n message: \"El proveedor se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el proveedor.\",\n });\n },\n }),\n },\n};\n\nexport { providerQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { providers, providerQueryKeys } from \"../queries/provider.queries\";\nimport type {\n IProvider,\n IProviderForSelect,\n IProviderRequest,\n IProviderResponse,\n} from \"../interfaces/provider.interface\";\n\nexport const providerKeys = providerQueryKeys;\n\ninterface UseProvidersParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useProviders = (\n params: UseProvidersParams = {},\n options?: Omit<UseQueryOptions<IProviderResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...providers.queries.getProviders(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IProviderResponse>);\n\nexport const useProvidersTable = useProviders;\n\nexport const useProvider = (\n providerId: number | undefined,\n options?: Omit<UseQueryOptions<IProvider>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...providers.queries.getProviderById(providerId ?? 0),\n ...options,\n } as UseQueryOptions<IProvider>);\n\nexport const useProvidersForSelect = (\n options?: Omit<UseQueryOptions<IProviderForSelect[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...providers.queries.getProvidersForSelect(),\n ...options,\n } as UseQueryOptions<IProviderForSelect[]>);\n\nexport const useCreateProvider = (\n options?: UseMutationOptions<IProviderResponse, Error, IProviderRequest>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...providers.mutations.createProvider(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateProvider = (\n options?: UseMutationOptions<\n IProviderResponse,\n Error,\n { providerId: string; provider: IProvider }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...providers.mutations.updateProvider(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteProvider = (\n options?: UseMutationOptions<IProviderResponse, Error, { providerId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...providers.mutations.deleteProvider(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreProvider = (\n options?: UseMutationOptions<IProviderResponse, Error, { providerId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...providers.mutations.restoreProvider(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchProvider = () => {\n const queryClient = useQueryClient();\n const prefetchProvider = (providerId: number) =>\n queryClient.prefetchQuery({\n ...providers.queries.getProviderById(providerId),\n });\n return { prefetchProvider };\n};\n","import { api } from './config'\n\nexport interface QRBaseUrlResponse {\n success: boolean\n baseUrl: string\n}\n\nexport interface PrintQRResponse {\n success?: boolean\n message?: string\n data?: {\n url?: string\n productDetailID?: number\n printerResult?: boolean\n }\n [key: string]: unknown\n}\n\n/**\n * Obtiene la URL base configurada para los códigos QR (QR_BASE_URL del backend).\n */\nexport const getQRBaseUrl = async (): Promise<string> => {\n const { data } = await api.get<QRBaseUrlResponse>('/qr/base-url')\n return data?.baseUrl ?? ''\n}\n\n/**\n * Imprime un código QR en la impresora térmica.\n * El backend construye la URL: {QR_BASE_URL}/producto/{productDetailID}\n */\nexport const printQR = async ({\n productDetailId,\n printerName = '4BARCODE'\n}: {\n productDetailId: number\n printerName?: string\n}): Promise<PrintQRResponse> => {\n const { data } = await api.post<PrintQRResponse>('/qr/print', {\n productDetailID: productDetailId,\n printerName\n })\n return data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { getQRBaseUrl, printQR } from \"../services/qr.service\";\nimport type { PrintQRResponse } from \"../services/qr.service\";\n\nconst qrQueryKeys = {\n all: [\"qr\"] as const,\n baseUrl: () => [...qrQueryKeys.all, \"baseUrl\"] as const,\n};\n\nexport const qr = {\n queries: {\n all: [\"qr\"] as const,\n getQRBaseUrl: () =>\n queryOptions({\n queryFn: getQRBaseUrl,\n queryKey: qrQueryKeys.baseUrl(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n printQR: (): UseMutationOptions<\n PrintQRResponse,\n Error,\n { productDetailId: number; printerName?: string }\n > => ({\n mutationFn: printQR,\n }),\n },\n};\n\nexport { qrQueryKeys };\n","import {\n useQuery,\n useMutation,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { qr, qrQueryKeys } from \"../queries/qr.queries\";\nimport type { PrintQRResponse } from \"../services/qr.service\";\n\nexport const qrKeys = qrQueryKeys;\n\nexport const useQRBaseUrl = (\n options?: Omit<UseQueryOptions<string>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...qr.queries.getQRBaseUrl(),\n ...options,\n } as UseQueryOptions<string>);\n\nexport const usePrintQR = (\n options?: UseMutationOptions<\n PrintQRResponse,\n Error,\n { productDetailId: number; printerName?: string }\n >,\n) =>\n useMutation({\n ...qr.mutations.printQR(),\n ...options,\n });\n","import type {\n ComparisonBy,\n IReportComparisonByTimeFrame,\n IReportInventory,\n IReportX,\n IReportZ,\n IStockByWarehouseReport\n} from '../interfaces/report.interface'\nimport { api } from './config'\n\nexport const getStockByWarehouseReport = async ({\n limit = 2,\n allWarehouses = false\n}: {\n limit: number\n allWarehouses: boolean\n}): Promise<IStockByWarehouseReport[]> => {\n const response = await api.get(`/report?limit=${limit}&allWarehouses=${allWarehouses}`)\n return response.data\n}\n\nexport const getReportX = async ({\n startDate,\n sellerID,\n isShiftChange = false\n}: {\n startDate: string\n sellerID: number\n isShiftChange: boolean\n}): Promise<IReportX> => {\n const response = await api.get(\n `/report/report-x?startDate=${startDate}&sellerID=${sellerID}&isShiftChange=${isShiftChange}`\n )\n return response.data\n}\n\nexport const printReportX = async ({\n startDate,\n sellerID\n}: {\n startDate: string\n sellerID: number\n}): Promise<boolean> => {\n const response = await api.get(\n `/report/printReport-x?startDate=${startDate}&sellerID=${sellerID}`\n )\n return response.data\n}\n\nexport const getReportComparisonByTimeFrame = async ({\n startDate,\n endDate,\n comparisonBy,\n productIds\n}: {\n startDate: Date\n endDate: Date\n comparisonBy: ComparisonBy\n productIds: string[]\n}): Promise<IReportComparisonByTimeFrame> => {\n const response = await api.get(\n `/report/comparison?startDate=${startDate.toISOString()}&endDate=${endDate.toISOString()}&comparisonBy=${comparisonBy}&productIds=${productIds}`\n )\n return response.data\n}\n\nexport const getReportByInventory = async ({\n productIDs,\n categoryIDs,\n warehouseIDs,\n providerIDs\n}: {\n productIDs: number[] | null\n categoryIDs: number[] | null\n warehouseIDs: number[] | null\n providerIDs: number[] | null\n}): Promise<IReportInventory[]> => {\n const params = new URLSearchParams()\n \n if (productIDs && productIDs.length > 0) {\n params.append('productIDs', productIDs.join(','))\n }\n if (categoryIDs && categoryIDs.length > 0) {\n params.append('categoryIDs', categoryIDs.join(','))\n }\n if (warehouseIDs && warehouseIDs.length > 0) {\n params.append('warehouseIDs', warehouseIDs.join(','))\n }\n if (providerIDs && providerIDs.length > 0) {\n params.append('providerIDs', providerIDs.join(','))\n }\n\n const queryString = params.toString()\n const url = `/report/inventory${queryString ? `?${queryString}` : ''}`\n \n const response = await api.get(url)\n return response.data\n}\n\nexport const getReportZ = async ({\n startDate,\n sellerID,\n isShiftChange = false\n}: {\n startDate: string\n sellerID: number\n isShiftChange: boolean\n}): Promise<IReportZ> => {\n const response = await api.get(\n `/report/report-z?startDate=${startDate}&sellerID=${sellerID}&isShiftChange=${isShiftChange}`\n )\n return response.data\n}\n\nexport const printReportZ = async ({\n startDate,\n sellerID\n}: {\n startDate: string\n sellerID: number\n}): Promise<boolean> => {\n const response = await api.get(\n `/report/printReport-z?startDate=${startDate}&sellerID=${sellerID}`\n )\n return response.data\n}\n\nexport const checkPendingReportZ = async (): Promise<Date[]> => {\n const response = await api.get('/report/pending-report-z')\n return response.data\n}\n","import { queryOptions, type UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n getStockByWarehouseReport,\n getReportX,\n printReportX,\n getReportComparisonByTimeFrame,\n getReportByInventory,\n getReportZ,\n printReportZ,\n checkPendingReportZ,\n} from \"../services/report.service\";\nimport { getPaymentMethodsWithAmountExpected } from \"../services/payment.service\";\nimport type {\n ComparisonBy,\n IReportComparisonByTimeFrame,\n IReportInventory,\n IReportX,\n IReportZ,\n IStockByWarehouseReport,\n} from \"../interfaces/report.interface\";\n\nconst reportQueryKeys = {\n all: [\"reports\"] as const,\n stockByWarehouse: (params: { limit: number; allWarehouses: boolean }) =>\n [...reportQueryKeys.all, \"stockByWarehouse\", params] as const,\n reportX: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n }) => [...reportQueryKeys.all, \"reportX\", params] as const,\n reportZ: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n }) => [...reportQueryKeys.all, \"reportZ\", params] as const,\n comparison: (params: {\n startDate: Date;\n endDate: Date;\n comparisonBy: ComparisonBy;\n productIds: string[];\n }) => [...reportQueryKeys.all, \"comparison\", params] as const,\n inventory: (params: {\n productIDs: number[] | null;\n categoryIDs: number[] | null;\n warehouseIDs: number[] | null;\n providerIDs: number[] | null;\n }) => [...reportQueryKeys.all, \"inventory\", params] as const,\n pendingReportZ: () => [...reportQueryKeys.all, \"pendingReportZ\"] as const,\n paymentMethods: () => [...reportQueryKeys.all, \"paymentMethods\"] as const,\n};\n\nexport const reports = {\n queries: {\n all: [\"reports\"] as const,\n getStockByWarehouseReport: (params: {\n limit?: number;\n allWarehouses?: boolean;\n }) =>\n queryOptions({\n queryFn: () =>\n getStockByWarehouseReport({\n limit: params.limit ?? 2,\n allWarehouses: params.allWarehouses ?? false,\n }),\n queryKey: reportQueryKeys.stockByWarehouse({\n limit: params.limit ?? 2,\n allWarehouses: params.allWarehouses ?? false,\n }),\n staleTime: 60 * 1000,\n }),\n getReportX: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null) =>\n queryOptions({\n queryFn: () =>\n getReportX({\n ...params!,\n isShiftChange: params!.isShiftChange ?? false,\n }),\n queryKey: reportQueryKeys.reportX(params!),\n enabled: !!params?.startDate && !!params?.sellerID,\n staleTime: 60 * 1000,\n }),\n getReportComparisonByTimeFrame: (params: {\n startDate: Date;\n endDate: Date;\n comparisonBy: ComparisonBy;\n productIds: string[];\n } | null) =>\n queryOptions({\n queryFn: () => getReportComparisonByTimeFrame(params!),\n queryKey: reportQueryKeys.comparison(params!),\n enabled: !!params?.startDate && !!params?.endDate,\n staleTime: 60 * 1000,\n }),\n getReportByInventory: (params: {\n productIDs: number[] | null;\n categoryIDs: number[] | null;\n warehouseIDs: number[] | null;\n providerIDs: number[] | null;\n } | null) =>\n queryOptions({\n queryFn: () => getReportByInventory(params!),\n queryKey: reportQueryKeys.inventory(params!),\n enabled: !!params,\n staleTime: 60 * 1000,\n }),\n getReportZ: (params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null) =>\n queryOptions({\n queryFn: () =>\n getReportZ({\n ...params!,\n isShiftChange: params!.isShiftChange ?? false,\n }),\n queryKey: reportQueryKeys.reportZ(params!),\n enabled: !!params?.startDate && !!params?.sellerID,\n staleTime: 60 * 1000,\n }),\n getPendingReportZ: () =>\n queryOptions({\n queryFn: checkPendingReportZ,\n queryKey: reportQueryKeys.pendingReportZ(),\n staleTime: 30_000,\n }),\n getPaymentMethodsWithAmountExpected: () =>\n queryOptions({\n queryFn: getPaymentMethodsWithAmountExpected,\n queryKey: reportQueryKeys.paymentMethods(),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n printReportX: (): UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n > => ({\n mutationFn: printReportX,\n }),\n printReportZ: (): UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n > => ({\n mutationFn: printReportZ,\n }),\n },\n};\n\nexport { reportQueryKeys };\n","import {\n useQuery,\n useMutation,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { reports, reportQueryKeys } from \"../queries/report.queries\";\nimport type {\n ComparisonBy,\n IReportComparisonByTimeFrame,\n IReportInventory,\n IReportX,\n IReportZ,\n IStockByWarehouseReport,\n} from \"../interfaces/report.interface\";\nimport type { IPaymentMethodAmountExpected } from \"../interfaces/payment.interface\";\n\nexport const reportKeys = reportQueryKeys;\n\nexport const useStockByWarehouseReport = (\n params: { limit?: number; allWarehouses?: boolean },\n options?: Omit<\n UseQueryOptions<IStockByWarehouseReport[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...reports.queries.getStockByWarehouseReport(params),\n ...options,\n } as UseQueryOptions<IStockByWarehouseReport[]>);\n\nexport const useReportX = (\n params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null,\n options?: Omit<UseQueryOptions<IReportX>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...reports.queries.getReportX(params),\n ...options,\n } as UseQueryOptions<IReportX>);\n\nexport const usePrintReportX = (\n options?: UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n >,\n) =>\n useMutation({\n ...reports.mutations.printReportX(),\n ...options,\n });\n\nexport const useReportComparisonByTimeFrame = (\n params: {\n startDate: Date;\n endDate: Date;\n comparisonBy: ComparisonBy;\n productIds: string[];\n } | null,\n options?: Omit<\n UseQueryOptions<IReportComparisonByTimeFrame>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...reports.queries.getReportComparisonByTimeFrame(params),\n ...options,\n } as UseQueryOptions<IReportComparisonByTimeFrame>);\n\nexport const useReportByInventory = (\n params: {\n productIDs: number[] | null;\n categoryIDs: number[] | null;\n warehouseIDs: number[] | null;\n providerIDs: number[] | null;\n } | null,\n options?: Omit<\n UseQueryOptions<IReportInventory[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...reports.queries.getReportByInventory(params),\n ...options,\n } as UseQueryOptions<IReportInventory[]>);\n\nexport const useInventoryTable = useReportByInventory;\n\nexport const useReportZ = (\n params: {\n startDate: string;\n sellerID: number;\n isShiftChange?: boolean;\n } | null,\n options?: Omit<UseQueryOptions<IReportZ>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...reports.queries.getReportZ(params),\n ...options,\n } as UseQueryOptions<IReportZ>);\n\nexport const usePrintReportZ = (\n options?: UseMutationOptions<\n boolean,\n Error,\n { startDate: string; sellerID: number }\n >,\n) =>\n useMutation({\n ...reports.mutations.printReportZ(),\n ...options,\n });\n\nexport const usePendingReportZ = (\n options?: Omit<UseQueryOptions<Date[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...reports.queries.getPendingReportZ(),\n ...options,\n } as UseQueryOptions<Date[]>);\n\nexport const usePaymentMethodsWithAmount = (\n options?: Omit<\n UseQueryOptions<IPaymentMethodAmountExpected[]>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...reports.queries.getPaymentMethodsWithAmountExpected(),\n ...options,\n } as UseQueryOptions<IPaymentMethodAmountExpected[]>);\n","import type { TblOrderDetail, TblReturn } from '../interfaces/order.interface'\nimport { api } from './config'\n\nexport const createReturn = async ({\n orderId,\n returnReason,\n orderDetails,\n warehouseDestinationID\n}: {\n orderId: number\n returnReason: string\n orderDetails: TblOrderDetail[]\n warehouseDestinationID: number\n}): Promise<void> => {\n const response = await api.post(`/returns`, {\n orderId,\n returnReason,\n orderDetails,\n warehouseDestinationID\n })\n return response.data\n}\n\nexport interface GetReturnsByOrderIdResponse {\n message: string\n data: TblReturn[]\n}\n\nexport const getReturnsByOrderId = async ({\n orderId\n}: {\n orderId: number\n}): Promise<GetReturnsByOrderIdResponse> => {\n const response = await api.get(`/returns/order/${orderId}`)\n return response.data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getReturnsByOrderId, createReturn } from \"../services/return.service\";\nimport type { TblOrderDetail } from \"../interfaces/order.interface\";\nimport type { GetReturnsByOrderIdResponse } from \"../services/return.service\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst returnQueryKeys = {\n all: [\"returns\"] as const,\n byOrder: (orderId: number) => [...returnQueryKeys.all, \"order\", orderId] as const,\n};\n\nexport const returns = {\n queries: {\n all: [\"returns\"] as const,\n getReturnsByOrderId: (orderId: number) =>\n queryOptions({\n queryFn: () => getReturnsByOrderId({ orderId }),\n queryKey: returnQueryKeys.byOrder(orderId),\n enabled: !!orderId && orderId > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createReturn: (\n queryClient: QueryClient,\n ): UseMutationOptions<\n void,\n Error,\n {\n orderId: number;\n returnReason: string;\n orderDetails: TblOrderDetail[];\n warehouseDestinationID: number;\n }\n > => ({\n mutationFn: createReturn,\n onSuccess: (_, variables) => {\n queryClient.invalidateQueries({\n queryKey: returnQueryKeys.byOrder(variables.orderId),\n });\n queryClient.invalidateQueries({ queryKey: returnQueryKeys.all });\n successNotification({\n title: \"Devolución creada\",\n message: \"La devolución se ha registrado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear la devolución.\",\n });\n },\n }),\n },\n};\n\nexport { returnQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { returns, returnQueryKeys } from \"../queries/return.queries\";\nimport type { TblOrderDetail } from \"../interfaces/order.interface\";\nimport type { GetReturnsByOrderIdResponse } from \"../services/return.service\";\n\nexport const returnKeys = returnQueryKeys;\n\nexport const useReturnsByOrderId = (\n orderId: number | undefined,\n options?: Omit<\n UseQueryOptions<GetReturnsByOrderIdResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...returns.queries.getReturnsByOrderId(orderId ?? 0),\n ...options,\n } as UseQueryOptions<GetReturnsByOrderIdResponse>);\n\nexport const useCreateReturn = (\n options?: UseMutationOptions<\n void,\n Error,\n {\n orderId: number;\n returnReason: string;\n orderDetails: TblOrderDetail[];\n warehouseDestinationID: number;\n }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...returns.mutations.createReturn(queryClient),\n ...options,\n });\n};\n","import type { IRole } from '../interfaces/role.interface'\nimport { api } from './config'\n\nexport const getRoles = async (): Promise<IRole[]> => {\n const response = await api.get('/role')\n return response.data\n}\n\nexport const getRoleByID = async ({\n roleId\n}: {\n roleId: number\n}): Promise<IRole> => {\n const response = await api.get(`/role/${roleId}`)\n return response.data\n}\n\nexport const createRole = async (role: IRole): Promise<IRole> => {\n const response = await api.post('/role', role)\n return response.data\n}\n\nexport const updateRole = async ({\n roleId,\n role\n}: {\n roleId: number\n role: IRole\n}): Promise<IRole> => {\n const response = await api.put(`/role/${roleId}`, role)\n return response.data\n}\n\nexport const deleteRole = async ({\n roleId\n}: {\n roleId: number\n}): Promise<void> => {\n await api.delete(`/role/${roleId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getRoles,\n getRoleByID,\n createRole,\n updateRole,\n deleteRole,\n} from \"../services/role.service\";\nimport type { IRole } from \"../interfaces/role.interface\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst roleQueryKeys = {\n all: [\"roles\"] as const,\n lists: () => [...roleQueryKeys.all, \"list\"] as const,\n details: () => [...roleQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...roleQueryKeys.details(), id] as const,\n};\n\nexport const roles = {\n queries: {\n all: [\"roles\"] as const,\n getRoles: () =>\n queryOptions({\n queryFn: getRoles,\n queryKey: roleQueryKeys.lists(),\n staleTime: 10 * 60 * 1000,\n }),\n getRoleById: (id: number) =>\n queryOptions({\n queryFn: () => getRoleByID({ roleId: id }),\n queryKey: roleQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<IRole, Error, IRole> => ({\n mutationFn: createRole,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.all });\n successNotification({\n title: \"Rol creado\",\n message: \"El rol se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el rol.\",\n });\n },\n }),\n updateRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<IRole, Error, { roleId: number; role: IRole }> => ({\n mutationFn: updateRole,\n onSuccess: (_, { roleId }) => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.detail(roleId) });\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.lists() });\n successNotification({\n title: \"Rol actualizado\",\n message: \"El rol se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el rol.\",\n });\n },\n }),\n deleteRole: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { roleId: number }> => ({\n mutationFn: deleteRole,\n onSuccess: (_, { roleId }) => {\n queryClient.invalidateQueries({ queryKey: roleQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: roleQueryKeys.detail(roleId) });\n successNotification({\n title: \"Rol eliminado\",\n message: \"El rol se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el rol.\",\n });\n },\n }),\n },\n};\n\nexport { roleQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { roles, roleQueryKeys } from \"../queries/role.queries\";\nimport type { IRole } from \"../interfaces/role.interface\";\n\nexport const roleKeys = roleQueryKeys;\n\nexport const useRoles = (\n options?: Omit<UseQueryOptions<IRole[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...roles.queries.getRoles(),\n ...options,\n } as UseQueryOptions<IRole[]>);\n\nexport const useRolesTable = useRoles;\n\nexport const useRole = (\n roleId: number | undefined,\n options?: Omit<UseQueryOptions<IRole>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...roles.queries.getRoleById(roleId ?? 0),\n ...options,\n } as UseQueryOptions<IRole>);\n\nexport const useCreateRole = (\n options?: UseMutationOptions<IRole, Error, IRole>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...roles.mutations.createRole(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateRole = (\n options?: UseMutationOptions<IRole, Error, { roleId: number; role: IRole }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...roles.mutations.updateRole(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteRole = (\n options?: UseMutationOptions<void, Error, { roleId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...roles.mutations.deleteRole(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchRole = () => {\n const queryClient = useQueryClient();\n const prefetchRole = (roleId: number) =>\n queryClient.prefetchQuery({\n ...roles.queries.getRoleById(roleId),\n });\n return { prefetchRole };\n};\n","import { api } from './config'\n\nexport interface Response {\n status: boolean\n httpStatus: number\n message: string\n data: unknown\n}\n\ninterface CloseShiftData {\n sellerID: number\n date: string\n paymentMethods: {\n paymentMethodId: number\n amount: number\n }[]\n cashBreakdown?: {\n coinsTotal: number\n bills: {\n denomination: number\n quantity: number\n }[]\n }\n}\n\nexport const closeShift = async (data: CloseShiftData): Promise<Response> => {\n const response = await api.post<Response>('/shift/close', data, {\n headers: {\n 'Content-Type': 'application/json'\n }\n })\n return response.data\n}\n\nexport const makeNewCashMovement = async ({\n userID,\n amount,\n comment,\n isWithdrawal\n}: {\n userID: number | undefined\n amount: number\n comment?: string\n isWithdrawal: boolean\n}): Promise<Response> => {\n const { data } = await api.post<Response>(\n 'shift/cashmovement',\n {\n userID,\n amount,\n comment,\n isWithdrawal\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n\nexport const setNewShift = async ({\n userID,\n initialCash\n}: {\n userID: number | undefined\n initialCash: number\n}): Promise<Response> => {\n const { data } = await api.post<Response>(\n 'shift/',\n {\n userID,\n initialCash\n },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n )\n return data\n}\n","import type { UseMutationOptions } from \"@tanstack/react-query\";\nimport {\n closeShift,\n makeNewCashMovement,\n setNewShift,\n} from \"../services/shift.service\";\nimport type { Response } from \"../services/shift.service\";\n\nexport interface CloseShiftData {\n sellerID: number;\n date: string;\n paymentMethods: {\n paymentMethodId: number;\n amount: number;\n }[];\n cashBreakdown?: {\n coinsTotal: number;\n bills: {\n denomination: number;\n quantity: number;\n }[];\n };\n}\n\nexport const shifts = {\n queries: {\n all: [\"shifts\"] as const,\n },\n\n mutations: {\n closeShift: (): UseMutationOptions<Response, Error, CloseShiftData> => ({\n mutationFn: closeShift,\n }),\n makeNewCashMovement: (): UseMutationOptions<\n Response,\n Error,\n {\n userID: number | undefined;\n amount: number;\n comment?: string;\n isWithdrawal: boolean;\n }\n > => ({\n mutationFn: makeNewCashMovement,\n }),\n setNewShift: (): UseMutationOptions<\n Response,\n Error,\n { userID: number | undefined; initialCash: number }\n > => ({\n mutationFn: setNewShift,\n }),\n },\n};\n","import { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { shifts } from \"../queries/shift.queries\";\nimport type { Response } from \"../services/shift.service\";\nimport type { CloseShiftData } from \"../queries/shift.queries\";\n\nexport const useCloseShift = (\n options?: UseMutationOptions<Response, Error, CloseShiftData>,\n) =>\n useMutation({\n ...shifts.mutations.closeShift(),\n ...options,\n });\n\nexport const useMakeNewCashMovement = (\n options?: UseMutationOptions<\n Response,\n Error,\n {\n userID: number | undefined;\n amount: number;\n comment?: string;\n isWithdrawal: boolean;\n }\n >,\n) =>\n useMutation({\n ...shifts.mutations.makeNewCashMovement(),\n ...options,\n });\n\nexport const useSetNewShift = (\n options?: UseMutationOptions<\n Response,\n Error,\n { userID: number | undefined; initialCash: number }\n >,\n) =>\n useMutation({\n ...shifts.mutations.setNewShift(),\n ...options,\n });\n","import { api } from './config'\n\nexport interface StateResponse {\n stateID: number\n state: string\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getAllStates = async (): Promise<StateResponse[]> => {\n const { data } = await api.get<StateResponse[]>('state/')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getAllStates } from \"../services/state.service\";\nimport type { StateResponse } from \"../services/state.service\";\n\nconst stateQueryKeys = {\n all: [\"states\"] as const,\n};\n\nexport const states = {\n queries: {\n all: [\"states\"] as const,\n getAllStates: () =>\n queryOptions({\n queryFn: getAllStates,\n queryKey: stateQueryKeys.all,\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { stateQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { states, stateQueryKeys } from \"../queries/state.queries\";\nimport type { StateResponse } from \"../services/state.service\";\n\nexport const stateKeys = stateQueryKeys;\n\nexport const useAllStates = (\n options?: Omit<UseQueryOptions<StateResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...states.queries.getAllStates(),\n ...options,\n } as UseQueryOptions<StateResponse[]>);\n","import type { IStockMovement, IStockMovementResponse } from '../interfaces/stockmovement.interface'\nimport { api } from './config'\n\ninterface MovementQuery {\n skip?: number\n limit?: number\n query?: string\n movementType?: number\n}\n\nexport interface MovementResponse {\n stockMovementID: number\n quantity: number\n addressID: number\n isOpen: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const createMovement = async (movement: FormData): Promise<IStockMovement> => {\n const { data } = await api.post<IStockMovement>('movement/', movement, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\n// export const getAllLocations = async (): Promise<LocationResponse[]> => {\n// const { data } = await api.get<LocationResponse[]>('location/')\n// return data\n// }\n\n// export const getLocationsForSelect = async (): Promise<LocationResponse[]> => {\n// const { data } = await api.get<LocationResponse[]>('location/locationsForSelect')\n// return data\n// }\n\nexport const getMovements = async ({\n skip = 0,\n limit = 10,\n query = '',\n movementType = 1\n}: MovementQuery): Promise<IStockMovementResponse> => {\n const { data } = await api.get<IStockMovementResponse>(\n `movement/movements?skip=${skip}&limit=${limit}&query=${query}&movementTypeID=${movementType}`\n )\n return data\n}","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getMovements, createMovement } from \"../services/stockmovement.service\";\nimport type {\n IStockMovement,\n IStockMovementResponse,\n} from \"../interfaces/stockmovement.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst stockMovementQueryKeys = {\n all: [\"stockMovements\"] as const,\n lists: () => [...stockMovementQueryKeys.all, \"list\"] as const,\n list: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n movementType?: number;\n }) => [...stockMovementQueryKeys.lists(), { filters: params }] as const,\n};\n\nexport const stockMovements = {\n queries: {\n all: [\"stockMovements\"] as const,\n getMovements: (params: {\n skip?: number;\n limit?: number;\n query?: string | null;\n movementType?: number;\n }) =>\n queryOptions({\n queryFn: () =>\n getMovements({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n movementType: params.movementType ?? 1,\n }),\n queryKey: stockMovementQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getMovementsForTable: (params: TableQueryParams & { movementType?: number }) =>\n queryOptions({\n queryFn: () =>\n getMovements({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n movementType: params.movementType ?? 1,\n }),\n queryKey: stockMovementQueryKeys.list(params),\n staleTime: 30_000,\n }),\n },\n\n mutations: {\n createMovement: (\n queryClient: QueryClient,\n ): UseMutationOptions<IStockMovement, Error, FormData> => ({\n mutationFn: createMovement,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: stockMovementQueryKeys.all });\n successNotification({\n title: \"Movimiento creado\",\n message: \"El movimiento se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el movimiento.\",\n });\n },\n }),\n },\n};\n\nexport { stockMovementQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n stockMovements,\n stockMovementQueryKeys,\n} from \"../queries/stockmovement.queries\";\nimport type {\n IStockMovement,\n IStockMovementResponse,\n} from \"../interfaces/stockmovement.interface\";\n\nexport const stockMovementKeys = stockMovementQueryKeys;\n\ninterface UseMovementsParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n movementType?: number;\n}\n\nexport const useMovements = (\n params: UseMovementsParams = {},\n options?: Omit<\n UseQueryOptions<IStockMovementResponse>,\n \"queryKey\" | \"queryFn\"\n >,\n) =>\n useQuery({\n ...stockMovements.queries.getMovements(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IStockMovementResponse>);\n\nexport const useMovementsTable = useMovements;\n\nexport const useCreateMovement = (\n options?: UseMutationOptions<IStockMovement, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...stockMovements.mutations.createMovement(queryClient),\n ...options,\n });\n};\n","import type { ITax } from '../interfaces/tax.interface'\nimport { api } from './config'\n\nexport const getTaxesForSelect = async (): Promise<ITax[]> => {\n const { data } = await api.get<ITax[]>('tax/taxesForSelect')\n return data\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getTaxesForSelect } from \"../services/tax.service\";\nimport type { ITax } from \"../interfaces/tax.interface\";\n\nconst taxQueryKeys = {\n all: [\"taxes\"] as const,\n forSelect: () => [...taxQueryKeys.all, \"select\"] as const,\n};\n\nexport const taxes = {\n queries: {\n all: [\"taxes\"] as const,\n getTaxesForSelect: () =>\n queryOptions({\n queryFn: getTaxesForSelect,\n queryKey: taxQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {},\n};\n\nexport { taxQueryKeys };\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { taxes, taxQueryKeys } from \"../queries/tax.queries\";\nimport type { ITax } from \"../interfaces/tax.interface\";\n\nexport const taxKeys = taxQueryKeys;\n\nexport const useTaxesForSelect = (\n options?: Omit<UseQueryOptions<ITax[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...taxes.queries.getTaxesForSelect(),\n ...options,\n } as UseQueryOptions<ITax[]>);\n","import type { AgentResponse, IUser, IUserForm, UserResponse } from '../interfaces/user.interface'\nimport { api } from './config'\n\ninterface UserQuery {\n skip?: number\n limit?: number\n query?: string\n roleId?: string\n}\n\nexport const getSellersWithShift = async (): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>(`user/getSellersWithShift/`)\n return data\n}\n\nexport const getSellersOfDayForSelect = async ({\n date\n}: {\n date: string\n}): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>(`user/getSellersOfDayForSelect/${date}`)\n return data\n}\n\nexport const getAllAgents = async (): Promise<AgentResponse> => {\n const { data } = await api.get<AgentResponse>('user/getallagents')\n return data\n}\n\nexport const getUsers = async ({\n skip = 0,\n limit = 10,\n query = '',\n roleId,\n}: UserQuery): Promise<UserResponse> => {\n const params = new URLSearchParams({\n skip: String(skip),\n limit: String(limit),\n ...(query && { query }),\n ...(roleId && { roleId }),\n });\n const { data } = await api.get<UserResponse>(`user/?${params}`)\n return data\n}\n\nexport const getUserById = async ({ userId }: { userId: number }): Promise<IUser> => {\n const { data } = await api.get<IUser>(`user/${userId}`)\n return data\n}\n\nexport const createUser = async ({ user }: { user: IUserForm }): Promise<void> => {\n await api.post('user/', user)\n}\n\nexport const updateUser = async ({\n userId,\n user\n}: {\n userId: number\n user: IUserForm\n}): Promise<void> => {\n await api.put(`user/${userId}`, user)\n}\n\nexport const deleteUser = async ({ userId }: { userId: number }): Promise<void> => {\n await api.delete(`user/${userId}`)\n}\nexport const restoreUser = async ({ userId }: { userId: number }): Promise<void> => {\n await api.patch(`user/${userId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getUsers,\n getUserById,\n getSellersWithShift,\n getSellersOfDayForSelect,\n getAllAgents,\n createUser,\n updateUser,\n deleteUser,\n restoreUser,\n} from \"../services/user.service\";\nimport type {\n IUserForm,\n} from \"../interfaces/user.interface\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst userQueryKeys = {\n all: [\"users\"] as const,\n lists: () => [...userQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...userQueryKeys.lists(), { filters: params }] as const,\n details: () => [...userQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...userQueryKeys.details(), id] as const,\n sellersWithShift: () => [...userQueryKeys.all, \"sellersWithShift\"] as const,\n sellersOfDay: (date: string) =>\n [...userQueryKeys.all, \"sellersOfDay\", date] as const,\n agents: () => [...userQueryKeys.all, \"agents\"] as const,\n};\n\nexport const users = {\n queries: {\n all: [\"users\"] as const,\n getUsers: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getUsers({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: userQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getUsersForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getUsers({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n roleId: params.columnFilters\n ?.find((f) => f.id === \"tblRoles_tblUsers_roleIDTotblRoles.role\")\n ?.value as string | undefined,\n }),\n queryKey: userQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getUserById: (id: number) =>\n queryOptions({\n queryFn: () => getUserById({ userId: id }),\n queryKey: userQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getSellersWithShift: () =>\n queryOptions({\n queryFn: getSellersWithShift,\n queryKey: userQueryKeys.sellersWithShift(),\n staleTime: 30_000,\n }),\n getSellersOfDayForSelect: (date: string) =>\n queryOptions({\n queryFn: () => getSellersOfDayForSelect({ date }),\n queryKey: userQueryKeys.sellersOfDay(date),\n enabled: !!date,\n staleTime: 5 * 60 * 1000,\n }),\n getAllAgents: () =>\n queryOptions({\n queryFn: getAllAgents,\n queryKey: userQueryKeys.agents(),\n staleTime: 5 * 60 * 1000,\n }),\n },\n\n mutations: {\n createUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { user: IUserForm }> => ({\n mutationFn: createUser,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: userQueryKeys.all });\n successNotification({\n title: \"Usuario creado\",\n message: \"El usuario se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el usuario.\",\n });\n },\n }),\n\n updateUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number; user: IUserForm }> => ({\n mutationFn: updateUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n successNotification({\n title: \"Usuario actualizado\",\n message: \"El usuario se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el usuario.\",\n });\n },\n }),\n\n deleteUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number }> => ({\n mutationFn: deleteUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n queryClient.removeQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n successNotification({\n title: \"Usuario eliminado\",\n message: \"El usuario se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el usuario.\",\n });\n },\n }),\n\n restoreUser: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { userId: number }> => ({\n mutationFn: restoreUser,\n onSuccess: (_, { userId }) => {\n queryClient.invalidateQueries({\n queryKey: userQueryKeys.detail(userId),\n });\n queryClient.invalidateQueries({ queryKey: userQueryKeys.lists() });\n successNotification({\n title: \"Usuario restaurado\",\n message: \"El usuario se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el usuario.\",\n });\n },\n }),\n },\n};\n\nexport { userQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { users, userQueryKeys } from \"../queries/user.queries\";\nimport type {\n IUser,\n IUserForm,\n AgentResponse,\n UserResponse,\n} from \"../interfaces/user.interface\";\n\n// Re-export query keys for backward compatibility\nexport const userKeys = userQueryKeys;\n\ninterface UseUsersParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useUsers = (\n params: UseUsersParams = {},\n options?: Omit<UseQueryOptions<UserResponse>, \"queryKey\" | \"queryFn\">,\n) => {\n const { skip = 0, limit = 10, query = \"\" } = params;\n return useQuery({\n ...users.queries.getUsers({ skip, limit, query }),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<UserResponse>);\n};\n\n/** Alias for useUsers - paginated list for tables */\nexport const useUsersTable = useUsers;\n\nexport const useUser = (\n userId: number | undefined,\n options?: Omit<UseQueryOptions<IUser>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...users.queries.getUserById(userId ?? 0),\n ...options,\n } as UseQueryOptions<IUser>);\n\nexport const useSellersWithShift = (\n options?: Omit<UseQueryOptions<AgentResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...users.queries.getSellersWithShift(),\n ...options,\n } as UseQueryOptions<AgentResponse>);\n\nexport const useSellersOfDayForSelect = (\n date: string | undefined,\n options?: Omit<UseQueryOptions<AgentResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...users.queries.getSellersOfDayForSelect(date ?? \"\"),\n ...options,\n } as UseQueryOptions<AgentResponse>);\n\nexport const useAllAgents = (\n options?: Omit<UseQueryOptions<AgentResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...users.queries.getAllAgents(),\n ...options,\n } as UseQueryOptions<AgentResponse>);\n\nexport const useCreateUser = (\n options?: UseMutationOptions<void, Error, { user: IUserForm }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...users.mutations.createUser(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateUser = (\n options?: UseMutationOptions<\n void,\n Error,\n { userId: number; user: IUserForm }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...users.mutations.updateUser(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteUser = (\n options?: UseMutationOptions<void, Error, { userId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...users.mutations.deleteUser(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreUser = (\n options?: UseMutationOptions<void, Error, { userId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...users.mutations.restoreUser(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchUser = () => {\n const queryClient = useQueryClient();\n const prefetchUser = (userId: number) =>\n queryClient.prefetchQuery({\n ...users.queries.getUserById(userId),\n });\n return { prefetchUser };\n};\n","import { api } from './config'\n\nexport interface IUserSettings {\n lowStockThreshold: number\n}\n\ninterface UserSettingsResponse {\n data: IUserSettings\n message?: string\n}\n\nexport const getUserSettings = async (): Promise<IUserSettings> => {\n const { data } = await api.get<UserSettingsResponse>('user-settings')\n return data.data\n}\n\nexport const updateUserSettings = async (\n settings: Partial<IUserSettings>,\n): Promise<IUserSettings> => {\n const { data } = await api.put<UserSettingsResponse>('user-settings', settings)\n return data.data\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getUserSettings,\n updateUserSettings,\n} from \"../services/userSettings.service\";\nimport type { IUserSettings } from \"../services/userSettings.service\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst userSettingsQueryKeys = {\n all: [\"userSettings\"] as const,\n detail: () => [...userSettingsQueryKeys.all, \"detail\"] as const,\n};\n\nexport const userSettingsConfig = {\n queries: {\n getUserSettings: () =>\n queryOptions({\n queryFn: getUserSettings,\n queryKey: userSettingsQueryKeys.detail(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n updateUserSettings: (\n queryClient: QueryClient,\n ): UseMutationOptions<IUserSettings, Error, Partial<IUserSettings>> => ({\n mutationFn: updateUserSettings,\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: userSettingsQueryKeys.all,\n });\n successNotification({\n title: \"Configuración guardada\",\n message: \"Tu configuración se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message:\n error.message || \"No se pudo guardar la configuración.\",\n });\n },\n }),\n },\n};\n\nexport { userSettingsQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n userSettingsConfig,\n userSettingsQueryKeys,\n} from \"../queries/userSettings.queries\";\nimport type { IUserSettings } from \"../services/userSettings.service\";\n\nexport const userSettingsKeys = userSettingsQueryKeys;\n\nexport const useUserSettings = (\n options?: Omit<UseQueryOptions<IUserSettings>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...userSettingsConfig.queries.getUserSettings(),\n ...options,\n } as UseQueryOptions<IUserSettings>);\n\nexport const useUpdateUserSettings = (\n options?: UseMutationOptions<IUserSettings, Error, Partial<IUserSettings>>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...userSettingsConfig.mutations.updateUserSettings(queryClient),\n ...options,\n });\n};\n","import type { IWareHouse, IWareHouseResponse } from '../interfaces/warehouse.interface'\nimport { api } from './config'\n\ninterface WareHouseQuery {\n skip?: number\n limit?: number\n query?: string\n}\n\nexport interface WarehouseResponse {\n wareHouseID: number\n wareHouse: string\n wareHouseWithLocation: string\n physicialLocationID: number\n isShowroom: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: null\n savedDate: null\n deletedBy: null\n deletedDate: null\n}\n\nexport const getWarehousesForSelect = async (): Promise<WarehouseResponse[]> => {\n const { data } = await api.get<WarehouseResponse[]>('warehouse/warehousesForSelect')\n return data\n}\n\nexport const getWarehouses = async ({\n skip = 0,\n limit = 10,\n query = ''\n}: WareHouseQuery): Promise<IWareHouseResponse> => {\n const { data } = await api.get<IWareHouseResponse>(\n `warehouse/warehouses?skip=${skip}&limit=${limit}&query=${query}`\n )\n return data\n}\n\nexport const getWarehouseById = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<IWareHouse> => {\n const { data } = await api.get(`/warehouse/${warehouseId}`)\n return data.data\n}\n\nexport const updateWarehouse = async ({\n warehouseId,\n warehouse\n}: {\n warehouseId: number\n warehouse: FormData\n}): Promise<IWareHouse> => {\n const { data } = await api.put<IWareHouse>(`/warehouse/${warehouseId}`, warehouse, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const createWareHouse = async (warehouse: FormData): Promise<IWareHouse> => {\n const { data } = await api.post<IWareHouse>('warehouse/', warehouse, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n })\n return data\n}\n\nexport const deleteWarehouse = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<void> => {\n await api.delete(`/warehouse/${warehouseId}`)\n}\n\nexport const restoreWarehouse = async ({\n warehouseId\n}: {\n warehouseId: number\n}): Promise<void> => {\n await api.patch(`/warehouse/${warehouseId}`)\n}\n","import {\n type QueryClient,\n queryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport {\n getWarehouses,\n getWarehouseById,\n getWarehousesForSelect,\n createWareHouse,\n updateWarehouse,\n deleteWarehouse,\n restoreWarehouse,\n} from \"../services/warehouse.service\";\nimport type { IWareHouse, IWareHouseResponse } from \"../interfaces/warehouse.interface\";\nimport type { WarehouseResponse } from \"../services/warehouse.service\";\nimport type { TableQueryParams } from \"./types\";\nimport {\n successNotification,\n errorNotification,\n} from \"../utils/notifications\";\n\nconst warehouseQueryKeys = {\n all: [\"warehouses\"] as const,\n lists: () => [...warehouseQueryKeys.all, \"list\"] as const,\n list: (params: { skip?: number; limit?: number; query?: string | null }) =>\n [...warehouseQueryKeys.lists(), { filters: params }] as const,\n details: () => [...warehouseQueryKeys.all, \"detail\"] as const,\n detail: (id: number) => [...warehouseQueryKeys.details(), id] as const,\n forSelect: () => [...warehouseQueryKeys.all, \"select\"] as const,\n};\n\nexport const warehouses = {\n queries: {\n all: [\"warehouses\"] as const,\n getWarehouses: (params: { skip?: number; limit?: number; query?: string | null }) =>\n queryOptions({\n queryFn: () =>\n getWarehouses({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: (params.query ?? \"\").trim() || undefined,\n }),\n queryKey: warehouseQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getWarehousesForTable: (params: TableQueryParams) =>\n queryOptions({\n queryFn: () =>\n getWarehouses({\n skip: params.skip ?? 0,\n limit: params.limit ?? 10,\n query: params.query?.trim() || undefined,\n }),\n queryKey: warehouseQueryKeys.list(params),\n staleTime: 30_000,\n }),\n getWarehouseById: (id: number) =>\n queryOptions({\n queryFn: () => getWarehouseById({ warehouseId: id }),\n queryKey: warehouseQueryKeys.detail(id),\n enabled: !!id && id > 0,\n staleTime: 5 * 60 * 1000,\n }),\n getWarehousesForSelect: () =>\n queryOptions({\n queryFn: getWarehousesForSelect,\n queryKey: warehouseQueryKeys.forSelect(),\n staleTime: 10 * 60 * 1000,\n }),\n },\n\n mutations: {\n createWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<IWareHouse, Error, FormData> => ({\n mutationFn: createWareHouse,\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.all });\n successNotification({\n title: \"Almacén creado\",\n message: \"El almacén se ha creado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo crear el almacén.\",\n });\n },\n }),\n updateWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<IWareHouse, Error, { warehouseId: number; warehouse: FormData }> => ({\n mutationFn: updateWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n successNotification({\n title: \"Almacén actualizado\",\n message: \"El almacén se ha actualizado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo actualizar el almacén.\",\n });\n },\n }),\n deleteWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { warehouseId: number }> => ({\n mutationFn: deleteWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n queryClient.removeQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n successNotification({\n title: \"Almacén eliminado\",\n message: \"El almacén se ha eliminado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo eliminar el almacén.\",\n });\n },\n }),\n restoreWarehouse: (\n queryClient: QueryClient,\n ): UseMutationOptions<void, Error, { warehouseId: number }> => ({\n mutationFn: restoreWarehouse,\n onSuccess: (_, { warehouseId }) => {\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.detail(warehouseId) });\n queryClient.invalidateQueries({ queryKey: warehouseQueryKeys.lists() });\n successNotification({\n title: \"Almacén restaurado\",\n message: \"El almacén se ha restaurado correctamente.\",\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error\",\n message: error.message || \"No se pudo restaurar el almacén.\",\n });\n },\n }),\n },\n};\n\nexport { warehouseQueryKeys };\n","import {\n useQuery,\n useMutation,\n useQueryClient,\n type UseQueryOptions,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { warehouses, warehouseQueryKeys } from \"../queries/warehouse.queries\";\nimport type { IWareHouse, IWareHouseResponse } from \"../interfaces/warehouse.interface\";\nimport type { WarehouseResponse } from \"../services/warehouse.service\";\n\nexport const warehouseKeys = warehouseQueryKeys;\n\ninterface UseWarehousesParams {\n skip?: number;\n limit?: number;\n query?: string | null;\n}\n\nexport const useWarehouses = (\n params: UseWarehousesParams = {},\n options?: Omit<UseQueryOptions<IWareHouseResponse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...warehouses.queries.getWarehouses(params),\n placeholderData: (prev) => prev,\n ...options,\n } as UseQueryOptions<IWareHouseResponse>);\n\nexport const useWarehousesTable = useWarehouses;\n\nexport const useWarehouse = (\n warehouseId: number | undefined,\n options?: Omit<UseQueryOptions<IWareHouse>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...warehouses.queries.getWarehouseById(warehouseId ?? 0),\n ...options,\n } as UseQueryOptions<IWareHouse>);\n\nexport const useWarehousesForSelect = (\n options?: Omit<UseQueryOptions<WarehouseResponse[]>, \"queryKey\" | \"queryFn\">,\n) =>\n useQuery({\n ...warehouses.queries.getWarehousesForSelect(),\n ...options,\n } as UseQueryOptions<WarehouseResponse[]>);\n\nexport const useCreateWarehouse = (\n options?: UseMutationOptions<IWareHouse, Error, FormData>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...warehouses.mutations.createWarehouse(queryClient),\n ...options,\n });\n};\n\nexport const useUpdateWarehouse = (\n options?: UseMutationOptions<\n IWareHouse,\n Error,\n { warehouseId: number; warehouse: FormData }\n >,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...warehouses.mutations.updateWarehouse(queryClient),\n ...options,\n });\n};\n\nexport const useDeleteWarehouse = (\n options?: UseMutationOptions<void, Error, { warehouseId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...warehouses.mutations.deleteWarehouse(queryClient),\n ...options,\n });\n};\n\nexport const useRestoreWarehouse = (\n options?: UseMutationOptions<void, Error, { warehouseId: number }>,\n) => {\n const queryClient = useQueryClient();\n return useMutation({\n ...warehouses.mutations.restoreWarehouse(queryClient),\n ...options,\n });\n};\n\nexport const usePrefetchWarehouse = () => {\n const queryClient = useQueryClient();\n const prefetchWarehouse = (warehouseId: number) =>\n queryClient.prefetchQuery({\n ...warehouses.queries.getWarehouseById(warehouseId),\n });\n return { prefetchWarehouse };\n};\n","import { useMediaQuery as useMantineMediaQuery } from \"@mantine/hooks\";\n\nexport const useMediaQuery = () => {\n const isMobile = useMantineMediaQuery(\"(max-width: 767px)\");\n const isDesktop = useMantineMediaQuery(\"(min-width: 992px)\");\n const isTablet = useMantineMediaQuery(\"(min-width: 768px) and (max-width: 991px)\");\n return { isMobile, isDesktop, isTablet };\n};"]}