erp-pos-ecommerce-shared 0.2.20 → 0.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/env.ts","../src/interfaces/datatable.interface.ts","../src/interfaces/form.interface.ts","../src/interfaces/permission.interface.ts","../src/interfaces/promotion.interface.ts","../src/interfaces/report.interface.ts","../src/services/config.ts","../src/services/attributes.service.ts","../src/services/auth.service.ts","../src/services/bankTerminal.service.ts","../src/services/batch.service.ts","../src/services/category.service.ts","../src/services/client.service.ts","../src/services/exchange.service.ts","../src/services/gender.service.ts","../src/services/health.service.ts","../src/services/location.service.ts","../src/services/material.service.ts","../src/services/module.service.ts","../src/services/order.service.ts","../src/services/payment.service.ts","../src/services/permission.service.ts","../src/services/pricePerGram.service.ts","../src/services/priceType.service.ts","../src/services/product.service.ts","../src/services/productTags.service.ts","../src/services/promotion.service.ts","../src/services/provider.service.ts","../src/services/qr.service.ts","../src/services/report.service.ts","../src/services/return.service.ts","../src/services/role.service.ts","../src/services/stockmovement.service.ts","../src/services/shift.service.ts","../src/services/state.service.ts","../src/services/tax.service.ts","../src/services/user.service.ts","../src/services/warehouse.service.ts","../src/utils/notifications.tsx","../src/queries/attributes.queries.ts","../src/queries/user.queries.ts","../src/queries/category.queries.ts","../src/queries/warehouse.queries.ts","../src/queries/client.queries.ts","../src/queries/bankTerminal.queries.ts","../src/queries/batch.queries.ts","../src/queries/role.queries.ts","../src/queries/provider.queries.ts","../src/queries/location.queries.ts","../src/queries/material.queries.ts","../src/queries/priceType.queries.ts","../src/queries/product.queries.ts","../src/queries/exchange.queries.ts","../src/queries/permission.queries.ts","../src/queries/promotion.queries.ts","../src/queries/order.queries.ts","../src/queries/payment.queries.ts","../src/queries/auth.queries.ts","../src/queries/tax.queries.ts","../src/queries/gender.queries.ts","../src/queries/state.queries.ts","../src/queries/module.queries.ts","../src/services/folio.service.ts","../src/queries/folio.queries.ts","../src/queries/health.queries.ts","../src/queries/productTags.queries.ts","../src/queries/pricePerGram.queries.ts","../src/queries/qr.queries.ts","../src/queries/report.queries.ts","../src/queries/return.queries.ts","../src/queries/shift.queries.ts","../src/queries/stockmovement.queries.ts","../src/hooks/auth.hooks.ts","../src/hooks/attributes.hooks.ts","../src/hooks/useDataTable.ts","../src/hooks/bankTerminal.hooks.ts","../src/hooks/batch.hooks.ts","../src/hooks/category.hooks.ts","../src/hooks/client.hooks.ts","../src/hooks/exchange.hooks.ts","../src/hooks/folio.hooks.ts","../src/hooks/gender.hooks.ts","../src/hooks/health.hooks.ts","../src/hooks/location.hooks.ts","../src/hooks/material.hooks.ts","../src/hooks/module.hooks.ts","../src/hooks/order.hooks.ts","../src/hooks/payment.hooks.ts","../src/hooks/permission.hooks.ts","../src/hooks/pricePerGram.hooks.ts","../src/hooks/priceType.hooks.ts","../src/hooks/product.hooks.ts","../src/hooks/productTags.hooks.ts","../src/hooks/promotion.hooks.ts","../src/hooks/provider.hooks.ts","../src/hooks/qr.hooks.ts","../src/hooks/report.hooks.ts","../src/hooks/return.hooks.ts","../src/hooks/role.hooks.ts","../src/hooks/shift.hooks.ts","../src/hooks/state.hooks.ts","../src/hooks/stockmovement.hooks.ts","../src/hooks/tax.hooks.ts","../src/hooks/user.hooks.ts","../src/hooks/warehouse.hooks.ts","../src/hooks/useMediaQuery.ts","../src/components/form/ImageForm.tsx","../src/components/form/FieldGenerator.tsx","../src/components/form/ButtonGenerator.tsx","../src/components/form/schemaGenerator.ts","../src/components/form/FormGenerator.tsx","../src/components/form/CreateEditForm.tsx","../src/theme/constants.ts","../src/components/table/BottomPagination.tsx","../src/components/table/TableHeader.tsx","../src/components/table/TableBody.tsx","../src/components/table/TableSkeleton.tsx","../src/components/table/EmptyState.tsx","../src/components/table/SimpleDataTable.tsx","../src/components/table/SearchInput.tsx","../src/components/table/FilterSelect.tsx","../src/components/table/FilterDate.tsx","../src/components/table/DataTable.tsx","../src/components/TablePage.tsx","../src/components/FormPage.tsx"],"names":["Permission","PromotionTypeEnum","ComparisonBy","ChartType","attributes","date","queryOptions","useMutation","useQuery","useQueryClient","defaultColumnMap","getFilterValue","parseNumber","useMantineMediaQuery","error","jsx","Text","Button","Fragment","useMemo","useState","useEffect","jsxs","Box","Group","Flex","Select","Table","Checkbox","flexRender","ActionIcon","_","Title","ScrollArea","TextInput","useRef","Menu","X","Search","ChevronUp","ChevronDown","Paper","Card"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Environment/config provided by the consuming app.\n * Call configureEnv() once at app startup so the library can use isDevEnv (e.g. for error messages).\n */\n\nlet isDevEnv = false;\n\n/**\n * Configure environment flags for the shared library.\n * Call once at app startup (e.g. in main.tsx or root layout).\n * @example\n * // Vite\n * configureEnv({ isDevEnv: import.meta.env.DEV });\n * // Next.js\n * configureEnv({ isDevEnv: process.env.NODE_ENV === 'development' });\n */\nexport const configureEnv = (config: { isDevEnv?: boolean }): void => {\n if (config.isDevEnv !== undefined) {\n isDevEnv = config.isDevEnv;\n }\n};\n\n/**\n * Whether the consuming app is running in development.\n * Used e.g. to show full error messages in notifications (dev) vs generic messages (prod).\n */\nexport const getIsDevEnv = (): boolean => isDevEnv;\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 type { TblProductsImage } from './product.interface';\n\nexport type IField =\n | ITextField\n | IPasswordField\n | INumberField\n | ISelectField\n | IMultiSelectField\n | IDateField\n | IEmailField\n | IHiddenField\n | ISwitchField\n | IFileField\n | ITagField;\n\nexport interface IHiddenField extends IBaseField {\n type: typeof FieldTypes.HIDDEN;\n}\n\nexport interface ITextField extends IBaseField {\n type: typeof FieldTypes.TEXT;\n}\n\nexport interface IEmailField extends IBaseField {\n type: typeof FieldTypes.EMAIL;\n}\n\nexport interface IPasswordField extends IBaseField {\n type: typeof FieldTypes.PASSWORD;\n}\n\nexport interface ITagField\n extends IBaseField,\n Omit<ISelect, 'options'> {\n type: typeof FieldTypes.TAG;\n options: TagData[];\n}\n\nexport interface ISwitchField extends IBaseField {\n type: typeof FieldTypes.SWITCH;\n defaultChecked?: boolean;\n labelPosition?: 'left' | 'right';\n onLabel?: string;\n offLabel?: string;\n}\n\nexport type FileType =\n | 'image'\n | 'video'\n | 'audio'\n | 'pdf'\n | 'document';\n\nexport interface IFileField extends IBaseField {\n type: typeof FieldTypes.FILE;\n multiple?: boolean;\n accept?: string[] | readonly string[];\n maxSize?: number;\n maxFiles?: number;\n maxSizeMessage?: string;\n maxFilesMessage?: string;\n fileType: FileType;\n defaultImages?: TblProductsImage[];\n}\n\nexport interface INumberField extends IBaseField {\n type: typeof FieldTypes.NUMBER;\n min?: number;\n max?: number;\n preffix?: string;\n suffix?: string;\n allowNegative?: boolean;\n allowDecimal?: boolean;\n decimalScale?: number;\n fixedDecimalScale?: boolean;\n decimalSeparator?: string;\n hideControls?: boolean;\n step?: number;\n}\n\nexport interface ISelectField extends IBaseField, ISelect {\n type: typeof FieldTypes.SELECT;\n}\n\nexport interface IMultiSelectField extends IBaseField, ISelect {\n type: typeof FieldTypes.MULTISELECT;\n}\n\nexport interface IDateField extends IBaseField {\n type: typeof FieldTypes.DATE;\n}\n\nexport interface ISelect extends IBaseField {\n options: IOptions[];\n allowDeselect?: boolean;\n clearable?: boolean;\n searchable?: boolean;\n nothingFoundMessage?: string;\n checkIconPosition?: 'right' | 'left';\n withCheckIcon?: boolean;\n limit?: number;\n renderOption?: (option: IOptions) => React.ReactNode;\n}\n\ntype ColumnWidth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\nexport interface IBaseField {\n name: string;\n label?: string;\n description?: string;\n placeholder?: string;\n required?: boolean;\n error?: string;\n disabled?: boolean;\n defaultValue?: string | number | boolean | string[] | Date;\n requiredMessage?: string;\n columnWidth?: ColumnWidth;\n onChange?: (value: string) => void;\n section?: number;\n page?: number;\n}\n\nexport interface IButton {\n hidden?: boolean;\n type: ButtonTypes;\n label: string;\n fullWidth?: boolean;\n className?: string;\n style?: React.CSSProperties;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n disabled?: boolean;\n loading?: boolean;\n Icon?: React.ReactNode;\n iconPosition?: 'left' | 'right';\n color?: string;\n variant?: \"gradient\" | \"subtle\" | \"filled\" | \"light\" | \"outline\" | \"transparent\" | \"white\" | \"default\"\n}\n\nexport interface IOptions {\n value: string;\n label: string;\n}\n\nexport interface TagData {\n value: string;\n}\n\nexport const FieldTypes = {\n TEXT: 'text',\n EMAIL: 'email',\n NUMBER: 'number',\n PASSWORD: 'password',\n SELECT: 'select',\n MULTISELECT: 'multiselect',\n DATE: 'date',\n HIDDEN: 'hidden',\n SWITCH: 'switch',\n FILE: 'file',\n TAG: 'tag',\n} as const;\n\nexport type FieldTypes = (typeof FieldTypes)[keyof typeof FieldTypes];\nexport type ButtonTypes =\n (typeof ButtonTypes)[keyof typeof ButtonTypes];\n\nexport const ButtonTypes = {\n SUBMIT: 'submit',\n BUTTON: 'button',\n RESET: 'reset',\n} as const;\n","export interface IPermissionRole {\n permissionRole: PermissionRole[]\n moduleNames: string[]\n permissionNames: string[]\n roleNames: string[]\n}\nexport interface PermissionRole {\n role_PermissionID: number\n roleID: number\n permissionID: number\n moduleID: number\n hasPermission: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: number\n savedDate: Date\n deletedBy: null\n deletedDate: null\n tblModules: TblModules\n tblPermissions: TblPermissions\n tblRoles: TblRoles\n}\n\nexport interface TblModules {\n moduleName: string\n}\n\nexport interface TblPermissions {\n permission: Permission\n}\n\nexport enum Permission {\n Crear = 'Crear',\n Editar = 'Editar',\n Eliminar = 'Eliminar',\n Ver = 'Ver'\n}\n\nexport interface TblRoles {\n role: string\n}\n","import type { IProduct } from \"./product.interface\"\n\nexport interface IPromotionResponse {\n total: number\n data: IPromotion[]\n skip: number\n limit: number\n}\n\nexport interface IPromotion {\n promotionID: number\n promotionName: string\n startDate: Date\n endDate: Date\n isActive: number\n description: string\n promotionTypeID: number\n productID: null\n batchID: null\n providerID: null\n n: null\n m: null\n discountPercentage: null\n priceTypeID: null\n targetProductID: null\n discountAmount: number\n syncStatusID: number\n masterCodeID: number\n savedBy: number\n savedDate: Date\n deletedBy: null\n deletedDate: null\n tblPromotions_targetProductIDTotblProducts: TblPromotionsTargetProductIDTotblProduct[]\n tblPromotionTypes: TblPromotionTypes\n}\n\nexport interface TblPromotionTypes {\n promotionTypeID: number\n promotionType: string\n description: string\n syncStatusID: number\n masterCodeID: number\n savedBy: number\n savedDate: Date\n deletedBy: null\n deletedDate: null\n}\n\nexport interface TblPromotionsTargetProductIDTotblProduct {\n promotionID: number\n productID: number\n syncStatusID: number\n masterCodeID: number\n savedBy: number\n savedDate: Date\n deletedBy: null\n deletedDate: null\n tblProducts: IProduct\n}\n\n\nexport interface IPromotionType {\n promotionTypeID: number\n promotionType: string\n description: string\n syncStatusID: number\n masterCodeID: number\n savedBy: number\n savedDate: Date\n deletedBy: null\n deletedDate: null\n}\n\nexport enum PromotionTypeEnum {\n NXM = 'NXM',\n PRODUCTO = 'PRODUCTO',\n TEMPORADA = 'TEMPORADA',\n PROVEEDOR = 'PROVEEDOR',\n LOTE = 'LOTE'\n}\n","export interface IStockByWarehouseReport {\n warehouse: string\n product: string\n batch: string\n stock: number\n}\n\nexport enum ComparisonBy {\n YEAR = 'year',\n MONTH = 'month',\n WEEK = 'week',\n CUSTOM = 'custom'\n}\n\nexport enum ChartType {\n BAR = 'bar',\n LINE = 'line',\n PIE = 'pie'\n}\n\nexport interface IReportX {\n reportDataString: string\n paymentMethods?: Array<{\n paymentMethod: string\n amount: number\n }>\n}\n\nexport interface IReportZ {\n reportDataString: string\n headerData: {\n cutDate: string\n cutTime: string\n terminalNumber: string\n cashierID: number\n cashierName: string\n zCutFolio: string\n previousZCutFolio: string\n }\n salesSummary: {\n grossSales: number\n totalReturns: number\n totalDiscounts: number\n netSubtotal: number\n dayTotal: number\n }\n paymentMethods: Array<{\n paymentMethod: string\n amount: number\n }>\n cashMovements: {\n initialFund: number\n cashDeposits: number\n cashWithdrawals: number\n totalCashAtClosing: number\n }\n folioControl: {\n firstFolio: string\n lastFolio: string\n }\n}\n\nexport interface IReportComparisonByTimeFrame {\n currentPeriod: Period\n previousPeriod: Period\n}\n\nexport interface Period {\n title: string\n dateRange: DateRange\n data: ReportData[]\n totalByPeriod: number\n // Nuevos campos para resumen de materiales\n materialsSummary?: MaterialSummary[]\n}\n\nexport interface MaterialSummary {\n materialName: string\n totalGrams: number\n totalRevenue: number\n productCount: number\n averagePricePerGram: number\n}\n\nexport interface ReportData {\n period: string\n products: ReportDataProduct[]\n}\n\nexport interface ReportDataProduct {\n productName: string\n salesInNumberByPeriod: number\n salesInPriceByPeriod: number\n // Nuevos campos para información detallada\n materialName?: string\n totalWeight?: number\n averageWeight?: number\n categoryName?: string\n}\n\nexport interface ProductInfo {\n productName: string\n category: string\n quantitySold: number\n totalRevenue: number\n}\n\nexport interface DateRange {\n start: Date\n end: Date\n}\n\nexport interface IReportInventory {\n productName: string\n productVariant: string\n price: number\n category: string\n material: string\n stock: number\n stockID: number\n warehouse: string\n provider: string\n lote: string\n size: string\n caliber: string\n purity: string\n weight: number\n batchID: number\n productID: number\n productDetailID: number\n batchComment?: string\n unitCost?: number\n profitPercentage?: number\n}\n","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 {\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 { 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 {\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 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 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 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 { 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 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 { 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 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 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 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 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 { 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 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 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 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 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 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 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 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 { 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 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 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 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 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 { 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 { 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 {\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 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 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 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 { 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 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 {\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 { 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 { 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 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 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 {\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 { 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 {\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 {\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 {\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 {\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 {\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 {\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 {\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 { 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 { 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 { 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 {\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 {\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 { 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 {\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 {\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 {\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 {\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 {\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 {\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 { 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 {\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 {\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 {\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 {\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 {\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 {\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 { 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 { 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 {\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 { 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 {\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 {\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};","import type { ReactNode } from \"react\";\nimport {\n ActionIcon,\n Box,\n Button,\n Group,\n Image,\n rem,\n ScrollArea,\n Text,\n} from \"@mantine/core\";\nimport { Dropzone, IMAGE_MIME_TYPE } from \"@mantine/dropzone\";\nimport { modals } from \"@mantine/modals\";\nimport type { TblProductsImage } from \"../../interfaces/product.interface\";\nimport { deleteImageFromProduct } from \"../../services/product.service\";\nimport { useMutation } from \"@tanstack/react-query\";\n// Eliminado react-hook-form. Definimos una interfaz genérica compatible con TanStack Form\ninterface GenericFieldController<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n onBlur?: () => void;\n}\nimport { useRef } from \"react\";\nimport { getIsDevEnv } from \"../../config/env\";\nimport {\n errorNotification,\n successNotification,\n} from \"../../utils/notifications\";\n\n// Icons are provided by the consuming app so this library stays icon-agnostic\nlet imageFormIcons: {\n acceptIcon?: ReactNode;\n rejectIcon?: ReactNode;\n idleIcon?: ReactNode;\n cameraIcon?: ReactNode;\n successIcon?: ReactNode;\n errorIcon?: ReactNode;\n} = {};\n\n/**\n * Configure icons for ImageForm (dropzone, camera button, notifications, delete).\n * Call once at app startup with your preferred icon library.\n * @example\n * import { Camera, Check, Image, Upload, X } from \"lucide-react\";\n * configureImageFormIcons({\n * acceptIcon: <Upload />, rejectIcon: <X />, idleIcon: <Image />,\n * cameraIcon: <Camera />, successIcon: <Check />, errorIcon: <X />,\n * });\n */\nexport const configureImageFormIcons = (config: {\n acceptIcon?: ReactNode;\n rejectIcon?: ReactNode;\n idleIcon?: ReactNode;\n cameraIcon?: ReactNode;\n successIcon?: ReactNode;\n errorIcon?: ReactNode;\n}): void => {\n imageFormIcons = { ...imageFormIcons, ...config };\n};\n\n// Añadir tipo para manejar tanto File como TblProductsImage\ntype ImageType = File | TblProductsImage;\n\ninterface ImageFormProps {\n field: GenericFieldController<\n File | TblProductsImage | (File | TblProductsImage)[] | null | undefined\n >;\n label: string;\n required?: boolean;\n multiple?: boolean;\n maxSize?: number;\n maxFiles?: number;\n maxSizeMessage?: string;\n maxFilesMessage?: string;\n defaultImages?: TblProductsImage[];\n error?: string;\n enableCamera?: boolean;\n}\n\nexport const ImageForm = ({\n field,\n label,\n required = false,\n multiple = false,\n maxSize = 5 * 1024 ** 2,\n maxFiles = 5,\n maxSizeMessage = \"El tamaño máximo de cada imagen es de 5mb\",\n maxFilesMessage = \"No se pueden subir más de 5 imágenes\",\n defaultImages = [],\n error,\n enableCamera = true,\n}: ImageFormProps): React.ReactNode => {\n const { mutate: deleteImage } = useMutation({\n mutationKey: [\"product\"],\n mutationFn: deleteImageFromProduct,\n onSuccess: () => {\n successNotification({\n title: \"Imagen eliminada con éxito\",\n message: \"La imagen ha sido eliminada con éxito\",\n icon: imageFormIcons.successIcon,\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error al eliminar la imagen\",\n message: getIsDevEnv()\n ? error.message\n : \"Ha ocurrido un error al eliminar la imagen\",\n icon: imageFormIcons.errorIcon,\n });\n },\n });\n\n const videoRef = useRef<HTMLVideoElement>(null);\n\n const handleCameraAccess = async (): Promise<void> => {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({\n video: {\n width: { ideal: 1280 },\n height: { ideal: 720 },\n },\n });\n\n modals.open({\n title: \"Tomar foto\",\n size: \"lg\",\n children: (\n <Box>\n <video\n ref={videoRef}\n autoPlay\n playsInline\n muted\n style={{\n width: \"100%\",\n maxHeight: \"400px\",\n transform: \"scaleX(-1)\",\n }}\n />\n <Group justify=\"center\" mt=\"md\">\n <Button\n leftSection={imageFormIcons.cameraIcon}\n onClick={() => {\n const video = videoRef.current;\n if (!video) return;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.save();\n ctx.scale(-1, 1);\n ctx.drawImage(\n video,\n -canvas.width,\n 0,\n canvas.width,\n canvas.height,\n );\n ctx.restore();\n }\n\n canvas.toBlob((blob) => {\n if (blob) {\n const file = new File([blob], \"photo.jpg\", {\n type: \"image/jpeg\",\n });\n const existing: ImageType[] = Array.isArray(field.value)\n ? (field.value as ImageType[])\n : field.value\n ? ([field.value as ImageType] as ImageType[])\n : [];\n const newArray = [...existing, file];\n field.onChange(multiple ? newArray : file);\n\n stream.getTracks().forEach((track) => track.stop());\n modals.closeAll();\n }\n }, \"image/jpeg\");\n }}\n >\n Tomar foto\n </Button>\n </Group>\n </Box>\n ),\n onClose: () => {\n stream.getTracks().forEach((track) => track.stop());\n },\n });\n\n setTimeout(() => {\n if (videoRef.current) {\n videoRef.current.srcObject = stream;\n }\n }, 100);\n } catch (error) {\n console.error(\"Error accessing camera:\", error);\n errorNotification({\n title: \"Error al acceder a la cámara\",\n message: \"No se pudo acceder a la cámara del dispositivo\",\n icon: imageFormIcons.errorIcon,\n });\n }\n };\n\n return (\n <>\n <Text my={10} fw={500} size=\"lg\">\n {label} {required ? <span style={{ color: \"red\" }}> *</span> : \"\"}\n </Text>\n <Dropzone\n onDrop={(files) => {\n field.onChange(multiple ? files : files[0] || null);\n }}\n multiple={multiple}\n onReject={(files) => {\n const errorMessages = files.map((file) => {\n if (file.errors[0]?.code === \"file-too-large\") {\n return maxSizeMessage;\n }\n if (file.errors[0]?.code === \"too-many-files\") {\n return maxFilesMessage;\n }\n return `Error con el archivo ${file.file.name}`;\n });\n\n modals.open({\n title: \"Error al subir archivos\",\n children: (\n <Box>\n <Text size=\"xl\">Error al subir archivos</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {errorMessages.map((message, i) => (\n <Box key={i}>{message}</Box>\n ))}\n </Text>\n </Box>\n ),\n });\n }}\n maxSize={maxSize}\n accept={IMAGE_MIME_TYPE}\n >\n <Group\n justify=\"center\"\n gap=\"xl\"\n mih={220}\n style={{ pointerEvents: \"none\" }}\n >\n <Dropzone.Accept>\n {imageFormIcons.acceptIcon ? (\n <Box\n style={{\n width: rem(52),\n height: rem(52),\n color: \"var(--mantine-color-blue-6)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {imageFormIcons.acceptIcon}\n </Box>\n ) : null}\n </Dropzone.Accept>\n <Dropzone.Reject>\n {imageFormIcons.rejectIcon ? (\n <Box\n style={{\n width: rem(52),\n height: rem(52),\n color: \"var(--mantine-color-red-6)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {imageFormIcons.rejectIcon}\n </Box>\n ) : null}\n </Dropzone.Reject>\n <Dropzone.Idle>\n {imageFormIcons.idleIcon ? (\n <Box\n style={{\n width: rem(52),\n height: rem(52),\n color: \"var(--mantine-color-dimmed)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {imageFormIcons.idleIcon}\n </Box>\n ) : null}\n </Dropzone.Idle>\n\n <Box>\n <Text size=\"xl\" inline>\n Arrastra imágenes aquí o haz clic para seleccionar archivos\n </Text>\n <Text size=\"sm\" c=\"dimmed\" inline mt={7}>\n {maxFiles\n ? `Adjunta tantos archivos como desees, cada archivo no debe exceder los ${maxSize / 1024 ** 2}mb`\n : `Adjunta una imagen, el archivo no debe exceder los ${maxSize / 1024 ** 2}mb`}\n </Text>\n </Box>\n </Group>\n </Dropzone>\n\n {error ? (\n <Text size=\"sm\" c=\"red\">\n {error}\n </Text>\n ) : null}\n\n {enableCamera && (\n <Group justify=\"center\" my=\"md\">\n <Button\n fullWidth\n leftSection={imageFormIcons.cameraIcon}\n variant=\"filled\"\n onClick={handleCameraAccess}\n >\n <Text>Tomar foto</Text>\n </Button>\n <Text size=\"sm\" c=\"dimmed\">\n {enableCamera ? \"Toma una foto con la cámara del dispositivo\" : \"\"}\n </Text>\n </Group>\n )}\n\n {defaultImages.length > 0 && (\n <ScrollArea h={150} type=\"always\">\n <Group my={10}>\n {defaultImages.map((image) => (\n <Box key={image.productImageID} pos=\"relative\">\n <Image\n src={\n image.imageUrl.includes(\"uploads\")\n ? `http://localhost:4000/${image.imageUrl}`\n : image.imageUrl\n }\n w={100}\n h={100}\n />\n <ActionIcon\n onClick={() => {\n deleteImage({ imageId: image.productImageID });\n }}\n radius=\"xl\"\n color=\"red\"\n variant=\"filled\"\n size=\"xs\"\n style={{ position: \"absolute\", top: 5, right: 5 }}\n >\n {imageFormIcons.errorIcon}\n </ActionIcon>\n </Box>\n ))}\n </Group>\n </ScrollArea>\n )}\n\n {(Array.isArray(field.value)\n ? (field.value as ImageType[])\n : field.value\n ? [field.value as ImageType]\n : []\n ).length > 0 && (\n <ScrollArea h={150} type=\"always\">\n <Group my={10}>\n {(Array.isArray(field.value)\n ? (field.value as ImageType[])\n : field.value\n ? [field.value as ImageType]\n : []\n ).map((file, index) => (\n <Box key={index} pos=\"relative\">\n <Image\n src={\n file instanceof File\n ? URL.createObjectURL(file)\n : (file as TblProductsImage).imageUrl?.includes(\"uploads\")\n ? `http://localhost:4000/${(file as TblProductsImage).imageUrl}`\n : (file as TblProductsImage).imageUrl\n }\n w={100}\n h={100}\n />\n <ActionIcon\n radius=\"xl\"\n color=\"red\"\n variant=\"filled\"\n size=\"xs\"\n style={{ position: \"absolute\", top: 5, right: 5 }}\n onClick={() => {\n const list: ImageType[] = Array.isArray(field.value)\n ? (field.value as ImageType[])\n : field.value\n ? [field.value as ImageType]\n : [];\n const newImages = list.filter((_, i) => i !== index);\n field.onChange(\n multiple\n ? (newImages as (File | TblProductsImage)[])\n : (newImages[0] ?? null),\n );\n }}\n >\n {imageFormIcons.errorIcon}\n </ActionIcon>\n </Box>\n ))}\n </Group>\n </ScrollArea>\n )}\n </>\n );\n};\n","import { FieldTypes, type IField } from \"../../interfaces/form.interface\";\nimport type {\n ReactFormExtendedApi,\n FormValidateOrFn,\n FormAsyncValidateOrFn,\n} from \"@tanstack/react-form\";\n\nimport {\n TextInput,\n PasswordInput,\n NumberInput,\n Select,\n MultiSelect,\n Switch,\n TagsInput,\n} from \"@mantine/core\";\nimport { DatePickerInput } from \"@mantine/dates\";\nimport { ImageForm } from \"./ImageForm\";\n\nexport type FormValues = Record<string, unknown>;\n\ntype MaybeValidator = FormValidateOrFn<FormValues> | undefined;\ntype MaybeAsyncValidator = FormAsyncValidateOrFn<FormValues> | undefined;\n\nexport type FormInstance = ReactFormExtendedApi<\n FormValues,\n MaybeValidator, // TOnMount\n MaybeValidator, // TOnChange\n MaybeAsyncValidator, // TOnChangeAsync\n MaybeValidator, // TOnBlur\n MaybeAsyncValidator, // TOnBlurAsync\n MaybeValidator, // TOnSubmit\n MaybeAsyncValidator, // TOnSubmitAsync\n MaybeValidator, // TOnDynamic\n MaybeAsyncValidator, // TOnDynamicAsync\n MaybeAsyncValidator, // TOnServer\n unknown // TSubmitMeta\n>;\n\nexport const fieldGenerator = ({\n field,\n form,\n}: {\n field: IField;\n form: FormInstance;\n}): React.ReactNode => {\n switch (field.type) {\n case FieldTypes.TEXT:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <TextInput\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n value={(f.state.value as string) ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n f.handleChange(e.target.value);\n field.onChange?.(e.target.value);\n }}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.EMAIL:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <TextInput\n type=\"email\"\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n value={(f.state.value as string) ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n f.handleChange(e.target.value)\n }\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.PASSWORD:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <PasswordInput\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n value={(f.state.value as string) ?? \"\"}\n onChange={(e) => f.handleChange(e.target.value)}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.NUMBER:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <NumberInput\n hideControls={field.hideControls}\n label={field.label}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n min={field.min}\n max={field.max}\n step={field.step}\n allowNegative={field.allowNegative}\n allowDecimal={field.allowDecimal}\n decimalScale={field.decimalScale}\n fixedDecimalScale={field.fixedDecimalScale}\n decimalSeparator={field.decimalSeparator}\n prefix={field.preffix}\n suffix={field.suffix}\n value={(f.state.value as number) ?? \"\"}\n onChange={(val) => {\n const nextValue =\n typeof val === \"number\"\n ? val\n : val === \"\"\n ? undefined\n : Number(val);\n f.handleChange(nextValue);\n }}\n onBlur={f.handleBlur}\n placeholder={field.placeholder}\n />\n )}\n />\n );\n case FieldTypes.SELECT:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <Select\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n data={field.options}\n searchable={field.searchable}\n nothingFoundMessage={field.nothingFoundMessage}\n limit={field.limit}\n withCheckIcon={field.withCheckIcon}\n checkIconPosition={field.checkIconPosition}\n clearable={field.clearable}\n onChange={(value) => {\n f.handleChange(value ?? \"\");\n if (value && field.onChange) field.onChange(value);\n }}\n value={(f.state.value as string) ?? null}\n />\n )}\n />\n );\n case FieldTypes.MULTISELECT:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <MultiSelect\n label={field.label}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n withCheckIcon={field.withCheckIcon}\n checkIconPosition={field.checkIconPosition}\n clearable={field.clearable}\n searchable={field.searchable}\n nothingFoundMessage={field.nothingFoundMessage}\n data={field.options}\n value={(f.state.value as string[]) ?? []}\n onChange={(vals) => f.handleChange(vals)}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.DATE:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <DatePickerInput\n label={field.label}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n value={(f.state.value as Date | null) ?? null}\n onChange={(date) => f.handleChange(date ?? null)}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.SWITCH:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <Switch\n my={5}\n label={field.label}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n checked={Boolean(f.state.value)}\n onChange={(e) => f.handleChange(e.currentTarget.checked)}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.FILE:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <ImageForm\n label={field.label || \"\"}\n required={field.required}\n field={{\n value: f.state.value as File | File[] | null | undefined,\n onChange: f.handleChange,\n onBlur: f.handleBlur,\n }}\n multiple={field.multiple}\n maxSize={field.maxSize}\n maxFiles={field.maxFiles}\n maxSizeMessage={field.maxSizeMessage}\n maxFilesMessage={field.maxFilesMessage}\n defaultImages={field.defaultImages}\n error={f.state.meta.errors?.join(\", \")}\n />\n )}\n />\n );\n case FieldTypes.TAG:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <TagsInput\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n data={field.options}\n value={(f.state.value as string[]) ?? []}\n onChange={(vals) => f.handleChange(vals)}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.HIDDEN:\n return <form.Field name={field.name} children={() => null} />;\n default:\n return null;\n }\n};\n","import { Button } from \"@mantine/core\";\nimport type { IButton } from \"../../interfaces/form.interface\";\n\nexport const buttonGenerator = (\n button: IButton,\n loading: boolean,\n): React.ReactNode => {\n switch (button.type) {\n case \"submit\":\n return (\n <Button\n loading={button.loading || loading}\n key={button.label}\n color={button.color || \"green\"}\n type={button.type}\n variant={button.variant || \"filled\"}\n leftSection={button.iconPosition === \"left\" ? button.Icon : null}\n rightSection={button.iconPosition === \"right\" ? button.Icon : null}\n disabled={button.disabled || button.loading || loading}\n fullWidth={button.fullWidth}\n >\n {button.label}\n </Button>\n );\n case \"button\":\n if (button.hidden) return <></>;\n return (\n <Button\n onClick={button.onClick}\n color={button.color || \"gray\"}\n variant={button.variant || \"outline\"}\n leftSection={button.iconPosition === \"left\" ? button.Icon : null}\n rightSection={button.iconPosition === \"right\" ? button.Icon : null}\n loading={button.loading || loading}\n key={button.label}\n type={button.type}\n disabled={button.disabled || button.loading || loading}\n fullWidth={button.fullWidth}\n >\n {button.label}\n </Button>\n );\n case \"reset\":\n return (\n <Button\n color={button.color || \"red\"}\n variant={button.variant || \"outline\"}\n leftSection={button.iconPosition === \"left\" ? button.Icon : null}\n rightSection={button.iconPosition === \"right\" ? button.Icon : null}\n loading={button.loading || loading}\n key={button.label}\n type={button.type}\n disabled={button.disabled || button.loading || loading}\n fullWidth={button.fullWidth}\n >\n {button.label}\n </Button>\n );\n default:\n return (\n <Button\n color={button.color || \"gray\"}\n variant={button.variant || \"outline\"}\n leftSection={button.iconPosition === \"left\" ? button.Icon : null}\n rightSection={button.iconPosition === \"right\" ? button.Icon : null}\n loading={button.loading || loading}\n key={button.label}\n type={button.type}\n disabled={button.disabled || button.loading || loading}\n fullWidth={button.fullWidth}\n >\n {button.label}\n </Button>\n );\n }\n};\n","import * as z from 'zod';\n\nimport { type IField, FieldTypes } from \"../../interfaces/form.interface\";\n\nconst generateFieldSchema = (field: IField): z.ZodType => {\n if (field.required) {\n switch (field.type) {\n case FieldTypes.TEXT:\n return z\n .string()\n .min(1, field.requiredMessage ?? 'Este campo es requerido');\n case FieldTypes.SELECT:\n return z\n .string()\n .min(1, field.requiredMessage ?? 'Este campo es requerido');\n case FieldTypes.MULTISELECT:\n return z\n .array(z.string())\n .min(\n 1,\n field.requiredMessage ??\n 'Debe seleccionar al menos una opción'\n );\n case FieldTypes.EMAIL:\n return z\n .string()\n .email(\n field.requiredMessage ?? 'Correo electrónico inválido'\n );\n case FieldTypes.SWITCH:\n return z.boolean().optional();\n case FieldTypes.DATE:\n return z.date().refine((date) => date != null, {\n message: field.requiredMessage ?? 'La fecha es requerida',\n });\n case FieldTypes.NUMBER:\n return field.required\n ? z\n .number({\n error: 'Debe ser un número válido',\n })\n .min(\n field.min ?? -Infinity,\n field.requiredMessage ?? 'Este campo es requerido'\n )\n : z\n .number({\n error: 'Debe ser un número válido',\n })\n .min(field.min ?? -Infinity);\n case FieldTypes.FILE:\n return field.multiple\n ? z\n .array(z.instanceof(File))\n .min(\n 1,\n field.requiredMessage ??\n 'Se requiere al menos un archivo'\n )\n : z.instanceof(File);\n case FieldTypes.TAG:\n return z.array(z.string()).optional();\n default:\n return z.string().optional();\n }\n }\n switch (field.type) {\n case FieldTypes.TEXT:\n return z.string().optional();\n case FieldTypes.SELECT:\n return z.string().optional();\n case FieldTypes.MULTISELECT:\n return z.array(z.string()).optional();\n case FieldTypes.EMAIL:\n return z\n .string()\n .email('Correo electrónico inválido')\n .optional();\n case FieldTypes.SWITCH:\n return z.boolean().optional();\n case FieldTypes.DATE:\n return z\n .date()\n .refine((date) => date != null, {\n message: 'La fecha es requerida',\n })\n .optional();\n case FieldTypes.NUMBER:\n return field.required\n ? z\n .number({\n error: 'Debe ser un número válido',\n })\n .min(\n field.min ?? -Infinity,\n field.requiredMessage ?? 'Este campo es requerido'\n )\n : z\n .number({\n error: 'Debe ser un número válido',\n })\n .min(field.min ?? -Infinity)\n .optional();\n case FieldTypes.FILE:\n return field.multiple\n ? z.array(z.instanceof(File)).optional().default([])\n : z.instanceof(File).optional().nullable();\n case FieldTypes.TAG:\n return z.array(z.string()).optional();\n default:\n return z.string().optional();\n }\n};\n\nexport const generateFormSchema = (\n fields: IField[]\n): z.ZodObject<z.ZodRawShape> => {\n return z.object({\n ...fields.reduce((acc, field) => {\n return {\n ...acc,\n [field.name]: generateFieldSchema(field),\n };\n }, {}),\n });\n};\n","import { useForm } from \"@tanstack/react-form\";\nimport { isAxiosError } from \"axios\";\nimport {\n Box,\n Flex,\n LoadingOverlay,\n Stepper,\n Button,\n Group,\n} from \"@mantine/core\";\nimport {\n type IField,\n FieldTypes,\n type IButton,\n} from \"../../interfaces/form.interface\";\nimport type { UseMutationResult } from \"@tanstack/react-query\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { fieldGenerator, type FormInstance } from \"./FieldGenerator\";\nexport type { FormInstance };\nimport { buttonGenerator } from \"./ButtonGenerator\";\nimport { generateFormSchema } from \"./schemaGenerator\";\nimport {\n errorNotification,\n successNotification,\n} from \"../../utils/notifications\";\ninterface FormGeneratorProps<TData, TVariables> {\n fields: IField[];\n buttons: IButton[];\n loading: boolean;\n name: string;\n mutation: UseMutationResult<TData, unknown, TVariables, unknown>;\n buildVariables?: (values: Record<string, unknown> | FormData) => TVariables;\n hasFiles?: boolean;\n typeOfForm?: \"create\" | \"edit\";\n navigateAway?: boolean;\n setData?: (data: TData) => void;\n onSuccess?: (data: TData) => void;\n wrapJsonByName?: boolean; // Si no hay files y no hay buildVariables, envolver como { [name]: values }\n onFormRef?: (form: FormInstance) => void;\n}\n\nexport const FormGenerator = <TData, TVariables = unknown>({\n fields,\n buttons,\n name,\n loading,\n mutation,\n buildVariables,\n hasFiles = false,\n typeOfForm,\n navigateAway: _navigateAway = true,\n setData,\n onSuccess,\n wrapJsonByName = true,\n onFormRef,\n}: FormGeneratorProps<TData, TVariables>): React.ReactNode => {\n // const navigate = useNavigate();\n\n const formSchema = generateFormSchema(fields);\n\n // Multi-step support via `page` field prop\n const maxPage = useMemo(() => {\n const max = fields.reduce((acc, f) => Math.max(acc, f.page ?? 1), 1);\n return max < 1 ? 1 : max;\n }, [fields]);\n const hasMultipleSteps = maxPage > 1;\n const [currentStep, setCurrentStep] = useState(1);\n\n const getDefaultValueByType = (\n type: FieldTypes,\n ): string | number | boolean | null | [] => {\n switch (type) {\n case FieldTypes.NUMBER:\n return null;\n case FieldTypes.SWITCH:\n return false;\n case FieldTypes.MULTISELECT:\n return [];\n case FieldTypes.FILE:\n return [];\n default:\n return \"\";\n }\n };\n\n const { mutate, isPending } = mutation;\n\n const form = useForm({\n defaultValues: fields.reduce(\n (acc, field) => {\n return {\n ...acc,\n [field.name]: field.defaultValue ?? getDefaultValueByType(field.type),\n } as Record<string, unknown>;\n },\n {} as Record<string, unknown>,\n ),\n onSubmit: async ({ value }) => {\n // Validación con Zod antes de enviar\n const validationResult = formSchema.safeParse(value);\n if (!validationResult.success) {\n errorNotification({\n title: \"Error de validación\",\n message: \"Por favor verifica los datos ingresados\",\n });\n return;\n }\n\n const hasFileField = fields.some((f) => f.type === FieldTypes.FILE);\n const shouldUseFormData = hasFiles || hasFileField;\n\n if (shouldUseFormData) {\n const formData = new FormData();\n\n Object.entries(validationResult.data).forEach(([key, rawVal]) => {\n const fieldDef = fields.find((f) => f.name === key);\n const val = rawVal as unknown;\n\n if (fieldDef?.type === FieldTypes.FILE && val) {\n if (Array.isArray(val)) {\n (val as unknown[]).forEach((item) => {\n if (item instanceof File) formData.append(key, item);\n });\n } else if (val instanceof File) {\n formData.append(key, val);\n }\n return;\n }\n\n if (Array.isArray(val)) {\n const items = val as unknown[];\n const hasFile = items.some((item) => item instanceof File);\n if (hasFile) {\n items.forEach((item) => {\n if (item instanceof File) formData.append(key, item);\n });\n } else {\n // For TAG fields, send as comma-separated string\n if (fieldDef?.type === FieldTypes.TAG) {\n formData.append(key, items.join(\",\"));\n } else {\n // For other arrays, send as JSON string\n formData.append(key, JSON.stringify(items));\n }\n }\n return;\n }\n\n if (val instanceof Date) {\n formData.append(key, val.toISOString());\n return;\n }\n\n if (val != null && typeof val === \"object\") {\n formData.append(key, JSON.stringify(val));\n return;\n }\n\n formData.append(key, val != null ? String(val) : \"\");\n });\n\n const variables = buildVariables\n ? (buildVariables(formData) as TVariables)\n : (formData as unknown as TVariables);\n\n mutate(variables, {\n onSuccess: (data) => {\n successNotification({\n title: `${typeOfForm === \"create\" ? \"Creado\" : \"Editado\"} exitosamente`,\n message: `${name} ha sido ${typeOfForm === \"create\" ? \"creado\" : \"editado\"} exitosamente, serás redirigido a la lista de ${name}`,\n });\n setData && setData(data as TData);\n onSuccess && onSuccess(data as TData);\n },\n onError: (error: unknown) => {\n const message = isAxiosError(error)\n ? error.response?.data?.message\n : undefined;\n errorNotification({\n title: `Error al ${typeOfForm === \"create\" ? \"crear\" : \"editar\"} el ${name}`,\n message:\n message ?? \"Ha ocurrido un error al crear o editar el registro\",\n });\n },\n });\n } else {\n const raw = validationResult.data as Record<string, unknown>;\n const variables = buildVariables\n ? (buildVariables(raw) as TVariables)\n : ((wrapJsonByName ? { [name]: raw } : raw) as unknown as TVariables);\n\n mutate(variables, {\n onSuccess: (data) => {\n successNotification({\n title: `${typeOfForm === \"create\" ? \"Creado\" : \"Editado\"} exitosamente`,\n message: `${name} ha sido ${typeOfForm === \"create\" ? \"creado\" : \"editado\"} exitosamente, serás redirigido a la lista de ${name}`,\n });\n setData && setData(data as TData);\n onSuccess && onSuccess(data as TData);\n },\n onError: (error: unknown) => {\n const message = isAxiosError(error)\n ? error.response?.data?.message\n : undefined;\n errorNotification({\n title: `Error al ${typeOfForm === \"create\" ? \"crear\" : \"editar\"} el ${name}`,\n message:\n message ?? \"Ha ocurrido un error al crear o editar el registro\",\n });\n },\n });\n }\n },\n });\n\n const visibleFields = useMemo(\n () =>\n hasMultipleSteps\n ? fields.filter((f) => (f.page ?? 1) === currentStep)\n : fields,\n [fields, hasMultipleSteps, currentStep],\n );\n\n const handleNext = async (): Promise<void> => {\n // Validate only current step fields\n const stepFields = fields.filter((f) => (f.page ?? 1) === currentStep);\n if (stepFields.length > 0) {\n const stepSchema = generateFormSchema(stepFields);\n const currentValues = form.state.values as Record<string, unknown>;\n const stepValues = stepFields.reduce<Record<string, unknown>>(\n (acc, f) => {\n acc[f.name] = currentValues[f.name];\n return acc;\n },\n {},\n );\n const res = stepSchema.safeParse(stepValues);\n if (!res.success) {\n errorNotification({\n title: \"Datos incompletos\",\n message: \"Por favor completa los campos requeridos de este paso\",\n });\n return;\n }\n }\n setCurrentStep((s) => Math.min(s + 1, maxPage));\n };\n\n const handleBack = (): void => {\n setCurrentStep((s) => Math.max(1, s - 1));\n };\n\n useEffect(() => {\n fields.forEach((field) => {\n const currentValue = (form.state.values as Record<string, unknown>)[\n field.name\n ];\n const defaultValue =\n field.defaultValue ?? getDefaultValueByType(field.type);\n\n // Verifica si el campo es de tipo TAG y si el valor actual es un array vacío\n if (\n field.type === FieldTypes.TAG &&\n Array.isArray(currentValue) &&\n currentValue.length === 0\n ) {\n form.setFieldValue(field.name as string, defaultValue as unknown);\n } else if (currentValue === \"\" || currentValue === defaultValue) {\n form.setFieldValue(field.name as string, defaultValue as unknown);\n }\n });\n }, [fields]);\n\n useEffect(() => {\n if (onFormRef) {\n onFormRef(form);\n }\n }, [form, onFormRef]);\n\n return (\n <form\n onSubmit={async (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (hasMultipleSteps && currentStep < maxPage) {\n await handleNext();\n } else {\n form.handleSubmit();\n }\n }}\n encType=\"multipart/form-data\"\n >\n <LoadingOverlay visible={loading!} />\n {hasMultipleSteps && (\n <Box mb={16}>\n <Stepper active={currentStep - 1} allowNextStepsSelect={false}>\n {Array.from({ length: maxPage }).map((_, idx) => (\n <Stepper.Step key={idx} label={`Paso ${idx + 1}`} />\n ))}\n </Stepper>\n </Box>\n )}\n <Box\n style={{\n display: \"grid\",\n gridTemplateColumns: fields.some((field) => field.section === 2)\n ? \"repeat(2, 1fr)\"\n : \"1fr\",\n gap: \"20px\",\n alignItems: \"start\",\n }}\n >\n <Box\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(12, 1fr)\",\n gap: \"10px\",\n height: \"fit-content\",\n }}\n >\n {visibleFields\n .filter(\n (field) => field.section === undefined || field.section === 1,\n )\n .map((field) => (\n <Box\n key={field.name}\n style={{\n gridColumn: `span ${field.columnWidth || 12}`,\n }}\n >\n {fieldGenerator({ field, form })}\n </Box>\n ))}\n </Box>\n {visibleFields.some((field) => field.section === 2) && (\n <Box\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(12, 1fr)\",\n gap: \"10px\",\n height: \"fit-content\",\n }}\n >\n {visibleFields\n .filter((field) => field.section === 2)\n .map((field) => (\n <Box\n key={field.name}\n style={{\n gridColumn: `span ${field.columnWidth || 12}`,\n }}\n >\n {fieldGenerator({ field, form })}\n </Box>\n ))}\n </Box>\n )}\n </Box>\n <Group justify=\"space-between\" mt={20}>\n {hasMultipleSteps && (\n <Group>\n <Button\n type=\"button\"\n variant=\"default\"\n onClick={handleBack}\n disabled={currentStep === 1}\n >\n Atrás\n </Button>\n {currentStep < maxPage && (\n <Button type=\"button\" onClick={handleNext}>\n Siguiente\n </Button>\n )}\n </Group>\n )}\n <Flex justify=\"flex-end\" style={{ flex: 1 }}>\n {buttons.map((button) =>\n hasMultipleSteps &&\n currentStep < maxPage &&\n button.type === \"submit\"\n ? buttonGenerator({ ...button, disabled: true }, isPending)\n : buttonGenerator(button, isPending),\n )}\n </Flex>\n </Group>\n </form>\n );\n};\n","import { useMutation, type UseMutationResult } from \"@tanstack/react-query\";\nimport { Button, Card, Container, Flex, Title } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\nimport type { IField, IButton } from \"../../interfaces/form.interface\";\nimport { FormGenerator } from \"./FormGenerator\";\n\ninterface CreateEditFormProps<T> {\n fields: IField[];\n buttons: IButton[];\n mutationKey: string[];\n mutationFn: (data: T | FormData) => Promise<T>;\n typeOfForm: \"create\" | \"edit\";\n dataKey: string;\n loading: boolean;\n cardWidth?: number;\n hasFiles?: boolean;\n onSuccess?: () => void;\n setData?: (data: T) => void;\n navigateAway?: boolean;\n showBackButton?: boolean;\n /**\n * Callback when the user clicks \"Regresar\". Provide your router's go-back logic here.\n * @example React Router: () => navigate(-1)\n * @example TanStack Router: () => router.history.back()\n * @example TanStack Start: () => navigate({ to: '..' })\n */\n onGoBack?: () => void;\n /**\n * Optional icon for the back button. Pass your own icon component so the lib stays router/UI-agnostic.\n * @example <ArrowLeft /> from lucide-react\n */\n backButtonIcon?: ReactNode;\n}\n\nexport const CreateEditForm = <T,>({\n fields,\n buttons,\n mutationKey,\n mutationFn,\n typeOfForm,\n dataKey,\n loading,\n cardWidth,\n hasFiles,\n onSuccess,\n setData,\n navigateAway = true,\n showBackButton = true,\n onGoBack,\n backButtonIcon,\n}: CreateEditFormProps<T>): React.ReactNode => {\n const showBack = showBackButton && onGoBack != null;\n\n const mutation = useMutation({\n mutationKey,\n mutationFn: mutationFn as (data: T | FormData) => Promise<T>,\n });\n\n return (\n <>\n {showBack && (\n <Flex justify={\"start\"}>\n <Button\n leftSection={backButtonIcon}\n variant=\"transparent\"\n mx={20}\n mt={10}\n onClick={onGoBack}\n >\n Regresar a {dataKey}\n </Button>\n </Flex>\n )}\n <Container w={cardWidth ?? 500} my={-10}>\n <Flex direction={\"column\"}>\n <Title order={1} my={10}>\n {typeOfForm === \"create\" ? \"Crear\" : \"Editar\"} {dataKey}\n </Title>\n <Card withBorder>\n <FormGenerator<T>\n typeOfForm={typeOfForm}\n name={dataKey}\n loading={loading}\n fields={fields}\n buttons={buttons}\n mutation={mutation as UseMutationResult<T, unknown, unknown, unknown>}\n hasFiles={hasFiles}\n onSuccess={onSuccess}\n setData={setData}\n navigateAway={navigateAway}\n />\n </Card>\n </Flex>\n </Container>\n </>\n );\n};\n","\texport const barBorder =\n\t\t\"light-dark(#e5e5e5, var(--mantine-color-dark-4))\";\n\texport const barSurface =\n\t\t\"light-dark(var(--mantine-color-white), var(--mantine-color-dark-6))\";\n\texport const barTextActive =\n\t\t\"light-dark(#111827, var(--mantine-color-dark-0))\";\n\texport const barTextInactive =\n\t\t\"light-dark(#6b7280, var(--mantine-color-dark-2))\";\nexport const defaultHeaderBgColor =\n \"light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-6))\";\n export const paginationBorder =\n\t\t\"light-dark(#e5e5e5, var(--mantine-color-dark-4))\";\n\texport const paginationSurface =\n\t\t\"light-dark(var(--mantine-color-white), var(--mantine-color-dark-6))\";\n","import { Flex, Text, Select, Pagination, Group } from \"@mantine/core\";\nimport { paginationBorder, paginationSurface } from \"../../theme/constants\";\nimport { useMediaQuery } from \"../../hooks/useMediaQuery\";\n\n\ninterface BottomPaginationProps {\n total: number;\n pageSize: number;\n pageIndex: number;\n onPageSizeChange: (value: number) => void;\n onPageIndexChange: (value: number) => void;\n}\n\nexport const BottomPagination = ({\n total,\n pageSize,\n pageIndex,\n onPageSizeChange,\n onPageIndexChange,\n}: BottomPaginationProps) => {\n\n const { isMobile, isDesktop } = useMediaQuery();\n \n const totalPages = Math.ceil(total / pageSize);\n const currentPage = pageIndex + 1; // pageIndex is 0-based, display is 1-based\n\n const handlePageChange = (page: number) => {\n onPageIndexChange(page - 1); // Convert back to 0-based\n };\n\n const pageSizeOptions = [\n { value: \"5\", label: \"5\" },\n { value: \"10\", label: \"10\" },\n { value: \"15\", label: \"15\" },\n { value: \"20\", label: \"20\" },\n { value: \"50\", label: \"50\" },\n ];\n\n // Don't render pagination if there's no data\n if (total === 0) {\n return null;\n }\n\n return (\n <Flex\n align=\"center\"\n py=\"sm\"\n px=\"lg\"\n style={{\n position: \"relative\",\n borderTop:\n \"1px solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4))\",\n backgroundColor:\n \"light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-6))\",\n }}\n >\n <Pagination\n radius=\"md\"\n withEdges={isDesktop}\n total={totalPages}\n value={currentPage}\n onChange={handlePageChange}\n size=\"sm\"\n siblings={ !isMobile ? 1 : 0 }\n boundaries={ !isMobile ? 1 : 0 }\n style={\n isDesktop\n ? {\n position: \"absolute\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n }\n : undefined\n }\n />\n\n <Group style={{ marginLeft: \"auto\", alignItems: \"center\" }}>\n <Text size=\"xs\" c=\"dimmed\">\n Mostrar\n </Text>\n <Select\n value={pageSize.toString()}\n onChange={(value) => value && onPageSizeChange(parseInt(value, 10))}\n data={pageSizeOptions}\n size=\"xs\"\n w={65}\n styles={{\n input: {\n border: `1px solid ${paginationBorder}`,\n backgroundColor: paginationSurface,\n fontSize: \"0.75rem\",\n },\n }}\n comboboxProps={{ withinPortal: false }}\n />\n <Text size=\"xs\" c=\"dimmed\" visibleFrom=\"sm\">\n registros\n </Text>\n {total !== undefined && !isMobile && (\n <Text size=\"xs\" c=\"dimmed\" ml=\"xs\">\n ({total} en total)\n </Text>\n )}\n </Group>\n </Flex>\n );\n};\n","import { useState } from \"react\";\nimport { Checkbox, Table, UnstyledButton } from \"@mantine/core\";\nimport { flexRender, type useReactTable } from \"@tanstack/react-table\";\nimport { defaultHeaderBgColor } from \"../../theme/constants\";\nimport type { TableHeaderStyle as TableHeaderStyleType } from \"../../interfaces/datatable.interface\";\n\nconst defaultHeaderTextColor =\n \"light-dark(var(--mantine-color-dimmed), var(--mantine-color-gray-4))\";\nconst defaultHeaderHoverBg =\n \"light-dark(var(--mantine-color-gray-2), var(--mantine-color-dark-2))\";\n\n/** Normalize legacy string (bg only) to TableHeaderStyle object */\nfunction normalizeHeaderStyle(\n value: string | TableHeaderStyleType | undefined,\n): TableHeaderStyleType {\n if (value == null) {\n return {\n bgColor: defaultHeaderBgColor,\n textColor: defaultHeaderTextColor,\n hoverBgColor: defaultHeaderHoverBg,\n };\n }\n if (typeof value === \"string\") {\n return {\n bgColor: value,\n textColor: defaultHeaderTextColor,\n hoverBgColor: defaultHeaderHoverBg,\n };\n }\n return {\n bgColor: value.bgColor ?? defaultHeaderBgColor,\n textColor: value.textColor ?? defaultHeaderTextColor,\n hoverBgColor: value.hoverBgColor ?? defaultHeaderHoverBg,\n hoverTextColor: value.hoverTextColor ?? value.textColor ?? defaultHeaderTextColor,\n fontWeight: value.fontWeight,\n fontSize: value.fontSize,\n padding: value.padding,\n };\n}\n\ninterface TableHeaderProps<TData> {\n table: ReturnType<typeof useReactTable<TData>>;\n /** Icon when column is unsorted */\n SortIcon?: React.ElementType;\n /** Icon when column is sorted ascending */\n SortIconAsc?: React.ElementType;\n /** Icon when column is sorted descending */\n SortIconDesc?: React.ElementType;\n canCheck?: boolean;\n /** Whether the table has an actions column (no header label, needs background) */\n hasActionsColumn?: boolean;\n /** Header style: color string (legacy, used as bg) or { bgColor, textColor, fontWeight?, fontSize?, padding? } */\n headerBgColor?: string | TableHeaderStyleType;\n}\n\nexport const TableHeader = <TData,>({\n table,\n SortIcon,\n SortIconAsc,\n SortIconDesc,\n canCheck = false,\n hasActionsColumn = false,\n headerBgColor,\n}: TableHeaderProps<TData>) => {\n const [hoveredHeaderId, setHoveredHeaderId] = useState<string | null>(null);\n const style = normalizeHeaderStyle(headerBgColor);\n const bgColor = style.bgColor ?? defaultHeaderBgColor;\n const hoverBg = style.hoverBgColor ?? defaultHeaderHoverBg;\n const hoverText = style.hoverTextColor ?? style.textColor ?? defaultHeaderTextColor;\n const totalColumnsSize = table\n .getVisibleLeafColumns()\n .reduce((sum, column) => sum + column.getSize(), 0);\n\n const getSortIcon = (sortState: false | \"asc\" | \"desc\") => {\n if (sortState === \"asc\") return SortIconAsc;\n if (sortState === \"desc\") return SortIconDesc;\n return SortIcon;\n };\n\n const getColumnStyle = (size: number): React.CSSProperties | undefined => {\n if (!size || totalColumnsSize <= 0) return undefined;\n return {\n width: `${(size / totalColumnsSize) * 100}%`,\n minWidth: size,\n };\n };\n\n const baseButtonStyle: React.CSSProperties = {\n padding: style.padding ?? \"4px 10px\",\n fontSize: style.fontSize ?? 14,\n fontWeight: style.fontWeight ?? 700,\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n transition: \"background-color 0.1s ease, color 0.1s ease\",\n borderRadius: \"var(--mantine-radius-lg)\",\n };\n\n return (\n <Table.Thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <Table.Tr key={headerGroup.id}>\n {canCheck && (\n <Table.Th\n bg={bgColor}\n w={10}\n styles={{\n th: {\n padding: \"0 0 0 6px\",\n },\n }}\n >\n <Checkbox\n size=\"xs\"\n style={{\n padding: 0,\n }}\n checked={table.getIsAllRowsSelected()}\n indeterminate={\n table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\n }\n onChange={table.getToggleAllRowsSelectedHandler()}\n aria-label=\"Toggle all rows selected\"\n />\n </Table.Th>\n )}\n {headerGroup.headers.map((header) => {\n const canSort = header.column.getCanSort();\n const sortState = header.column.getIsSorted();\n const Icon = canSort ? getSortIcon(sortState) : null;\n const isHovered = hoveredHeaderId === header.id;\n\n return (\n <Table.Th\n key={header.id}\n bg={bgColor}\n style={getColumnStyle(header.column.getSize())}\n >\n <UnstyledButton\n style={{\n ...baseButtonStyle,\n color: isHovered ? hoverText : (style.textColor ?? defaultHeaderTextColor),\n backgroundColor: isHovered ? hoverBg : undefined,\n }}\n onClick={header.column.getToggleSortingHandler()}\n onMouseEnter={() => setHoveredHeaderId(header.id)}\n onMouseLeave={() => setHoveredHeaderId(null)}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n {Icon && <Icon size={16} />}\n </UnstyledButton>\n </Table.Th>\n );\n })}\n {hasActionsColumn && <Table.Th bg={bgColor} />}\n </Table.Tr>\n ))}\n </Table.Thead>\n );\n};\n","import { useState } from \"react\";\nimport { ActionIcon, Checkbox, Flex, Menu, Table, Text } from \"@mantine/core\";\nimport { MoreVertical } from \"lucide-react\";\nimport { flexRender, type useReactTable } from \"@tanstack/react-table\";\n\ninterface TableBodyProps<TData> {\n table: ReturnType<typeof useReactTable<TData>>;\n canCheck?: boolean;\n columnActions?: (row: TData) => React.ReactNode;\n MenuIcon?: React.ElementType;\n listMenuActions?: (\n row: TData,\n ) => { label: string; onClick: () => void; Icon?: React.ElementType }[];\n onRowClick?: (row: TData) => void;\n onRowHover?: (row: TData) => void;\n}\n\nexport const TableBody = <TData,>({\n table,\n canCheck = false,\n columnActions,\n MenuIcon = MoreVertical,\n listMenuActions,\n onRowClick,\n onRowHover,\n}: TableBodyProps<TData>) => {\n const [hoveredRowId, setHoveredRowId] = useState<string | null>(null);\n const totalColumnsSize = table\n .getVisibleLeafColumns()\n .reduce((sum, column) => sum + column.getSize(), 0);\n\n const getColumnStyle = (size: number): React.CSSProperties | undefined => {\n if (!size || totalColumnsSize <= 0) return undefined;\n return {\n width: `${(size / totalColumnsSize) * 100}%`,\n minWidth: size,\n };\n };\n\n return (\n <Table.Tbody>\n {table.getRowModel().rows.map((row) => (\n <Table.Tr\n key={row.id}\n style={{\n ...(onRowClick ? { cursor: \"pointer\" } : {}),\n ...(hoveredRowId === row.id\n ? {\n backgroundColor:\n \"light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-5))\",\n }\n : {}),\n }}\n onMouseEnter={() => {\n setHoveredRowId(row.id);\n onRowHover?.(row.original);\n }}\n onMouseLeave={() => setHoveredRowId(null)}\n >\n {canCheck && (\n <Table.Td\n styles={{\n td: {\n padding: \"0 0 0 6px\",\n },\n }}\n >\n <Checkbox\n size=\"xs\"\n styles={{\n root: {\n width: 5,\n },\n }}\n checked={row.getIsSelected()}\n onChange={row.getToggleSelectedHandler()}\n disabled={!row.getCanSelect()}\n aria-label=\"Select row\"\n />\n </Table.Td>\n )}\n {row.getVisibleCells().map((cell) => (\n <Table.Td\n key={cell.id}\n style={getColumnStyle(cell.column.getSize())}\n onClick={() => onRowClick?.(row.original)}\n >\n <Text\n size=\"sm\"\n style={{\n color:\n \"light-dark(var(--mantine-color-dark-7), var(--mantine-color-gray-1))\",\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Text>\n </Table.Td>\n ))}\n {(columnActions || listMenuActions) && (\n <Table.Td>\n <Flex justify=\"flex-end\" align=\"center\" gap=\"sm\">\n {columnActions?.(row.original)}\n {listMenuActions && (\n <Menu variant=\"subtle\">\n <Menu.Target>\n <ActionIcon variant=\"subtle\" color=\"gray\" size=\"sm\">\n <MenuIcon size={16} />\n </ActionIcon>\n </Menu.Target>\n <Menu.Dropdown>\n {listMenuActions(row.original).map((action) => (\n <Menu.Item\n key={action.label}\n onClick={action.onClick}\n leftSection={action.Icon && <action.Icon />}\n >\n {action.label}\n </Menu.Item>\n ))}\n </Menu.Dropdown>\n </Menu>\n )}\n </Flex>\n </Table.Td>\n )}\n </Table.Tr>\n ))}\n </Table.Tbody>\n );\n};\n","import { Skeleton, Table } from \"@mantine/core\";\n\ninterface TableSkeletonProps {\n /** Number of skeleton rows to show */\n rowCount: number;\n /** Number of data columns (excluding checkbox and actions) */\n columnCount: number;\n /** Whether to show the checkbox column */\n canCheck?: boolean;\n /** Whether to show the actions column */\n hasActionsColumn?: boolean;\n}\n\nconst cellStyle = { minHeight: 40, verticalAlign: \"middle\" as const };\n\nexport const TableSkeleton = ({\n rowCount,\n columnCount,\n canCheck = false,\n hasActionsColumn = false,\n}: TableSkeletonProps) => {\n return (\n <Table.Tbody>\n {Array.from({ length: rowCount }).map((_, rowIdx) => (\n <Table.Tr key={rowIdx}>\n {canCheck && (\n <Table.Td style={cellStyle}>\n <Skeleton height={16} width={18} radius=\"sm\" />\n </Table.Td>\n )}\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <Table.Td key={colIdx} style={cellStyle}>\n <Skeleton\n height={16}\n width={\n colIdx === columnCount - 1\n ? 40\n : `${60 + (colIdx % 2) * 15}%`\n }\n radius=\"sm\"\n />\n </Table.Td>\n ))}\n {hasActionsColumn && (\n <Table.Td style={cellStyle}>\n <Skeleton height={16} width={32} radius=\"sm\" />\n </Table.Td>\n )}\n </Table.Tr>\n ))}\n </Table.Tbody>\n );\n};\n","import React from \"react\";\nimport { Stack, Text, Title, Button, Box } from \"@mantine/core\";\n\ninterface EmptyStateProps {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n actionButton?: {\n label: string;\n onClick: () => void;\n variant?: \"filled\" | \"light\" | \"outline\";\n color?: string;\n };\n IconPlus?: React.ElementType;\n IconFileX?: React.ElementType;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n title = \"No hay datos disponibles\",\n description = \"No se encontraron elementos para mostrar. Intenta ajustar los filtros o agrega nuevos elementos.\",\n icon,\n actionButton,\n IconPlus,\n IconFileX,\n}) => {\n const defaultIcon = (\n <Box\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 64,\n height: 64,\n borderRadius: \"50%\",\n backgroundColor: \"var(--mantine-color-gray-1)\",\n margin: \"0 auto\",\n }}\n >\n {IconFileX ? (\n <IconFileX size={32} color=\"var(--mantine-color-gray-6)\" />\n ) : null}\n </Box>\n );\n\n return (\n <Stack\n align=\"center\"\n justify=\"center\"\n gap=\"md\"\n py=\"xl\"\n px=\"md\"\n style={{\n textAlign: \"center\",\n minHeight: 300,\n }}\n >\n {icon || defaultIcon}\n\n <Stack gap=\"xs\" align=\"center\">\n <Title\n order={3}\n size=\"h4\"\n fw={600}\n style={{\n color: \"var(--mantine-color-gray-9)\",\n fontSize: \"18px\",\n }}\n >\n {title}\n </Title>\n\n <Text\n size=\"sm\"\n c=\"dimmed\"\n style={{\n maxWidth: 400,\n lineHeight: 1.5,\n }}\n >\n {description}\n </Text>\n </Stack>\n\n {actionButton && (\n <Button\n variant={actionButton.variant || \"light\"}\n color={actionButton.color || \"blue\"}\n leftSection={IconPlus ? <IconPlus size={16} /> : null}\n onClick={actionButton.onClick}\n mt=\"xs\"\n >\n {actionButton.label}\n </Button>\n )}\n </Stack>\n );\n};\n","import {\n flexRender,\n useReactTable,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport { Flex, Paper, ScrollArea, Table } from \"@mantine/core\";\nimport { ArrowUpDown, ArrowDown, ArrowUp, FileX } from \"lucide-react\";\nimport type React from \"react\";\nimport type { TableHeaderStyle } from \"../../interfaces/datatable.interface\";\nimport { defaultHeaderBgColor } from \"../../theme/constants\";\nimport { TableHeader } from \"./TableHeader\";\nimport { TableBody } from \"./TableBody\";\nimport { TableSkeleton } from \"./TableSkeleton\";\nimport { EmptyState } from \"./EmptyState\";\n\ninterface DataTableProps<TData> {\n table: ReturnType<typeof useReactTable<TData>>;\n /** Whether to show the border */\n withBorder?: boolean;\n /** Border radius */\n borderRadius?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | number;\n /** Icon when column is unsorted */\n SortIcon?: React.ElementType;\n /** Icon when column is sorted ascending */\n SortIconAsc?: React.ElementType;\n /** Icon when column is sorted descending */\n SortIconDesc?: React.ElementType;\n /** Icon when empty state */\n EmptyStateIcon?: React.ElementType;\n /** Title when empty state */\n EmptyStateTitle?: string;\n /** Description when empty state */\n EmptyStateDescription?: string;\n /** Whether to show the checkboxes */\n canCheck?: boolean;\n /** Column actions */\n columnActions?: (row: TData) => React.ReactNode;\n /** List menu actions */\n listMenuActions?: (\n row: TData,\n ) => { label: string; onClick: () => void; Icon?: React.ElementType }[];\n /** Header style: color string (legacy) or { bgColor, textColor, fontWeight?, fontSize?, padding? } */\n headerBgColor?: string | TableHeaderStyle;\n /** Whether the table is loading (shows skeleton rows instead of data) */\n loading?: boolean;\n /** Number of skeleton rows to show when loading */\n skeletonRowCount?: number;\n /** Called when a row is clicked */\n onRowClick?: (row: TData) => void;\n /** Called when a row is hovered */\n onRowHover?: (row: TData) => void;\n /** Empty state to display when no data is available */\n emptyState?: React.ReactNode;\n /** Height of the table */\n tableHeight?: number;\n}\n\nexport const SimpleDataTable = <TData,>({\n tableHeight = 600,\n table,\n withBorder,\n borderRadius = \"md\",\n SortIcon = ArrowUpDown,\n SortIconAsc = ArrowUp,\n SortIconDesc = ArrowDown,\n canCheck = false,\n columnActions,\n listMenuActions,\n headerBgColor,\n loading = false,\n skeletonRowCount = 10,\n onRowClick,\n onRowHover,\n emptyState = (\n <EmptyState\n title=\"No data found\"\n description=\"No data found\"\n icon={<FileX size={32} color=\"var(--mantine-color-gray-6)\" />}\n />\n ),\n}: DataTableProps<TData>) => {\n const dataColumnsCount = table.getAllLeafColumns().length;\n const hasActionsColumn = !!(columnActions || listMenuActions);\n const headerBg =\n typeof headerBgColor === \"string\"\n ? headerBgColor\n : headerBgColor?.bgColor ?? defaultHeaderBgColor;\n\n return (\n <Paper withBorder={withBorder} radius={borderRadius}>\n <ScrollArea h={tableHeight} type=\"scroll\" scrollbarSize={8}>\n <Table\n style={{ width: \"100%\", tableLayout: \"fixed\" }}\n styles={{\n thead: {\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n background: headerBg,\n boxShadow: \"0 1px 0 0 light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4))\",\n },\n }}\n >\n <TableHeader\n canCheck={canCheck}\n table={table}\n SortIcon={SortIcon}\n SortIconAsc={SortIconAsc}\n SortIconDesc={SortIconDesc}\n hasActionsColumn={hasActionsColumn}\n headerBgColor={headerBgColor}\n />\n {loading ? (\n <TableSkeleton\n rowCount={skeletonRowCount}\n columnCount={dataColumnsCount}\n canCheck={canCheck}\n hasActionsColumn={hasActionsColumn}\n />\n ) : table.getRowCount() > 0 ? (\n <TableBody\n onRowClick={onRowClick}\n onRowHover={onRowHover}\n table={table}\n canCheck={canCheck}\n columnActions={columnActions}\n listMenuActions={listMenuActions}\n />\n ) : (\n <Table.Tbody>\n <Table.Tr>\n <Table.Td\n colSpan={\n (table.getHeaderGroups()[0]?.headers.length ?? 1) +\n (canCheck ? 1 : 0)\n }\n >\n <Flex\n justify=\"center\"\n align=\"center\"\n style={{ minHeight: 200 }}\n >\n {emptyState}\n </Flex>\n </Table.Td>\n </Table.Tr>\n </Table.Tbody>\n )}\n </Table>\n </ScrollArea>\n </Paper>\n );\n};\n","import { ActionIcon, TextInput } from \"@mantine/core\";\nimport { Search, X } from \"lucide-react\";\nimport { barBorder, barTextActive, barSurface } from \"../../theme/constants\";\n\ninterface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n onClear?: () => void;\n IconSearch?: React.ElementType;\n IconX?: React.ElementType;\n}\n\nexport const SearchInput = ({\n value,\n onChange,\n placeholder = \"Buscar...\",\n onClear,\n IconSearch = Search,\n IconX = X,\n}: SearchInputProps) => {\n return (\n <TextInput\n w={200}\n size=\"sm\"\n radius=\"lg\"\n value={value}\n onChange={(event) => onChange(event.currentTarget.value)}\n placeholder={placeholder}\n leftSection={\n IconSearch ? (\n <IconSearch\n size={16}\n style={{\n color: \"var(--mantine-color-gray-6)\",\n strokeWidth: 2,\n }}\n />\n ) : undefined\n }\n rightSection={\n value && IconX ? (\n <ActionIcon\n variant=\"subtle\"\n color=\"gray\"\n radius=\"lg\"\n onClick={() => {\n onChange(\"\");\n onClear?.();\n }}\n style={{\n transition: \"all 0.2s ease\",\n }}\n >\n <IconX size={16} />\n </ActionIcon>\n ) : undefined\n }\n styles={{\n input: {\n border: `1px solid ${barBorder}`,\n color: barTextActive,\n backgroundColor: barSurface,\n fontSize: \"14px\",\n fontWeight: 500,\n transition: \"all 0.2s ease\",\n \"&:focus\": {\n borderColor: \"var(--mantine-color-blue-5)\",\n backgroundColor: \"var(--mantine-color-default)\",\n boxShadow: \"0 0 0 3px var(--mantine-color-blue-1)\",\n },\n \"&::placeholder\": {\n color: \"var(--mantine-color-gray-5)\",\n fontWeight: 400,\n },\n },\n }}\n />\n );\n};\n","import { ActionIcon, Button, Menu, ScrollArea, TextInput } from \"@mantine/core\";\nimport type { IFilterSelectOption } from \"../../interfaces/filters.interface\";\nimport { barBorder, barSurface, barTextActive } from \"../../theme/constants\";\nimport {\n Check,\n ChevronDown,\n ChevronUp,\n ListFilter,\n Search,\n X,\n} from \"lucide-react\";\nimport { useRef, useMemo, useState } from \"react\";\n\nexport interface FilterSelectProps {\n /** Column id to filter */\n columnId: string;\n /** Select options (value, label pairs). Import FilterSelectOption from interfaces/filters */\n options: IFilterSelectOption[];\n /** Current filter value */\n onChange: (columnId: string, value: string | null) => void;\n /** Placeholder when no selection */\n placeholder?: string;\n /** Icon to show in the button */\n Icon?: React.ElementType;\n /** Enable search input inside dropdown */\n searchable?: boolean;\n}\n\nexport const FilterSelect = ({\n columnId,\n options,\n onChange,\n placeholder = \"Todos\",\n Icon = ListFilter,\n searchable = false,\n}: FilterSelectProps) => {\n const [open, setOpen] = useState<boolean>(false);\n const [selectedOption, setSelectedOption] =\n useState<IFilterSelectOption | null>(null);\n const [search, setSearch] = useState(\"\");\n const searchRef = useRef<HTMLInputElement>(null);\n\n const filteredOptions = useMemo(\n () =>\n searchable && search\n ? options.filter((o) =>\n o.label.toLowerCase().includes(search.toLowerCase()),\n )\n : options,\n [options, search, searchable],\n );\n\n const handleClear = () => {\n setSelectedOption(null);\n onChange(columnId, null);\n };\n\n const handleSelect = (option: IFilterSelectOption) => {\n if (selectedOption?.value === option.value) {\n setSelectedOption(null);\n onChange(columnId, null);\n } else {\n setSelectedOption(option);\n onChange(columnId, option.value);\n }\n };\n\n return (\n <Menu\n opened={open}\n onChange={(opened) => {\n setOpen(opened);\n if (!opened) {\n setSearch(\"\");\n }\n }}\n onOpen={() => {\n setTimeout(() => searchRef.current?.focus(), 50);\n }}\n styles={{\n dropdown: {\n minWidth: 180,\n },\n }}\n >\n <Menu.Target>\n <Button\n radius=\"md\"\n variant=\"filled\"\n leftSection={Icon ? <Icon size={15} /> : null}\n rightSection={\n selectedOption ? (\n <ActionIcon\n component=\"div\"\n variant=\"subtle\"\n radius=\"md\"\n onClick={(event) => {\n event.stopPropagation();\n handleClear();\n }}\n >\n <X size={12} />\n </ActionIcon>\n ) : open ? (\n <ChevronUp size={12} />\n ) : (\n <ChevronDown size={12} />\n )\n }\n size=\"sm\"\n styles={{\n root: {\n border: `1px solid ${barBorder}`,\n backgroundColor: barSurface,\n color: barTextActive,\n fontWeight: 400,\n fontSize: \"0.8125rem\",\n },\n }}\n >\n {selectedOption ? selectedOption.label : placeholder}\n </Button>\n </Menu.Target>\n <Menu.Dropdown style={{ boxShadow: \"0 0 10px 0 rgba(0, 0, 0, 0.1)\", borderRadius: \"8px\" }}>\n {searchable && (\n <TextInput\n ref={searchRef}\n variant=\"unstyled\"\n placeholder=\"Buscar...\"\n leftSection={<Search size={14} />}\n value={search}\n onChange={(e) => setSearch(e.currentTarget.value)}\n />\n )}\n <ScrollArea mah={240} scrollbars=\"y\" type=\"always\">\n {filteredOptions.map((option) => (\n <Menu.Item\n leftSection={\n selectedOption?.value === option.value ? (\n <Check size={12} />\n ) : null\n }\n key={option.value}\n onClick={() => {\n handleSelect(option);\n }}\n >\n {option.label}\n </Menu.Item>\n ))}\n </ScrollArea>\n {searchable && filteredOptions.length === 0 && (\n <Menu.Item disabled>Sin resultados</Menu.Item>\n )}\n </Menu.Dropdown>\n </Menu>\n );\n};\n","import { useState } from \"react\";\nimport type { Row } from \"@tanstack/react-table\";\n\n/**\n * TanStack Table filterFn for date columns.\n * Keeps rows where the cell value (YYYY-MM-DD) is >= the selected date.\n * Usage: add `filterFn: dateGteFilterFn` to the column definition.\n */\nexport const dateGteFilterFn = <TData,>(\n row: Row<TData>,\n columnId: string,\n filterValue: string,\n): boolean => {\n const cellValue = row.getValue<string>(columnId);\n if (!filterValue || !cellValue) return true;\n return cellValue >= filterValue;\n};\nimport { ActionIcon, Button, Popover } from \"@mantine/core\";\nimport { DatePicker } from \"@mantine/dates\";\nimport type { DateValue } from \"@mantine/dates\";\nimport { CalendarDays, ChevronDown, ChevronUp, X } from \"lucide-react\";\nimport { barBorder, barSurface, barTextActive } from \"../../theme/constants\";\n\nexport interface FilterDateProps {\n /** Column id to filter */\n columnId: string;\n /** Current filter value (ISO date string or null) */\n value: string | null;\n /** Called when filter changes */\n onChange: (columnId: string, value: string | null) => void;\n /** Placeholder when no date selected */\n placeholder?: string;\n}\n\nconst toLocalIso = (date: Date): string => {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, \"0\");\n const d = String(date.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n};\n\nconst fromIso = (iso: string): Date => {\n const parts = iso.split(\"-\").map(Number);\n return new Date(parts[0]!, parts[1]! - 1, parts[2]!);\n};\n\nconst formatDisplay = (iso: string): string => {\n const d = fromIso(iso);\n return d.toLocaleDateString(\"es-MX\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n });\n};\n\nexport const FilterDate = ({\n columnId,\n value,\n onChange,\n placeholder = \"Seleccionar fecha\",\n}: FilterDateProps) => {\n const [open, setOpen] = useState(false);\n\n const dateValue = value ? fromIso(value) : null;\n\n const handleChange = (date: DateValue) => {\n if (!date) {\n onChange(columnId, null);\n return;\n }\n const d = date instanceof Date ? date : new Date(date);\n onChange(columnId, toLocalIso(d));\n setOpen(false);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(columnId, null);\n };\n\n const buttonLabel = value ? formatDisplay(value) : placeholder;\n\n return (\n <Popover\n opened={open}\n onChange={setOpen}\n position=\"bottom-start\"\n withinPortal={false}\n >\n <Popover.Target>\n <Button\n radius=\"md\"\n variant=\"filled\"\n leftSection={<CalendarDays size={14} />}\n rightSection={\n value ? (\n <ActionIcon\n component=\"div\"\n radius=\"md\"\n variant=\"subtle\"\n onClick={(event) => handleClear(event)}\n >\n <X size={12} />\n </ActionIcon>\n ) : open ? (\n <ChevronUp size={12} />\n ) : (\n <ChevronDown size={12} />\n )\n }\n size=\"sm\"\n onClick={() => setOpen((o) => !o)}\n styles={{\n root: {\n border: `1px solid ${barBorder}`,\n backgroundColor: barSurface,\n color: barTextActive,\n fontWeight: 400,\n fontSize: \"0.8125rem\",\n },\n }}\n >\n {buttonLabel}\n </Button>\n </Popover.Target>\n\n <Popover.Dropdown p=\"xs\">\n <DatePicker value={dateValue} onChange={handleChange} size=\"sm\" />\n </Popover.Dropdown>\n </Popover>\n );\n};\n","import { useEffect } from \"react\";\nimport type { ColumnDef, useReactTable } from \"@tanstack/react-table\";\nimport { useDataTable } from \"../../hooks/useDataTable\";\nimport { SimpleDataTable } from \"./SimpleDataTable\";\nimport { Flex, Group, Paper } from \"@mantine/core\";\nimport { SearchInput } from \"./SearchInput\";\nimport { FilterSelect } from \"./FilterSelect\";\nimport { FilterDate } from \"./FilterDate\";\nimport { BottomPagination } from \"./BottomPagination\";\nimport type {\n DataTableConfig,\n ITableFilterConfig,\n ServerTableState,\n TableHeaderStyle,\n} from \"../../interfaces\";\n\ninterface DataTableProps<TData> {\n /** Data to display in the table (current page, already paginated by server) */\n data: TData[];\n /** Columns to display in the table */\n columns: ColumnDef<TData>[];\n /** Configuration for the table */\n config?: Partial<DataTableConfig>;\n /** Dynamic filters (selects, dates, etc.) */\n filters?: ITableFilterConfig[];\n /** Total row count from server (used for pagination) */\n totalRowCount?: number;\n /** Called when table state changes (page, search, filters, sort). Use to call your API. */\n onStateChange?: (state: ServerTableState) => void;\n /** Whether the table is loading (shows skeleton) */\n loading?: boolean;\n /** Whether to enable row selection */\n enableRowCheck?: boolean;\n /** Called when row selection changes */\n onSelectionChange?: (selectedRows: TData[]) => void;\n /** Header style: color string (legacy) or { bgColor, textColor, fontWeight?, fontSize?, padding? } */\n headerBgColor?: string | TableHeaderStyle;\n /** Column actions to display per row */\n columnActions?: (row: TData) => React.ReactNode;\n /** List menu actions to display per row */\n listMenuActions?: (\n row: TData,\n ) => { label: string; onClick: () => void; Icon?: React.ElementType }[];\n /** Called when a row is clicked */\n onRowClick?: (row: TData) => void;\n /** Called when a row is hovered */\n onRowHover?: (row: TData) => void;\n /** Empty state to display when no data is available */\n emptyState?: React.ReactNode;\n /** Table instance */\n table?: ReturnType<typeof useReactTable<TData>>;\n /** Custom Header component */\n CustomHeader?: React.ReactNode;\n /** Whether to show the search input */\n showSearchInput?: boolean;\n /** Whether to show the bottom pagination */\n showBottomPagination?: boolean;\n /** Height of the table */\n tableHeight?: number;\n}\n\nexport const DataTable = <TData,>({\n showSearchInput = true,\n showBottomPagination = true,\n data,\n columns,\n config,\n filters,\n totalRowCount,\n onStateChange,\n loading = false,\n enableRowCheck: canCheck = false,\n onSelectionChange,\n headerBgColor,\n columnActions,\n listMenuActions,\n onRowClick,\n onRowHover,\n emptyState,\n table: ExternalTable,\n CustomHeader,\n tableHeight = 600,\n}: DataTableProps<TData>) => {\n const {\n table: internalTable,\n globalFilter,\n setGlobalFilter,\n columnFilters,\n setColumnFilter,\n config: mergedConfig,\n selectedRows,\n } = useDataTable({\n data,\n columns,\n config,\n enableRowSelection: canCheck,\n totalRowCount,\n onStateChange,\n });\n\n const table = ExternalTable ?? internalTable;\n\n useEffect(() => {\n if (canCheck && onSelectionChange) {\n onSelectionChange(selectedRows);\n }\n }, [canCheck, onSelectionChange, selectedRows]);\n\n const getFilterValue = (columnId: string) =>\n (columnFilters.find((f) => f.id === columnId)?.value as string | null) ??\n null;\n\n return (\n <Flex direction=\"column\" gap=\"md\">\n <Flex justify=\"space-between\" align=\"center\">\n <Group gap=\"md\" wrap=\"wrap\">\n {showSearchInput && mergedConfig.enableGlobalFilter && (\n <SearchInput\n value={globalFilter}\n onChange={setGlobalFilter}\n placeholder={mergedConfig.searchPlaceholder}\n />\n )}\n {filters?.map((f) =>\n f.type === \"date\" ? (\n <FilterDate\n key={f.columnId}\n columnId={f.columnId}\n value={getFilterValue(f.columnId)}\n onChange={setColumnFilter}\n placeholder={f.placeholder}\n />\n ) : (\n <FilterSelect\n key={f.columnId}\n columnId={f.columnId}\n options={f.options ?? []}\n onChange={setColumnFilter}\n placeholder={f.placeholder ?? \"Todos\"}\n searchable={f.searchable}\n />\n ),\n )}\n </Group>\n {CustomHeader}\n </Flex>\n <Paper withBorder radius=\"md\" style={{ overflow: \"hidden\" }}>\n <SimpleDataTable\n tableHeight={tableHeight}\n onRowClick={onRowClick}\n onRowHover={onRowHover}\n table={table}\n canCheck={canCheck}\n columnActions={columnActions}\n listMenuActions={listMenuActions}\n headerBgColor={headerBgColor}\n loading={loading}\n skeletonRowCount={mergedConfig.defaultPageSize}\n emptyState={emptyState}\n />\n {showBottomPagination && (\n <BottomPagination\n total={totalRowCount ?? 0}\n pageSize={table.getState().pagination.pageSize}\n pageIndex={table.getState().pagination.pageIndex}\n onPageSizeChange={(value) => table.setPageSize(value)}\n onPageIndexChange={(value) =>\n table.setPagination({\n pageIndex: value,\n pageSize: table.getState().pagination.pageSize,\n })\n }\n />\n )}\n </Paper>\n </Flex>\n );\n};\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { DataTable } from \"./table/DataTable\";\nimport type { ColumnDef, useReactTable } from \"@tanstack/react-table\";\nimport type { ITableFilterConfig } from \"../interfaces/filters.interface\";\nimport type {\n DataTableConfig,\n ServerTableState,\n TableHeaderStyle,\n} from \"../interfaces/datatable.interface\";\nimport type { TableQueryParams } from \"../queries/types\";\nimport { useState, useCallback } from \"react\";\nimport { Flex, Title } from \"@mantine/core\";\n\n/** Shape that the query must return for TablePage to work correctly. */\nexport interface PaginatedResponse<TRow> {\n data: TRow[];\n total: number;\n}\n\ninterface TablePageProps<TRow> {\n /**\n * Factory that receives the current pagination/filter params and returns\n * the query options. Called every time the table state changes.\n */\n getQueryOptions: (\n params: TableQueryParams,\n ) => UseQueryOptions<PaginatedResponse<TRow>>;\n /**\n * Title of the table\n */\n title?: string;\n\n /**\n * Columns of the table\n */\n columns: ColumnDef<TRow>[];\n /**\n * Filters of the table\n */\n filters?: ITableFilterConfig[];\n /**\n * Whether the table is loading externally\n */\n isLoadingExternal?: boolean;\n /**\n * Called when a row is clicked\n */\n onRowClick?: (row: TRow) => void;\n /**\n * Called when a row is hovered\n */\n onRowHover?: (row: TRow) => void;\n /**\n * Empty state of the table\n */\n emptyState?: React.ReactNode;\n /**\n * Table instance\n */\n table?: ReturnType<typeof useReactTable<TRow>>;\n /**\n * Whether to enable row selection\n */\n enableRowSelection?: boolean;\n /**\n * Header style: color string (legacy) or { bgColor, textColor, fontWeight?, fontSize?, padding? }\n */\n headerBgColor?: TableHeaderStyle;\n /**\n * Column actions to display per row\n */\n columnActions?: (row: TRow) => React.ReactNode;\n /**\n * List menu actions to display per row\n */\n listMenuActions?: (\n row: TRow,\n ) => { label: string; onClick: () => void; Icon?: React.ElementType }[];\n /**\n * Called when row selection changes\n */\n onSelectionChange?: (selectedRows: TRow[]) => void;\n /**\n * Configuration for the table\n */\n config?: Partial<DataTableConfig>;\n /**\n * Custom Header component\n */\n CustomHeader?: React.ReactNode;\n /**\n * Whether to show the search input\n */\n showSearchInput?: boolean;\n /**\n * Whether to show the bottom pagination\n */\n showBottomPagination?: boolean;\n /**\n * Height of the table\n */\n tableHeight?: number;\n}\n\nexport const TablePage = <TRow,>({\n getQueryOptions,\n title,\n columns,\n filters,\n isLoadingExternal,\n onRowClick,\n onRowHover,\n emptyState,\n table,\n enableRowSelection,\n headerBgColor,\n columnActions,\n listMenuActions,\n onSelectionChange,\n config,\n CustomHeader,\n showSearchInput = true,\n showBottomPagination = true,\n tableHeight = 600,\n}: TablePageProps<TRow>) => {\n const [tableParams, setTableParams] = useState<TableQueryParams>({\n skip: 0,\n limit: 10,\n query: undefined,\n });\n\n const handleStateChange = useCallback((state: ServerTableState) => {\n setTableParams({\n skip: state.pageIndex * state.pageSize,\n limit: state.pageSize,\n query: state.globalFilter || undefined,\n columnFilters:\n state.columnFilters.length > 0 ? state.columnFilters : undefined,\n });\n }, []);\n\n const { data, isLoading } = useQuery(getQueryOptions(tableParams));\n\n return (\n <Flex direction=\"column\" gap=\"sm\">\n {title && <Title order={1}>{title}</Title>}\n <DataTable<TRow>\n showBottomPagination={showBottomPagination}\n tableHeight={tableHeight}\n emptyState={emptyState}\n showSearchInput={showSearchInput}\n table={table}\n onRowClick={(row) => onRowClick?.(row)}\n onRowHover={(row) => onRowHover?.(row)}\n totalRowCount={data?.total}\n data={data?.data ?? []}\n loading={isLoading || isLoadingExternal}\n columns={columns}\n filters={filters}\n onStateChange={handleStateChange}\n enableRowCheck={enableRowSelection}\n headerBgColor={headerBgColor}\n columnActions={columnActions}\n listMenuActions={listMenuActions}\n onSelectionChange={onSelectionChange}\n config={config}\n CustomHeader={CustomHeader}\n />\n </Flex>\n );\n};\n","import { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { Button, Card, Container, Flex, Paper, Title } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\nimport type { IField, IButton } from \"../interfaces/form.interface\";\nimport { FormGenerator, type FormInstance } from \"./form/FormGenerator\";\n\ninterface FormPagePropsBase<TData, TVariables = unknown> {\n fields: IField[];\n buttons: IButton[];\n mutationOptions: UseMutationOptions<TData, Error, TVariables>;\n typeOfForm: \"create\" | \"edit\";\n dataKey: string;\n loading: boolean;\n cardWidth?: number | string;\n onSuccess?: (data: TData) => void;\n setData?: (data: TData) => void;\n navigateAway?: boolean;\n showBackButton?: boolean;\n /**\n * Callback when the user clicks \"Regresar\". Provide your router's go-back logic here.\n * @example React Router: () => navigate(-1)\n * @example TanStack Router: () => router.history.back()\n * @example TanStack Start: () => navigate({ to: '..' })\n */\n onGoBack?: () => void;\n /**\n * Optional icon for the back button. Pass your own icon component so the lib stays router/UI-agnostic.\n * @example <ArrowLeft /> from lucide-react\n */\n backButtonIcon?: ReactNode;\n onFormRef?: (form: FormInstance) => void;\n}\n\ninterface FormPagePropsWithFiles<TData, TVariables = unknown>\n extends FormPagePropsBase<TData, TVariables> {\n hasFiles: true;\n buildVariables?: (values: FormData) => TVariables;\n}\n\ninterface FormPagePropsWithoutFiles<TData, TVariables = unknown>\n extends FormPagePropsBase<TData, TVariables> {\n hasFiles?: false;\n buildVariables?: (values: Record<string, unknown>) => TVariables;\n}\n\ntype FormPageProps<TData, TVariables = unknown> =\n | FormPagePropsWithFiles<TData, TVariables>\n | FormPagePropsWithoutFiles<TData, TVariables>;\n\nexport const FormPage = <TData, TVariables = unknown>({\n fields,\n buttons,\n mutationOptions,\n buildVariables,\n typeOfForm,\n dataKey,\n loading,\n cardWidth,\n hasFiles,\n onSuccess,\n setData,\n navigateAway = true,\n showBackButton = true,\n onGoBack,\n backButtonIcon,\n onFormRef,\n}: FormPageProps<TData, TVariables>): React.ReactNode => {\n const showBack = showBackButton && onGoBack != null;\n\n const mutation = useMutation(mutationOptions);\n\n return (\n <>\n {showBack && (\n <Flex justify={\"start\"}>\n <Button\n leftSection={backButtonIcon}\n variant=\"transparent\"\n mx={20}\n mt={10}\n onClick={onGoBack}\n >\n Regresar a {dataKey}\n </Button>\n </Flex>\n )}\n <Flex justify={\"center\"} align={\"center\"} w={\"100%\"}>\n <Paper w={cardWidth ?? 500} my={-10}>\n <Flex direction={\"column\"}>\n <Title order={1} my={10}>\n {typeOfForm === \"create\" ? \"Crear\" : \"Editar\"} {dataKey}\n </Title>\n <Card withBorder>\n <FormGenerator<TData, TVariables>\n typeOfForm={typeOfForm}\n name={dataKey}\n loading={loading}\n fields={fields}\n buttons={buttons}\n mutation={mutation}\n buildVariables={\n buildVariables as\n | ((\n values: Record<string, unknown> | FormData,\n ) => TVariables)\n | undefined\n }\n hasFiles={hasFiles}\n onSuccess={onSuccess}\n setData={setData}\n navigateAway={navigateAway}\n onFormRef={onFormRef}\n />\n </Card>\n </Flex>\n </Paper>\n </Flex>\n </>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/config/env.ts","../src/interfaces/datatable.interface.ts","../src/interfaces/form.interface.ts","../src/interfaces/permission.interface.ts","../src/interfaces/promotion.interface.ts","../src/interfaces/report.interface.ts","../src/services/config.ts","../src/services/attributes.service.ts","../src/services/auth.service.ts","../src/services/bankTerminal.service.ts","../src/services/batch.service.ts","../src/services/category.service.ts","../src/services/client.service.ts","../src/services/exchange.service.ts","../src/services/gender.service.ts","../src/services/health.service.ts","../src/services/location.service.ts","../src/services/material.service.ts","../src/services/module.service.ts","../src/services/order.service.ts","../src/services/payment.service.ts","../src/services/permission.service.ts","../src/services/pricePerGram.service.ts","../src/services/priceType.service.ts","../src/services/product.service.ts","../src/services/productTags.service.ts","../src/services/promotion.service.ts","../src/services/provider.service.ts","../src/services/qr.service.ts","../src/services/report.service.ts","../src/services/return.service.ts","../src/services/role.service.ts","../src/services/stockmovement.service.ts","../src/services/shift.service.ts","../src/services/state.service.ts","../src/services/tax.service.ts","../src/services/user.service.ts","../src/services/warehouse.service.ts","../src/utils/notifications.tsx","../src/queries/attributes.queries.ts","../src/queries/user.queries.ts","../src/queries/category.queries.ts","../src/queries/warehouse.queries.ts","../src/queries/client.queries.ts","../src/queries/bankTerminal.queries.ts","../src/queries/batch.queries.ts","../src/queries/role.queries.ts","../src/queries/provider.queries.ts","../src/queries/location.queries.ts","../src/queries/material.queries.ts","../src/queries/priceType.queries.ts","../src/queries/product.queries.ts","../src/queries/exchange.queries.ts","../src/queries/permission.queries.ts","../src/queries/promotion.queries.ts","../src/queries/order.queries.ts","../src/queries/payment.queries.ts","../src/queries/auth.queries.ts","../src/queries/tax.queries.ts","../src/queries/gender.queries.ts","../src/queries/state.queries.ts","../src/queries/module.queries.ts","../src/services/folio.service.ts","../src/queries/folio.queries.ts","../src/queries/health.queries.ts","../src/queries/productTags.queries.ts","../src/queries/pricePerGram.queries.ts","../src/queries/qr.queries.ts","../src/queries/report.queries.ts","../src/queries/return.queries.ts","../src/queries/shift.queries.ts","../src/queries/stockmovement.queries.ts","../src/hooks/auth.hooks.ts","../src/hooks/attributes.hooks.ts","../src/hooks/useDataTable.ts","../src/hooks/bankTerminal.hooks.ts","../src/hooks/batch.hooks.ts","../src/hooks/category.hooks.ts","../src/hooks/client.hooks.ts","../src/hooks/exchange.hooks.ts","../src/hooks/folio.hooks.ts","../src/hooks/gender.hooks.ts","../src/hooks/health.hooks.ts","../src/hooks/location.hooks.ts","../src/hooks/material.hooks.ts","../src/hooks/module.hooks.ts","../src/hooks/order.hooks.ts","../src/hooks/payment.hooks.ts","../src/hooks/permission.hooks.ts","../src/hooks/pricePerGram.hooks.ts","../src/hooks/priceType.hooks.ts","../src/hooks/product.hooks.ts","../src/hooks/productTags.hooks.ts","../src/hooks/promotion.hooks.ts","../src/hooks/provider.hooks.ts","../src/hooks/qr.hooks.ts","../src/hooks/report.hooks.ts","../src/hooks/return.hooks.ts","../src/hooks/role.hooks.ts","../src/hooks/shift.hooks.ts","../src/hooks/state.hooks.ts","../src/hooks/stockmovement.hooks.ts","../src/hooks/tax.hooks.ts","../src/hooks/user.hooks.ts","../src/hooks/warehouse.hooks.ts","../src/hooks/useMediaQuery.ts","../src/components/form/ImageForm.tsx","../src/components/form/FieldGenerator.tsx","../src/components/form/ButtonGenerator.tsx","../src/components/form/schemaGenerator.ts","../src/components/form/FormGenerator.tsx","../src/components/form/CreateEditForm.tsx","../src/theme/constants.ts","../src/components/table/BottomPagination.tsx","../src/components/table/TableHeader.tsx","../src/components/table/TableBody.tsx","../src/components/table/TableSkeleton.tsx","../src/components/table/EmptyState.tsx","../src/components/table/SimpleDataTable.tsx","../src/components/table/SearchInput.tsx","../src/components/table/FilterSelect.tsx","../src/components/table/FilterDate.tsx","../src/components/table/DataTable.tsx","../src/components/TablePage.tsx","../src/components/FormPage.tsx"],"names":["Permission","PromotionTypeEnum","ComparisonBy","ChartType","attributes","date","queryOptions","useMutation","useQuery","useQueryClient","defaultColumnMap","getFilterValue","parseNumber","useMantineMediaQuery","error","jsx","Text","Button","Fragment","useMemo","useState","useEffect","jsxs","Box","Group","Flex","Select","actionsColumnWidth","Table","Checkbox","flexRender","ActionIcon","_","Title","ScrollArea","TextInput","useRef","Menu","X","Search","ChevronUp","ChevronDown","Paper","Card"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Environment/config provided by the consuming app.\n * Call configureEnv() once at app startup so the library can use isDevEnv (e.g. for error messages).\n */\n\nlet isDevEnv = false;\n\n/**\n * Configure environment flags for the shared library.\n * Call once at app startup (e.g. in main.tsx or root layout).\n * @example\n * // Vite\n * configureEnv({ isDevEnv: import.meta.env.DEV });\n * // Next.js\n * configureEnv({ isDevEnv: process.env.NODE_ENV === 'development' });\n */\nexport const configureEnv = (config: { isDevEnv?: boolean }): void => {\n if (config.isDevEnv !== undefined) {\n isDevEnv = config.isDevEnv;\n }\n};\n\n/**\n * Whether the consuming app is running in development.\n * Used e.g. to show full error messages in notifications (dev) vs generic messages (prod).\n */\nexport const getIsDevEnv = (): boolean => isDevEnv;\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 type { TblProductsImage } from './product.interface';\n\nexport type IField =\n | ITextField\n | IPasswordField\n | INumberField\n | ISelectField\n | IMultiSelectField\n | IDateField\n | IEmailField\n | IHiddenField\n | ISwitchField\n | IFileField\n | ITagField;\n\nexport interface IHiddenField extends IBaseField {\n type: typeof FieldTypes.HIDDEN;\n}\n\nexport interface ITextField extends IBaseField {\n type: typeof FieldTypes.TEXT;\n}\n\nexport interface IEmailField extends IBaseField {\n type: typeof FieldTypes.EMAIL;\n}\n\nexport interface IPasswordField extends IBaseField {\n type: typeof FieldTypes.PASSWORD;\n}\n\nexport interface ITagField\n extends IBaseField,\n Omit<ISelect, 'options'> {\n type: typeof FieldTypes.TAG;\n options: TagData[];\n}\n\nexport interface ISwitchField extends IBaseField {\n type: typeof FieldTypes.SWITCH;\n defaultChecked?: boolean;\n labelPosition?: 'left' | 'right';\n onLabel?: string;\n offLabel?: string;\n}\n\nexport type FileType =\n | 'image'\n | 'video'\n | 'audio'\n | 'pdf'\n | 'document';\n\nexport interface IFileField extends IBaseField {\n type: typeof FieldTypes.FILE;\n multiple?: boolean;\n accept?: string[] | readonly string[];\n maxSize?: number;\n maxFiles?: number;\n maxSizeMessage?: string;\n maxFilesMessage?: string;\n fileType: FileType;\n defaultImages?: TblProductsImage[];\n}\n\nexport interface INumberField extends IBaseField {\n type: typeof FieldTypes.NUMBER;\n min?: number;\n max?: number;\n preffix?: string;\n suffix?: string;\n allowNegative?: boolean;\n allowDecimal?: boolean;\n decimalScale?: number;\n fixedDecimalScale?: boolean;\n decimalSeparator?: string;\n hideControls?: boolean;\n step?: number;\n}\n\nexport interface ISelectField extends IBaseField, ISelect {\n type: typeof FieldTypes.SELECT;\n}\n\nexport interface IMultiSelectField extends IBaseField, ISelect {\n type: typeof FieldTypes.MULTISELECT;\n}\n\nexport interface IDateField extends IBaseField {\n type: typeof FieldTypes.DATE;\n}\n\nexport interface ISelect extends IBaseField {\n options: IOptions[];\n allowDeselect?: boolean;\n clearable?: boolean;\n searchable?: boolean;\n nothingFoundMessage?: string;\n checkIconPosition?: 'right' | 'left';\n withCheckIcon?: boolean;\n limit?: number;\n renderOption?: (option: IOptions) => React.ReactNode;\n}\n\ntype ColumnWidth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\nexport interface IBaseField {\n name: string;\n label?: string;\n description?: string;\n placeholder?: string;\n required?: boolean;\n error?: string;\n disabled?: boolean;\n defaultValue?: string | number | boolean | string[] | Date;\n requiredMessage?: string;\n columnWidth?: ColumnWidth;\n onChange?: (value: string) => void;\n section?: number;\n page?: number;\n}\n\nexport interface IButton {\n hidden?: boolean;\n type: ButtonTypes;\n label: string;\n fullWidth?: boolean;\n className?: string;\n style?: React.CSSProperties;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n disabled?: boolean;\n loading?: boolean;\n Icon?: React.ReactNode;\n iconPosition?: 'left' | 'right';\n color?: string;\n variant?: \"gradient\" | \"subtle\" | \"filled\" | \"light\" | \"outline\" | \"transparent\" | \"white\" | \"default\"\n}\n\nexport interface IOptions {\n value: string;\n label: string;\n}\n\nexport interface TagData {\n value: string;\n}\n\nexport const FieldTypes = {\n TEXT: 'text',\n EMAIL: 'email',\n NUMBER: 'number',\n PASSWORD: 'password',\n SELECT: 'select',\n MULTISELECT: 'multiselect',\n DATE: 'date',\n HIDDEN: 'hidden',\n SWITCH: 'switch',\n FILE: 'file',\n TAG: 'tag',\n} as const;\n\nexport type FieldTypes = (typeof FieldTypes)[keyof typeof FieldTypes];\nexport type ButtonTypes =\n (typeof ButtonTypes)[keyof typeof ButtonTypes];\n\nexport const ButtonTypes = {\n SUBMIT: 'submit',\n BUTTON: 'button',\n RESET: 'reset',\n} as const;\n","export interface IPermissionRole {\n permissionRole: PermissionRole[]\n moduleNames: string[]\n permissionNames: string[]\n roleNames: string[]\n}\nexport interface PermissionRole {\n role_PermissionID: number\n roleID: number\n permissionID: number\n moduleID: number\n hasPermission: boolean\n syncStatusID: number\n masterCodeID: null\n savedBy: number\n savedDate: Date\n deletedBy: null\n deletedDate: null\n tblModules: TblModules\n tblPermissions: TblPermissions\n tblRoles: TblRoles\n}\n\nexport interface TblModules {\n moduleName: string\n}\n\nexport interface TblPermissions {\n permission: Permission\n}\n\nexport enum Permission {\n Crear = 'Crear',\n Editar = 'Editar',\n Eliminar = 'Eliminar',\n Ver = 'Ver'\n}\n\nexport interface TblRoles {\n role: string\n}\n","import type { IProduct } from \"./product.interface\"\n\nexport interface IPromotionResponse {\n total: number\n data: IPromotion[]\n skip: number\n limit: number\n}\n\nexport interface IPromotion {\n promotionID: number\n promotionName: string\n startDate: Date\n endDate: Date\n isActive: number\n description: string\n promotionTypeID: number\n productID: null\n batchID: null\n providerID: null\n n: null\n m: null\n discountPercentage: null\n priceTypeID: null\n targetProductID: null\n discountAmount: number\n syncStatusID: number\n masterCodeID: number\n savedBy: number\n savedDate: Date\n deletedBy: null\n deletedDate: null\n tblPromotions_targetProductIDTotblProducts: TblPromotionsTargetProductIDTotblProduct[]\n tblPromotionTypes: TblPromotionTypes\n}\n\nexport interface TblPromotionTypes {\n promotionTypeID: number\n promotionType: string\n description: string\n syncStatusID: number\n masterCodeID: number\n savedBy: number\n savedDate: Date\n deletedBy: null\n deletedDate: null\n}\n\nexport interface TblPromotionsTargetProductIDTotblProduct {\n promotionID: number\n productID: number\n syncStatusID: number\n masterCodeID: number\n savedBy: number\n savedDate: Date\n deletedBy: null\n deletedDate: null\n tblProducts: IProduct\n}\n\n\nexport interface IPromotionType {\n promotionTypeID: number\n promotionType: string\n description: string\n syncStatusID: number\n masterCodeID: number\n savedBy: number\n savedDate: Date\n deletedBy: null\n deletedDate: null\n}\n\nexport enum PromotionTypeEnum {\n NXM = 'NXM',\n PRODUCTO = 'PRODUCTO',\n TEMPORADA = 'TEMPORADA',\n PROVEEDOR = 'PROVEEDOR',\n LOTE = 'LOTE'\n}\n","export interface IStockByWarehouseReport {\n warehouse: string\n product: string\n batch: string\n stock: number\n}\n\nexport enum ComparisonBy {\n YEAR = 'year',\n MONTH = 'month',\n WEEK = 'week',\n CUSTOM = 'custom'\n}\n\nexport enum ChartType {\n BAR = 'bar',\n LINE = 'line',\n PIE = 'pie'\n}\n\nexport interface IReportX {\n reportDataString: string\n paymentMethods?: Array<{\n paymentMethod: string\n amount: number\n }>\n}\n\nexport interface IReportZ {\n reportDataString: string\n headerData: {\n cutDate: string\n cutTime: string\n terminalNumber: string\n cashierID: number\n cashierName: string\n zCutFolio: string\n previousZCutFolio: string\n }\n salesSummary: {\n grossSales: number\n totalReturns: number\n totalDiscounts: number\n netSubtotal: number\n dayTotal: number\n }\n paymentMethods: Array<{\n paymentMethod: string\n amount: number\n }>\n cashMovements: {\n initialFund: number\n cashDeposits: number\n cashWithdrawals: number\n totalCashAtClosing: number\n }\n folioControl: {\n firstFolio: string\n lastFolio: string\n }\n}\n\nexport interface IReportComparisonByTimeFrame {\n currentPeriod: Period\n previousPeriod: Period\n}\n\nexport interface Period {\n title: string\n dateRange: DateRange\n data: ReportData[]\n totalByPeriod: number\n // Nuevos campos para resumen de materiales\n materialsSummary?: MaterialSummary[]\n}\n\nexport interface MaterialSummary {\n materialName: string\n totalGrams: number\n totalRevenue: number\n productCount: number\n averagePricePerGram: number\n}\n\nexport interface ReportData {\n period: string\n products: ReportDataProduct[]\n}\n\nexport interface ReportDataProduct {\n productName: string\n salesInNumberByPeriod: number\n salesInPriceByPeriod: number\n // Nuevos campos para información detallada\n materialName?: string\n totalWeight?: number\n averageWeight?: number\n categoryName?: string\n}\n\nexport interface ProductInfo {\n productName: string\n category: string\n quantitySold: number\n totalRevenue: number\n}\n\nexport interface DateRange {\n start: Date\n end: Date\n}\n\nexport interface IReportInventory {\n productName: string\n productVariant: string\n price: number\n category: string\n material: string\n stock: number\n stockID: number\n warehouse: string\n provider: string\n lote: string\n size: string\n caliber: string\n purity: string\n weight: number\n batchID: number\n productID: number\n productDetailID: number\n batchComment?: string\n unitCost?: number\n profitPercentage?: number\n}\n","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 {\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 { 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 {\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 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 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 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 { 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 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 { 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 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 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 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 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 { 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 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 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 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 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 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 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 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 { 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 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 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 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 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 { 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 { 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 {\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 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 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 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 { 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 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 {\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 { 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 { 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 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 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 {\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 { 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 {\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 {\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 {\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 {\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 {\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 {\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 {\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 { 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 { 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 { 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 {\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 {\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 { 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 {\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 {\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 {\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 {\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 {\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 {\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 { 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 {\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 {\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 {\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 {\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 {\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 {\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 { 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 { 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 {\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 { 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 {\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 {\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};","import type { ReactNode } from \"react\";\nimport {\n ActionIcon,\n Box,\n Button,\n Group,\n Image,\n rem,\n ScrollArea,\n Text,\n} from \"@mantine/core\";\nimport { Dropzone, IMAGE_MIME_TYPE } from \"@mantine/dropzone\";\nimport { modals } from \"@mantine/modals\";\nimport type { TblProductsImage } from \"../../interfaces/product.interface\";\nimport { deleteImageFromProduct } from \"../../services/product.service\";\nimport { useMutation } from \"@tanstack/react-query\";\n// Eliminado react-hook-form. Definimos una interfaz genérica compatible con TanStack Form\ninterface GenericFieldController<TValue> {\n value: TValue;\n onChange: (value: TValue) => void;\n onBlur?: () => void;\n}\nimport { useRef } from \"react\";\nimport { getIsDevEnv } from \"../../config/env\";\nimport {\n errorNotification,\n successNotification,\n} from \"../../utils/notifications\";\n\n// Icons are provided by the consuming app so this library stays icon-agnostic\nlet imageFormIcons: {\n acceptIcon?: ReactNode;\n rejectIcon?: ReactNode;\n idleIcon?: ReactNode;\n cameraIcon?: ReactNode;\n successIcon?: ReactNode;\n errorIcon?: ReactNode;\n} = {};\n\n/**\n * Configure icons for ImageForm (dropzone, camera button, notifications, delete).\n * Call once at app startup with your preferred icon library.\n * @example\n * import { Camera, Check, Image, Upload, X } from \"lucide-react\";\n * configureImageFormIcons({\n * acceptIcon: <Upload />, rejectIcon: <X />, idleIcon: <Image />,\n * cameraIcon: <Camera />, successIcon: <Check />, errorIcon: <X />,\n * });\n */\nexport const configureImageFormIcons = (config: {\n acceptIcon?: ReactNode;\n rejectIcon?: ReactNode;\n idleIcon?: ReactNode;\n cameraIcon?: ReactNode;\n successIcon?: ReactNode;\n errorIcon?: ReactNode;\n}): void => {\n imageFormIcons = { ...imageFormIcons, ...config };\n};\n\n// Añadir tipo para manejar tanto File como TblProductsImage\ntype ImageType = File | TblProductsImage;\n\ninterface ImageFormProps {\n field: GenericFieldController<\n File | TblProductsImage | (File | TblProductsImage)[] | null | undefined\n >;\n label: string;\n required?: boolean;\n multiple?: boolean;\n maxSize?: number;\n maxFiles?: number;\n maxSizeMessage?: string;\n maxFilesMessage?: string;\n defaultImages?: TblProductsImage[];\n error?: string;\n enableCamera?: boolean;\n}\n\nexport const ImageForm = ({\n field,\n label,\n required = false,\n multiple = false,\n maxSize = 5 * 1024 ** 2,\n maxFiles = 5,\n maxSizeMessage = \"El tamaño máximo de cada imagen es de 5mb\",\n maxFilesMessage = \"No se pueden subir más de 5 imágenes\",\n defaultImages = [],\n error,\n enableCamera = true,\n}: ImageFormProps): React.ReactNode => {\n const { mutate: deleteImage } = useMutation({\n mutationKey: [\"product\"],\n mutationFn: deleteImageFromProduct,\n onSuccess: () => {\n successNotification({\n title: \"Imagen eliminada con éxito\",\n message: \"La imagen ha sido eliminada con éxito\",\n icon: imageFormIcons.successIcon,\n });\n },\n onError: (error) => {\n errorNotification({\n title: \"Error al eliminar la imagen\",\n message: getIsDevEnv()\n ? error.message\n : \"Ha ocurrido un error al eliminar la imagen\",\n icon: imageFormIcons.errorIcon,\n });\n },\n });\n\n const videoRef = useRef<HTMLVideoElement>(null);\n\n const handleCameraAccess = async (): Promise<void> => {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({\n video: {\n width: { ideal: 1280 },\n height: { ideal: 720 },\n },\n });\n\n modals.open({\n title: \"Tomar foto\",\n size: \"lg\",\n children: (\n <Box>\n <video\n ref={videoRef}\n autoPlay\n playsInline\n muted\n style={{\n width: \"100%\",\n maxHeight: \"400px\",\n transform: \"scaleX(-1)\",\n }}\n />\n <Group justify=\"center\" mt=\"md\">\n <Button\n leftSection={imageFormIcons.cameraIcon}\n onClick={() => {\n const video = videoRef.current;\n if (!video) return;\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n ctx.save();\n ctx.scale(-1, 1);\n ctx.drawImage(\n video,\n -canvas.width,\n 0,\n canvas.width,\n canvas.height,\n );\n ctx.restore();\n }\n\n canvas.toBlob((blob) => {\n if (blob) {\n const file = new File([blob], \"photo.jpg\", {\n type: \"image/jpeg\",\n });\n const existing: ImageType[] = Array.isArray(field.value)\n ? (field.value as ImageType[])\n : field.value\n ? ([field.value as ImageType] as ImageType[])\n : [];\n const newArray = [...existing, file];\n field.onChange(multiple ? newArray : file);\n\n stream.getTracks().forEach((track) => track.stop());\n modals.closeAll();\n }\n }, \"image/jpeg\");\n }}\n >\n Tomar foto\n </Button>\n </Group>\n </Box>\n ),\n onClose: () => {\n stream.getTracks().forEach((track) => track.stop());\n },\n });\n\n setTimeout(() => {\n if (videoRef.current) {\n videoRef.current.srcObject = stream;\n }\n }, 100);\n } catch (error) {\n console.error(\"Error accessing camera:\", error);\n errorNotification({\n title: \"Error al acceder a la cámara\",\n message: \"No se pudo acceder a la cámara del dispositivo\",\n icon: imageFormIcons.errorIcon,\n });\n }\n };\n\n return (\n <>\n <Text my={10} fw={500} size=\"lg\">\n {label} {required ? <span style={{ color: \"red\" }}> *</span> : \"\"}\n </Text>\n <Dropzone\n onDrop={(files) => {\n field.onChange(multiple ? files : files[0] || null);\n }}\n multiple={multiple}\n onReject={(files) => {\n const errorMessages = files.map((file) => {\n if (file.errors[0]?.code === \"file-too-large\") {\n return maxSizeMessage;\n }\n if (file.errors[0]?.code === \"too-many-files\") {\n return maxFilesMessage;\n }\n return `Error con el archivo ${file.file.name}`;\n });\n\n modals.open({\n title: \"Error al subir archivos\",\n children: (\n <Box>\n <Text size=\"xl\">Error al subir archivos</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {errorMessages.map((message, i) => (\n <Box key={i}>{message}</Box>\n ))}\n </Text>\n </Box>\n ),\n });\n }}\n maxSize={maxSize}\n accept={IMAGE_MIME_TYPE}\n >\n <Group\n justify=\"center\"\n gap=\"xl\"\n mih={220}\n style={{ pointerEvents: \"none\" }}\n >\n <Dropzone.Accept>\n {imageFormIcons.acceptIcon ? (\n <Box\n style={{\n width: rem(52),\n height: rem(52),\n color: \"var(--mantine-color-blue-6)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {imageFormIcons.acceptIcon}\n </Box>\n ) : null}\n </Dropzone.Accept>\n <Dropzone.Reject>\n {imageFormIcons.rejectIcon ? (\n <Box\n style={{\n width: rem(52),\n height: rem(52),\n color: \"var(--mantine-color-red-6)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {imageFormIcons.rejectIcon}\n </Box>\n ) : null}\n </Dropzone.Reject>\n <Dropzone.Idle>\n {imageFormIcons.idleIcon ? (\n <Box\n style={{\n width: rem(52),\n height: rem(52),\n color: \"var(--mantine-color-dimmed)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {imageFormIcons.idleIcon}\n </Box>\n ) : null}\n </Dropzone.Idle>\n\n <Box>\n <Text size=\"xl\" inline>\n Arrastra imágenes aquí o haz clic para seleccionar archivos\n </Text>\n <Text size=\"sm\" c=\"dimmed\" inline mt={7}>\n {maxFiles\n ? `Adjunta tantos archivos como desees, cada archivo no debe exceder los ${maxSize / 1024 ** 2}mb`\n : `Adjunta una imagen, el archivo no debe exceder los ${maxSize / 1024 ** 2}mb`}\n </Text>\n </Box>\n </Group>\n </Dropzone>\n\n {error ? (\n <Text size=\"sm\" c=\"red\">\n {error}\n </Text>\n ) : null}\n\n {enableCamera && (\n <Group justify=\"center\" my=\"md\">\n <Button\n fullWidth\n leftSection={imageFormIcons.cameraIcon}\n variant=\"filled\"\n onClick={handleCameraAccess}\n >\n <Text>Tomar foto</Text>\n </Button>\n <Text size=\"sm\" c=\"dimmed\">\n {enableCamera ? \"Toma una foto con la cámara del dispositivo\" : \"\"}\n </Text>\n </Group>\n )}\n\n {defaultImages.length > 0 && (\n <ScrollArea h={150} type=\"always\">\n <Group my={10}>\n {defaultImages.map((image) => (\n <Box key={image.productImageID} pos=\"relative\">\n <Image\n src={\n image.imageUrl.includes(\"uploads\")\n ? `http://localhost:4000/${image.imageUrl}`\n : image.imageUrl\n }\n w={100}\n h={100}\n />\n <ActionIcon\n onClick={() => {\n deleteImage({ imageId: image.productImageID });\n }}\n radius=\"xl\"\n color=\"red\"\n variant=\"filled\"\n size=\"xs\"\n style={{ position: \"absolute\", top: 5, right: 5 }}\n >\n {imageFormIcons.errorIcon}\n </ActionIcon>\n </Box>\n ))}\n </Group>\n </ScrollArea>\n )}\n\n {(Array.isArray(field.value)\n ? (field.value as ImageType[])\n : field.value\n ? [field.value as ImageType]\n : []\n ).length > 0 && (\n <ScrollArea h={150} type=\"always\">\n <Group my={10}>\n {(Array.isArray(field.value)\n ? (field.value as ImageType[])\n : field.value\n ? [field.value as ImageType]\n : []\n ).map((file, index) => (\n <Box key={index} pos=\"relative\">\n <Image\n src={\n file instanceof File\n ? URL.createObjectURL(file)\n : (file as TblProductsImage).imageUrl?.includes(\"uploads\")\n ? `http://localhost:4000/${(file as TblProductsImage).imageUrl}`\n : (file as TblProductsImage).imageUrl\n }\n w={100}\n h={100}\n />\n <ActionIcon\n radius=\"xl\"\n color=\"red\"\n variant=\"filled\"\n size=\"xs\"\n style={{ position: \"absolute\", top: 5, right: 5 }}\n onClick={() => {\n const list: ImageType[] = Array.isArray(field.value)\n ? (field.value as ImageType[])\n : field.value\n ? [field.value as ImageType]\n : [];\n const newImages = list.filter((_, i) => i !== index);\n field.onChange(\n multiple\n ? (newImages as (File | TblProductsImage)[])\n : (newImages[0] ?? null),\n );\n }}\n >\n {imageFormIcons.errorIcon}\n </ActionIcon>\n </Box>\n ))}\n </Group>\n </ScrollArea>\n )}\n </>\n );\n};\n","import { FieldTypes, type IField } from \"../../interfaces/form.interface\";\nimport type {\n ReactFormExtendedApi,\n FormValidateOrFn,\n FormAsyncValidateOrFn,\n} from \"@tanstack/react-form\";\n\nimport {\n TextInput,\n PasswordInput,\n NumberInput,\n Select,\n MultiSelect,\n Switch,\n TagsInput,\n} from \"@mantine/core\";\nimport { DatePickerInput } from \"@mantine/dates\";\nimport { ImageForm } from \"./ImageForm\";\n\nexport type FormValues = Record<string, unknown>;\n\ntype MaybeValidator = FormValidateOrFn<FormValues> | undefined;\ntype MaybeAsyncValidator = FormAsyncValidateOrFn<FormValues> | undefined;\n\nexport type FormInstance = ReactFormExtendedApi<\n FormValues,\n MaybeValidator, // TOnMount\n MaybeValidator, // TOnChange\n MaybeAsyncValidator, // TOnChangeAsync\n MaybeValidator, // TOnBlur\n MaybeAsyncValidator, // TOnBlurAsync\n MaybeValidator, // TOnSubmit\n MaybeAsyncValidator, // TOnSubmitAsync\n MaybeValidator, // TOnDynamic\n MaybeAsyncValidator, // TOnDynamicAsync\n MaybeAsyncValidator, // TOnServer\n unknown // TSubmitMeta\n>;\n\nexport const fieldGenerator = ({\n field,\n form,\n}: {\n field: IField;\n form: FormInstance;\n}): React.ReactNode => {\n switch (field.type) {\n case FieldTypes.TEXT:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <TextInput\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n value={(f.state.value as string) ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n f.handleChange(e.target.value);\n field.onChange?.(e.target.value);\n }}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.EMAIL:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <TextInput\n type=\"email\"\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n value={(f.state.value as string) ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n f.handleChange(e.target.value)\n }\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.PASSWORD:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <PasswordInput\n label={field.label}\n description={field.description}\n placeholder={field.placeholder}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n value={(f.state.value as string) ?? \"\"}\n onChange={(e) => f.handleChange(e.target.value)}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.NUMBER:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <NumberInput\n hideControls={field.hideControls}\n label={field.label}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n min={field.min}\n max={field.max}\n step={field.step}\n allowNegative={field.allowNegative}\n allowDecimal={field.allowDecimal}\n decimalScale={field.decimalScale}\n fixedDecimalScale={field.fixedDecimalScale}\n decimalSeparator={field.decimalSeparator}\n prefix={field.preffix}\n suffix={field.suffix}\n value={(f.state.value as number) ?? \"\"}\n onChange={(val) => {\n const nextValue =\n typeof val === \"number\"\n ? val\n : val === \"\"\n ? undefined\n : Number(val);\n f.handleChange(nextValue);\n }}\n onBlur={f.handleBlur}\n placeholder={field.placeholder}\n />\n )}\n />\n );\n case FieldTypes.SELECT:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <Select\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n data={field.options}\n searchable={field.searchable}\n nothingFoundMessage={field.nothingFoundMessage}\n limit={field.limit}\n withCheckIcon={field.withCheckIcon}\n checkIconPosition={field.checkIconPosition}\n clearable={field.clearable}\n onChange={(value) => {\n f.handleChange(value ?? \"\");\n if (value && field.onChange) field.onChange(value);\n }}\n value={(f.state.value as string) ?? null}\n />\n )}\n />\n );\n case FieldTypes.MULTISELECT:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <MultiSelect\n label={field.label}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n withCheckIcon={field.withCheckIcon}\n checkIconPosition={field.checkIconPosition}\n clearable={field.clearable}\n searchable={field.searchable}\n nothingFoundMessage={field.nothingFoundMessage}\n data={field.options}\n value={(f.state.value as string[]) ?? []}\n onChange={(vals) => f.handleChange(vals)}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.DATE:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <DatePickerInput\n label={field.label}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n value={(f.state.value as Date | null) ?? null}\n onChange={(date) => f.handleChange(date ?? null)}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.SWITCH:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <Switch\n my={5}\n label={field.label}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n checked={Boolean(f.state.value)}\n onChange={(e) => f.handleChange(e.currentTarget.checked)}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.FILE:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <ImageForm\n label={field.label || \"\"}\n required={field.required}\n field={{\n value: f.state.value as File | File[] | null | undefined,\n onChange: f.handleChange,\n onBlur: f.handleBlur,\n }}\n multiple={field.multiple}\n maxSize={field.maxSize}\n maxFiles={field.maxFiles}\n maxSizeMessage={field.maxSizeMessage}\n maxFilesMessage={field.maxFilesMessage}\n defaultImages={field.defaultImages}\n error={f.state.meta.errors?.join(\", \")}\n />\n )}\n />\n );\n case FieldTypes.TAG:\n return (\n <form.Field\n name={field.name}\n children={(f) => (\n <TagsInput\n label={field.label}\n placeholder={field.placeholder}\n description={field.description}\n required={field.required}\n error={f.state.meta.errors?.join(\", \")}\n disabled={field.disabled}\n data={field.options}\n value={(f.state.value as string[]) ?? []}\n onChange={(vals) => f.handleChange(vals)}\n onBlur={f.handleBlur}\n />\n )}\n />\n );\n case FieldTypes.HIDDEN:\n return <form.Field name={field.name} children={() => null} />;\n default:\n return null;\n }\n};\n","import { Button } from \"@mantine/core\";\nimport type { IButton } from \"../../interfaces/form.interface\";\n\nexport const buttonGenerator = (\n button: IButton,\n loading: boolean,\n): React.ReactNode => {\n switch (button.type) {\n case \"submit\":\n return (\n <Button\n loading={button.loading || loading}\n key={button.label}\n color={button.color || \"green\"}\n type={button.type}\n variant={button.variant || \"filled\"}\n leftSection={button.iconPosition === \"left\" ? button.Icon : null}\n rightSection={button.iconPosition === \"right\" ? button.Icon : null}\n disabled={button.disabled || button.loading || loading}\n fullWidth={button.fullWidth}\n >\n {button.label}\n </Button>\n );\n case \"button\":\n if (button.hidden) return <></>;\n return (\n <Button\n onClick={button.onClick}\n color={button.color || \"gray\"}\n variant={button.variant || \"outline\"}\n leftSection={button.iconPosition === \"left\" ? button.Icon : null}\n rightSection={button.iconPosition === \"right\" ? button.Icon : null}\n loading={button.loading || loading}\n key={button.label}\n type={button.type}\n disabled={button.disabled || button.loading || loading}\n fullWidth={button.fullWidth}\n >\n {button.label}\n </Button>\n );\n case \"reset\":\n return (\n <Button\n color={button.color || \"red\"}\n variant={button.variant || \"outline\"}\n leftSection={button.iconPosition === \"left\" ? button.Icon : null}\n rightSection={button.iconPosition === \"right\" ? button.Icon : null}\n loading={button.loading || loading}\n key={button.label}\n type={button.type}\n disabled={button.disabled || button.loading || loading}\n fullWidth={button.fullWidth}\n >\n {button.label}\n </Button>\n );\n default:\n return (\n <Button\n color={button.color || \"gray\"}\n variant={button.variant || \"outline\"}\n leftSection={button.iconPosition === \"left\" ? button.Icon : null}\n rightSection={button.iconPosition === \"right\" ? button.Icon : null}\n loading={button.loading || loading}\n key={button.label}\n type={button.type}\n disabled={button.disabled || button.loading || loading}\n fullWidth={button.fullWidth}\n >\n {button.label}\n </Button>\n );\n }\n};\n","import * as z from 'zod';\n\nimport { type IField, FieldTypes } from \"../../interfaces/form.interface\";\n\nconst generateFieldSchema = (field: IField): z.ZodType => {\n if (field.required) {\n switch (field.type) {\n case FieldTypes.TEXT:\n return z\n .string()\n .min(1, field.requiredMessage ?? 'Este campo es requerido');\n case FieldTypes.SELECT:\n return z\n .string()\n .min(1, field.requiredMessage ?? 'Este campo es requerido');\n case FieldTypes.MULTISELECT:\n return z\n .array(z.string())\n .min(\n 1,\n field.requiredMessage ??\n 'Debe seleccionar al menos una opción'\n );\n case FieldTypes.EMAIL:\n return z\n .string()\n .email(\n field.requiredMessage ?? 'Correo electrónico inválido'\n );\n case FieldTypes.SWITCH:\n return z.boolean().optional();\n case FieldTypes.DATE:\n return z.date().refine((date) => date != null, {\n message: field.requiredMessage ?? 'La fecha es requerida',\n });\n case FieldTypes.NUMBER:\n return field.required\n ? z\n .number({\n error: 'Debe ser un número válido',\n })\n .min(\n field.min ?? -Infinity,\n field.requiredMessage ?? 'Este campo es requerido'\n )\n : z\n .number({\n error: 'Debe ser un número válido',\n })\n .min(field.min ?? -Infinity);\n case FieldTypes.FILE:\n return field.multiple\n ? z\n .array(z.instanceof(File))\n .min(\n 1,\n field.requiredMessage ??\n 'Se requiere al menos un archivo'\n )\n : z.instanceof(File);\n case FieldTypes.TAG:\n return z.array(z.string()).optional();\n default:\n return z.string().optional();\n }\n }\n switch (field.type) {\n case FieldTypes.TEXT:\n return z.string().optional();\n case FieldTypes.SELECT:\n return z.string().optional();\n case FieldTypes.MULTISELECT:\n return z.array(z.string()).optional();\n case FieldTypes.EMAIL:\n return z\n .string()\n .email('Correo electrónico inválido')\n .optional();\n case FieldTypes.SWITCH:\n return z.boolean().optional();\n case FieldTypes.DATE:\n return z\n .date()\n .refine((date) => date != null, {\n message: 'La fecha es requerida',\n })\n .optional();\n case FieldTypes.NUMBER:\n return field.required\n ? z\n .number({\n error: 'Debe ser un número válido',\n })\n .min(\n field.min ?? -Infinity,\n field.requiredMessage ?? 'Este campo es requerido'\n )\n : z\n .number({\n error: 'Debe ser un número válido',\n })\n .min(field.min ?? -Infinity)\n .optional();\n case FieldTypes.FILE:\n return field.multiple\n ? z.array(z.instanceof(File)).optional().default([])\n : z.instanceof(File).optional().nullable();\n case FieldTypes.TAG:\n return z.array(z.string()).optional();\n default:\n return z.string().optional();\n }\n};\n\nexport const generateFormSchema = (\n fields: IField[]\n): z.ZodObject<z.ZodRawShape> => {\n return z.object({\n ...fields.reduce((acc, field) => {\n return {\n ...acc,\n [field.name]: generateFieldSchema(field),\n };\n }, {}),\n });\n};\n","import { useForm } from \"@tanstack/react-form\";\nimport { isAxiosError } from \"axios\";\nimport {\n Box,\n Flex,\n LoadingOverlay,\n Stepper,\n Button,\n Group,\n} from \"@mantine/core\";\nimport {\n type IField,\n FieldTypes,\n type IButton,\n} from \"../../interfaces/form.interface\";\nimport type { UseMutationResult } from \"@tanstack/react-query\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { fieldGenerator, type FormInstance } from \"./FieldGenerator\";\nexport type { FormInstance };\nimport { buttonGenerator } from \"./ButtonGenerator\";\nimport { generateFormSchema } from \"./schemaGenerator\";\nimport {\n errorNotification,\n successNotification,\n} from \"../../utils/notifications\";\ninterface FormGeneratorProps<TData, TVariables> {\n fields: IField[];\n buttons: IButton[];\n loading: boolean;\n name: string;\n mutation: UseMutationResult<TData, unknown, TVariables, unknown>;\n buildVariables?: (values: Record<string, unknown> | FormData) => TVariables;\n hasFiles?: boolean;\n typeOfForm?: \"create\" | \"edit\";\n navigateAway?: boolean;\n setData?: (data: TData) => void;\n onSuccess?: (data: TData) => void;\n wrapJsonByName?: boolean; // Si no hay files y no hay buildVariables, envolver como { [name]: values }\n onFormRef?: (form: FormInstance) => void;\n}\n\nexport const FormGenerator = <TData, TVariables = unknown>({\n fields,\n buttons,\n name,\n loading,\n mutation,\n buildVariables,\n hasFiles = false,\n typeOfForm,\n navigateAway: _navigateAway = true,\n setData,\n onSuccess,\n wrapJsonByName = true,\n onFormRef,\n}: FormGeneratorProps<TData, TVariables>): React.ReactNode => {\n // const navigate = useNavigate();\n\n const formSchema = generateFormSchema(fields);\n\n // Multi-step support via `page` field prop\n const maxPage = useMemo(() => {\n const max = fields.reduce((acc, f) => Math.max(acc, f.page ?? 1), 1);\n return max < 1 ? 1 : max;\n }, [fields]);\n const hasMultipleSteps = maxPage > 1;\n const [currentStep, setCurrentStep] = useState(1);\n\n const getDefaultValueByType = (\n type: FieldTypes,\n ): string | number | boolean | null | [] => {\n switch (type) {\n case FieldTypes.NUMBER:\n return null;\n case FieldTypes.SWITCH:\n return false;\n case FieldTypes.MULTISELECT:\n return [];\n case FieldTypes.FILE:\n return [];\n default:\n return \"\";\n }\n };\n\n const { mutate, isPending } = mutation;\n\n const form = useForm({\n defaultValues: fields.reduce(\n (acc, field) => {\n return {\n ...acc,\n [field.name]: field.defaultValue ?? getDefaultValueByType(field.type),\n } as Record<string, unknown>;\n },\n {} as Record<string, unknown>,\n ),\n onSubmit: async ({ value }) => {\n // Validación con Zod antes de enviar\n const validationResult = formSchema.safeParse(value);\n if (!validationResult.success) {\n errorNotification({\n title: \"Error de validación\",\n message: \"Por favor verifica los datos ingresados\",\n });\n return;\n }\n\n const hasFileField = fields.some((f) => f.type === FieldTypes.FILE);\n const shouldUseFormData = hasFiles || hasFileField;\n\n if (shouldUseFormData) {\n const formData = new FormData();\n\n Object.entries(validationResult.data).forEach(([key, rawVal]) => {\n const fieldDef = fields.find((f) => f.name === key);\n const val = rawVal as unknown;\n\n if (fieldDef?.type === FieldTypes.FILE && val) {\n if (Array.isArray(val)) {\n (val as unknown[]).forEach((item) => {\n if (item instanceof File) formData.append(key, item);\n });\n } else if (val instanceof File) {\n formData.append(key, val);\n }\n return;\n }\n\n if (Array.isArray(val)) {\n const items = val as unknown[];\n const hasFile = items.some((item) => item instanceof File);\n if (hasFile) {\n items.forEach((item) => {\n if (item instanceof File) formData.append(key, item);\n });\n } else {\n // For TAG fields, send as comma-separated string\n if (fieldDef?.type === FieldTypes.TAG) {\n formData.append(key, items.join(\",\"));\n } else {\n // For other arrays, send as JSON string\n formData.append(key, JSON.stringify(items));\n }\n }\n return;\n }\n\n if (val instanceof Date) {\n formData.append(key, val.toISOString());\n return;\n }\n\n if (val != null && typeof val === \"object\") {\n formData.append(key, JSON.stringify(val));\n return;\n }\n\n formData.append(key, val != null ? String(val) : \"\");\n });\n\n const variables = buildVariables\n ? (buildVariables(formData) as TVariables)\n : (formData as unknown as TVariables);\n\n mutate(variables, {\n onSuccess: (data) => {\n successNotification({\n title: `${typeOfForm === \"create\" ? \"Creado\" : \"Editado\"} exitosamente`,\n message: `${name} ha sido ${typeOfForm === \"create\" ? \"creado\" : \"editado\"} exitosamente, serás redirigido a la lista de ${name}`,\n });\n setData && setData(data as TData);\n onSuccess && onSuccess(data as TData);\n },\n onError: (error: unknown) => {\n const message = isAxiosError(error)\n ? error.response?.data?.message\n : undefined;\n errorNotification({\n title: `Error al ${typeOfForm === \"create\" ? \"crear\" : \"editar\"} el ${name}`,\n message:\n message ?? \"Ha ocurrido un error al crear o editar el registro\",\n });\n },\n });\n } else {\n const raw = validationResult.data as Record<string, unknown>;\n const variables = buildVariables\n ? (buildVariables(raw) as TVariables)\n : ((wrapJsonByName ? { [name]: raw } : raw) as unknown as TVariables);\n\n mutate(variables, {\n onSuccess: (data) => {\n successNotification({\n title: `${typeOfForm === \"create\" ? \"Creado\" : \"Editado\"} exitosamente`,\n message: `${name} ha sido ${typeOfForm === \"create\" ? \"creado\" : \"editado\"} exitosamente, serás redirigido a la lista de ${name}`,\n });\n setData && setData(data as TData);\n onSuccess && onSuccess(data as TData);\n },\n onError: (error: unknown) => {\n const message = isAxiosError(error)\n ? error.response?.data?.message\n : undefined;\n errorNotification({\n title: `Error al ${typeOfForm === \"create\" ? \"crear\" : \"editar\"} el ${name}`,\n message:\n message ?? \"Ha ocurrido un error al crear o editar el registro\",\n });\n },\n });\n }\n },\n });\n\n const visibleFields = useMemo(\n () =>\n hasMultipleSteps\n ? fields.filter((f) => (f.page ?? 1) === currentStep)\n : fields,\n [fields, hasMultipleSteps, currentStep],\n );\n\n const handleNext = async (): Promise<void> => {\n // Validate only current step fields\n const stepFields = fields.filter((f) => (f.page ?? 1) === currentStep);\n if (stepFields.length > 0) {\n const stepSchema = generateFormSchema(stepFields);\n const currentValues = form.state.values as Record<string, unknown>;\n const stepValues = stepFields.reduce<Record<string, unknown>>(\n (acc, f) => {\n acc[f.name] = currentValues[f.name];\n return acc;\n },\n {},\n );\n const res = stepSchema.safeParse(stepValues);\n if (!res.success) {\n errorNotification({\n title: \"Datos incompletos\",\n message: \"Por favor completa los campos requeridos de este paso\",\n });\n return;\n }\n }\n setCurrentStep((s) => Math.min(s + 1, maxPage));\n };\n\n const handleBack = (): void => {\n setCurrentStep((s) => Math.max(1, s - 1));\n };\n\n useEffect(() => {\n fields.forEach((field) => {\n const currentValue = (form.state.values as Record<string, unknown>)[\n field.name\n ];\n const defaultValue =\n field.defaultValue ?? getDefaultValueByType(field.type);\n\n // Verifica si el campo es de tipo TAG y si el valor actual es un array vacío\n if (\n field.type === FieldTypes.TAG &&\n Array.isArray(currentValue) &&\n currentValue.length === 0\n ) {\n form.setFieldValue(field.name as string, defaultValue as unknown);\n } else if (currentValue === \"\" || currentValue === defaultValue) {\n form.setFieldValue(field.name as string, defaultValue as unknown);\n }\n });\n }, [fields]);\n\n useEffect(() => {\n if (onFormRef) {\n onFormRef(form);\n }\n }, [form, onFormRef]);\n\n return (\n <form\n onSubmit={async (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (hasMultipleSteps && currentStep < maxPage) {\n await handleNext();\n } else {\n form.handleSubmit();\n }\n }}\n encType=\"multipart/form-data\"\n >\n <LoadingOverlay visible={loading!} />\n {hasMultipleSteps && (\n <Box mb={16}>\n <Stepper active={currentStep - 1} allowNextStepsSelect={false}>\n {Array.from({ length: maxPage }).map((_, idx) => (\n <Stepper.Step key={idx} label={`Paso ${idx + 1}`} />\n ))}\n </Stepper>\n </Box>\n )}\n <Box\n style={{\n display: \"grid\",\n gridTemplateColumns: fields.some((field) => field.section === 2)\n ? \"repeat(2, 1fr)\"\n : \"1fr\",\n gap: \"20px\",\n alignItems: \"start\",\n }}\n >\n <Box\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(12, 1fr)\",\n gap: \"10px\",\n height: \"fit-content\",\n }}\n >\n {visibleFields\n .filter(\n (field) => field.section === undefined || field.section === 1,\n )\n .map((field) => (\n <Box\n key={field.name}\n style={{\n gridColumn: `span ${field.columnWidth || 12}`,\n }}\n >\n {fieldGenerator({ field, form })}\n </Box>\n ))}\n </Box>\n {visibleFields.some((field) => field.section === 2) && (\n <Box\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(12, 1fr)\",\n gap: \"10px\",\n height: \"fit-content\",\n }}\n >\n {visibleFields\n .filter((field) => field.section === 2)\n .map((field) => (\n <Box\n key={field.name}\n style={{\n gridColumn: `span ${field.columnWidth || 12}`,\n }}\n >\n {fieldGenerator({ field, form })}\n </Box>\n ))}\n </Box>\n )}\n </Box>\n <Group justify=\"space-between\" mt={20}>\n {hasMultipleSteps && (\n <Group>\n <Button\n type=\"button\"\n variant=\"default\"\n onClick={handleBack}\n disabled={currentStep === 1}\n >\n Atrás\n </Button>\n {currentStep < maxPage && (\n <Button type=\"button\" onClick={handleNext}>\n Siguiente\n </Button>\n )}\n </Group>\n )}\n <Flex justify=\"flex-end\" style={{ flex: 1 }}>\n {buttons.map((button) =>\n hasMultipleSteps &&\n currentStep < maxPage &&\n button.type === \"submit\"\n ? buttonGenerator({ ...button, disabled: true }, isPending)\n : buttonGenerator(button, isPending),\n )}\n </Flex>\n </Group>\n </form>\n );\n};\n","import { useMutation, type UseMutationResult } from \"@tanstack/react-query\";\nimport { Button, Card, Container, Flex, Title } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\nimport type { IField, IButton } from \"../../interfaces/form.interface\";\nimport { FormGenerator } from \"./FormGenerator\";\n\ninterface CreateEditFormProps<T> {\n fields: IField[];\n buttons: IButton[];\n mutationKey: string[];\n mutationFn: (data: T | FormData) => Promise<T>;\n typeOfForm: \"create\" | \"edit\";\n dataKey: string;\n loading: boolean;\n cardWidth?: number;\n hasFiles?: boolean;\n onSuccess?: () => void;\n setData?: (data: T) => void;\n navigateAway?: boolean;\n showBackButton?: boolean;\n /**\n * Callback when the user clicks \"Regresar\". Provide your router's go-back logic here.\n * @example React Router: () => navigate(-1)\n * @example TanStack Router: () => router.history.back()\n * @example TanStack Start: () => navigate({ to: '..' })\n */\n onGoBack?: () => void;\n /**\n * Optional icon for the back button. Pass your own icon component so the lib stays router/UI-agnostic.\n * @example <ArrowLeft /> from lucide-react\n */\n backButtonIcon?: ReactNode;\n}\n\nexport const CreateEditForm = <T,>({\n fields,\n buttons,\n mutationKey,\n mutationFn,\n typeOfForm,\n dataKey,\n loading,\n cardWidth,\n hasFiles,\n onSuccess,\n setData,\n navigateAway = true,\n showBackButton = true,\n onGoBack,\n backButtonIcon,\n}: CreateEditFormProps<T>): React.ReactNode => {\n const showBack = showBackButton && onGoBack != null;\n\n const mutation = useMutation({\n mutationKey,\n mutationFn: mutationFn as (data: T | FormData) => Promise<T>,\n });\n\n return (\n <>\n {showBack && (\n <Flex justify={\"start\"}>\n <Button\n leftSection={backButtonIcon}\n variant=\"transparent\"\n mx={20}\n mt={10}\n onClick={onGoBack}\n >\n Regresar a {dataKey}\n </Button>\n </Flex>\n )}\n <Container w={cardWidth ?? 500} my={-10}>\n <Flex direction={\"column\"}>\n <Title order={1} my={10}>\n {typeOfForm === \"create\" ? \"Crear\" : \"Editar\"} {dataKey}\n </Title>\n <Card withBorder>\n <FormGenerator<T>\n typeOfForm={typeOfForm}\n name={dataKey}\n loading={loading}\n fields={fields}\n buttons={buttons}\n mutation={mutation as UseMutationResult<T, unknown, unknown, unknown>}\n hasFiles={hasFiles}\n onSuccess={onSuccess}\n setData={setData}\n navigateAway={navigateAway}\n />\n </Card>\n </Flex>\n </Container>\n </>\n );\n};\n","\texport const barBorder =\n\t\t\"light-dark(#e5e5e5, var(--mantine-color-dark-4))\";\n\texport const barSurface =\n\t\t\"light-dark(var(--mantine-color-white), var(--mantine-color-dark-6))\";\n\texport const barTextActive =\n\t\t\"light-dark(#111827, var(--mantine-color-dark-0))\";\n\texport const barTextInactive =\n\t\t\"light-dark(#6b7280, var(--mantine-color-dark-2))\";\nexport const defaultHeaderBgColor =\n \"light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-6))\";\n export const paginationBorder =\n\t\t\"light-dark(#e5e5e5, var(--mantine-color-dark-4))\";\n\texport const paginationSurface =\n\t\t\"light-dark(var(--mantine-color-white), var(--mantine-color-dark-6))\";\n","import { Flex, Text, Select, Pagination, Group } from \"@mantine/core\";\nimport { paginationBorder, paginationSurface } from \"../../theme/constants\";\nimport { useMediaQuery } from \"../../hooks/useMediaQuery\";\n\n\ninterface BottomPaginationProps {\n total: number;\n pageSize: number;\n pageIndex: number;\n onPageSizeChange: (value: number) => void;\n onPageIndexChange: (value: number) => void;\n}\n\nexport const BottomPagination = ({\n total,\n pageSize,\n pageIndex,\n onPageSizeChange,\n onPageIndexChange,\n}: BottomPaginationProps) => {\n\n const { isMobile, isDesktop } = useMediaQuery();\n \n const totalPages = Math.ceil(total / pageSize);\n const currentPage = pageIndex + 1; // pageIndex is 0-based, display is 1-based\n\n const handlePageChange = (page: number) => {\n onPageIndexChange(page - 1); // Convert back to 0-based\n };\n\n const pageSizeOptions = [\n { value: \"5\", label: \"5\" },\n { value: \"10\", label: \"10\" },\n { value: \"15\", label: \"15\" },\n { value: \"20\", label: \"20\" },\n { value: \"50\", label: \"50\" },\n ];\n\n // Don't render pagination if there's no data\n if (total === 0) {\n return null;\n }\n\n return (\n <Flex\n align=\"center\"\n py=\"sm\"\n px=\"lg\"\n style={{\n position: \"relative\",\n borderTop:\n \"1px solid light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4))\",\n backgroundColor:\n \"light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-6))\",\n }}\n >\n <Pagination\n radius=\"md\"\n withEdges={isDesktop}\n total={totalPages}\n value={currentPage}\n onChange={handlePageChange}\n size=\"sm\"\n siblings={ !isMobile ? 1 : 0 }\n boundaries={ !isMobile ? 1 : 0 }\n style={\n isDesktop\n ? {\n position: \"absolute\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n }\n : undefined\n }\n />\n\n <Group style={{ marginLeft: \"auto\", alignItems: \"center\" }}>\n <Text size=\"xs\" c=\"dimmed\">\n Mostrar\n </Text>\n <Select\n value={pageSize.toString()}\n onChange={(value) => value && onPageSizeChange(parseInt(value, 10))}\n data={pageSizeOptions}\n size=\"xs\"\n w={65}\n styles={{\n input: {\n border: `1px solid ${paginationBorder}`,\n backgroundColor: paginationSurface,\n fontSize: \"0.75rem\",\n },\n }}\n comboboxProps={{ withinPortal: false }}\n />\n <Text size=\"xs\" c=\"dimmed\" visibleFrom=\"sm\">\n registros\n </Text>\n {total !== undefined && !isMobile && (\n <Text size=\"xs\" c=\"dimmed\" ml=\"xs\">\n ({total} en total)\n </Text>\n )}\n </Group>\n </Flex>\n );\n};\n","import { useState } from \"react\";\nimport { Checkbox, Table, UnstyledButton } from \"@mantine/core\";\nimport { flexRender, type useReactTable } from \"@tanstack/react-table\";\nimport { defaultHeaderBgColor } from \"../../theme/constants\";\nimport type { TableHeaderStyle as TableHeaderStyleType } from \"../../interfaces/datatable.interface\";\n\nconst defaultHeaderTextColor =\n \"light-dark(var(--mantine-color-dimmed), var(--mantine-color-gray-4))\";\nconst defaultHeaderHoverBg =\n \"light-dark(var(--mantine-color-gray-2), var(--mantine-color-dark-2))\";\nconst actionsColumnWidth = 56;\n\n/** Normalize legacy string (bg only) to TableHeaderStyle object */\nfunction normalizeHeaderStyle(\n value: string | TableHeaderStyleType | undefined,\n): TableHeaderStyleType {\n if (value == null) {\n return {\n bgColor: defaultHeaderBgColor,\n textColor: defaultHeaderTextColor,\n hoverBgColor: defaultHeaderHoverBg,\n };\n }\n if (typeof value === \"string\") {\n return {\n bgColor: value,\n textColor: defaultHeaderTextColor,\n hoverBgColor: defaultHeaderHoverBg,\n };\n }\n return {\n bgColor: value.bgColor ?? defaultHeaderBgColor,\n textColor: value.textColor ?? defaultHeaderTextColor,\n hoverBgColor: value.hoverBgColor ?? defaultHeaderHoverBg,\n hoverTextColor: value.hoverTextColor ?? value.textColor ?? defaultHeaderTextColor,\n fontWeight: value.fontWeight,\n fontSize: value.fontSize,\n padding: value.padding,\n };\n}\n\ninterface TableHeaderProps<TData> {\n table: ReturnType<typeof useReactTable<TData>>;\n /** Icon when column is unsorted */\n SortIcon?: React.ElementType;\n /** Icon when column is sorted ascending */\n SortIconAsc?: React.ElementType;\n /** Icon when column is sorted descending */\n SortIconDesc?: React.ElementType;\n canCheck?: boolean;\n /** Whether the table has an actions column (no header label, needs background) */\n hasActionsColumn?: boolean;\n /** Header style: color string (legacy, used as bg) or { bgColor, textColor, fontWeight?, fontSize?, padding? } */\n headerBgColor?: string | TableHeaderStyleType;\n}\n\nexport const TableHeader = <TData,>({\n table,\n SortIcon,\n SortIconAsc,\n SortIconDesc,\n canCheck = false,\n hasActionsColumn = false,\n headerBgColor,\n}: TableHeaderProps<TData>) => {\n const [hoveredHeaderId, setHoveredHeaderId] = useState<string | null>(null);\n const style = normalizeHeaderStyle(headerBgColor);\n const bgColor = style.bgColor ?? defaultHeaderBgColor;\n const hoverBg = style.hoverBgColor ?? defaultHeaderHoverBg;\n const hoverText = style.hoverTextColor ?? style.textColor ?? defaultHeaderTextColor;\n const totalColumnsSize = table\n .getVisibleLeafColumns()\n .reduce((sum, column) => sum + column.getSize(), 0);\n\n const getSortIcon = (sortState: false | \"asc\" | \"desc\") => {\n if (sortState === \"asc\") return SortIconAsc;\n if (sortState === \"desc\") return SortIconDesc;\n return SortIcon;\n };\n\n const getColumnStyle = (size: number): React.CSSProperties | undefined => {\n if (!size || totalColumnsSize <= 0) return undefined;\n const baseWidth = `${(size / totalColumnsSize) * 100}%`;\n return {\n width: hasActionsColumn ? `calc((100% - ${actionsColumnWidth}px) * ${size / totalColumnsSize})` : baseWidth,\n minWidth: size,\n };\n };\n\n const baseButtonStyle: React.CSSProperties = {\n padding: style.padding ?? \"4px 10px\",\n fontSize: style.fontSize ?? 14,\n fontWeight: style.fontWeight ?? 700,\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n transition: \"background-color 0.1s ease, color 0.1s ease\",\n borderRadius: \"var(--mantine-radius-lg)\",\n };\n\n return (\n <Table.Thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <Table.Tr key={headerGroup.id}>\n {canCheck && (\n <Table.Th\n bg={bgColor}\n w={10}\n styles={{\n th: {\n padding: \"0 0 0 6px\",\n },\n }}\n >\n <Checkbox\n size=\"xs\"\n style={{\n padding: 0,\n }}\n checked={table.getIsAllRowsSelected()}\n indeterminate={\n table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()\n }\n onChange={table.getToggleAllRowsSelectedHandler()}\n aria-label=\"Toggle all rows selected\"\n />\n </Table.Th>\n )}\n {headerGroup.headers.map((header) => {\n const canSort = header.column.getCanSort();\n const sortState = header.column.getIsSorted();\n const Icon = canSort ? getSortIcon(sortState) : null;\n const isHovered = hoveredHeaderId === header.id;\n\n return (\n <Table.Th\n key={header.id}\n bg={bgColor}\n style={getColumnStyle(header.column.getSize())}\n >\n <UnstyledButton\n style={{\n ...baseButtonStyle,\n color: isHovered ? hoverText : (style.textColor ?? defaultHeaderTextColor),\n backgroundColor: isHovered ? hoverBg : undefined,\n }}\n onClick={header.column.getToggleSortingHandler()}\n onMouseEnter={() => setHoveredHeaderId(header.id)}\n onMouseLeave={() => setHoveredHeaderId(null)}\n >\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n {Icon && <Icon size={16} />}\n </UnstyledButton>\n </Table.Th>\n );\n })}\n {hasActionsColumn && (\n <Table.Th\n bg={bgColor}\n style={{ width: actionsColumnWidth, minWidth: actionsColumnWidth }}\n />\n )}\n </Table.Tr>\n ))}\n </Table.Thead>\n );\n};\n","import { useState } from \"react\";\nimport { ActionIcon, Checkbox, Flex, Menu, Table, Text } from \"@mantine/core\";\nimport { MoreVertical } from \"lucide-react\";\nimport { flexRender, type useReactTable } from \"@tanstack/react-table\";\n\nconst actionsColumnWidth = 56;\n\ninterface TableBodyProps<TData> {\n table: ReturnType<typeof useReactTable<TData>>;\n canCheck?: boolean;\n hasActionsColumn?: boolean;\n columnActions?: (row: TData) => React.ReactNode;\n MenuIcon?: React.ElementType;\n listMenuActions?: (\n row: TData,\n ) => { label: string; onClick: () => void; Icon?: React.ElementType }[];\n onRowClick?: (row: TData) => void;\n onRowHover?: (row: TData) => void;\n}\n\nexport const TableBody = <TData,>({\n table,\n canCheck = false,\n hasActionsColumn = false,\n columnActions,\n MenuIcon = MoreVertical,\n listMenuActions,\n onRowClick,\n onRowHover,\n}: TableBodyProps<TData>) => {\n const [hoveredRowId, setHoveredRowId] = useState<string | null>(null);\n const totalColumnsSize = table\n .getVisibleLeafColumns()\n .reduce((sum, column) => sum + column.getSize(), 0);\n\n const getColumnStyle = (size: number): React.CSSProperties | undefined => {\n if (!size || totalColumnsSize <= 0) return undefined;\n const baseWidth = `${(size / totalColumnsSize) * 100}%`;\n return {\n width: hasActionsColumn ? `calc((100% - ${actionsColumnWidth}px) * ${size / totalColumnsSize})` : baseWidth,\n minWidth: size,\n };\n };\n\n return (\n <Table.Tbody>\n {table.getRowModel().rows.map((row) => (\n <Table.Tr\n key={row.id}\n style={{\n ...(onRowClick ? { cursor: \"pointer\" } : {}),\n ...(hoveredRowId === row.id\n ? {\n backgroundColor:\n \"light-dark(var(--mantine-color-gray-1), var(--mantine-color-dark-5))\",\n }\n : {}),\n }}\n onMouseEnter={() => {\n setHoveredRowId(row.id);\n onRowHover?.(row.original);\n }}\n onMouseLeave={() => setHoveredRowId(null)}\n >\n {canCheck && (\n <Table.Td\n styles={{\n td: {\n padding: \"0 0 0 6px\",\n },\n }}\n >\n <Checkbox\n size=\"xs\"\n styles={{\n root: {\n width: 5,\n },\n }}\n checked={row.getIsSelected()}\n onChange={row.getToggleSelectedHandler()}\n disabled={!row.getCanSelect()}\n aria-label=\"Select row\"\n />\n </Table.Td>\n )}\n {row.getVisibleCells().map((cell) => (\n <Table.Td\n key={cell.id}\n style={getColumnStyle(cell.column.getSize())}\n onClick={() => onRowClick?.(row.original)}\n >\n <Text\n size=\"sm\"\n style={{\n color:\n \"light-dark(var(--mantine-color-dark-7), var(--mantine-color-gray-1))\",\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Text>\n </Table.Td>\n ))}\n {(columnActions || listMenuActions) && (\n <Table.Td style={{ width: actionsColumnWidth, minWidth: actionsColumnWidth }}>\n <Flex justify=\"flex-end\" align=\"center\" gap=\"sm\">\n {columnActions?.(row.original)}\n {listMenuActions && (\n <Menu variant=\"subtle\">\n <Menu.Target>\n <ActionIcon variant=\"subtle\" color=\"gray\" size=\"sm\">\n <MenuIcon size={16} />\n </ActionIcon>\n </Menu.Target>\n <Menu.Dropdown>\n {listMenuActions(row.original).map((action) => (\n <Menu.Item\n key={action.label}\n onClick={action.onClick}\n leftSection={action.Icon && <action.Icon />}\n >\n {action.label}\n </Menu.Item>\n ))}\n </Menu.Dropdown>\n </Menu>\n )}\n </Flex>\n </Table.Td>\n )}\n </Table.Tr>\n ))}\n </Table.Tbody>\n );\n};\n","import { Skeleton, Table } from \"@mantine/core\";\n\ninterface TableSkeletonProps {\n /** Number of skeleton rows to show */\n rowCount: number;\n /** Number of data columns (excluding checkbox and actions) */\n columnCount: number;\n /** Whether to show the checkbox column */\n canCheck?: boolean;\n /** Whether to show the actions column */\n hasActionsColumn?: boolean;\n}\n\nconst cellStyle = { minHeight: 40, verticalAlign: \"middle\" as const };\n\nexport const TableSkeleton = ({\n rowCount,\n columnCount,\n canCheck = false,\n hasActionsColumn = false,\n}: TableSkeletonProps) => {\n return (\n <Table.Tbody>\n {Array.from({ length: rowCount }).map((_, rowIdx) => (\n <Table.Tr key={rowIdx}>\n {canCheck && (\n <Table.Td style={cellStyle}>\n <Skeleton height={16} width={18} radius=\"sm\" />\n </Table.Td>\n )}\n {Array.from({ length: columnCount }).map((_, colIdx) => (\n <Table.Td key={colIdx} style={cellStyle}>\n <Skeleton\n height={16}\n width={\n colIdx === columnCount - 1\n ? 40\n : `${60 + (colIdx % 2) * 15}%`\n }\n radius=\"sm\"\n />\n </Table.Td>\n ))}\n {hasActionsColumn && (\n <Table.Td style={cellStyle}>\n <Skeleton height={16} width={32} radius=\"sm\" />\n </Table.Td>\n )}\n </Table.Tr>\n ))}\n </Table.Tbody>\n );\n};\n","import React from \"react\";\nimport { Stack, Text, Title, Button, Box } from \"@mantine/core\";\n\ninterface EmptyStateProps {\n title?: string;\n description?: string;\n icon?: React.ReactNode;\n actionButton?: {\n label: string;\n onClick: () => void;\n variant?: \"filled\" | \"light\" | \"outline\";\n color?: string;\n };\n IconPlus?: React.ElementType;\n IconFileX?: React.ElementType;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n title = \"No hay datos disponibles\",\n description = \"No se encontraron elementos para mostrar. Intenta ajustar los filtros o agrega nuevos elementos.\",\n icon,\n actionButton,\n IconPlus,\n IconFileX,\n}) => {\n const defaultIcon = (\n <Box\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 64,\n height: 64,\n borderRadius: \"50%\",\n backgroundColor: \"var(--mantine-color-gray-1)\",\n margin: \"0 auto\",\n }}\n >\n {IconFileX ? (\n <IconFileX size={32} color=\"var(--mantine-color-gray-6)\" />\n ) : null}\n </Box>\n );\n\n return (\n <Stack\n align=\"center\"\n justify=\"center\"\n gap=\"md\"\n py=\"xl\"\n px=\"md\"\n style={{\n textAlign: \"center\",\n minHeight: 300,\n }}\n >\n {icon || defaultIcon}\n\n <Stack gap=\"xs\" align=\"center\">\n <Title\n order={3}\n size=\"h4\"\n fw={600}\n style={{\n color: \"var(--mantine-color-gray-9)\",\n fontSize: \"18px\",\n }}\n >\n {title}\n </Title>\n\n <Text\n size=\"sm\"\n c=\"dimmed\"\n style={{\n maxWidth: 400,\n lineHeight: 1.5,\n }}\n >\n {description}\n </Text>\n </Stack>\n\n {actionButton && (\n <Button\n variant={actionButton.variant || \"light\"}\n color={actionButton.color || \"blue\"}\n leftSection={IconPlus ? <IconPlus size={16} /> : null}\n onClick={actionButton.onClick}\n mt=\"xs\"\n >\n {actionButton.label}\n </Button>\n )}\n </Stack>\n );\n};\n","import {\n flexRender,\n useReactTable,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport { Flex, Paper, ScrollArea, Table } from \"@mantine/core\";\nimport { ArrowUpDown, ArrowDown, ArrowUp, FileX } from \"lucide-react\";\nimport type React from \"react\";\nimport type { TableHeaderStyle } from \"../../interfaces/datatable.interface\";\nimport { defaultHeaderBgColor } from \"../../theme/constants\";\nimport { TableHeader } from \"./TableHeader\";\nimport { TableBody } from \"./TableBody\";\nimport { TableSkeleton } from \"./TableSkeleton\";\nimport { EmptyState } from \"./EmptyState\";\n\ninterface DataTableProps<TData> {\n table: ReturnType<typeof useReactTable<TData>>;\n /** Whether to show the border */\n withBorder?: boolean;\n /** Border radius */\n borderRadius?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | number;\n /** Icon when column is unsorted */\n SortIcon?: React.ElementType;\n /** Icon when column is sorted ascending */\n SortIconAsc?: React.ElementType;\n /** Icon when column is sorted descending */\n SortIconDesc?: React.ElementType;\n /** Icon when empty state */\n EmptyStateIcon?: React.ElementType;\n /** Title when empty state */\n EmptyStateTitle?: string;\n /** Description when empty state */\n EmptyStateDescription?: string;\n /** Whether to show the checkboxes */\n canCheck?: boolean;\n /** Column actions */\n columnActions?: (row: TData) => React.ReactNode;\n /** List menu actions */\n listMenuActions?: (\n row: TData,\n ) => { label: string; onClick: () => void; Icon?: React.ElementType }[];\n /** Header style: color string (legacy) or { bgColor, textColor, fontWeight?, fontSize?, padding? } */\n headerBgColor?: string | TableHeaderStyle;\n /** Whether the table is loading (shows skeleton rows instead of data) */\n loading?: boolean;\n /** Number of skeleton rows to show when loading */\n skeletonRowCount?: number;\n /** Called when a row is clicked */\n onRowClick?: (row: TData) => void;\n /** Called when a row is hovered */\n onRowHover?: (row: TData) => void;\n /** Empty state to display when no data is available */\n emptyState?: React.ReactNode;\n /** Height of the table */\n tableHeight?: number;\n}\n\nexport const SimpleDataTable = <TData,>({\n tableHeight = 600,\n table,\n withBorder,\n borderRadius = \"md\",\n SortIcon = ArrowUpDown,\n SortIconAsc = ArrowUp,\n SortIconDesc = ArrowDown,\n canCheck = false,\n columnActions,\n listMenuActions,\n headerBgColor,\n loading = false,\n skeletonRowCount = 10,\n onRowClick,\n onRowHover,\n emptyState = (\n <EmptyState\n title=\"No data found\"\n description=\"No data found\"\n icon={<FileX size={32} color=\"var(--mantine-color-gray-6)\" />}\n />\n ),\n}: DataTableProps<TData>) => {\n const dataColumnsCount = table.getAllLeafColumns().length;\n const hasActionsColumn = !!(columnActions || listMenuActions);\n const headerBg =\n typeof headerBgColor === \"string\"\n ? headerBgColor\n : headerBgColor?.bgColor ?? defaultHeaderBgColor;\n\n return (\n <Paper withBorder={withBorder} radius={borderRadius}>\n <ScrollArea h={tableHeight} type=\"scroll\" scrollbarSize={8}>\n <Table\n style={{ width: \"100%\", tableLayout: \"fixed\" }}\n styles={{\n thead: {\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n background: headerBg,\n boxShadow: \"0 1px 0 0 light-dark(var(--mantine-color-gray-3), var(--mantine-color-dark-4))\",\n },\n }}\n >\n <TableHeader\n canCheck={canCheck}\n table={table}\n SortIcon={SortIcon}\n SortIconAsc={SortIconAsc}\n SortIconDesc={SortIconDesc}\n hasActionsColumn={hasActionsColumn}\n headerBgColor={headerBgColor}\n />\n {loading ? (\n <TableSkeleton\n rowCount={skeletonRowCount}\n columnCount={dataColumnsCount}\n canCheck={canCheck}\n hasActionsColumn={hasActionsColumn}\n />\n ) : table.getRowCount() > 0 ? (\n <TableBody\n onRowClick={onRowClick}\n onRowHover={onRowHover}\n table={table}\n canCheck={canCheck}\n hasActionsColumn={hasActionsColumn}\n columnActions={columnActions}\n listMenuActions={listMenuActions}\n />\n ) : (\n <Table.Tbody>\n <Table.Tr>\n <Table.Td\n colSpan={\n (table.getHeaderGroups()[0]?.headers.length ?? 1) +\n (canCheck ? 1 : 0)\n }\n >\n <Flex\n justify=\"center\"\n align=\"center\"\n style={{ minHeight: 200 }}\n >\n {emptyState}\n </Flex>\n </Table.Td>\n </Table.Tr>\n </Table.Tbody>\n )}\n </Table>\n </ScrollArea>\n </Paper>\n );\n};\n","import { ActionIcon, TextInput } from \"@mantine/core\";\nimport { Search, X } from \"lucide-react\";\nimport { barBorder, barTextActive, barSurface } from \"../../theme/constants\";\n\ninterface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n onClear?: () => void;\n IconSearch?: React.ElementType;\n IconX?: React.ElementType;\n}\n\nexport const SearchInput = ({\n value,\n onChange,\n placeholder = \"Buscar...\",\n onClear,\n IconSearch = Search,\n IconX = X,\n}: SearchInputProps) => {\n return (\n <TextInput\n w={200}\n size=\"sm\"\n radius=\"lg\"\n value={value}\n onChange={(event) => onChange(event.currentTarget.value)}\n placeholder={placeholder}\n leftSection={\n IconSearch ? (\n <IconSearch\n size={16}\n style={{\n color: \"var(--mantine-color-gray-6)\",\n strokeWidth: 2,\n }}\n />\n ) : undefined\n }\n rightSection={\n value && IconX ? (\n <ActionIcon\n variant=\"subtle\"\n color=\"gray\"\n radius=\"lg\"\n onClick={() => {\n onChange(\"\");\n onClear?.();\n }}\n style={{\n transition: \"all 0.2s ease\",\n }}\n >\n <IconX size={16} />\n </ActionIcon>\n ) : undefined\n }\n styles={{\n input: {\n border: `1px solid ${barBorder}`,\n color: barTextActive,\n backgroundColor: barSurface,\n fontSize: \"14px\",\n fontWeight: 500,\n transition: \"all 0.2s ease\",\n \"&:focus\": {\n borderColor: \"var(--mantine-color-blue-5)\",\n backgroundColor: \"var(--mantine-color-default)\",\n boxShadow: \"0 0 0 3px var(--mantine-color-blue-1)\",\n },\n \"&::placeholder\": {\n color: \"var(--mantine-color-gray-5)\",\n fontWeight: 400,\n },\n },\n }}\n />\n );\n};\n","import { ActionIcon, Button, Menu, ScrollArea, TextInput } from \"@mantine/core\";\nimport type { IFilterSelectOption } from \"../../interfaces/filters.interface\";\nimport { barBorder, barSurface, barTextActive } from \"../../theme/constants\";\nimport {\n Check,\n ChevronDown,\n ChevronUp,\n ListFilter,\n Search,\n X,\n} from \"lucide-react\";\nimport { useRef, useMemo, useState } from \"react\";\n\nexport interface FilterSelectProps {\n /** Column id to filter */\n columnId: string;\n /** Select options (value, label pairs). Import FilterSelectOption from interfaces/filters */\n options: IFilterSelectOption[];\n /** Current filter value */\n onChange: (columnId: string, value: string | null) => void;\n /** Placeholder when no selection */\n placeholder?: string;\n /** Icon to show in the button */\n Icon?: React.ElementType;\n /** Enable search input inside dropdown */\n searchable?: boolean;\n}\n\nexport const FilterSelect = ({\n columnId,\n options,\n onChange,\n placeholder = \"Todos\",\n Icon = ListFilter,\n searchable = false,\n}: FilterSelectProps) => {\n const [open, setOpen] = useState<boolean>(false);\n const [selectedOption, setSelectedOption] =\n useState<IFilterSelectOption | null>(null);\n const [search, setSearch] = useState(\"\");\n const searchRef = useRef<HTMLInputElement>(null);\n\n const filteredOptions = useMemo(\n () =>\n searchable && search\n ? options.filter((o) =>\n o.label.toLowerCase().includes(search.toLowerCase()),\n )\n : options,\n [options, search, searchable],\n );\n\n const handleClear = () => {\n setSelectedOption(null);\n onChange(columnId, null);\n };\n\n const handleSelect = (option: IFilterSelectOption) => {\n if (selectedOption?.value === option.value) {\n setSelectedOption(null);\n onChange(columnId, null);\n } else {\n setSelectedOption(option);\n onChange(columnId, option.value);\n }\n };\n\n return (\n <Menu\n opened={open}\n onChange={(opened) => {\n setOpen(opened);\n if (!opened) {\n setSearch(\"\");\n }\n }}\n onOpen={() => {\n setTimeout(() => searchRef.current?.focus(), 50);\n }}\n styles={{\n dropdown: {\n minWidth: 180,\n },\n }}\n >\n <Menu.Target>\n <Button\n radius=\"md\"\n variant=\"filled\"\n leftSection={Icon ? <Icon size={15} /> : null}\n rightSection={\n selectedOption ? (\n <ActionIcon\n component=\"div\"\n variant=\"subtle\"\n radius=\"md\"\n onClick={(event) => {\n event.stopPropagation();\n handleClear();\n }}\n >\n <X size={12} />\n </ActionIcon>\n ) : open ? (\n <ChevronUp size={12} />\n ) : (\n <ChevronDown size={12} />\n )\n }\n size=\"sm\"\n styles={{\n root: {\n border: `1px solid ${barBorder}`,\n backgroundColor: barSurface,\n color: barTextActive,\n fontWeight: 400,\n fontSize: \"0.8125rem\",\n },\n }}\n >\n {selectedOption ? selectedOption.label : placeholder}\n </Button>\n </Menu.Target>\n <Menu.Dropdown style={{ boxShadow: \"0 0 10px 0 rgba(0, 0, 0, 0.1)\", borderRadius: \"8px\" }}>\n {searchable && (\n <TextInput\n ref={searchRef}\n variant=\"unstyled\"\n placeholder=\"Buscar...\"\n leftSection={<Search size={14} />}\n value={search}\n onChange={(e) => setSearch(e.currentTarget.value)}\n />\n )}\n <ScrollArea mah={240} scrollbars=\"y\" type=\"always\">\n {filteredOptions.map((option) => (\n <Menu.Item\n leftSection={\n selectedOption?.value === option.value ? (\n <Check size={12} />\n ) : null\n }\n key={option.value}\n onClick={() => {\n handleSelect(option);\n }}\n >\n {option.label}\n </Menu.Item>\n ))}\n </ScrollArea>\n {searchable && filteredOptions.length === 0 && (\n <Menu.Item disabled>Sin resultados</Menu.Item>\n )}\n </Menu.Dropdown>\n </Menu>\n );\n};\n","import { useState } from \"react\";\nimport type { Row } from \"@tanstack/react-table\";\n\n/**\n * TanStack Table filterFn for date columns.\n * Keeps rows where the cell value (YYYY-MM-DD) is >= the selected date.\n * Usage: add `filterFn: dateGteFilterFn` to the column definition.\n */\nexport const dateGteFilterFn = <TData,>(\n row: Row<TData>,\n columnId: string,\n filterValue: string,\n): boolean => {\n const cellValue = row.getValue<string>(columnId);\n if (!filterValue || !cellValue) return true;\n return cellValue >= filterValue;\n};\nimport { ActionIcon, Button, Popover } from \"@mantine/core\";\nimport { DatePicker } from \"@mantine/dates\";\nimport type { DateValue } from \"@mantine/dates\";\nimport { CalendarDays, ChevronDown, ChevronUp, X } from \"lucide-react\";\nimport { barBorder, barSurface, barTextActive } from \"../../theme/constants\";\n\nexport interface FilterDateProps {\n /** Column id to filter */\n columnId: string;\n /** Current filter value (ISO date string or null) */\n value: string | null;\n /** Called when filter changes */\n onChange: (columnId: string, value: string | null) => void;\n /** Placeholder when no date selected */\n placeholder?: string;\n}\n\nconst toLocalIso = (date: Date): string => {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, \"0\");\n const d = String(date.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n};\n\nconst fromIso = (iso: string): Date => {\n const parts = iso.split(\"-\").map(Number);\n return new Date(parts[0]!, parts[1]! - 1, parts[2]!);\n};\n\nconst formatDisplay = (iso: string): string => {\n const d = fromIso(iso);\n return d.toLocaleDateString(\"es-MX\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n });\n};\n\nexport const FilterDate = ({\n columnId,\n value,\n onChange,\n placeholder = \"Seleccionar fecha\",\n}: FilterDateProps) => {\n const [open, setOpen] = useState(false);\n\n const dateValue = value ? fromIso(value) : null;\n\n const handleChange = (date: DateValue) => {\n if (!date) {\n onChange(columnId, null);\n return;\n }\n const d = date instanceof Date ? date : new Date(date);\n onChange(columnId, toLocalIso(d));\n setOpen(false);\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(columnId, null);\n };\n\n const buttonLabel = value ? formatDisplay(value) : placeholder;\n\n return (\n <Popover\n opened={open}\n onChange={setOpen}\n position=\"bottom-start\"\n withinPortal={false}\n >\n <Popover.Target>\n <Button\n radius=\"md\"\n variant=\"filled\"\n leftSection={<CalendarDays size={14} />}\n rightSection={\n value ? (\n <ActionIcon\n component=\"div\"\n radius=\"md\"\n variant=\"subtle\"\n onClick={(event) => handleClear(event)}\n >\n <X size={12} />\n </ActionIcon>\n ) : open ? (\n <ChevronUp size={12} />\n ) : (\n <ChevronDown size={12} />\n )\n }\n size=\"sm\"\n onClick={() => setOpen((o) => !o)}\n styles={{\n root: {\n border: `1px solid ${barBorder}`,\n backgroundColor: barSurface,\n color: barTextActive,\n fontWeight: 400,\n fontSize: \"0.8125rem\",\n },\n }}\n >\n {buttonLabel}\n </Button>\n </Popover.Target>\n\n <Popover.Dropdown p=\"xs\">\n <DatePicker value={dateValue} onChange={handleChange} size=\"sm\" />\n </Popover.Dropdown>\n </Popover>\n );\n};\n","import { useEffect } from \"react\";\nimport type { ColumnDef, useReactTable } from \"@tanstack/react-table\";\nimport { useDataTable } from \"../../hooks/useDataTable\";\nimport { SimpleDataTable } from \"./SimpleDataTable\";\nimport { Flex, Group, Paper } from \"@mantine/core\";\nimport { SearchInput } from \"./SearchInput\";\nimport { FilterSelect } from \"./FilterSelect\";\nimport { FilterDate } from \"./FilterDate\";\nimport { BottomPagination } from \"./BottomPagination\";\nimport type {\n DataTableConfig,\n ITableFilterConfig,\n ServerTableState,\n TableHeaderStyle,\n} from \"../../interfaces\";\n\ninterface DataTableProps<TData> {\n /** Data to display in the table (current page, already paginated by server) */\n data: TData[];\n /** Columns to display in the table */\n columns: ColumnDef<TData>[];\n /** Configuration for the table */\n config?: Partial<DataTableConfig>;\n /** Dynamic filters (selects, dates, etc.) */\n filters?: ITableFilterConfig[];\n /** Total row count from server (used for pagination) */\n totalRowCount?: number;\n /** Called when table state changes (page, search, filters, sort). Use to call your API. */\n onStateChange?: (state: ServerTableState) => void;\n /** Whether the table is loading (shows skeleton) */\n loading?: boolean;\n /** Whether to enable row selection */\n enableRowCheck?: boolean;\n /** Called when row selection changes */\n onSelectionChange?: (selectedRows: TData[]) => void;\n /** Header style: color string (legacy) or { bgColor, textColor, fontWeight?, fontSize?, padding? } */\n headerBgColor?: string | TableHeaderStyle;\n /** Column actions to display per row */\n columnActions?: (row: TData) => React.ReactNode;\n /** List menu actions to display per row */\n listMenuActions?: (\n row: TData,\n ) => { label: string; onClick: () => void; Icon?: React.ElementType }[];\n /** Called when a row is clicked */\n onRowClick?: (row: TData) => void;\n /** Called when a row is hovered */\n onRowHover?: (row: TData) => void;\n /** Empty state to display when no data is available */\n emptyState?: React.ReactNode;\n /** Table instance */\n table?: ReturnType<typeof useReactTable<TData>>;\n /** Custom Header component */\n CustomHeader?: React.ReactNode;\n /** Whether to show the search input */\n showSearchInput?: boolean;\n /** Whether to show the bottom pagination */\n showBottomPagination?: boolean;\n /** Height of the table */\n tableHeight?: number;\n}\n\nexport const DataTable = <TData,>({\n showSearchInput = true,\n showBottomPagination = true,\n data,\n columns,\n config,\n filters,\n totalRowCount,\n onStateChange,\n loading = false,\n enableRowCheck: canCheck = false,\n onSelectionChange,\n headerBgColor,\n columnActions,\n listMenuActions,\n onRowClick,\n onRowHover,\n emptyState,\n table: ExternalTable,\n CustomHeader,\n tableHeight = 600,\n}: DataTableProps<TData>) => {\n const {\n table: internalTable,\n globalFilter,\n setGlobalFilter,\n columnFilters,\n setColumnFilter,\n config: mergedConfig,\n selectedRows,\n } = useDataTable({\n data,\n columns,\n config,\n enableRowSelection: canCheck,\n totalRowCount,\n onStateChange,\n });\n\n const table = ExternalTable ?? internalTable;\n\n useEffect(() => {\n if (canCheck && onSelectionChange) {\n onSelectionChange(selectedRows);\n }\n }, [canCheck, onSelectionChange, selectedRows]);\n\n const getFilterValue = (columnId: string) =>\n (columnFilters.find((f) => f.id === columnId)?.value as string | null) ??\n null;\n\n return (\n <Flex direction=\"column\" gap=\"md\">\n <Flex justify=\"space-between\" align=\"center\">\n <Group gap=\"md\" wrap=\"wrap\">\n {showSearchInput && mergedConfig.enableGlobalFilter && (\n <SearchInput\n value={globalFilter}\n onChange={setGlobalFilter}\n placeholder={mergedConfig.searchPlaceholder}\n />\n )}\n {filters?.map((f) =>\n f.type === \"date\" ? (\n <FilterDate\n key={f.columnId}\n columnId={f.columnId}\n value={getFilterValue(f.columnId)}\n onChange={setColumnFilter}\n placeholder={f.placeholder}\n />\n ) : (\n <FilterSelect\n key={f.columnId}\n columnId={f.columnId}\n options={f.options ?? []}\n onChange={setColumnFilter}\n placeholder={f.placeholder ?? \"Todos\"}\n searchable={f.searchable}\n />\n ),\n )}\n </Group>\n {CustomHeader}\n </Flex>\n <Paper withBorder radius=\"md\" style={{ overflow: \"hidden\" }}>\n <SimpleDataTable\n tableHeight={tableHeight}\n onRowClick={onRowClick}\n onRowHover={onRowHover}\n table={table}\n canCheck={canCheck}\n columnActions={columnActions}\n listMenuActions={listMenuActions}\n headerBgColor={headerBgColor}\n loading={loading}\n skeletonRowCount={mergedConfig.defaultPageSize}\n emptyState={emptyState}\n />\n {showBottomPagination && (\n <BottomPagination\n total={totalRowCount ?? 0}\n pageSize={table.getState().pagination.pageSize}\n pageIndex={table.getState().pagination.pageIndex}\n onPageSizeChange={(value) => table.setPageSize(value)}\n onPageIndexChange={(value) =>\n table.setPagination({\n pageIndex: value,\n pageSize: table.getState().pagination.pageSize,\n })\n }\n />\n )}\n </Paper>\n </Flex>\n );\n};\n","import { useQuery, type UseQueryOptions } from \"@tanstack/react-query\";\nimport { DataTable } from \"./table/DataTable\";\nimport type { ColumnDef, useReactTable } from \"@tanstack/react-table\";\nimport type { ITableFilterConfig } from \"../interfaces/filters.interface\";\nimport type {\n DataTableConfig,\n ServerTableState,\n TableHeaderStyle,\n} from \"../interfaces/datatable.interface\";\nimport type { TableQueryParams } from \"../queries/types\";\nimport { useState, useCallback } from \"react\";\nimport { Flex, Title } from \"@mantine/core\";\n\n/** Shape that the query must return for TablePage to work correctly. */\nexport interface PaginatedResponse<TRow> {\n data: TRow[];\n total: number;\n}\n\ninterface TablePageProps<TRow> {\n /**\n * Factory that receives the current pagination/filter params and returns\n * the query options. Called every time the table state changes.\n */\n getQueryOptions: (\n params: TableQueryParams,\n ) => UseQueryOptions<PaginatedResponse<TRow>>;\n /**\n * Title of the table\n */\n title?: string;\n\n /**\n * Columns of the table\n */\n columns: ColumnDef<TRow>[];\n /**\n * Filters of the table\n */\n filters?: ITableFilterConfig[];\n /**\n * Whether the table is loading externally\n */\n isLoadingExternal?: boolean;\n /**\n * Called when a row is clicked\n */\n onRowClick?: (row: TRow) => void;\n /**\n * Called when a row is hovered\n */\n onRowHover?: (row: TRow) => void;\n /**\n * Empty state of the table\n */\n emptyState?: React.ReactNode;\n /**\n * Table instance\n */\n table?: ReturnType<typeof useReactTable<TRow>>;\n /**\n * Whether to enable row selection\n */\n enableRowSelection?: boolean;\n /**\n * Header style: color string (legacy) or { bgColor, textColor, fontWeight?, fontSize?, padding? }\n */\n headerBgColor?: TableHeaderStyle;\n /**\n * Column actions to display per row\n */\n columnActions?: (row: TRow) => React.ReactNode;\n /**\n * List menu actions to display per row\n */\n listMenuActions?: (\n row: TRow,\n ) => { label: string; onClick: () => void; Icon?: React.ElementType }[];\n /**\n * Called when row selection changes\n */\n onSelectionChange?: (selectedRows: TRow[]) => void;\n /**\n * Configuration for the table\n */\n config?: Partial<DataTableConfig>;\n /**\n * Custom Header component\n */\n CustomHeader?: React.ReactNode;\n /**\n * Whether to show the search input\n */\n showSearchInput?: boolean;\n /**\n * Whether to show the bottom pagination\n */\n showBottomPagination?: boolean;\n /**\n * Height of the table\n */\n tableHeight?: number;\n}\n\nexport const TablePage = <TRow,>({\n getQueryOptions,\n title,\n columns,\n filters,\n isLoadingExternal,\n onRowClick,\n onRowHover,\n emptyState,\n table,\n enableRowSelection,\n headerBgColor,\n columnActions,\n listMenuActions,\n onSelectionChange,\n config,\n CustomHeader,\n showSearchInput = true,\n showBottomPagination = true,\n tableHeight = 600,\n}: TablePageProps<TRow>) => {\n const [tableParams, setTableParams] = useState<TableQueryParams>({\n skip: 0,\n limit: 10,\n query: undefined,\n });\n\n const handleStateChange = useCallback((state: ServerTableState) => {\n setTableParams({\n skip: state.pageIndex * state.pageSize,\n limit: state.pageSize,\n query: state.globalFilter || undefined,\n columnFilters:\n state.columnFilters.length > 0 ? state.columnFilters : undefined,\n });\n }, []);\n\n const { data, isLoading } = useQuery(getQueryOptions(tableParams));\n\n return (\n <Flex direction=\"column\" gap=\"sm\">\n {title && <Title order={1}>{title}</Title>}\n <DataTable<TRow>\n showBottomPagination={showBottomPagination}\n tableHeight={tableHeight}\n emptyState={emptyState}\n showSearchInput={showSearchInput}\n table={table}\n onRowClick={(row) => onRowClick?.(row)}\n onRowHover={(row) => onRowHover?.(row)}\n totalRowCount={data?.total}\n data={data?.data ?? []}\n loading={isLoading || isLoadingExternal}\n columns={columns}\n filters={filters}\n onStateChange={handleStateChange}\n enableRowCheck={enableRowSelection}\n headerBgColor={headerBgColor}\n columnActions={columnActions}\n listMenuActions={listMenuActions}\n onSelectionChange={onSelectionChange}\n config={config}\n CustomHeader={CustomHeader}\n />\n </Flex>\n );\n};\n","import { useMutation, type UseMutationOptions } from \"@tanstack/react-query\";\nimport { Button, Card, Container, Flex, Paper, Title } from \"@mantine/core\";\nimport type { ReactNode } from \"react\";\nimport type { IField, IButton } from \"../interfaces/form.interface\";\nimport { FormGenerator, type FormInstance } from \"./form/FormGenerator\";\n\ninterface FormPagePropsBase<TData, TVariables = unknown> {\n fields: IField[];\n buttons: IButton[];\n mutationOptions: UseMutationOptions<TData, Error, TVariables>;\n typeOfForm: \"create\" | \"edit\";\n dataKey: string;\n loading: boolean;\n cardWidth?: number | string;\n onSuccess?: (data: TData) => void;\n setData?: (data: TData) => void;\n navigateAway?: boolean;\n showBackButton?: boolean;\n /**\n * Callback when the user clicks \"Regresar\". Provide your router's go-back logic here.\n * @example React Router: () => navigate(-1)\n * @example TanStack Router: () => router.history.back()\n * @example TanStack Start: () => navigate({ to: '..' })\n */\n onGoBack?: () => void;\n /**\n * Optional icon for the back button. Pass your own icon component so the lib stays router/UI-agnostic.\n * @example <ArrowLeft /> from lucide-react\n */\n backButtonIcon?: ReactNode;\n onFormRef?: (form: FormInstance) => void;\n}\n\ninterface FormPagePropsWithFiles<TData, TVariables = unknown>\n extends FormPagePropsBase<TData, TVariables> {\n hasFiles: true;\n buildVariables?: (values: FormData) => TVariables;\n}\n\ninterface FormPagePropsWithoutFiles<TData, TVariables = unknown>\n extends FormPagePropsBase<TData, TVariables> {\n hasFiles?: false;\n buildVariables?: (values: Record<string, unknown>) => TVariables;\n}\n\ntype FormPageProps<TData, TVariables = unknown> =\n | FormPagePropsWithFiles<TData, TVariables>\n | FormPagePropsWithoutFiles<TData, TVariables>;\n\nexport const FormPage = <TData, TVariables = unknown>({\n fields,\n buttons,\n mutationOptions,\n buildVariables,\n typeOfForm,\n dataKey,\n loading,\n cardWidth,\n hasFiles,\n onSuccess,\n setData,\n navigateAway = true,\n showBackButton = true,\n onGoBack,\n backButtonIcon,\n onFormRef,\n}: FormPageProps<TData, TVariables>): React.ReactNode => {\n const showBack = showBackButton && onGoBack != null;\n\n const mutation = useMutation(mutationOptions);\n\n return (\n <>\n {showBack && (\n <Flex justify={\"start\"}>\n <Button\n leftSection={backButtonIcon}\n variant=\"transparent\"\n mx={20}\n mt={10}\n onClick={onGoBack}\n >\n Regresar a {dataKey}\n </Button>\n </Flex>\n )}\n <Flex justify={\"center\"} align={\"center\"} w={\"100%\"}>\n <Paper w={cardWidth ?? 500} my={-10}>\n <Flex direction={\"column\"}>\n <Title order={1} my={10}>\n {typeOfForm === \"create\" ? \"Crear\" : \"Editar\"} {dataKey}\n </Title>\n <Card withBorder>\n <FormGenerator<TData, TVariables>\n typeOfForm={typeOfForm}\n name={dataKey}\n loading={loading}\n fields={fields}\n buttons={buttons}\n mutation={mutation}\n buildVariables={\n buildVariables as\n | ((\n values: Record<string, unknown> | FormData,\n ) => TVariables)\n | undefined\n }\n hasFiles={hasFiles}\n onSuccess={onSuccess}\n setData={setData}\n navigateAway={navigateAway}\n onFormRef={onFormRef}\n />\n </Card>\n </Flex>\n </Paper>\n </Flex>\n </>\n );\n};\n"]}