erp-pos-ecommerce-shared 0.2.7 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.d.ts +1 -1
- package/dist/components.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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/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","error","jsx","Text","Button","Fragment","useMemo","useState","useEffect","jsxs","Box","Group","Flex","Select","Table","Checkbox","flexRender","ActionIcon","_","Title","ScrollArea","TextInput","Menu","X","ChevronUp","ChevronDown","Paper","Container","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 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 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 {\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 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 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 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 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 \"@mantine/hooks\";\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 = useMediaQuery(\"(max-width: 767px)\");\n const isDesktop = useMediaQuery(\"(min-width: 992px)\");\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\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 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 key={header.id} bg={bgColor}>\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\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 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 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 } from \"@mantine/core\";\nimport type { IFilterSelectOption } from \"../../interfaces/filters.interface\";\nimport { barBorder, barSurface, barTextActive } from \"../../theme/constants\";\nimport { Check, ChevronDown, ChevronUp, ListFilter, X } from \"lucide-react\";\nimport { 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}\n\nexport const FilterSelect = ({\n columnId,\n options,\n onChange,\n placeholder = \"Todos\",\n Icon = ListFilter,\n}: FilterSelectProps) => {\n const [open, setOpen] = useState<boolean>(false);\n const [selectedOption, setSelectedOption] =\n useState<IFilterSelectOption | null>(null);\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={setOpen}\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>\n {options.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 </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 />\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, 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;\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 <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<TData, TVariables>\n typeOfForm={typeOfForm}\n name={dataKey}\n loading={loading}\n fields={fields}\n buttons={buttons}\n mutation={mutation}\n buildVariables={buildVariables as ((values: Record<string, unknown> | FormData) => TVariables) | undefined}\n hasFiles={hasFiles}\n onSuccess={onSuccess}\n setData={setData}\n navigateAway={navigateAway}\n onFormRef={onFormRef}\n />\n </Card>\n </Flex>\n </Container>\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/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","error","jsx","Text","Button","Fragment","useMemo","useState","useEffect","jsxs","Box","Group","Flex","Select","Table","Checkbox","flexRender","ActionIcon","_","Title","ScrollArea","TextInput","Menu","X","ChevronUp","ChevronDown","Paper","Container","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 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 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 {\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 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 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 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 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 \"@mantine/hooks\";\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 = useMediaQuery(\"(max-width: 767px)\");\n const isDesktop = useMediaQuery(\"(min-width: 992px)\");\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\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 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 key={header.id} bg={bgColor}>\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\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 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 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 } from \"@mantine/core\";\nimport type { IFilterSelectOption } from \"../../interfaces/filters.interface\";\nimport { barBorder, barSurface, barTextActive } from \"../../theme/constants\";\nimport { Check, ChevronDown, ChevronUp, ListFilter, X } from \"lucide-react\";\nimport { 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}\n\nexport const FilterSelect = ({\n columnId,\n options,\n onChange,\n placeholder = \"Todos\",\n Icon = ListFilter,\n}: FilterSelectProps) => {\n const [open, setOpen] = useState<boolean>(false);\n const [selectedOption, setSelectedOption] =\n useState<IFilterSelectOption | null>(null);\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={setOpen}\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>\n {options.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 </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 />\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, 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 <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<TData, TVariables>\n typeOfForm={typeOfForm}\n name={dataKey}\n loading={loading}\n fields={fields}\n buttons={buttons}\n mutation={mutation}\n buildVariables={buildVariables as ((values: Record<string, unknown> | FormData) => TVariables) | undefined}\n hasFiles={hasFiles}\n onSuccess={onSuccess}\n setData={setData}\n navigateAway={navigateAway}\n onFormRef={onFormRef}\n />\n </Card>\n </Flex>\n </Container>\n </>\n );\n};\n"]}
|