@refinedev/core 5.0.2 → 5.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/components/pages/error/index.tsx","../src/hooks/auth/usePermissions/index.ts","../src/contexts/auth/index.tsx","../src/definitions/table/index.ts","../src/definitions/helpers/userFriendlySeconds/index.ts","../src/definitions/helpers/importCSVMapper/index.ts","../src/definitions/helpers/handleUseParams/index.tsx","../src/definitions/helpers/hasPermission/index.ts","../src/definitions/helpers/humanizeString/index.ts","../src/contexts/refine/index.tsx","../src/definitions/helpers/handleRefineOptions/index.ts","../src/definitions/helpers/redirectPage/index.ts","../src/definitions/helpers/sequentialPromises/index.ts","../src/definitions/helpers/pick-resource/index.ts","../src/definitions/helpers/pickDataProvider/index.ts","../src/definitions/helpers/handleMultiple/index.ts","../src/definitions/helpers/useInfinitePagination/index.ts","../src/definitions/helpers/router/is-parameter.ts","../src/definitions/helpers/router/split-to-segments.ts","../src/definitions/helpers/router/is-segment-counts-same.ts","../src/definitions/helpers/router/remove-leading-trailing-slashes.ts","../src/definitions/helpers/router/check-by-segments.ts","../src/definitions/helpers/router/get-action-routes-from-resource.ts","../src/definitions/helpers/router/pick-matched-route.ts","../src/definitions/helpers/router/match-resource-from-route.ts","../src/definitions/helpers/router/get-parent-resource.ts","../src/definitions/helpers/router/pick-route-params.ts","../src/definitions/helpers/router/prepare-route-params.ts","../src/definitions/helpers/router/compose-route.ts","../src/definitions/helpers/useActiveAuthProvider/index.ts","../src/definitions/helpers/handlePaginationParams/index.ts","../src/definitions/helpers/useMediaQuery/index.ts","../src/definitions/helpers/safe-translate/index.ts","../src/hooks/refine/useMutationMode.ts","../src/hooks/refine/useWarnAboutChange/index.ts","../src/contexts/unsavedWarn/index.tsx","../src/hooks/refine/useSyncWithLocation.ts","../src/hooks/refine/useRefineContext.ts","../src/definitions/helpers/useUserFriendlyName/index.ts","../src/definitions/helpers/generateDocumentTitle/index.ts","../src/definitions/helpers/keys/index.ts","../src/definitions/helpers/flatten-object-keys/index.ts","../src/definitions/helpers/property-path-to-array/index.ts","../src/definitions/helpers/downloadInBrowser/index.ts","../src/definitions/helpers/defer-execution/index.ts","../src/definitions/helpers/async-debounce/index.ts","../src/definitions/helpers/prepare-query-context/index.ts","../src/definitions/upload/file2Base64/index.ts","../src/hooks/useKeys/index.tsx","../src/hooks/auth/useGetIdentity/index.ts","../src/hooks/auth/useLogout/index.ts","../src/hooks/auth/useInvalidateAuthStore/index.ts","../src/hooks/auth/useLogin/index.ts","../src/hooks/auth/useRegister/index.ts","../src/hooks/auth/useForgotPassword/index.ts","../src/hooks/auth/useUpdatePassword/index.ts","../src/hooks/auth/useIsAuthenticated/index.ts","../src/hooks/auth/useOnError/index.ts","../src/hooks/auth/useIsExistAuthentication/index.ts","../src/hooks/data/useList.ts","../src/hooks/useLoadingOvertime/index.ts","../src/hooks/data/useOne.ts","../src/hooks/data/useMany.ts","../src/hooks/data/useUpdate.ts","../src/contexts/undoableQueue/types.ts","../src/hooks/data/useCreate.ts","../src/hooks/data/useDelete.ts","../src/hooks/data/useCreateMany.ts","../src/hooks/data/useUpdateMany.ts","../src/hooks/data/useDeleteMany.ts","../src/hooks/data/useApiUrl.ts","../src/hooks/data/useCustom.ts","../src/hooks/data/useCustomMutation.ts","../src/hooks/data/useDataProvider.tsx","../src/contexts/data/index.tsx","../src/hooks/data/useInfiniteList.ts","../src/hooks/live/useResourceSubscription/index.ts","../src/contexts/live/index.tsx","../src/hooks/invalidate/index.tsx","../src/hooks/live/useLiveMode/index.ts","../src/hooks/live/useSubscription/index.ts","../src/hooks/live/usePublish/index.ts","../src/hooks/notification/useCancelNotification/index.tsx","../src/contexts/undoableQueue/index.tsx","../src/hooks/notification/useNotification/index.ts","../src/contexts/notification/index.tsx","../src/hooks/notification/useHandleNotification/index.ts","../src/hooks/i18n/useSetLocale.ts","../src/contexts/i18n/index.tsx","../src/hooks/i18n/useTranslate.ts","../src/hooks/i18n/useGetLocale.ts","../src/hooks/i18n/useTranslation.tsx","../src/hooks/export/index.ts","../src/hooks/form/index.ts","../src/hooks/redirection/index.ts","../src/hooks/router/use-go/index.tsx","../src/contexts/router/index.tsx","../src/hooks/use-resource-params/index.ts","../src/contexts/resource/index.tsx","../src/hooks/deepMemo/index.tsx","../src/hooks/memoized/index.tsx","../src/hooks/router/use-parsed/index.tsx","../src/hooks/router/use-parse/index.tsx","../src/hooks/use-resource-params/use-id/index.tsx","../src/hooks/use-resource-params/use-action/index.tsx","../src/hooks/use-resource-params/use-resource/index.ts","../src/hooks/router/use-get-to-path/index.ts","../src/hooks/navigation/index.ts","../src/hooks/show/index.ts","../src/hooks/import/index.tsx","../src/hooks/modal/useModal/index.tsx","../src/hooks/router/use-back/index.tsx","../src/hooks/router/use-to-path/index.ts","../src/components/link/index.tsx","../src/hooks/router/use-link/index.tsx","../src/hooks/accessControl/useCan/index.ts","../src/contexts/accessControl/index.tsx","../src/definitions/helpers/sanitize-resource/index.ts","../src/hooks/accessControl/useCanWithoutCache.ts","../src/hooks/useSelect/index.ts","../src/hooks/useTable/index.ts","../src/hooks/auditLog/useLog/index.ts","../src/contexts/auditLog/index.tsx","../src/hooks/auditLog/useLogList/index.ts","../src/hooks/breadcrumb/index.ts","../src/hooks/menu/useMenu.tsx","../src/definitions/helpers/menu/create-resource-key.ts","../src/definitions/helpers/menu/create-tree.ts","../src/contexts/metaContext/index.tsx","../src/hooks/useMeta/index.ts","../src/hooks/use-refine-options/index.tsx","../src/hooks/button/actionable-button/index.tsx","../src/hooks/button/navigation-button/index.tsx","../src/hooks/button/button-can-access/index.tsx","../src/hooks/button/delete-button/index.tsx","../src/hooks/button/refresh-button/index.tsx","../src/hooks/button/index.tsx","../src/components/pages/auth/index.tsx","../src/components/pages/auth/components/login/index.tsx","../src/components/pages/auth/components/register/index.tsx","../src/components/pages/auth/components/forgotPassword/index.tsx","../src/components/pages/auth/components/updatePassword/index.tsx","../src/components/pages/welcome/index.tsx","../src/components/pages/config-success/index.tsx","../src/components/pages/config-error/index.tsx","../src/components/containers/refine/index.tsx","../src/components/telemetry/index.tsx","../src/hooks/useTelemetryData/index.ts","../src/definitions/helpers/check-router-prop-misuse/index.ts","../src/hooks/router/use-router-misuse-warning/index.ts","../src/components/undoableQueue/index.tsx","../src/components/authenticated/index.tsx","../src/components/routeChangeHandler/index.tsx","../src/components/canAccess/index.tsx","../src/components/gh-banner/index.tsx","../src/components/gh-banner/styles.ts","../src/components/autoSaveIndicator/index.tsx"],"sourcesContent":["export * from \"./components/index.js\";\nexport * from \"./hooks/index.js\";\n\n// all auth types\nexport * from \"./components/pages/auth/types.js\";\n\nexport {\n getDefaultFilter,\n getDefaultSortOrder,\n parseTableParams,\n parseTableParamsFromQuery,\n setInitialFilters,\n setInitialSorters,\n stringifyTableParams,\n unionFilters,\n unionSorters,\n} from \"./definitions/table/index.js\";\nexport {\n handleUseParams,\n importCSVMapper,\n getNextPageParam,\n getPreviousPageParam,\n matchResourceFromRoute,\n useActiveAuthProvider,\n useUserFriendlyName,\n pickDataProvider,\n keys,\n KeyBuilder,\n flattenObjectKeys,\n propertyPathToArray,\n} from \"./definitions/helpers/index.js\";\nexport { file2Base64 } from \"./definitions/upload/index.js\";\nexport { generateDefaultDocumentTitle } from \"./definitions/index.js\";\n\nexport { ResourceContext } from \"./contexts/resource/index.js\";\n\nexport { AccessControlContext } from \"./contexts/accessControl/index.js\";\n\nexport {\n AccessControlProvider,\n AccessControlProvider as AccessControlBindings,\n CanParams,\n CanResponse,\n CanReturnType,\n IAccessControlContext,\n IAccessControlContextReturnType,\n} from \"./contexts/accessControl/types.js\";\n\nexport {\n AuditLogProvider,\n IAuditLogContext,\n ILog,\n ILogData,\n LogParams,\n} from \"./contexts/auditLog/types.js\";\n\nexport {\n AuthActionResponse,\n AuthProvider,\n CheckResponse,\n IAuthContext,\n IdentityResponse,\n OnErrorResponse,\n PermissionResponse,\n SuccessNotificationResponse,\n} from \"./contexts/auth/types.js\";\n\nexport {\n ConditionalFilter,\n CreateManyResponse,\n CreateResponse,\n CrudFilter,\n CrudFilters,\n CrudOperators,\n CrudSort,\n CrudSorting,\n CustomResponse,\n DataBindings,\n DeleteManyResponse,\n DeleteOneResponse,\n GetListResponse,\n GetManyResponse,\n GetOneResponse,\n LogicalFilter,\n Pagination,\n SortOrder,\n UpdateManyResponse,\n UpdateResponse,\n GetListParams,\n GetManyParams,\n GetOneParams,\n CreateParams,\n CreateManyParams,\n UpdateParams,\n UpdateManyParams,\n DeleteOneParams,\n DeleteManyParams,\n CustomParams,\n DataProvider,\n BaseKey,\n BaseRecord,\n HttpError,\n MetaQuery,\n MutationMode,\n BaseOption,\n IQueryKeys,\n Prettify,\n Context,\n ContextQuery,\n DataProviders,\n IDataContext,\n GraphQLQueryOptions,\n Fields,\n NestedField,\n PrevContext,\n PreviousQuery,\n QueryBuilderOptions,\n QueryResponse,\n RefineError,\n ValidationErrors,\n VariableOptions,\n} from \"./contexts/data/types.js\";\n\nexport {\n I18nContext,\n I18nContext as TranslationContext,\n} from \"./contexts/i18n/index.js\";\n\nexport {\n I18nProvider,\n I18nProvider as TranslationProvider,\n I18nProvider as i18nBindings,\n II18nContext as ITranslationContext,\n} from \"./contexts/i18n/types.js\";\n\nexport {\n ILiveContext,\n ILiveModeContextProvider,\n LiveEvent,\n LiveCommonParams,\n LiveManyParams,\n LiveModeProps,\n LiveOneParams,\n LiveProvider,\n LiveListParams,\n} from \"./contexts/live/types.js\";\n\nexport {\n INotificationContext,\n NotificationProvider,\n NotificationProvider as NotificationsBindings,\n OpenNotificationParams,\n SuccessErrorNotification,\n} from \"./contexts/notification/types.js\";\n\nexport {\n IRefineContext,\n IRefineContextOptions,\n IRefineContextProvider,\n IRefineOptions,\n LayoutProps,\n RefineProps,\n TextTransformers,\n TitleProps,\n} from \"./contexts/refine/types.js\";\n\nexport {\n ResourceProps,\n IResourceComponents,\n IResourceComponentsProps,\n IResourceContext,\n IResourceItem,\n ResourceAuditLogPermissions,\n ResourceBindings,\n RouteableProperties,\n ResourceRoutePath,\n} from \"./contexts/resource/types.js\";\n\nexport {\n Action,\n BackFunction,\n GoConfig,\n GoFunction,\n ParseResponse,\n ParsedParams,\n ParseFunction,\n RouterProvider,\n} from \"./contexts/router/types.js\";\n\nexport {\n ActionTypes,\n IUndoableQueue,\n IUndoableQueueContext,\n} from \"./contexts/undoableQueue/types.js\";\n\nexport { IUnsavedWarnContext } from \"./contexts/unsavedWarn/types.js\";\n\nexport {\n MetaContextProvider,\n useMetaContext,\n} from \"./contexts/metaContext/index.js\";\n\nexport { TreeMenuItem, UseMenuProps } from \"./hooks/menu/useMenu.js\";\n","import React, { useEffect, useState } from \"react\";\n\nimport { useTranslate, useGo, useResourceParams } from \"@hooks\";\n\n/**\n * When the app is navigated to a non-existent route, refine shows a default error page.\n * A custom error component can be used for this error page.\n *\n * @see {@link https://refine.dev/docs/packages/documentation/routers/} for more details.\n */\nexport const ErrorComponent: React.FC = () => {\n const [errorMessage, setErrorMessage] = useState<string>();\n const translate = useTranslate();\n const go = useGo();\n\n const { action, resource } = useResourceParams();\n\n useEffect(() => {\n if (resource && action) {\n setErrorMessage(\n translate(\n \"pages.error.info\",\n {\n action: action,\n resource: resource.name,\n },\n `You may have forgotten to add the \"${action}\" component to \"${resource.name}\" resource.`,\n ),\n );\n }\n }, [resource, action]);\n\n return (\n <>\n <h1>\n {translate(\n \"pages.error.404\",\n undefined,\n \"Sorry, the page you visited does not exist.\",\n )}\n </h1>\n {errorMessage && <p>{errorMessage}</p>}\n <button\n onClick={() => {\n go({ to: \"/\" });\n }}\n >\n {translate(\"pages.error.backHome\", undefined, \"Back Home\")}\n </button>\n </>\n );\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseQueryOptions,\n type UseQueryResult,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useKeys } from \"@hooks/useKeys\";\nimport type { PermissionResponse } from \"../../../contexts/auth/types\";\n\nexport type UsePermissionsProps<\n TData = PermissionResponse,\n TParams extends Record<string, any> = Record<string, any>,\n> = {\n options?: UseQueryOptions<TData>;\n params?: TParams;\n};\nexport type UsePermissionsReturnType<TData = PermissionResponse> =\n UseQueryResult<TData, unknown>;\n\n/**\n * `usePermissions` calls `getPermissions` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/usePermissions} for more details.\n *\n * @typeParam TData - Result data of the query\n *\n */\nexport function usePermissions<\n TData = any,\n TParams extends Record<string, any> = Record<string, any>,\n>({\n options,\n params,\n}: UsePermissionsProps<TData, TParams>): UsePermissionsReturnType<TData> {\n const { getPermissions } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const queryResponse = useQuery<TData>({\n queryKey: keys().auth().action(\"permissions\").get(),\n queryFn: (getPermissions\n ? () => getPermissions(params)\n : () => Promise.resolve(undefined)) as (\n params?: unknown,\n ) => Promise<TData>,\n enabled: !!getPermissions,\n ...options,\n meta: {\n ...options?.meta,\n ...getXRay(\"usePermissions\"),\n },\n });\n\n return queryResponse;\n}\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type { IAuthContext } from \"./types\";\n\nexport const AuthProviderContext = React.createContext<Partial<IAuthContext>>(\n {},\n);\n\nexport const AuthProviderContextProvider: React.FC<\n PropsWithChildren<IAuthContext>\n> = ({ children, isProvided, ...authProvider }) => {\n const handleLogin = async (params: unknown) => {\n try {\n const result = await authProvider.login?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in login: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleRegister = async (params: unknown) => {\n try {\n const result = await authProvider.register?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in register: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleLogout = async (params: unknown) => {\n try {\n const result = await authProvider.logout?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in logout: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleCheck = async (params: unknown) => {\n try {\n const result = await authProvider.check?.(params);\n\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in check: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleForgotPassword = async (params: unknown) => {\n try {\n const result = await authProvider.forgotPassword?.(params);\n\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in forgotPassword: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleUpdatePassword = async (params: unknown) => {\n try {\n const result = await authProvider.updatePassword?.(params);\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in updatePassword: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n return (\n <AuthProviderContext.Provider\n value={{\n ...authProvider,\n login: handleLogin as IAuthContext[\"login\"],\n logout: handleLogout as IAuthContext[\"logout\"],\n check: handleCheck as IAuthContext[\"check\"],\n register: handleRegister as IAuthContext[\"register\"],\n forgotPassword: handleForgotPassword as IAuthContext[\"forgotPassword\"],\n updatePassword: handleUpdatePassword as IAuthContext[\"updatePassword\"],\n isProvided,\n }}\n >\n {children}\n </AuthProviderContext.Provider>\n );\n};\n\nexport const useAuthProviderContext = () => {\n const context = React.useContext(AuthProviderContext);\n\n return context;\n};\n","import differenceWith from \"lodash/differenceWith\";\nimport unionWith from \"lodash/unionWith\";\nimport qs, { type IStringifyOptions } from \"qs\";\nimport warnOnce from \"warn-once\";\n\nimport type {\n CrudFilter,\n CrudOperators,\n CrudSort,\n SortOrder,\n} from \"../../contexts/data/types\";\n\nexport const parseTableParams = (url: string) => {\n const { currentPage, pageSize, sorters, sorter, filters } = qs.parse(\n url.substring(1), // remove first ? character\n );\n\n return {\n parsedCurrentPage: currentPage && Number(currentPage),\n parsedPageSize: pageSize && Number(pageSize),\n parsedSorter: (sorters as CrudSort[]) || (sorter as CrudSort[]) || [],\n parsedFilters: (filters as CrudFilter[]) ?? [],\n };\n};\n\nexport const parseTableParamsFromQuery = (params: any) => {\n const { currentPage, pageSize, sorters, sorter, filters } = params;\n\n return {\n parsedCurrentPage: currentPage && Number(currentPage),\n parsedPageSize: pageSize && Number(pageSize),\n parsedSorter: (sorters as CrudSort[]) || (sorter as CrudSort[]) || [],\n parsedFilters: (filters as CrudFilter[]) ?? [],\n };\n};\n\n/**\n * @internal This function is used to stringify table params from the useTable hook.\n */\nexport const stringifyTableParams = (params: {\n pagination?: { currentPage?: number; pageSize?: number };\n sorters: CrudSort[];\n sorter?: CrudSort[];\n filters: CrudFilter[];\n [key: string]: any;\n}): string => {\n const options: IStringifyOptions = {\n skipNulls: true,\n arrayFormat: \"indices\",\n encode: false,\n };\n const { pagination, sorters, sorter, filters, ...rest } = params;\n\n // Prioritize sorters over sorter\n const finalSorters = sorters && sorters.length > 0 ? sorters : sorter;\n\n const queryString = qs.stringify(\n {\n ...rest,\n ...(pagination ? pagination : {}),\n sorters: finalSorters,\n filters,\n },\n options,\n );\n\n return queryString;\n};\n\nexport const compareFilters = (\n left: CrudFilter,\n right: CrudFilter,\n): boolean => {\n if (\n left.operator !== \"and\" &&\n left.operator !== \"or\" &&\n right.operator !== \"and\" &&\n right.operator !== \"or\"\n ) {\n return (\n (\"field\" in left ? left.field : undefined) ===\n (\"field\" in right ? right.field : undefined) &&\n left.operator === right.operator\n );\n }\n\n return (\n (\"key\" in left ? left.key : undefined) ===\n (\"key\" in right ? right.key : undefined) &&\n left.operator === right.operator\n );\n};\n\nexport const compareSorters = (left: CrudSort, right: CrudSort): boolean =>\n left.field === right.field;\n// Keep only one CrudFilter per type according to compareFilters\n// Items in the array that is passed first to unionWith have higher priority\n// CrudFilter items with undefined values are necessary to signify no filter\n// After union, don't keep CrudFilter items with undefined value in the result\n// Items in the arrays with higher priority are put at the end.\nexport const unionFilters = (\n permanentFilter: CrudFilter[],\n newFilters: CrudFilter[],\n prevFilters: CrudFilter[] = [],\n): CrudFilter[] => {\n const isKeyRequired = newFilters.filter(\n (f) => (f.operator === \"or\" || f.operator === \"and\") && !f.key,\n );\n\n if (isKeyRequired.length > 1) {\n warnOnce(\n true,\n \"[conditionalFilters]: You have created multiple Conditional Filters at the top level, this requires the key parameter. \\nFor more information, see https://refine.dev/docs/advanced-tutorials/data-provider/handling-filters/#top-level-multiple-conditional-filters-usage\",\n );\n }\n\n return unionWith(\n permanentFilter,\n newFilters,\n prevFilters,\n compareFilters,\n ).filter(\n (crudFilter) =>\n crudFilter.value !== undefined &&\n crudFilter.value !== null &&\n (crudFilter.operator !== \"or\" ||\n (crudFilter.operator === \"or\" && crudFilter.value.length !== 0)) &&\n (crudFilter.operator !== \"and\" ||\n (crudFilter.operator === \"and\" && crudFilter.value.length !== 0)),\n );\n};\n\nexport const unionSorters = (\n permanentSorter: CrudSort[],\n newSorters: CrudSort[],\n): CrudSort[] =>\n unionWith(permanentSorter, newSorters, compareSorters).filter(\n (crudSorter) => crudSorter.order !== undefined && crudSorter.order !== null,\n );\n// Prioritize filters in the permanentFilter and put it at the end of result array\nexport const setInitialFilters = (\n permanentFilter: CrudFilter[],\n defaultFilter: CrudFilter[],\n): CrudFilter[] => [\n ...differenceWith(defaultFilter, permanentFilter, compareFilters),\n ...permanentFilter,\n];\n\nexport const setInitialSorters = (\n permanentSorter: CrudSort[],\n defaultSorter: CrudSort[],\n): CrudSort[] => [\n ...differenceWith(defaultSorter, permanentSorter, compareSorters),\n ...permanentSorter,\n];\n\nexport const getDefaultSortOrder = (\n columnName: string,\n sorter?: CrudSort[],\n): SortOrder | undefined => {\n if (!sorter) {\n return undefined;\n }\n\n const sortItem = sorter.find((item) => item.field === columnName);\n\n if (sortItem) {\n return sortItem.order as SortOrder;\n }\n\n return undefined;\n};\n\nexport const getDefaultFilter = (\n columnName: string,\n filters?: CrudFilter[],\n operatorType: CrudOperators = \"eq\",\n): CrudFilter[\"value\"] | undefined => {\n const filter = filters?.find((filter) => {\n if (\n filter.operator !== \"or\" &&\n filter.operator !== \"and\" &&\n \"field\" in filter\n ) {\n const { operator, field } = filter;\n return field === columnName && operator === operatorType;\n }\n return undefined;\n });\n\n if (filter) {\n return filter.value || [];\n }\n\n return undefined;\n};\n","export const userFriendlySecond = (miliseconds: number): number => {\n return miliseconds / 1000; //convert to seconds\n};\n","import fromPairs from \"lodash/fromPairs\";\nimport zip from \"lodash/zip\";\n\nimport type { MapDataFn } from \"../../../hooks/export/types\";\n\nexport const importCSVMapper = <TItem = any, TVariables = any>(\n data: any[][],\n mapData: MapDataFn<TItem, TVariables> = (item) => item as any,\n): TVariables[] => {\n const [headers, ...body] = data;\n return body\n .map((entry) => fromPairs(zip(headers, entry)))\n .map((item: any, index, array: any) =>\n mapData.call(undefined, item, index, array),\n );\n};\n","export const handleUseParams = (params: any = {}): any => {\n if (params?.id) {\n return {\n ...params,\n id: decodeURIComponent(params.id),\n };\n }\n return params;\n};\n","export const hasPermission = (\n permissions: string[] | undefined,\n action: string | undefined,\n): boolean => {\n if (!permissions || !action) {\n return false;\n }\n return !!permissions.find((i) => i === action);\n};\n","export const humanizeString = (text: string): string => {\n text = text.replace(/([a-z]{1})([A-Z]{1})/g, \"$1-$2\");\n text = text.replace(/([A-Z]{1})([A-Z]{1})([a-z]{1})/g, \"$1-$2$3\");\n\n text = text\n .toLowerCase()\n .replace(/[_-]+/g, \" \")\n .replace(/\\s{2,}/g, \" \")\n .trim();\n text = text.charAt(0).toUpperCase() + text.slice(1);\n\n return text;\n};\n// https://www.npmjs.com/package/humanize-string\n","import React from \"react\";\n\nimport pluralize from \"pluralize\";\n\nimport { humanizeString } from \"../../definitions/helpers/humanizeString\";\nimport type {\n IRefineContext,\n IRefineContextOptions,\n IRefineContextProvider,\n} from \"./types\";\n\nconst defaultTitle: IRefineContextOptions[\"title\"] = {\n icon: (\n <svg\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-testid=\"refine-logo\"\n id=\"refine-default-logo\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.7889 0.422291C12.6627 -0.140764 11.3373 -0.140764 10.2111 0.422291L2.21115 4.42229C0.85601 5.09986 0 6.48491 0 8V16C0 17.5151 0.85601 18.9001 2.21115 19.5777L10.2111 23.5777C11.3373 24.1408 12.6627 24.1408 13.7889 23.5777L21.7889 19.5777C23.144 18.9001 24 17.5151 24 16V8C24 6.48491 23.144 5.09986 21.7889 4.42229L13.7889 0.422291ZM8 8C8 5.79086 9.79086 4 12 4C14.2091 4 16 5.79086 16 8V16C16 18.2091 14.2091 20 12 20C9.79086 20 8 18.2091 8 16V8Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M14 8C14 9.10457 13.1046 10 12 10C10.8954 10 10 9.10457 10 8C10 6.89543 10.8954 6 12 6C13.1046 6 14 6.89543 14 8Z\"\n fill=\"currentColor\"\n />\n </svg>\n ),\n text: \"Refine Project\",\n};\n\nexport const defaultRefineOptions: IRefineContextOptions = {\n mutationMode: \"pessimistic\",\n syncWithLocation: false,\n undoableTimeout: 5000,\n warnWhenUnsavedChanges: false,\n liveMode: \"off\",\n redirect: {\n afterCreate: \"list\",\n afterClone: \"list\",\n afterEdit: \"list\",\n },\n overtime: {\n enabled: true,\n interval: 1000,\n },\n textTransformers: {\n humanize: humanizeString,\n plural: pluralize.plural,\n singular: pluralize.singular,\n },\n disableServerSideValidation: false,\n title: defaultTitle,\n};\n\nexport const RefineContext = React.createContext<IRefineContext>({\n mutationMode: \"pessimistic\",\n warnWhenUnsavedChanges: false,\n syncWithLocation: false,\n undoableTimeout: 5000,\n liveMode: \"off\",\n onLiveEvent: undefined,\n options: defaultRefineOptions,\n});\n\nexport const RefineContextProvider: React.FC<IRefineContextProvider> = ({\n mutationMode,\n warnWhenUnsavedChanges,\n syncWithLocation,\n undoableTimeout,\n children,\n liveMode = \"off\",\n onLiveEvent,\n options,\n}) => {\n return (\n <RefineContext.Provider\n value={{\n __initialized: true,\n mutationMode,\n warnWhenUnsavedChanges,\n syncWithLocation,\n undoableTimeout,\n liveMode,\n onLiveEvent,\n options,\n }}\n >\n {children}\n </RefineContext.Provider>\n );\n};\n","import type { QueryClient, QueryClientConfig } from \"@tanstack/react-query\";\n\nimport { defaultRefineOptions } from \"@contexts/refine\";\n\nimport type { MutationMode } from \"../../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../../contexts/live/types\";\nimport type {\n IRefineContextOptions,\n IRefineOptions,\n} from \"../../../contexts/refine/types\";\n\ntype HandleRefineOptionsProps = {\n options?: IRefineOptions;\n mutationMode?: MutationMode;\n syncWithLocation?: boolean;\n warnWhenUnsavedChanges?: boolean;\n undoableTimeout?: number;\n liveMode?: LiveModeProps[\"liveMode\"];\n disableTelemetry?: boolean;\n reactQueryClientConfig?: QueryClientConfig;\n reactQueryDevtoolConfig?: any | false;\n};\n\ntype HandleRefineOptionsReturnValues = {\n optionsWithDefaults: IRefineContextOptions;\n disableTelemetryWithDefault: boolean;\n reactQueryWithDefaults: {\n clientConfig: QueryClientConfig | InstanceType<typeof QueryClient>;\n };\n};\n\nexport const handleRefineOptions = ({\n options,\n disableTelemetry,\n liveMode,\n mutationMode,\n reactQueryClientConfig,\n reactQueryDevtoolConfig,\n syncWithLocation,\n undoableTimeout,\n warnWhenUnsavedChanges,\n}: HandleRefineOptionsProps = {}): HandleRefineOptionsReturnValues => {\n const optionsWithDefaults: IRefineContextOptions = {\n breadcrumb: options?.breadcrumb,\n mutationMode:\n options?.mutationMode ??\n mutationMode ??\n defaultRefineOptions.mutationMode,\n undoableTimeout:\n options?.undoableTimeout ??\n undoableTimeout ??\n defaultRefineOptions.undoableTimeout,\n syncWithLocation:\n options?.syncWithLocation ??\n syncWithLocation ??\n defaultRefineOptions.syncWithLocation,\n warnWhenUnsavedChanges:\n options?.warnWhenUnsavedChanges ??\n warnWhenUnsavedChanges ??\n defaultRefineOptions.warnWhenUnsavedChanges,\n liveMode: options?.liveMode ?? liveMode ?? defaultRefineOptions.liveMode,\n redirect: {\n afterCreate:\n options?.redirect?.afterCreate ??\n defaultRefineOptions.redirect.afterCreate,\n afterClone:\n options?.redirect?.afterClone ??\n defaultRefineOptions.redirect.afterClone,\n afterEdit:\n options?.redirect?.afterEdit ?? defaultRefineOptions.redirect.afterEdit,\n },\n overtime: options?.overtime ?? defaultRefineOptions.overtime,\n textTransformers: {\n humanize:\n options?.textTransformers?.humanize ??\n defaultRefineOptions.textTransformers.humanize,\n plural:\n options?.textTransformers?.plural ??\n defaultRefineOptions.textTransformers.plural,\n singular:\n options?.textTransformers?.singular ??\n defaultRefineOptions.textTransformers.singular,\n },\n disableServerSideValidation:\n options?.disableServerSideValidation ??\n defaultRefineOptions.disableServerSideValidation,\n projectId: options?.projectId,\n title: {\n icon:\n typeof options?.title?.icon === \"undefined\"\n ? defaultRefineOptions.title.icon\n : options?.title?.icon,\n text:\n typeof options?.title?.text === \"undefined\"\n ? defaultRefineOptions.title.text\n : options?.title?.text,\n },\n };\n\n const disableTelemetryWithDefault =\n options?.disableTelemetry ?? disableTelemetry ?? false;\n\n const reactQueryWithDefaults = {\n clientConfig:\n options?.reactQuery?.clientConfig ?? reactQueryClientConfig ?? {},\n devtoolConfig: reactQueryDevtoolConfig ?? {},\n };\n\n return {\n optionsWithDefaults,\n disableTelemetryWithDefault,\n reactQueryWithDefaults,\n };\n};\n","import type { IRefineContextOptions } from \"../../../contexts/refine/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport type { RedirectAction } from \"../../../hooks/form/types\";\n\ntype RedirectPageProps = {\n redirectFromProps?: RedirectAction;\n action: Action;\n redirectOptions: IRefineContextOptions[\"redirect\"];\n};\n\nexport const redirectPage = ({\n redirectFromProps,\n action,\n redirectOptions,\n}: RedirectPageProps): RedirectAction => {\n if (redirectFromProps || redirectFromProps === false) {\n return redirectFromProps;\n }\n\n switch (action) {\n case \"clone\":\n return redirectOptions.afterClone;\n case \"create\":\n return redirectOptions.afterCreate;\n case \"edit\":\n return redirectOptions.afterEdit;\n default:\n return false;\n }\n};\n","type EachResolve<TResolve, Response> = (\n result: TResolve,\n index: number,\n) => Response;\ntype EachReject<TReject, Response> = (\n error: TReject,\n index: number,\n) => Response;\n\nexport const sequentialPromises = async <\n TResolve = unknown,\n TReject = unknown,\n TResolveResponse = unknown,\n TRejectResponse = unknown,\n>(\n promises: (() => Promise<TResolve>)[],\n onEachResolve: EachResolve<TResolve, TResolveResponse>,\n onEachReject: EachReject<TReject, TRejectResponse>,\n): Promise<(TResolveResponse | TRejectResponse)[]> => {\n const results = [];\n // @ts-expect-error Remove this when we enable `downLevelIterations`\n for (const [index, promise] of promises.entries()) {\n try {\n const result = await promise();\n\n results.push(onEachResolve(result, index));\n } catch (error) {\n results.push(onEachReject(error as TReject, index));\n }\n }\n return results;\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\n\n/**\n * Picks the resource based on the provided identifier.\n * It will first try to match based on the identifier, then the name.\n * Identifier fallbacks to `name` if `identifier` is not explicitly provided to the resource.\n */\nexport const pickResource = (\n identifier?: string,\n resources: IResourceItem[] = [],\n): IResourceItem | undefined => {\n if (!identifier) {\n return undefined;\n }\n\n let resource = resources.find((r) => r.identifier === identifier);\n if (!resource) {\n resource = resources.find((r) => r.name === identifier);\n }\n\n return resource;\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport { pickResource } from \"../pick-resource\";\n\n/**\n * Picks the data provider name based on the provided name or fallbacks to resource definition, or `default`.\n */\nexport const pickDataProvider = (\n resourceName?: string,\n dataProviderName?: string,\n resources?: IResourceItem[],\n) => {\n if (dataProviderName) {\n return dataProviderName;\n }\n\n /**\n * In this helper, we don't do `route` based matching therefore there's no need to check for `legacy` behaviors.\n */\n const resource = pickResource(resourceName, resources);\n\n const meta = resource?.meta;\n\n if (meta?.dataProviderName) {\n return meta.dataProviderName;\n }\n\n return \"default\";\n};\n","export const handleMultiple = async <TData = unknown>(\n promises: Promise<{ data: TData }>[],\n): Promise<{ data: TData[] }> => {\n return {\n data: (await Promise.all(promises)).map((res) => res.data),\n };\n};\n","import type { GetListResponse } from \"../../../contexts/data/types\";\n\nexport const getNextPageParam = (lastPage: GetListResponse) => {\n const { pagination, cursor } = lastPage;\n\n // cursor pagination\n if (cursor?.next) {\n return cursor.next;\n }\n\n const current = pagination?.currentPage || 1;\n\n const pageSize = pagination?.pageSize || 10;\n const totalPages = Math.ceil((lastPage.total || 0) / pageSize);\n\n return current < totalPages ? Number(current) + 1 : undefined;\n};\n\nexport const getPreviousPageParam = (lastPage: GetListResponse) => {\n const { pagination, cursor } = lastPage;\n\n // cursor pagination\n if (cursor?.prev) {\n return cursor.prev;\n }\n\n const current = pagination?.currentPage || 1;\n\n return current === 1 ? undefined : current - 1;\n};\n","/**\n * Check if a segment is a parameter. (e.g. :id)\n */\nexport const isParameter = (segment: string) => {\n return segment.startsWith(\":\");\n};\n","/**\n * Split a path to segments.\n */\nexport const splitToSegments = (path: string) => {\n const segments = path.split(\"/\").filter((segment) => segment !== \"\");\n return segments;\n};\n","import { splitToSegments } from \"./split-to-segments\";\n\n/**\n * Checks if the both routes have the same number of segments.\n */\nexport const isSegmentCountsSame = (route: string, resourceRoute: string) => {\n const routeSegments = splitToSegments(route);\n const resourceRouteSegments = splitToSegments(resourceRoute);\n\n return routeSegments.length === resourceRouteSegments.length;\n};\n","/**\n * Remove leading and trailing slashes from a route.\n */\nexport const removeLeadingTrailingSlashes = (route: string) => {\n return route.replace(/^\\/|\\/$/g, \"\");\n};\n","import { isParameter } from \"./is-parameter\";\nimport { isSegmentCountsSame } from \"./is-segment-counts-same\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { splitToSegments } from \"./split-to-segments\";\n\n/**\n * This function if the route and resourceRoute match by segments.\n * - First, trailing and leading slashes are removed\n * - Then, the route and resourceRoute are split to segments and checked if they have the same number of segments\n * - Then, each segment is checked if it is a parameter or if it matches the resourceRoute segment\n * - If all segments match, the function returns true, otherwise false\n */\nexport const checkBySegments = (route: string, resourceRoute: string) => {\n const stdRoute = removeLeadingTrailingSlashes(route);\n const stdResourceRoute = removeLeadingTrailingSlashes(resourceRoute);\n // we need to check if the route and resourceRoute have the same number of segments\n // if not, we can't match them\n if (!isSegmentCountsSame(stdRoute, stdResourceRoute)) {\n return false;\n }\n\n const routeSegments = splitToSegments(stdRoute);\n const resourceRouteSegments = splitToSegments(stdResourceRoute);\n\n return resourceRouteSegments.every((segment, index) => {\n return isParameter(segment) || segment === routeSegments[index];\n });\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type { Action } from \"../../../contexts/router/types\";\n\nexport type ResourceActionRoute = {\n action: Action;\n resource: IResourceItem;\n route: string;\n};\n\n/**\n * This function returns all the routes for available actions for a resource.\n * - It will return an array of objects with the action, the resource and the route\n */\nexport const getActionRoutesFromResource = (\n resource: IResourceItem,\n resources: IResourceItem[],\n) => {\n const actions: ResourceActionRoute[] = [];\n\n const actionList: Action[] = [\"list\", \"show\", \"edit\", \"create\", \"clone\"];\n\n actionList.forEach((action) => {\n const route: string | undefined = resource[action];\n\n if (route) {\n actions.push({\n action,\n resource,\n route: `/${route.replace(/^\\//, \"\")}`,\n });\n }\n });\n\n return actions;\n};\n","import type { ResourceActionRoute } from \"./get-action-routes-from-resource\";\nimport { isParameter } from \"./is-parameter\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { splitToSegments } from \"./split-to-segments\";\n\n/**\n * Picks the most eligible route from the given matched routes.\n * - If there's only one route, it returns it.\n * - If there's more than one route, it picks the best non-greedy match.\n */\nexport const pickMatchedRoute = (\n routes: ResourceActionRoute[],\n): ResourceActionRoute | undefined => {\n // these routes are all matched, we should pick the least parametrized one\n\n // no routes, no match\n if (routes.length === 0) {\n return undefined;\n }\n\n // no need to calculate the route segments if there's only one route\n if (routes.length === 1) {\n return routes[0];\n }\n\n // remove trailing and leading slashes\n // split them to segments\n const sanitizedRoutes = routes.map((route) => ({\n ...route,\n splitted: splitToSegments(removeLeadingTrailingSlashes(route.route)),\n }));\n\n // at this point, before calling this function, we already checked for segment lenghts and expect all of them to be the same\n const segmentsCount = sanitizedRoutes[0]?.splitted.length ?? 0;\n\n let eligibleRoutes: Array<(typeof sanitizedRoutes)[number]> = [\n ...sanitizedRoutes,\n ];\n\n // loop through the segments\n for (let i = 0; i < segmentsCount; i++) {\n const nonParametrizedRoutes = eligibleRoutes.filter(\n (route) => !isParameter(route.splitted[i]),\n );\n\n if (nonParametrizedRoutes.length === 0) {\n // keep the eligible routes as they are\n continue;\n }\n if (nonParametrizedRoutes.length === 1) {\n // no need to continue, we found the route\n eligibleRoutes = nonParametrizedRoutes;\n break;\n }\n\n // we have more than one non-parametrized route, we need to check the next segment\n eligibleRoutes = nonParametrizedRoutes;\n }\n\n return eligibleRoutes[0];\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport { checkBySegments } from \"./check-by-segments\";\nimport { getActionRoutesFromResource } from \"./get-action-routes-from-resource\";\nimport { pickMatchedRoute } from \"./pick-matched-route\";\n\n/**\n * Match the resource from the route\n * - It will calculate all possible routes for resources and their actions\n * - It will check if the route matches any of the possible routes\n * - It will return the most eligible resource and action\n */\nexport const matchResourceFromRoute = (\n route: string,\n resources: IResourceItem[],\n): {\n found: boolean;\n resource?: IResourceItem;\n action?: Action;\n matchedRoute?: string;\n} => {\n const allActionRoutes = resources.flatMap((resource) => {\n return getActionRoutesFromResource(resource, resources);\n });\n\n const allFound = allActionRoutes.filter((actionRoute) => {\n return checkBySegments(route, actionRoute.route);\n });\n\n const mostEligible = pickMatchedRoute(allFound);\n\n return {\n found: !!mostEligible,\n resource: mostEligible?.resource,\n action: mostEligible?.action,\n matchedRoute: mostEligible?.route,\n };\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\n\n/**\n * Returns the parent resource of the given resource.\n * Uses the `resource.meta.parent` property.\n */\nexport const getParentResource = (\n resource: IResourceItem,\n resources: IResourceItem[],\n): IResourceItem | undefined => {\n const parentName = resource.meta?.parent;\n\n if (!parentName) {\n return undefined;\n }\n\n const parentResource = resources.find(\n (resource) => (resource.identifier ?? resource.name) === parentName,\n );\n\n /**\n * If the parent resource is not found, we return a resource object with the name of the parent resource.\n * Because we still want to have nesting and prefixing for the resource even if the parent is not explicitly defined.\n */\n return parentResource ?? { name: parentName };\n};\n","import { splitToSegments } from \"./split-to-segments\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { isParameter } from \"./is-parameter\";\n\n/**\n * Picks the route parameters from the given route.\n * (e.g. /users/:id/posts/:postId => ['id', 'postId'])\n */\nexport const pickRouteParams = (route: string) => {\n const segments = splitToSegments(removeLeadingTrailingSlashes(route));\n\n return segments.flatMap((s) => {\n if (isParameter(s)) {\n return [s.slice(1)];\n }\n\n return [];\n });\n};\n","/**\n * Prepares the route params by checking the existing params and meta data.\n * Meta data is prioritized over params.\n * Params are prioritized over predetermined id, action and resource.\n * This means, we can use `meta` for user supplied params (both manually or from the query string)\n */\nexport const prepareRouteParams = <\n TRouteParams extends Record<string, unknown> = Record<string, unknown>,\n>(\n routeParams: (keyof TRouteParams)[],\n meta: Record<string, unknown> = {},\n): Partial<TRouteParams> => {\n return routeParams.reduce(\n (acc, key) => {\n const value = meta[key as string];\n if (typeof value !== \"undefined\") {\n acc[key] = value as TRouteParams[keyof TRouteParams];\n }\n return acc;\n },\n {} as Partial<TRouteParams>,\n );\n};\n","import type { MetaQuery } from \"../../../contexts/data/types\";\nimport type { ParseResponse } from \"../../../contexts/router/types\";\nimport { pickRouteParams } from \"./pick-route-params\";\nimport { prepareRouteParams } from \"./prepare-route-params\";\n\n/**\n * This function will compose a route with the given params and meta.\n * - A route can have parameters like (eg: /users/:id)\n * - First we pick the route params from the route (eg: [id])\n * - Then we prepare the route params with the given params and meta (eg: { id: 1 })\n * - Then we replace the route params with the prepared route params (eg: /users/1)\n */\nexport const composeRoute = (\n designatedRoute: string,\n resourceMeta: MetaQuery = {},\n parsed: ParseResponse = {},\n meta: Record<string, unknown> = {},\n): string => {\n // pickRouteParams (from the route)\n const routeParams = pickRouteParams(designatedRoute);\n // prepareRouteParams (from route params, params and meta)\n const preparedRouteParams = prepareRouteParams(routeParams, {\n ...resourceMeta,\n ...(typeof parsed?.id !== \"undefined\" ? { id: parsed.id } : {}),\n ...(typeof parsed?.action !== \"undefined\" ? { action: parsed.action } : {}),\n ...(typeof parsed?.resource !== \"undefined\"\n ? { resource: parsed.resource }\n : {}),\n ...parsed?.params,\n ...meta,\n });\n // replace route params with prepared route params\n return designatedRoute.replace(/:([^\\/]+)/g, (match, key) => {\n const fromParams = preparedRouteParams[key];\n if (typeof fromParams !== \"undefined\") {\n return `${fromParams}`;\n }\n return match;\n });\n};\n","import { useAuthProviderContext } from \"@contexts/auth\";\n\n/**\n * @returns authProvider if provided, otherwise null\n * @internal\n */\nexport const useActiveAuthProvider = () => {\n const authProvider = useAuthProviderContext();\n\n if (authProvider.isProvided) {\n return authProvider;\n }\n\n return null;\n};\n","import type { Pagination } from \"../../../contexts/data/types\";\n\ntype HandlePaginationParamsProps = {\n pagination?: Pagination;\n};\n\nexport const handlePaginationParams = ({\n pagination,\n}: HandlePaginationParamsProps = {}): Required<Pagination> => {\n const mode = pagination?.mode ?? \"server\";\n\n const currentPage = pagination?.currentPage ?? 1;\n\n const pageSize = pagination?.pageSize ?? 10;\n\n return {\n currentPage,\n pageSize,\n mode,\n };\n};\n","import { useState, useEffect } from \"react\";\n\nexport const useMediaQuery = (query: string) => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const media = window.matchMedia(query);\n if (media.matches !== matches) {\n setMatches(media.matches);\n }\n const listener = () => setMatches(media.matches);\n window.addEventListener(\"resize\", listener);\n return () => window.removeEventListener(\"resize\", listener);\n }, [matches, query]);\n\n return matches;\n};\n","import type { useTranslate } from \"../../../hooks/i18n\";\n\nexport const safeTranslate = (\n translate: ReturnType<typeof useTranslate>,\n key: string,\n defaultMessage?: string,\n options?: any,\n) => {\n const translated = options\n ? translate(key, options, defaultMessage)\n : translate(key, defaultMessage);\n\n const fallback = defaultMessage ?? key;\n\n if (translated === key || typeof translated === \"undefined\") {\n return fallback;\n }\n\n return translated;\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\nimport type { IRefineContextOptions } from \"../../contexts/refine/types\";\nimport type { MutationMode } from \"../../contexts/data/types\";\n\ntype UseMutationModeType = (\n preferredMutationMode?: MutationMode,\n preferredUndoableTimeout?: number,\n) => {\n mutationMode: IRefineContextOptions[\"mutationMode\"];\n undoableTimeout: IRefineContextOptions[\"undoableTimeout\"];\n};\n\n/**\n * Mutation mode determines which mode the mutation runs with.\n * Mutations can run under three different modes: `pessimistic`, `optimistic` and `undoable`.\n * Each mode corresponds to a different type of user experience.\n *\n * @see {@link https://refine.dev/docs/guides-and-concepts/mutation-mode} for more details.\n */\nexport const useMutationMode: UseMutationModeType = (\n preferredMutationMode?: MutationMode,\n preferredUndoableTimeout?: number,\n) => {\n const { mutationMode, undoableTimeout } = useContext(RefineContext);\n\n return {\n mutationMode: preferredMutationMode ?? mutationMode,\n undoableTimeout: preferredUndoableTimeout ?? undoableTimeout,\n };\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\nimport { UnsavedWarnContext } from \"@contexts/unsavedWarn\";\nimport type { IRefineContextOptions } from \"../../../contexts/refine/types\";\nimport type { IUnsavedWarnContext } from \"../../../contexts/unsavedWarn/types\";\n\ntype UseWarnAboutChangeType = () => {\n warnWhenUnsavedChanges: IRefineContextOptions[\"warnWhenUnsavedChanges\"];\n warnWhen: NonNullable<IUnsavedWarnContext[\"warnWhen\"]>;\n setWarnWhen: NonNullable<IUnsavedWarnContext[\"setWarnWhen\"]>;\n};\n\n/**\n * When you have unsaved changes and try to leave the current page, **refine** shows a confirmation modal box.\n * To activate this feature, set the `warnWhenUnsavedChanges` to `true`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/components/refine-config#warnwhenunsavedchanges} for more details.\n */\nexport const useWarnAboutChange: UseWarnAboutChangeType = () => {\n const { warnWhenUnsavedChanges } = useContext(RefineContext);\n\n const { warnWhen, setWarnWhen } = useContext(UnsavedWarnContext);\n\n return {\n warnWhenUnsavedChanges,\n warnWhen: Boolean(warnWhen),\n setWarnWhen: setWarnWhen ?? (() => undefined),\n };\n};\n","import React, { useState, type PropsWithChildren } from \"react\";\n\nimport type { IUnsavedWarnContext } from \"./types\";\n\nexport const UnsavedWarnContext = React.createContext<IUnsavedWarnContext>({});\n\nexport const UnsavedWarnContextProvider: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n const [warnWhen, setWarnWhen] = useState(false);\n\n return (\n <UnsavedWarnContext.Provider value={{ warnWhen, setWarnWhen }}>\n {children}\n </UnsavedWarnContext.Provider>\n );\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\nimport type { IRefineContextOptions } from \"../../contexts/refine/types\";\n\ntype UseSyncWithLocationType = () => {\n syncWithLocation: IRefineContextOptions[\"syncWithLocation\"];\n};\n\n/**\n * List query parameter values can be edited manually by typing directly in the URL.\n * To activate this feature `syncWithLocation` needs to be set to `true`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/components/refine-config/#syncwithlocation} for more details.\n */\nexport const useSyncWithLocation: UseSyncWithLocationType = () => {\n const { syncWithLocation } = useContext(RefineContext);\n\n return { syncWithLocation };\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\n\nexport const useRefineContext = () => {\n const {\n mutationMode,\n syncWithLocation,\n undoableTimeout,\n warnWhenUnsavedChanges,\n liveMode,\n onLiveEvent,\n options,\n __initialized,\n } = useContext(RefineContext);\n\n return {\n __initialized,\n mutationMode,\n syncWithLocation,\n undoableTimeout,\n warnWhenUnsavedChanges,\n liveMode,\n onLiveEvent,\n options,\n };\n};\n","import { useRefineContext } from \"@hooks/refine\";\n\n/**\n * A method that the internal uses\n * @internal\n */\nexport const useUserFriendlyName = () => {\n const {\n options: { textTransformers },\n } = useRefineContext();\n\n const getFriendlyName = (name = \"\", type: \"singular\" | \"plural\"): string => {\n const humanizeName = textTransformers.humanize(name);\n if (type === \"singular\") {\n return textTransformers.singular(humanizeName);\n }\n return textTransformers.plural(humanizeName);\n };\n\n return getFriendlyName;\n};\n","import type { useTranslate } from \"../../../hooks/i18n\";\n\nimport type { IResourceItem } from \"../../../contexts/resource/types\";\nimport { safeTranslate } from \"../safe-translate\";\nimport { useUserFriendlyName } from \"../useUserFriendlyName\";\n\n/**\n * Generates document title for the given resource and action.\n */\nexport function generateDefaultDocumentTitle(\n translate: ReturnType<typeof useTranslate>,\n resource?: IResourceItem,\n action?: string,\n id?: string,\n resourceName?: string,\n getUserFriendlyName?: (name: string, type: \"singular\" | \"plural\") => string,\n) {\n const getFriendlyName = getUserFriendlyName || useUserFriendlyName();\n\n const actionPrefixMatcher = {\n create: \"Create new \",\n clone: `#${id ?? \"\"} Clone `,\n edit: `#${id ?? \"\"} Edit `,\n show: `#${id ?? \"\"} Show `,\n list: \"\",\n };\n\n const identifier = resource?.identifier ?? resource?.name;\n\n const resourceNameFallback =\n resource?.meta?.label ??\n (identifier\n ? getFriendlyName(identifier, action === \"list\" ? \"plural\" : \"singular\")\n : identifier);\n\n const resourceNameWithFallback = resourceName ?? resourceNameFallback;\n\n const defaultTitle = safeTranslate(\n translate,\n \"documentTitle.default\",\n \"Refine\",\n );\n const suffix = safeTranslate(translate, \"documentTitle.suffix\", \" | Refine\");\n let autoGeneratedTitle = defaultTitle;\n\n if (action && identifier) {\n autoGeneratedTitle = safeTranslate(\n translate,\n `documentTitle.${identifier}.${action}`,\n `${\n actionPrefixMatcher[action as keyof typeof actionPrefixMatcher] ?? \"\"\n }${resourceNameWithFallback}${suffix}`,\n { id },\n );\n }\n\n return autoGeneratedTitle;\n}\n","import type { BaseKey } from \"../../../contexts/data/types\";\n\ntype ParametrizedDataActions = \"list\" | \"infinite\";\ntype IdRequiredDataActions = \"one\";\ntype IdsRequiredDataActions = \"many\";\ntype DataMutationActions =\n | \"custom\"\n | \"customMutation\"\n | \"create\"\n | \"createMany\"\n | \"update\"\n | \"updateMany\"\n | \"delete\"\n | \"deleteMany\";\n\ntype AuthActionType =\n | \"login\"\n | \"logout\"\n | \"identity\"\n | \"register\"\n | \"forgotPassword\"\n | \"check\"\n | \"onError\"\n | \"permissions\"\n | \"updatePassword\";\n\ntype AuditActionType = \"list\" | \"log\" | \"rename\";\n\ntype IdType = BaseKey;\ntype IdsType = IdType[];\n\ntype ParamsType = any;\n\ntype KeySegment = string | IdType | IdsType | ParamsType;\n\nexport function arrayFindIndex<T>(array: T[], slice: T[]): number {\n return array.findIndex(\n (item, index) =>\n index <= array.length - slice.length &&\n slice.every(\n (sliceItem, sliceIndex) => array[index + sliceIndex] === sliceItem,\n ),\n );\n}\n\nexport function arrayReplace<T>(\n array: T[],\n partToBeReplaced: T[],\n newPart: T[],\n): T[] {\n const newArray: T[] = [...array];\n const startIndex = arrayFindIndex(array, partToBeReplaced);\n\n if (startIndex !== -1) {\n newArray.splice(startIndex, partToBeReplaced.length, ...newPart);\n }\n\n return newArray;\n}\n\nexport function stripUndefined(segments: KeySegment[]) {\n return segments.filter((segment) => segment !== undefined);\n}\n\nclass BaseKeyBuilder {\n segments: KeySegment[] = [];\n\n constructor(segments: KeySegment[] = []) {\n this.segments = segments;\n }\n\n key() {\n return this.segments;\n }\n\n get() {\n return this.segments;\n }\n}\n\nclass ParamsKeyBuilder extends BaseKeyBuilder {\n params(paramsValue?: ParamsType) {\n return new BaseKeyBuilder([...this.segments, paramsValue]);\n }\n}\n\nclass DataIdRequiringKeyBuilder extends BaseKeyBuilder {\n id(idValue?: IdType) {\n return new ParamsKeyBuilder([\n ...this.segments,\n idValue ? String(idValue) : undefined,\n ]);\n }\n}\n\nclass DataIdsRequiringKeyBuilder extends BaseKeyBuilder {\n ids(...idsValue: IdsType) {\n return new ParamsKeyBuilder([\n ...this.segments,\n ...(idsValue.length ? [idsValue.map((el) => String(el))] : []),\n ]);\n }\n}\n\nclass DataResourceKeyBuilder extends BaseKeyBuilder {\n action(actionType: ParametrizedDataActions): ParamsKeyBuilder;\n action(actionType: IdRequiredDataActions): DataIdRequiringKeyBuilder;\n action(actionType: IdsRequiredDataActions): DataIdsRequiringKeyBuilder;\n action(\n actionType:\n | ParametrizedDataActions\n | IdRequiredDataActions\n | IdsRequiredDataActions,\n ): ParamsKeyBuilder | DataIdRequiringKeyBuilder | DataIdsRequiringKeyBuilder {\n if (actionType === \"one\") {\n return new DataIdRequiringKeyBuilder([...this.segments, actionType]);\n }\n if (actionType === \"many\") {\n return new DataIdsRequiringKeyBuilder([...this.segments, actionType]);\n }\n if ([\"list\", \"infinite\"].includes(actionType)) {\n return new ParamsKeyBuilder([...this.segments, actionType]);\n }\n throw new Error(\"Invalid action type\");\n }\n}\n\nclass DataKeyBuilder extends BaseKeyBuilder {\n resource(resourceName?: string) {\n return new DataResourceKeyBuilder([...this.segments, resourceName]);\n }\n\n mutation(mutationName: DataMutationActions) {\n return new ParamsKeyBuilder([\n ...(mutationName === \"custom\" ? this.segments : [this.segments[0]]),\n mutationName,\n ]);\n }\n}\n\nclass AuthKeyBuilder extends BaseKeyBuilder {\n action(actionType: AuthActionType) {\n return new ParamsKeyBuilder([...this.segments, actionType]);\n }\n}\n\nclass AccessResourceKeyBuilder extends BaseKeyBuilder {\n action(resourceName: string) {\n return new ParamsKeyBuilder([...this.segments, resourceName]);\n }\n}\n\nclass AccessKeyBuilder extends BaseKeyBuilder {\n resource(resourceName?: string) {\n return new AccessResourceKeyBuilder([...this.segments, resourceName]);\n }\n}\n\nclass AuditActionKeyBuilder extends BaseKeyBuilder {\n action(actionType: Extract<AuditActionType, \"list\">) {\n return new ParamsKeyBuilder([...this.segments, actionType]);\n }\n}\n\nclass AuditKeyBuilder extends BaseKeyBuilder {\n resource(resourceName?: string) {\n return new AuditActionKeyBuilder([...this.segments, resourceName]);\n }\n\n action(actionType: Extract<AuditActionType, \"rename\" | \"log\">) {\n return new ParamsKeyBuilder([...this.segments, actionType]);\n }\n}\n\nexport class KeyBuilder extends BaseKeyBuilder {\n data(name?: string) {\n return new DataKeyBuilder([\"data\", name || \"default\"]);\n }\n\n auth() {\n return new AuthKeyBuilder([\"auth\"]);\n }\n\n access() {\n return new AccessKeyBuilder([\"access\"]);\n }\n\n audit() {\n return new AuditKeyBuilder([\"audit\"]);\n }\n}\n\nexport const keys = () => new KeyBuilder([]);\n","const isNested = (obj: any) => typeof obj === \"object\" && obj !== null;\nconst isArray = (obj: any) => Array.isArray(obj);\n\nexport const flattenObjectKeys = (obj: any, prefix = \"\") => {\n if (!isNested(obj)) {\n return {\n [prefix]: obj,\n };\n }\n\n return Object.keys(obj).reduce(\n (acc, key) => {\n const currentPrefix = prefix.length ? `${prefix}.` : \"\";\n\n if (isNested(obj[key]) && Object.keys(obj[key]).length) {\n if (isArray(obj[key]) && obj[key].length) {\n obj[key].forEach((item: unknown[], index: number) => {\n Object.assign(\n acc,\n flattenObjectKeys(item, `${currentPrefix + key}.${index}`),\n );\n });\n } else {\n Object.assign(acc, flattenObjectKeys(obj[key], currentPrefix + key));\n }\n // Even if it's a nested object, it should be treated as a key as well\n acc[currentPrefix + key] = obj[key];\n } else {\n acc[currentPrefix + key] = obj[key];\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n};\n","export const propertyPathToArray = (propertyPath: string) => {\n return propertyPath\n .split(\".\")\n .map((item) => (!Number.isNaN(Number(item)) ? Number(item) : item));\n};\n","export const downloadInBrowser = (\n filename: string,\n content: string,\n type?: string,\n) => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n const blob = new Blob([content], { type });\n\n const link = document.createElement(\"a\");\n link.setAttribute(\"visibility\", \"hidden\");\n link.download = filename;\n const blobUrl = URL.createObjectURL(blob);\n link.href = blobUrl;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n // As per documentation, call URL.revokeObjectURL to remove the blob from memory.\n setTimeout(() => {\n URL.revokeObjectURL(blobUrl);\n });\n};\n","/**\n * Delays the execution of a callback function asynchronously.\n * This utility function is used to defer the execution of the provided\n * callback, allowing the current call stack to clear before the callback\n * is invoked. It is particularly useful for ensuring non-blocking behavior\n * and providing a clear intent when a 0 ms timeout is used.\n */\nexport const deferExecution = (fn: Function) => {\n setTimeout(fn, 0);\n};\n","import debounce from \"lodash/debounce\";\n\ntype Callbacks<T extends (...args: any) => any> = {\n resolve?: (value: Awaited<ReturnType<T>>) => void;\n reject?: (reason?: any) => void;\n};\n\ntype DebouncedFunction<T extends (...args: any) => any> = {\n (...args: Parameters<T>): Promise<Awaited<ReturnType<T>>>;\n flush: () => void;\n cancel: () => void;\n};\n\n/**\n * Debounces sync and async functions with given wait time. The debounced function returns a promise which can be awaited or catched.\n * Only the last call of the debounced function will resolve or reject.\n * Previous calls will be rejected with the given cancelReason.\n *\n * The original debounce function doesn't work well with async functions,\n * It won't return a promise to resolve/reject and therefore it's not possible to await the result.\n * This will always return a promise to handle and await the result.\n * Previous calls will be rejected immediately after a new call made.\n */\nexport const asyncDebounce = <T extends (...args: any[]) => any>(\n func: T,\n wait = 1000,\n cancelReason?: string,\n): DebouncedFunction<T> => {\n let callbacks: Array<Callbacks<T>> = [];\n\n const cancelPrevious = () => {\n callbacks.forEach((cb) => cb.reject?.(cancelReason));\n callbacks = [];\n };\n\n const debouncedFunc = debounce((...args: Parameters<T>) => {\n const { resolve, reject } = callbacks.pop() || {};\n Promise.resolve(func(...args))\n .then(resolve)\n .catch(reject);\n }, wait);\n\n const runner = (...args: Parameters<T>) => {\n return new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n cancelPrevious();\n\n callbacks.push({\n resolve,\n reject,\n });\n\n debouncedFunc(...args);\n });\n };\n\n runner.flush = () => debouncedFunc.flush();\n runner.cancel = () => {\n debouncedFunc.cancel();\n cancelPrevious();\n };\n\n return runner;\n};\n","import type { QueryFunctionContext, QueryKey } from \"@tanstack/react-query\";\n\ntype Context =\n | QueryFunctionContext<QueryKey, any>\n | QueryFunctionContext<QueryKey, never>;\n\nexport const prepareQueryContext = (\n context: Context,\n): Pick<Context, \"queryKey\" | \"signal\"> => {\n const queryContext: Pick<Context, \"queryKey\" | \"signal\"> = {\n queryKey: context.queryKey,\n signal: undefined as any,\n };\n\n Object.defineProperty(queryContext, \"signal\", {\n enumerable: true,\n get: () => {\n return context.signal;\n },\n });\n\n return queryContext;\n};\n","export const file2Base64 = (file: any): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n const resultHandler = () => {\n if (reader.result) {\n reader.removeEventListener(\"load\", resultHandler, false);\n\n resolve(reader.result as string);\n }\n };\n\n reader.addEventListener(\"load\", resultHandler, false);\n\n reader.readAsDataURL(file.originFileObj as Blob);\n reader.onerror = (error) => {\n reader.removeEventListener(\"load\", resultHandler, false);\n return reject(error);\n };\n });\n};\n","import { keys } from \"@definitions/index\";\n\nexport const useKeys = () => {\n return {\n keys,\n };\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseQueryResult,\n type UseQueryOptions,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useKeys } from \"@hooks\";\nimport type { MakeOptional } from \"../../../definitions/types\";\n\nexport type UseGetIdentityProps<TData = any> = {\n queryOptions?: MakeOptional<UseQueryOptions<TData>, \"queryKey\" | \"queryFn\">;\n};\n\nexport type UseGetIdentityReturnType<TData> = UseQueryResult<TData>;\n\n/**\n * `useGetIdentity` calls `getIdentity` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useGetIdentity} for more details.\n *\n * @typeParam TData - Result data of the query\n *\n */\nexport function useGetIdentity<TData = any>({\n queryOptions,\n}: UseGetIdentityProps<TData> = {}): UseGetIdentityReturnType<TData> {\n const { getIdentity } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const queryResponse = useQuery<TData>({\n queryKey: keys().auth().action(\"identity\").get(),\n queryFn:\n (getIdentity as (params?: unknown) => Promise<TData>) ??\n (() => Promise.resolve({})),\n retry: false,\n enabled: !!getIdentity,\n ...queryOptions,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useGetIdentity\"),\n },\n });\n\n return queryResponse;\n}\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useKeys, useNotification } from \"@hooks\";\n\nimport type {\n AuthActionResponse,\n SuccessNotificationResponse,\n} from \"../../../contexts/auth/types\";\nimport type { RefineError } from \"../../../contexts/data/types\";\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\ntype Variables = {\n redirectPath?: string | false;\n};\n\nexport type UseLogoutProps<TVariables> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLogoutReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n>;\n\n/**\n * `useLogout` calls the `logout` method from the {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useLogout} for more details.\n *\n */\nexport function useLogout<TVariables = {}>({\n mutationOptions,\n}: UseLogoutProps<TVariables> = {}): UseLogoutReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const go = useGo();\n const { open, close } = useNotification();\n const { logout: logoutFromContext } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >({\n mutationKey: keys().auth().action(\"logout\").get(),\n mutationFn: logoutFromContext,\n ...mutationOptions,\n onSuccess: (data, variables) => {\n const { success, error, redirectTo, successNotification } = data;\n const { redirectPath } = variables ?? {};\n\n const redirect = redirectPath ?? redirectTo;\n\n if (success) {\n close?.(\"useLogout-error\");\n\n if (successNotification) {\n open?.(buildSuccessNotification(successNotification));\n }\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirect !== false) {\n if (redirect) {\n go({ to: redirect });\n }\n }\n\n invalidateAuthStore();\n },\n onError: (error) => {\n open?.(buildNotification(error));\n },\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useLogout\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n key: \"useLogout-error\",\n type: \"error\",\n message: error?.name || \"Logout Error\",\n description: error?.message || \"Something went wrong during logout\",\n };\n};\n\nconst buildSuccessNotification = (\n successNotification: SuccessNotificationResponse,\n): OpenNotificationParams => {\n return {\n message: successNotification.message,\n description: successNotification.description,\n key: \"logout-success\",\n type: \"success\",\n };\n};\n","import { useKeys } from \"@hooks/useKeys\";\nimport { useQueryClient } from \"@tanstack/react-query\";\n\nexport const useInvalidateAuthStore = () => {\n const queryClient = useQueryClient();\n const { keys } = useKeys();\n\n const invalidate = async () => {\n await Promise.all(\n ([\"check\", \"identity\", \"permissions\"] as const).map((action) =>\n queryClient.invalidateQueries({\n queryKey: keys().auth().action(action).get(),\n }),\n ),\n );\n };\n\n return invalidate;\n};\n","import React from \"react\";\n\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useKeys, useNotification, useParsed } from \"@hooks\";\n\nimport type {\n AuthActionResponse,\n SuccessNotificationResponse,\n} from \"../../../contexts/auth/types\";\nimport type { RefineError } from \"../../../contexts/data/types\";\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\nexport type UseLoginProps<TVariables> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLoginReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\n/**\n * `useLogin` calls `login` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useLogin} for more details.\n *\n * @typeParam TData - Result data of the query\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport function useLogin<TVariables = {}>({\n mutationOptions,\n}: UseLoginProps<TVariables> = {}): UseLoginReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const go = useGo();\n const parsed = useParsed();\n\n const { close, open } = useNotification();\n const { login: loginFromContext } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const to = parsed.params?.to;\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >({\n mutationKey: keys().auth().action(\"login\").get(),\n mutationFn: loginFromContext,\n onSuccess: async ({ success, redirectTo, error, successNotification }) => {\n if (success) {\n close?.(\"login-error\");\n\n if (successNotification) {\n open?.(buildSuccessNotification(successNotification));\n }\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (success) {\n if (to) {\n go({ to: to, type: \"replace\" });\n } else if (redirectTo) {\n go({ to: redirectTo, type: \"replace\" });\n }\n }\n\n setTimeout(() => {\n invalidateAuthStore();\n }, 32);\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useLogin\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Login Error\",\n description: error?.message || \"Invalid credentials\",\n key: \"login-error\",\n type: \"error\",\n };\n};\n\nconst buildSuccessNotification = (\n successNotification: SuccessNotificationResponse,\n): OpenNotificationParams => {\n return {\n message: successNotification.message,\n description: successNotification.description,\n key: \"login-success\",\n type: \"success\",\n };\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useKeys, useNavigation, useNotification } from \"@hooks\";\n\nimport type {\n AuthActionResponse,\n SuccessNotificationResponse,\n} from \"../../../contexts/auth/types\";\nimport type { RefineError } from \"../../../contexts/data/types\";\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\nexport type UseRegisterProps<TVariables> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseRegisterReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\n/**\n * `useRegister` calls `register` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useRegister} for more details.\n *\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport function useRegister<TVariables = {}>({\n mutationOptions,\n}: UseRegisterProps<TVariables> = {}): UseRegisterReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const go = useGo();\n const { close, open } = useNotification();\n const { register: registerFromContext } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >({\n mutationKey: keys().auth().action(\"register\").get(),\n mutationFn: registerFromContext,\n\n onSuccess: async ({ success, redirectTo, error, successNotification }) => {\n if (success) {\n close?.(\"register-error\");\n\n if (successNotification) {\n open?.(buildSuccessNotification(successNotification));\n }\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirectTo) {\n go({ to: redirectTo, type: \"replace\" });\n }\n\n if (success) {\n setTimeout(() => {\n invalidateAuthStore();\n }, 32);\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useRegister\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Register Error\",\n description: error?.message || \"Error while registering\",\n key: \"register-error\",\n type: \"error\",\n };\n};\n\nconst buildSuccessNotification = (\n successNotification: SuccessNotificationResponse,\n): OpenNotificationParams => {\n return {\n message: successNotification.message,\n description: successNotification.description,\n key: \"register-success\",\n type: \"success\",\n };\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useKeys, useNotification } from \"@hooks\";\n\nimport type {\n AuthActionResponse,\n SuccessNotificationResponse,\n TForgotPasswordData,\n} from \"../../../contexts/auth/types\";\nimport type { RefineError } from \"../../../contexts/data/types\";\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\n\nexport type UseForgotPasswordProps<TVariables> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseForgotPasswordReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\n/**\n * `useForgotPassword` calls `forgotPassword` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useForgotPassword} for more details.\n *\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport function useForgotPassword<TVariables = {}>({\n mutationOptions,\n}: UseForgotPasswordProps<TVariables> = {}): UseForgotPasswordReturnType<TVariables> {\n const go = useGo();\n const { open, close } = useNotification();\n const { forgotPassword: forgotPasswordFromContext } =\n useAuthProviderContext();\n const { keys } = useKeys();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >({\n mutationKey: keys().auth().action(\"forgotPassword\").get(),\n mutationFn: forgotPasswordFromContext,\n\n onSuccess: ({ success, redirectTo, error, successNotification }) => {\n if (success) {\n close?.(\"forgot-password-error\");\n\n if (successNotification) {\n open?.(buildSuccessNotification(successNotification));\n }\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirectTo) {\n go({ to: redirectTo, type: \"replace\" });\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useForgotPassword\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Forgot Password Error\",\n description: error?.message || \"Error while resetting password\",\n key: \"forgot-password-error\",\n type: \"error\",\n };\n};\n\nconst buildSuccessNotification = (\n successNotification: SuccessNotificationResponse,\n): OpenNotificationParams => {\n return {\n message: successNotification.message,\n description: successNotification.description,\n key: \"forgot-password-success\",\n type: \"success\",\n };\n};\n","import React from \"react\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useKeys, useNotification, useParsed } from \"@hooks\";\n\nimport type {\n AuthActionResponse,\n SuccessNotificationResponse,\n} from \"../../../contexts/auth/types\";\nimport type { RefineError } from \"../../../contexts/data/types\";\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\n\nexport type UseUpdatePasswordProps<TVariables> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseUpdatePasswordReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\n/**\n * `useUpdatePassword` calls `updatePassword` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useUpdatePassword} for more details.\n *\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport function useUpdatePassword<TVariables = {}>({\n mutationOptions,\n}: UseUpdatePasswordProps<TVariables> = {}): UseUpdatePasswordReturnType<TVariables> {\n const go = useGo();\n const { updatePassword: updatePasswordFromContext } =\n useAuthProviderContext();\n const { close, open } = useNotification();\n const { keys } = useKeys();\n const parsed = useParsed();\n const params = parsed.params ?? {};\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >({\n mutationKey: keys().auth().action(\"updatePassword\").get(),\n mutationFn: async (variables) => {\n return updatePasswordFromContext?.({\n ...params,\n ...variables,\n }) as Promise<AuthActionResponse>;\n },\n onSuccess: ({ success, redirectTo, error, successNotification }) => {\n if (success) {\n close?.(\"update-password-error\");\n\n if (successNotification) {\n open?.(buildSuccessNotification(successNotification));\n }\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirectTo) {\n go({ to: redirectTo, type: \"replace\" });\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useUpdatePassword\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Update Password Error\",\n description: error?.message || \"Error while updating password\",\n key: \"update-password-error\",\n type: \"error\",\n };\n};\n\nconst buildSuccessNotification = (\n successNotification: SuccessNotificationResponse,\n): OpenNotificationParams => {\n return {\n message: successNotification.message,\n description: successNotification.description,\n key: \"update-password-success\",\n type: \"success\",\n };\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseQueryOptions,\n type UseQueryResult,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useKeys } from \"@hooks\";\n\nimport type { CheckResponse } from \"../../../contexts/auth/types\";\n\nexport type UseIsAuthenticatedProps = {\n // Make queryKey and queryFn optional\n queryOptions?: Omit<UseQueryOptions<CheckResponse>, \"queryKey\" | \"queryFn\">;\n params?: any;\n};\n\nexport type UseIsAuthenticatedReturnType = UseQueryResult<CheckResponse, any>;\n\n/**\n * `useIsAuthenticated` calls `check` method from {@link https://refine.dev/docs/authentication/auth-provider/#check `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useIsAuthenticated} for more details.\n *\n */\nexport function useIsAuthenticated({\n queryOptions,\n params,\n}: UseIsAuthenticatedProps = {}): UseIsAuthenticatedReturnType {\n const { check } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const queryResponse = useQuery<CheckResponse>({\n queryKey: keys().auth().action(\"check\").get(),\n queryFn: async () => (await check?.(params)) ?? { authenticated: true },\n retry: false,\n ...queryOptions,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useIsAuthenticated\"),\n },\n });\n\n return queryResponse;\n}\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport { type UseMutationResult, useMutation } from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useLogout } from \"@hooks\";\nimport { useKeys } from \"@hooks/useKeys\";\n\nimport type { OnErrorResponse } from \"../../../contexts/auth/types\";\n\nexport type UseOnErrorReturnType = UseMutationResult<\n OnErrorResponse,\n unknown,\n unknown,\n unknown\n>;\n\n/**\n * `useOnError` calls the `checkError` method from the {@link https://refine.dev/docs/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useCheckError} for more details.\n *\n */\nexport function useOnError(): UseOnErrorReturnType {\n const go = useGo();\n\n const { onError: onErrorFromContext } = useAuthProviderContext();\n\n const { keys } = useKeys();\n\n const { mutate: logout } = useLogout();\n\n const mutation = useMutation<OnErrorResponse, unknown, unknown, unknown>({\n mutationKey: keys().auth().action(\"onError\").get(),\n ...(onErrorFromContext\n ? {\n mutationFn: onErrorFromContext,\n onSuccess: ({ logout: shouldLogout, redirectTo }) => {\n if (shouldLogout) {\n logout({ redirectPath: redirectTo });\n return;\n }\n\n if (redirectTo) {\n go({ to: redirectTo, type: \"replace\" });\n return;\n }\n },\n }\n : {\n mutationFn: () => ({}) as Promise<OnErrorResponse>,\n }),\n meta: {\n ...getXRay(\"useOnError\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n","import { useAuthProviderContext } from \"@contexts/auth\";\n\n/**\n * A hook that the UI uses\n * @internal\n */\nexport const useIsExistAuthentication = (): boolean => {\n const { isProvided } = useAuthProviderContext();\n\n return Boolean(isProvided);\n};\n","import { useEffect } from \"react\";\n\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type QueryObserverResult,\n type UseQueryOptions,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport {\n handlePaginationParams,\n pickDataProvider,\n prepareQueryContext,\n} from \"@definitions/helpers\";\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useResourceParams,\n useResourceSubscription,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CrudFilter,\n CrudSort,\n GetListResponse,\n HttpError,\n MetaQuery,\n Pagination,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\nimport type { MakeOptional } from \"../../definitions/types/index\";\n\nexport type BaseListProps = {\n /**\n * Pagination properties\n */\n pagination?: Pagination;\n /**\n * Sorter parameters\n */\n sorters?: CrudSort[];\n /**\n * Filter parameters\n */\n filters?: CrudFilter[];\n /**\n * Meta data query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use\n */\n dataProviderName?: string;\n};\n\nexport type UseListQueryOptions<TQueryFnData, TError, TData> = MakeOptional<\n UseQueryOptions<\n GetListResponse<TQueryFnData>,\n TError,\n GetListResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n>;\n\nexport type UseListProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n\n /**\n * Tanstack Query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options\n */\n queryOptions?: UseListQueryOptions<TQueryFnData, TError, TData>;\n} & BaseListProps &\n SuccessErrorNotification<\n GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n > &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps;\n\nexport type UseListReturnType<TData, TError> = {\n query: QueryObserverResult<GetListResponse<TData>, TError>;\n result: {\n data: TData[];\n total: number | undefined;\n };\n} & UseLoadingOvertimeReturnType;\n\n/**\n * `useList` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/guides/queries `useQuery`} used for retrieving items from a `resource` with pagination, sort, and filter configurations.\n *\n * It uses the `getList` method as the query function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useList} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport const useList = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n resource: resourceFromProp,\n filters,\n pagination,\n sorters,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\n liveMode,\n onLiveEvent,\n liveParams,\n dataProviderName,\n overtimeOptions,\n}: UseListProps<TQueryFnData, TError, TData> = {}): UseListReturnType<\n TData,\n TError\n> &\n UseLoadingOvertimeReturnType => {\n const { resources, resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const pickedDataProvider = pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n );\n const preferredMeta = meta;\n const prefferedFilters = filters;\n const prefferedSorters = sorters;\n const prefferedPagination = handlePaginationParams({\n pagination,\n });\n const isServerPagination = prefferedPagination.mode === \"server\";\n\n const combinedMeta = getMeta({ resource, meta: preferredMeta });\n\n const notificationValues = {\n meta: combinedMeta,\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n pagination: prefferedPagination,\n sorters: prefferedSorters,\n };\n\n const isEnabled =\n queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n const { getList } = dataProvider(pickedDataProvider);\n\n useResourceSubscription({\n resource: identifier,\n types: [\"*\"],\n params: {\n meta: combinedMeta,\n pagination: prefferedPagination,\n hasPagination: isServerPagination,\n sorters: prefferedSorters,\n filters: prefferedFilters,\n subscriptionType: \"useList\",\n ...liveParams,\n },\n channel: `resources/${resource?.name}`,\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n meta: {\n ...meta,\n dataProviderName: pickedDataProvider,\n },\n });\n\n const queryResponse = useQuery<\n GetListResponse<TQueryFnData>,\n TError,\n GetListResponse<TData>\n >({\n queryKey: keys()\n .data(pickedDataProvider)\n .resource(identifier ?? \"\")\n .action(\"list\")\n .params({\n ...(preferredMeta || {}),\n filters: prefferedFilters,\n ...(isServerPagination && {\n pagination: prefferedPagination,\n }),\n ...(sorters && {\n sorters,\n }),\n })\n .get(),\n queryFn: (context) => {\n const meta = {\n ...combinedMeta,\n ...prepareQueryContext(context),\n };\n return getList<TQueryFnData>({\n resource: resource?.name ?? \"\",\n pagination: prefferedPagination,\n filters: prefferedFilters,\n sorters: prefferedSorters,\n meta,\n });\n },\n ...queryOptions,\n enabled:\n typeof queryOptions?.enabled !== \"undefined\"\n ? queryOptions?.enabled\n : !!resource?.name,\n select: (rawData) => {\n let data = rawData;\n\n const { currentPage, mode, pageSize } = prefferedPagination;\n\n if (mode === \"client\") {\n data = {\n ...data,\n data: data.data.slice(\n (currentPage - 1) * pageSize,\n currentPage * pageSize,\n ),\n total: data.total,\n };\n }\n\n if (queryOptions?.select) {\n return queryOptions?.select?.(data);\n }\n\n return data as unknown as GetListResponse<TData>;\n },\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useList\", resource?.name),\n },\n });\n\n // Handle success\n useEffect(() => {\n if (queryResponse.isSuccess && queryResponse.data) {\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(\n queryResponse.data,\n notificationValues,\n identifier,\n )\n : successNotification;\n\n handleNotification(notificationConfig);\n }\n }, [queryResponse.isSuccess, queryResponse.data, successNotification]);\n\n // Handle error\n useEffect(() => {\n if (queryResponse.isError && queryResponse.error) {\n checkError(queryResponse.error);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(\n queryResponse.error,\n notificationValues,\n identifier,\n )\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${identifier}-useList-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: queryResponse.error.statusCode },\n `Error (status code: ${queryResponse.error.statusCode})`,\n ),\n description: queryResponse.error.message,\n type: \"error\",\n });\n }\n }, [queryResponse.isError, queryResponse.error?.message]);\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: queryResponse.isFetching,\n });\n\n return {\n query: queryResponse,\n result: {\n data: queryResponse?.data?.data || [],\n total: queryResponse?.data?.total,\n },\n overtime: { elapsedTime },\n };\n};\n","import { useEffect, useState } from \"react\";\nimport { useRefineContext } from \"..\";\n\nexport type UseLoadingOvertimeRefineContext = Omit<\n UseLoadingOvertimeCoreProps,\n \"isLoading\" | \"interval\"\n> &\n Required<Pick<UseLoadingOvertimeCoreProps, \"interval\">>;\n\nexport type UseLoadingOvertimeOptionsProps = {\n overtimeOptions?: UseLoadingOvertimeCoreOptions;\n};\n\nexport type UseLoadingOvertimeReturnType = {\n overtime: {\n elapsedTime?: number;\n };\n};\n\ntype UseLoadingOvertimeCoreOptions = Omit<\n UseLoadingOvertimeCoreProps,\n \"isLoading\"\n>;\n\ntype UseLoadingOvertimeCoreReturnType = {\n elapsedTime?: number;\n};\n\nexport type UseLoadingOvertimeCoreProps = {\n /**\n * If true, the elapsed time will be calculated. If set to false; the elapsed time will be `undefined`.\n *\n * @default: true\n */\n enabled?: boolean;\n\n /**\n * The loading state. If true, the elapsed time will be calculated.\n */\n isLoading: boolean;\n\n /**\n * The interval in milliseconds. If the loading time exceeds this time, the `onInterval` callback will be called.\n * If not specified, the `interval` value from the `overtime` option of the `RefineProvider` will be used.\n *\n * @default: 1000 (1 second)\n */\n interval?: number;\n\n /**\n * The callback function that will be called when the loading time exceeds the specified time.\n * If not specified, the `onInterval` value from the `overtime` option of the `RefineProvider` will be used.\n *\n * @param elapsedInterval The elapsed time in milliseconds.\n */\n onInterval?: (elapsedInterval: number) => void;\n};\n\n/**\n * if you need to do something when the loading time exceeds the specified time, refine provides the `useLoadingOvertime` hook.\n * It returns the elapsed time in milliseconds.\n *\n * @example\n * const { elapsedTime } = useLoadingOvertime({\n * isLoading,\n * interval: 1000,\n * onInterval(elapsedInterval) {\n * console.log(\"loading overtime\", elapsedInterval);\n * },\n * });\n */\nexport const useLoadingOvertime = ({\n enabled: enabledProp,\n isLoading,\n interval: intervalProp,\n onInterval: onIntervalProp,\n}: UseLoadingOvertimeCoreProps): UseLoadingOvertimeCoreReturnType => {\n const [elapsedTime, setElapsedTime] = useState<number | undefined>(undefined);\n // get overtime options from refine context\n const { options } = useRefineContext();\n const { overtime } = options;\n\n // pick props or refine context options\n const interval = intervalProp ?? overtime.interval;\n const onInterval = onIntervalProp ?? overtime?.onInterval;\n const enabled =\n typeof enabledProp !== \"undefined\"\n ? enabledProp\n : typeof overtime.enabled !== \"undefined\"\n ? overtime.enabled\n : true;\n\n useEffect(() => {\n let intervalFn: ReturnType<typeof setInterval>;\n\n if (enabled && isLoading) {\n intervalFn = setInterval(() => {\n // increase elapsed time\n setElapsedTime((prevElapsedTime) => {\n if (prevElapsedTime === undefined) {\n return interval;\n }\n\n return prevElapsedTime + interval;\n });\n }, interval);\n }\n\n return () => {\n if (typeof intervalFn !== \"undefined\") {\n clearInterval(intervalFn);\n }\n // reset elapsed time\n setElapsedTime(undefined);\n };\n }, [isLoading, interval, enabled]);\n\n useEffect(() => {\n // call onInterval callback\n if (onInterval && elapsedTime) {\n onInterval(elapsedTime);\n }\n }, [elapsedTime]);\n\n return {\n elapsedTime,\n };\n};\n","import { useEffect } from \"react\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type QueryObserverResult,\n type UseQueryOptions,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { pickDataProvider, prepareQueryContext } from \"@definitions\";\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useResourceParams,\n useResourceSubscription,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n GetOneResponse,\n HttpError,\n MetaQuery,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type UseOneProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * id of the item in the resource\n * @type [`BaseKey`](/docs/api-reference/core/interfaceReferences/#basekey)\n */\n id?: BaseKey;\n /**\n * react-query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options\n */\n queryOptions?: Omit<\n UseQueryOptions<\n GetOneResponse<TQueryFnData>,\n TError,\n GetOneResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n > & {\n // Make queryKey and queryFn optional\n queryKey?: UseQueryOptions<\n GetOneResponse<TQueryFnData>,\n TError,\n GetOneResponse<TData>\n >[\"queryKey\"];\n queryFn?: UseQueryOptions<\n GetOneResponse<TQueryFnData>,\n TError,\n GetOneResponse<TData>\n >[\"queryFn\"];\n };\n /**\n * Metadata query for `dataProvider`,\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default `\"default\"``\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n GetOneResponse<TData>,\n TError,\n Prettify<{ id?: BaseKey } & MetaQuery>\n> &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps;\n\nexport type UseOneReturnType<TData, TError> = {\n query: QueryObserverResult<GetOneResponse<TData>, TError>;\n result: TData | undefined;\n} & UseLoadingOvertimeReturnType;\n\n/**\n * `useOne` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/guides/queries `useQuery`} used for retrieving single items from a `resource`.\n *\n * It uses `getOne` method as query function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useOne} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport const useOne = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n resource: resourceFromProp,\n id,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\n liveMode,\n onLiveEvent,\n liveParams,\n dataProviderName,\n overtimeOptions,\n}: UseOneProps<TQueryFnData, TError, TData>): UseOneReturnType<TData, TError> &\n UseLoadingOvertimeReturnType => {\n const { resources, resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const preferredMeta = meta;\n const pickedDataProvider = pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n );\n\n const { getOne } = dataProvider(pickedDataProvider);\n\n const combinedMeta = getMeta({ resource, meta: preferredMeta });\n\n const isEnabled =\n typeof queryOptions?.enabled !== \"undefined\"\n ? queryOptions?.enabled === true\n : typeof resource?.name !== \"undefined\" && typeof id !== \"undefined\";\n\n useResourceSubscription({\n resource: identifier,\n types: [\"*\"],\n channel: `resources/${resource?.name}`,\n params: {\n ids: id ? [id] : [],\n id: id,\n meta: combinedMeta,\n subscriptionType: \"useOne\",\n ...liveParams,\n },\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n meta: {\n ...meta,\n dataProviderName: pickedDataProvider,\n },\n });\n\n const queryResponse = useQuery<\n GetOneResponse<TQueryFnData>,\n TError,\n GetOneResponse<TData>\n >({\n queryKey: keys()\n .data(pickedDataProvider)\n .resource(identifier ?? \"\")\n .action(\"one\")\n .id(id ?? \"\")\n .params({\n ...(preferredMeta || {}),\n })\n .get(),\n queryFn: (context) =>\n getOne<TQueryFnData>({\n resource: resource?.name ?? \"\",\n id: id!,\n meta: {\n ...combinedMeta,\n ...prepareQueryContext(context as any),\n },\n }),\n ...queryOptions,\n enabled: isEnabled,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useOne\", resource?.name),\n },\n });\n\n // Handle success\n useEffect(() => {\n if (queryResponse.isSuccess && queryResponse.data) {\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(\n queryResponse.data,\n {\n id,\n ...combinedMeta,\n },\n identifier,\n )\n : successNotification;\n\n handleNotification(notificationConfig);\n }\n }, [queryResponse.isSuccess, queryResponse.data, successNotification]);\n\n // Handle error\n useEffect(() => {\n if (queryResponse.isError && queryResponse.error) {\n checkError(queryResponse.error);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(\n queryResponse.error,\n {\n id,\n ...combinedMeta,\n },\n identifier,\n )\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${id}-${identifier}-getOne-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: queryResponse.error.statusCode },\n `Error (status code: ${queryResponse.error.statusCode})`,\n ),\n description: queryResponse.error.message,\n type: \"error\",\n });\n }\n }, [queryResponse.isError, queryResponse.error?.message]);\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: queryResponse.isFetching,\n });\n\n return {\n query: queryResponse,\n result: queryResponse.data?.data,\n overtime: { elapsedTime },\n };\n};\n","import { useEffect } from \"react\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type QueryObserverResult,\n type UseQueryOptions,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport {\n handleMultiple,\n pickDataProvider,\n prepareQueryContext,\n} from \"@definitions/helpers\";\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useResourceParams,\n useResourceSubscription,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n GetManyResponse,\n HttpError,\n MetaQuery,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\nimport warnOnce from \"warn-once\";\nimport type { MakeOptional } from \"../../definitions/types\";\n\nexport type UseManyQueryOptions<TQueryFnData, TError, TData> = MakeOptional<\n UseQueryOptions<\n GetManyResponse<TQueryFnData>,\n TError,\n GetManyResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n>;\n\nexport type UseManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n> = {\n query: QueryObserverResult<GetManyResponse<TData>, TError>;\n result: {\n data: TData[];\n };\n} & UseLoadingOvertimeReturnType;\n\nexport type UseManyProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * ids of the item in the resource\n * @type [`BaseKey[]`](/docs/api-reference/core/interfaceReferences/#basekey)\n */\n ids: BaseKey[];\n /**\n * react-query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options\n */\n queryOptions?: UseManyQueryOptions<TQueryFnData, TError, TData>;\n /**\n * Meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<GetManyResponse<TData>, TError, BaseKey[]> &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps;\n\n/**\n * `useMany` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/guides/queries `useQuery`} used for retrieving multiple items from a `resource`.\n *\n * It uses `getMany` method as query function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useMany} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport const useMany = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n resource: resourceFromProp,\n ids,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\n liveMode,\n onLiveEvent,\n liveParams,\n dataProviderName,\n overtimeOptions,\n}: UseManyProps<TQueryFnData, TError, TData>): UseManyReturnType<\n TData,\n TError\n> &\n UseLoadingOvertimeReturnType => {\n const { resources, resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const preferredMeta = meta;\n const pickedDataProvider = pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n );\n const isEnabled =\n queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n const { getMany, getOne } = dataProvider(pickedDataProvider);\n\n const combinedMeta = getMeta({ resource, meta: preferredMeta });\n\n const hasIds = Array.isArray(ids);\n const hasResource = Boolean(resource?.name);\n const manuallyEnabled = queryOptions?.enabled === true;\n\n warnOnce(\n !hasIds && !manuallyEnabled,\n idsWarningMessage(ids, resource?.name || resource?.identifier || \"\"),\n );\n warnOnce(!hasResource && !manuallyEnabled, resourceWarningMessage());\n\n useResourceSubscription({\n resource: identifier,\n types: [\"*\"],\n params: {\n ids: ids ?? [],\n meta: combinedMeta,\n subscriptionType: \"useMany\",\n ...liveParams,\n },\n channel: `resources/${resource?.name ?? \"\"}`,\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n meta: {\n ...meta,\n dataProviderName: pickedDataProvider,\n },\n });\n\n const queryResponse = useQuery<\n GetManyResponse<TQueryFnData>,\n TError,\n GetManyResponse<TData>\n >({\n queryKey: keys()\n .data(pickedDataProvider)\n .resource(identifier)\n .action(\"many\")\n .ids(...(ids ?? []))\n .params({\n ...(preferredMeta || {}),\n })\n .get(),\n queryFn: (context) => {\n const meta = {\n ...combinedMeta,\n ...prepareQueryContext(context as any),\n };\n\n if (getMany) {\n return getMany({\n resource: resource?.name || \"\",\n ids,\n meta,\n });\n }\n return handleMultiple(\n ids.map((id) =>\n getOne<TQueryFnData>({\n resource: resource?.name || \"\",\n id,\n meta,\n }),\n ),\n );\n },\n enabled: hasIds && hasResource,\n ...queryOptions,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useMany\", resource?.name),\n },\n });\n\n // Handle success\n useEffect(() => {\n if (queryResponse.isSuccess && queryResponse.data) {\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(queryResponse.data, ids, identifier)\n : successNotification;\n\n handleNotification(notificationConfig);\n }\n }, [queryResponse.isSuccess, queryResponse.data, successNotification]);\n\n // Handle error\n useEffect(() => {\n if (queryResponse.isError && queryResponse.error) {\n checkError(queryResponse.error);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(queryResponse.error, ids, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${ids[0]}-${identifier}-getMany-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: queryResponse.error.statusCode },\n `Error (status code: ${queryResponse.error.statusCode})`,\n ),\n description: queryResponse.error.message,\n type: \"error\",\n });\n }\n }, [queryResponse.isError, queryResponse.error?.message]);\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: queryResponse.isFetching,\n });\n\n return {\n query: queryResponse,\n result: {\n data: queryResponse?.data?.data || [],\n },\n overtime: { elapsedTime },\n };\n};\n\nconst idsWarningMessage = (\n ids: BaseKey[],\n resource: string,\n) => `[useMany]: Missing \"ids\" prop. Expected an array of ids, but got \"${typeof ids}\". Resource: \"${resource}\"\n\nSee https://refine.dev/docs/data/hooks/use-many/#ids-`;\n\nconst resourceWarningMessage = () => `[useMany]: Missing \"resource\" prop. Expected a string, but got undefined.\n\nSee https://refine.dev/docs/data/hooks/use-many/#resource-`;\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type MutateOptions,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { pickDataProvider } from \"@definitions/helpers\";\nimport {\n useCancelNotification,\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n useMutationMode,\n useOnError,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n GetListResponse,\n GetManyResponse,\n GetOneResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n MutationMode,\n PrevContext as UpdateContext,\n PreviousQuery,\n UpdateResponse,\n} from \"../../contexts/data/types\";\nimport type { UseMutationResult } from \"../../definitions/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport { ActionTypes } from \"../../contexts/undoableQueue/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type OptimisticUpdateMapType<TData, TVariables> = {\n list?:\n | ((\n previous: GetListResponse<TData> | null | undefined,\n values: TVariables,\n id: BaseKey,\n ) => GetListResponse<TData> | null)\n | boolean;\n many?:\n | ((\n previous: GetManyResponse<TData> | null | undefined,\n values: TVariables,\n id: BaseKey,\n ) => GetManyResponse<TData> | null)\n | boolean;\n detail?:\n | ((\n previous: GetOneResponse<TData> | null | undefined,\n values: TVariables,\n id: BaseKey,\n ) => GetOneResponse<TData> | null)\n | boolean;\n};\n\nexport type UpdateParams<TData, TError, TVariables> = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * id for mutation function\n */\n id?: BaseKey;\n /**\n * [Determines when mutations are executed](/docs/advanced-tutorials/mutation-mode/)\n */\n mutationMode?: MutationMode;\n /**\n * Duration in ms to wait before executing the mutation when `mutationMode = \"undoable\"`\n */\n undoableTimeout?: number;\n /**\n * Provides a function to cancel the mutation when `mutationMode = \"undoable\"`\n */\n onCancel?: (cancelMutation: () => void) => void;\n /**\n * Values for mutation function\n */\n values?: TVariables;\n /**\n * Metadata query for dataProvider\n */\n meta?: MetaQuery;\n /**\n * Metadata query for dataProvider\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n /**\n * You can use it to customize the optimistic update logic.\n * @default {\n * list: true,\n * many: true,\n * detail: true,\n * }\n */\n optimisticUpdateMap?: OptimisticUpdateMapType<TData, TVariables>;\n} & SuccessErrorNotification<\n UpdateResponse<TData>,\n TError,\n { id: BaseKey; values: TVariables }\n>;\n\nexport type UseUpdateReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n> &\n UseLoadingOvertimeReturnType;\n\nexport type UseUpdateProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n \"mutationFn\" | \"onMutate\"\n >;\n} & UseLoadingOvertimeOptionsProps &\n UpdateParams<TData, TError, TVariables>;\n\n/**\n * `useUpdate` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for update mutations.\n *\n * It uses `update` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useUpdate} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences/#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\nexport const useUpdate = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n id: idFromProps,\n resource: resourceFromProps,\n values: valuesFromProps,\n dataProviderName: dataProviderNameFromProps,\n successNotification: successNotificationFromProps,\n errorNotification: errorNotificationFromProps,\n meta: metaFromProps,\n mutationMode: mutationModeFromProps,\n undoableTimeout: undoableTimeoutFromProps,\n onCancel: onCancelFromProps,\n optimisticUpdateMap: optimisticUpdateMapFromProps,\n invalidates: invalidatesFromProps,\n mutationOptions,\n overtimeOptions,\n}: UseUpdateProps<TData, TError, TVariables> = {}): UseUpdateReturnType<\n TData,\n TError,\n TVariables\n> => {\n const { resources, select } = useResourceParams({\n resource: resourceFromProps,\n });\n const queryClient = useQueryClient();\n const dataProvider = useDataProvider();\n\n const {\n mutationMode: mutationModeContext,\n undoableTimeout: undoableTimeoutContext,\n } = useMutationMode();\n const { mutate: checkError } = useOnError();\n const translate = useTranslate();\n const publish = usePublish();\n const { log } = useLog();\n const { notificationDispatch } = useCancelNotification();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutationResult = useMutation<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >({\n mutationFn: ({\n id = idFromProps,\n values = valuesFromProps,\n resource: resourceName = resourceFromProps,\n mutationMode = mutationModeFromProps,\n undoableTimeout = undoableTimeoutFromProps,\n onCancel = onCancelFromProps,\n meta = metaFromProps,\n dataProviderName = dataProviderNameFromProps,\n }) => {\n if (typeof id === \"undefined\") throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n const undoableTimeoutPropOrContext =\n undoableTimeout ?? undoableTimeoutContext;\n\n if (!(mutationModePropOrContext === \"undoable\")) {\n return dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n ).update<TData, TVariables>({\n resource: resource.name,\n id,\n variables: values,\n meta: combinedMeta,\n });\n }\n const updatePromise = new Promise<UpdateResponse<TData>>(\n (resolve, reject) => {\n const doMutation = () => {\n dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n )\n .update<TData, TVariables>({\n resource: resource.name,\n id,\n variables: values,\n meta: combinedMeta,\n })\n .then((result) => resolve(result))\n .catch((err) => reject(err));\n };\n\n const cancelMutation = () => {\n reject({ message: \"mutationCancelled\" });\n };\n\n if (onCancel) {\n onCancel(cancelMutation);\n }\n\n notificationDispatch({\n type: ActionTypes.ADD,\n payload: {\n id: id,\n resource: identifier,\n cancelMutation: cancelMutation,\n doMutation: doMutation,\n seconds: undoableTimeoutPropOrContext,\n isSilent: !!onCancel,\n },\n });\n },\n );\n return updatePromise;\n },\n onMutate: async ({\n resource: resourceName = resourceFromProps,\n id = idFromProps,\n mutationMode = mutationModeFromProps,\n values = valuesFromProps,\n dataProviderName = dataProviderNameFromProps,\n meta = metaFromProps,\n optimisticUpdateMap = optimisticUpdateMapFromProps ?? {\n list: true,\n many: true,\n detail: true,\n },\n }) => {\n if (typeof id === \"undefined\") throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n const { gqlMutation: _, gqlQuery: __, ...preferredMeta } = meta ?? {};\n\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const previousQueries: PreviousQuery<TData>[] =\n queryClient.getQueriesData({\n queryKey: resourceKeys.get(),\n });\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n await queryClient.cancelQueries({\n queryKey: resourceKeys.get(),\n });\n\n if (mutationModePropOrContext !== \"pessimistic\") {\n if (optimisticUpdateMap.list) {\n // Set the previous queries to the new ones:\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"list\")\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.list === \"function\") {\n return optimisticUpdateMap.list(previous, values, id);\n }\n\n if (!previous) {\n return null;\n }\n\n const data = previous.data.map((record: TData) => {\n if (record.id?.toString() === id?.toString()) {\n return {\n id,\n ...record,\n ...values,\n } as unknown as TData;\n }\n return record;\n });\n\n return {\n ...previous,\n data,\n };\n },\n );\n }\n\n if (optimisticUpdateMap.many) {\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys.action(\"many\").get(),\n },\n (previous?: GetManyResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.many === \"function\") {\n return optimisticUpdateMap.many(previous, values, id);\n }\n\n if (!previous) {\n return null;\n }\n\n const data = previous.data.map((record: TData) => {\n if (record.id?.toString() === id?.toString()) {\n record = {\n id,\n ...record,\n ...values,\n } as unknown as TData;\n }\n return record;\n });\n return {\n ...previous,\n data,\n };\n },\n );\n }\n\n if (optimisticUpdateMap.detail) {\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"one\")\n .id(id)\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetOneResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.detail === \"function\") {\n return optimisticUpdateMap.detail(previous, values, id);\n }\n\n if (!previous) {\n return null;\n }\n\n return {\n ...previous,\n data: {\n ...previous.data,\n ...values,\n },\n };\n },\n );\n }\n }\n\n return {\n previousQueries,\n };\n },\n onSettled: (data, error, variables, context) => {\n const {\n id = idFromProps,\n resource: resourceName = resourceFromProps,\n dataProviderName = dataProviderNameFromProps,\n invalidates = invalidatesFromProps ?? [\"list\", \"many\", \"detail\"],\n } = variables;\n if (typeof id === \"undefined\") throw missingIdError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n invalidateStore({\n resource: identifier,\n dataProviderName: pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n ),\n invalidates,\n id,\n });\n\n notificationDispatch({\n type: ActionTypes.REMOVE,\n payload: { id, resource: identifier },\n });\n\n mutationOptions?.onSettled?.(data, error, variables, context);\n },\n onSuccess: (data, variables, context) => {\n const {\n id = idFromProps,\n resource: resourceName = resourceFromProps,\n successNotification = successNotificationFromProps,\n dataProviderName: dataProviderNameFromProp = dataProviderNameFromProps,\n values = valuesFromProps,\n meta = metaFromProps,\n } = variables;\n if (typeof id === \"undefined\") throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n const resourceSingular = textTransformers.singular(identifier);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(data, { id, values }, identifier)\n : successNotification;\n\n handleNotification(notificationConfig, {\n key: `${id}-${identifier}-notification`,\n description: translate(\"notifications.success\", \"Successful\"),\n message: translate(\n \"notifications.editSuccess\",\n {\n resource: translate(\n `${identifier}.${identifier}`,\n resourceSingular,\n ),\n },\n `Successfully updated ${resourceSingular}`,\n ),\n type: \"success\",\n });\n\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"updated\",\n payload: {\n ids: data.data?.id ? [data.data.id] : undefined,\n },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n let previousData: any;\n if (context) {\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const queryData = queryClient.getQueryData<UpdateResponse<TData>>(\n resourceKeys.action(\"one\").id(id).get(),\n );\n\n previousData = Object.keys(values || {}).reduce<any>((acc, item) => {\n acc[item] = queryData?.data?.[item];\n return acc;\n }, {});\n }\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"update\",\n resource: resource.name,\n data: values,\n previousData,\n meta: {\n ...rest,\n dataProviderName,\n id,\n },\n });\n\n mutationOptions?.onSuccess?.(data, variables, context);\n },\n onError: (err: TError, variables, context) => {\n const {\n id = idFromProps,\n resource: resourceName = resourceFromProps,\n errorNotification = errorNotificationFromProps,\n values = valuesFromProps,\n } = variables;\n if (typeof id === \"undefined\") throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n // set back the queries to the context:\n if (context?.previousQueries) {\n for (const query of context.previousQueries) {\n queryClient.setQueryData(query[0], query[1]);\n }\n }\n\n if (err.message !== \"mutationCancelled\") {\n checkError?.(err);\n\n const resourceSingular = textTransformers.singular(identifier);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(err, { id, values }, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${id}-${identifier}-notification`,\n message: translate(\n \"notifications.editError\",\n {\n resource: translate(\n `${identifier}.${identifier}`,\n resourceSingular,\n ),\n statusCode: err.statusCode,\n },\n `Error when updating ${resourceSingular} (status code: ${err.statusCode})`,\n ),\n description: err.message,\n type: \"error\",\n });\n }\n\n mutationOptions?.onError?.(err, variables, context);\n },\n mutationKey: keys().data().mutation(\"update\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useUpdate\"),\n },\n });\n\n const { mutate, mutateAsync } = mutationResult;\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutationResult.isPending,\n });\n\n // this function is used to make the `variables` parameter optional\n const handleMutation = (\n variables?: UpdateParams<TData, TError, TVariables>,\n options?: MutateOptions<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n ) => {\n return mutate(variables || {}, options);\n };\n\n // this function is used to make the `variables` parameter optional\n const handleMutateAsync = (\n variables?: UpdateParams<TData, TError, TVariables>,\n options?: MutateOptions<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n ) => {\n return mutateAsync(variables || {}, options);\n };\n\n return {\n mutation: mutationResult,\n mutate: handleMutation,\n mutateAsync: handleMutateAsync,\n overtime: { elapsedTime },\n };\n};\n\nconst missingResourceError = new Error(\n \"[useUpdate]: `resource` is not defined or not matched but is required\",\n);\n\nconst missingIdError = new Error(\n \"[useUpdate]: `id` is not defined but is required in edit and clone actions\",\n);\n\nconst missingValuesError = new Error(\n \"[useUpdate]: `values` is not provided but is required\",\n);\n","import type { BaseKey } from \"../data/types\";\n\nexport enum ActionTypes {\n ADD = \"ADD\",\n REMOVE = \"REMOVE\",\n DECREASE_NOTIFICATION_SECOND = \"DECREASE_NOTIFICATION_SECOND\",\n}\n\nexport interface IUndoableQueue {\n id: BaseKey;\n resource: string;\n cancelMutation: () => void;\n doMutation: () => void;\n seconds: number;\n isRunning: boolean;\n isSilent: boolean;\n}\n\nexport interface IUndoableQueueContext {\n notifications: IUndoableQueue[];\n notificationDispatch: React.Dispatch<any>;\n}\n","import { pickDataProvider } from \"@definitions/helpers\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type MutateOptions,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport {\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n useOnError,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CreateResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n} from \"../../contexts/data/types\";\nimport type { UseMutationResult } from \"../../definitions/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type UseCreateParams<TData, TError, TVariables> = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * Values for mutation function\n */\n values?: TVariables;\n /**\n * Meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Meta data for `dataProvider`\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification<CreateResponse<TData>, TError, TVariables>;\n\nexport type UseCreateReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n CreateResponse<TData>,\n TError,\n UseCreateParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCreateProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n CreateResponse<TData>,\n TError,\n UseCreateParams<TData, TError, TVariables>,\n unknown\n >,\n \"mutationFn\"\n >;\n} & UseLoadingOvertimeOptionsProps &\n UseCreateParams<TData, TError, TVariables>;\n\n/**\n * `useCreate` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for create mutations.\n *\n * It uses `create` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useCreate} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences/#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\n\nexport const useCreate = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n resource: resourceFromProps,\n values: valuesFromProps,\n dataProviderName: dataProviderNameFromProps,\n successNotification: successNotificationFromProps,\n errorNotification: errorNotificationFromProps,\n invalidates: invalidatesFromProps,\n meta: metaFromProps,\n mutationOptions,\n overtimeOptions,\n}: UseCreateProps<TData, TError, TVariables> = {}): UseCreateReturnType<\n TData,\n TError,\n TVariables\n> &\n UseLoadingOvertimeReturnType => {\n const { mutate: checkError } = useOnError();\n const dataProvider = useDataProvider();\n const invalidateStore = useInvalidate();\n const { resources, select } = useResourceParams();\n const translate = useTranslate();\n const publish = usePublish();\n const { log } = useLog();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutationResult = useMutation<\n CreateResponse<TData>,\n TError,\n UseCreateParams<TData, TError, TVariables>,\n unknown\n >({\n mutationFn: ({\n resource: resourceName = resourceFromProps,\n values = valuesFromProps,\n meta = metaFromProps,\n dataProviderName = dataProviderNameFromProps,\n }: UseCreateParams<TData, TError, TVariables>) => {\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n return dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n ).create<TData, TVariables>({\n resource: resource.name,\n variables: values,\n meta: combinedMeta,\n });\n },\n onSuccess: (data, variables, context) => {\n const {\n resource: resourceName = resourceFromProps,\n successNotification:\n successNotificationFromProp = successNotificationFromProps,\n dataProviderName: dataProviderNameFromProp = dataProviderNameFromProps,\n invalidates = invalidatesFromProps ?? [\"list\", \"many\"],\n values = valuesFromProps,\n meta = metaFromProps,\n } = variables;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n const resourceSingular = textTransformers.singular(identifier);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const notificationConfig =\n typeof successNotificationFromProp === \"function\"\n ? successNotificationFromProp(data, values, identifier)\n : successNotificationFromProp;\n\n handleNotification(notificationConfig, {\n key: `create-${identifier}-notification`,\n message: translate(\n \"notifications.createSuccess\",\n {\n resource: translate(\n `${identifier}.${identifier}`,\n resourceSingular,\n ),\n },\n `Successfully created ${resourceSingular}`,\n ),\n description: translate(\"notifications.success\", \"Success\"),\n type: \"success\",\n });\n\n invalidateStore({\n resource: identifier,\n dataProviderName,\n invalidates,\n });\n\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"created\",\n payload: {\n ids: data?.data?.id ? [data.data.id] : undefined,\n },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"create\",\n resource: resource.name,\n data: values,\n meta: {\n ...rest,\n dataProviderName,\n id: data?.data?.id ?? undefined,\n },\n });\n\n mutationOptions?.onSuccess?.(data, variables, context);\n },\n onError: (err: TError, variables, context) => {\n const {\n resource: resourceName = resourceFromProps,\n errorNotification:\n errorNotificationFromProp = errorNotificationFromProps,\n values = valuesFromProps,\n } = variables;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n checkError(err);\n\n const { identifier } = select(resourceName);\n\n const resourceSingular = textTransformers.singular(identifier);\n\n const notificationConfig =\n typeof errorNotificationFromProp === \"function\"\n ? errorNotificationFromProp(err, values, identifier)\n : errorNotificationFromProp;\n\n handleNotification(notificationConfig, {\n key: `create-${identifier}-notification`,\n description: err.message,\n message: translate(\n \"notifications.createError\",\n {\n resource: translate(\n `${identifier}.${identifier}`,\n resourceSingular,\n ),\n statusCode: err.statusCode,\n },\n `There was an error creating ${resourceSingular} (status code: ${err.statusCode})`,\n ),\n type: \"error\",\n });\n\n mutationOptions?.onError?.(err, variables, context);\n },\n mutationKey: keys().data().mutation(\"create\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useCreate\"),\n },\n });\n const { mutate, mutateAsync, ...mutation } = mutationResult;\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutation.isPending,\n });\n\n // this function is used to make the `variables` parameter optional\n const handleMutation = (\n variables?: UseCreateParams<TData, TError, TVariables>,\n options?: MutateOptions<\n CreateResponse<TData>,\n TError,\n UseCreateParams<TData, TError, TVariables>,\n unknown\n >,\n ) => {\n return mutate(variables || {}, options);\n };\n\n // this function is used to make the `variables` parameter optional\n const handleMutateAsync = (\n variables?: UseCreateParams<TData, TError, TVariables>,\n options?: MutateOptions<\n CreateResponse<TData>,\n TError,\n UseCreateParams<TData, TError, TVariables>,\n unknown\n >,\n ) => {\n return mutateAsync(variables || {}, options);\n };\n\n return {\n mutation: mutationResult,\n mutate: handleMutation,\n mutateAsync: handleMutateAsync,\n overtime: { elapsedTime },\n };\n};\n\nconst missingResourceError = new Error(\n \"[useCreate]: `resource` is not defined or not matched but is required\",\n);\n\nconst missingValuesError = new Error(\n \"[useCreate]: `values` is not provided but is required\",\n);\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { pickDataProvider } from \"@definitions/helpers\";\nimport {\n useCancelNotification,\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n useMutationMode,\n useOnError,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n DeleteOneResponse,\n GetListResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n MutationMode,\n PrevContext as DeleteContext,\n PreviousQuery,\n} from \"../../contexts/data/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport { ActionTypes } from \"../../contexts/undoableQueue/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type DeleteParams<TData, TError, TVariables> = {\n /**\n * id for mutation function\n */\n id: BaseKey;\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * [Determines when mutations are executed](/docs/advanced-tutorials/mutation-mode/)\n */\n mutationMode?: MutationMode;\n /**\n * Duration in ms to wait before executing the mutation when `mutationMode = \"undoable\"`\n */\n undoableTimeout?: number;\n /**\n * Provides a function to cancel the mutation when `mutationMode = \"undoable\"`\n */\n onCancel?: (cancelMutation: () => void) => void;\n /**\n * Metadata query for dataProvider\n */\n meta?: MetaQuery;\n /**\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n /**\n * Values for mutation function\n */\n values?: TVariables;\n} & SuccessErrorNotification<DeleteOneResponse<TData>, TError, BaseKey>;\n\nexport type UseDeleteReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = {\n mutation: UseMutationResult<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >;\n mutate: UseMutationResult<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >[\"mutate\"];\n mutateAsync: UseMutationResult<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >[\"mutateAsync\"];\n} & UseLoadingOvertimeReturnType;\n\nexport type UseDeleteProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\" | \"onSettled\" | \"onMutate\"\n >;\n} & UseLoadingOvertimeOptionsProps;\n\n/**\n * `useDelete` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for delete mutations.\n *\n * It uses `deleteOne` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useDelete} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences/#httperror `HttpError`}\n * @typeParam TVariables - Values for params. default `{}`\n *\n */\nexport const useDelete = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n mutationOptions,\n overtimeOptions,\n}: UseDeleteProps<TData, TError, TVariables> = {}): UseDeleteReturnType<\n TData,\n TError,\n TVariables\n> => {\n const { mutate: checkError } = useOnError();\n const dataProvider = useDataProvider();\n\n const { resources, select } = useResourceParams();\n const queryClient = useQueryClient();\n\n const {\n mutationMode: mutationModeContext,\n undoableTimeout: undoableTimeoutContext,\n } = useMutationMode();\n\n const { notificationDispatch } = useCancelNotification();\n const translate = useTranslate();\n const publish = usePublish();\n const { log } = useLog();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutation = useMutation<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >({\n mutationFn: ({\n id,\n mutationMode,\n undoableTimeout,\n resource: resourceName,\n onCancel,\n meta,\n dataProviderName,\n values,\n }) => {\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n const undoableTimeoutPropOrContext =\n undoableTimeout ?? undoableTimeoutContext;\n\n if (!(mutationModePropOrContext === \"undoable\")) {\n return dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n ).deleteOne<TData, TVariables>({\n resource: resource.name,\n id,\n meta: combinedMeta,\n variables: values,\n });\n }\n\n const deletePromise = new Promise<DeleteOneResponse<TData>>(\n (resolve, reject) => {\n const doMutation = () => {\n dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n )\n .deleteOne<TData, TVariables>({\n resource: resource.name,\n id,\n meta: combinedMeta,\n variables: values,\n })\n .then((result) => resolve(result))\n .catch((err) => reject(err));\n };\n\n const cancelMutation = () => {\n reject({ message: \"mutationCancelled\" });\n };\n\n if (onCancel) {\n onCancel(cancelMutation);\n }\n\n notificationDispatch({\n type: ActionTypes.ADD,\n payload: {\n id,\n resource: identifier,\n cancelMutation: cancelMutation,\n doMutation: doMutation,\n seconds: undoableTimeoutPropOrContext,\n isSilent: !!onCancel,\n },\n });\n },\n );\n return deletePromise;\n },\n onMutate: async ({\n id,\n resource: resourceName,\n mutationMode,\n dataProviderName,\n meta,\n }) => {\n const { identifier } = select(resourceName);\n\n const { gqlMutation: _, gqlQuery: __, ...preferredMeta } = meta ?? {};\n\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n await queryClient.cancelQueries({\n queryKey: resourceKeys.get(),\n });\n\n const previousQueries: PreviousQuery<TData>[] =\n queryClient.getQueriesData({\n queryKey: resourceKeys.get(),\n });\n\n if (mutationModePropOrContext !== \"pessimistic\") {\n // Set the previous queries to the new ones:\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"list\")\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (!previous) {\n return null;\n }\n const data = previous.data.filter(\n (record: TData) => record.id?.toString() !== id.toString(),\n );\n\n return {\n data,\n total: previous.total - 1,\n };\n },\n );\n\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys.action(\"many\").get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (!previous) {\n return null;\n }\n const data = previous.data.filter((record: TData) => {\n return record.id?.toString() !== id?.toString();\n });\n\n return {\n ...previous,\n data,\n };\n },\n );\n }\n\n return {\n previousQueries,\n queryKey: resourceKeys.get(),\n };\n },\n onSettled: (\n _data,\n _error,\n {\n id,\n resource: resourceName,\n dataProviderName,\n invalidates = [\"list\", \"many\"],\n },\n ) => {\n const { identifier } = select(resourceName);\n\n // invalidate the cache for the list and many queries:\n invalidateStore({\n resource: identifier,\n dataProviderName: pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n ),\n invalidates,\n });\n\n notificationDispatch({\n type: ActionTypes.REMOVE,\n payload: { id, resource: identifier },\n });\n },\n onSuccess: (\n _data,\n {\n id,\n resource: resourceName,\n successNotification,\n dataProviderName: dataProviderNameFromProp,\n meta,\n },\n context,\n ) => {\n const { resource, identifier } = select(resourceName);\n const resourceSingular = textTransformers.singular(identifier);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n // Remove the queries from the cache:\n queryClient.removeQueries({\n queryKey: resourceKeys.action(\"one\").get(),\n });\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(_data, id, identifier)\n : successNotification;\n\n handleNotification(notificationConfig, {\n key: `${id}-${identifier}-notification`,\n description: translate(\"notifications.success\", \"Success\"),\n message: translate(\n \"notifications.deleteSuccess\",\n {\n resource: translate(\n `${identifier}.${identifier}`,\n resourceSingular,\n ),\n },\n `Successfully deleted a ${resourceSingular}`,\n ),\n type: \"success\",\n });\n\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"deleted\",\n payload: {\n ids: [id],\n },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"delete\",\n resource: resource.name,\n meta: {\n ...rest,\n dataProviderName,\n id,\n },\n });\n\n // Remove the queries from the cache:\n queryClient.removeQueries({\n queryKey: resourceKeys.action(\"one\").get(),\n });\n },\n onError: (\n err: TError,\n { id, resource: resourceName, errorNotification },\n context,\n ) => {\n const { identifier } = select(resourceName);\n\n // set back the queries to the context:\n if (context) {\n for (const query of context.previousQueries) {\n queryClient.setQueryData(query[0], query[1]);\n }\n }\n\n if (err.message !== \"mutationCancelled\") {\n checkError(err);\n\n const resourceSingular = textTransformers.singular(identifier);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(err, id, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${id}-${identifier}-notification`,\n message: translate(\n \"notifications.deleteError\",\n {\n resource: resourceSingular,\n statusCode: err.statusCode,\n },\n `Error (status code: ${err.statusCode})`,\n ),\n description: err.message,\n type: \"error\",\n });\n }\n },\n mutationKey: keys().data().mutation(\"delete\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useDelete\"),\n },\n });\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutation.isPending,\n });\n\n return {\n mutation,\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync,\n overtime: { elapsedTime },\n };\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type MutateOptions,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { handleMultiple, pickDataProvider } from \"@definitions\";\nimport {\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CreateManyResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n} from \"../../contexts/data/types\";\nimport type { UseMutationResult } from \"../../definitions/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type UseCreateManyParams<TData, TError, TVariables> = {\n resource?: string;\n values?: TVariables[];\n meta?: MetaQuery;\n dataProviderName?: string;\n invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification<CreateManyResponse<TData>, TError, TVariables[]>;\n\nexport type UseCreateManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n CreateManyResponse<TData>,\n TError,\n UseCreateManyParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCreateManyProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n CreateManyResponse<TData>,\n TError,\n UseCreateManyParams<TData, TError, TVariables>\n >,\n \"mutationFn\"\n >;\n} & UseLoadingOvertimeOptionsProps &\n UseCreateManyParams<TData, TError, TVariables>;\n\n/**\n * `useCreateMany` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for multiple create mutations.\n *\n * It uses `createMany` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useCreateMany} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\nexport const useCreateMany = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n resource: resourceFromProps,\n values: valuesFromProps,\n dataProviderName: dataProviderNameFromProps,\n successNotification: successNotificationFromProps,\n errorNotification: errorNotificationFromProps,\n meta: metaFromProps,\n invalidates: invalidatesFromProps,\n mutationOptions,\n overtimeOptions,\n}: UseCreateManyProps<TData, TError, TVariables> = {}): UseCreateManyReturnType<\n TData,\n TError,\n TVariables\n> &\n UseLoadingOvertimeReturnType => {\n const dataProvider = useDataProvider();\n const { resources, select } = useResourceParams();\n const translate = useTranslate();\n const publish = usePublish();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const { log } = useLog();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutationResult = useMutation<\n CreateManyResponse<TData>,\n TError,\n UseCreateManyParams<TData, TError, TVariables>\n >({\n mutationFn: ({\n resource: resourceName = resourceFromProps,\n values = valuesFromProps,\n meta = metaFromProps,\n dataProviderName = dataProviderNameFromProps,\n }: UseCreateManyParams<TData, TError, TVariables>) => {\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const selectedDataProvider = dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n );\n\n if (selectedDataProvider.createMany) {\n return selectedDataProvider.createMany<TData, TVariables>({\n resource: resource.name,\n variables: values,\n meta: combinedMeta,\n });\n }\n return handleMultiple(\n values.map((val) =>\n selectedDataProvider.create<TData, TVariables>({\n resource: resource.name,\n variables: val,\n meta: combinedMeta,\n }),\n ),\n );\n },\n onSuccess: (response, variables, context) => {\n const {\n resource: resourceName = resourceFromProps,\n successNotification = successNotificationFromProps,\n dataProviderName: dataProviderNameFromProp = dataProviderNameFromProps,\n invalidates = invalidatesFromProps ?? [\"list\", \"many\"],\n values = valuesFromProps,\n meta = metaFromProps,\n } = variables;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n const resourcePlural = textTransformers.plural(identifier);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(response, values, identifier)\n : successNotification;\n\n handleNotification(notificationConfig, {\n key: `createMany-${identifier}-notification`,\n message: translate(\n \"notifications.createSuccess\",\n {\n resource: translate(`${identifier}.${identifier}`, identifier),\n },\n `Successfully created ${resourcePlural}`,\n ),\n description: translate(\"notifications.success\", \"Success\"),\n type: \"success\",\n });\n\n invalidateStore({\n resource: identifier,\n dataProviderName,\n invalidates,\n });\n\n const ids = response?.data\n .filter((item) => item?.id !== undefined)\n .map((item) => item.id!);\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"created\",\n payload: {\n ids,\n },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"createMany\",\n resource: resource.name,\n data: values,\n meta: {\n dataProviderName,\n ids,\n ...rest,\n },\n });\n\n mutationOptions?.onSuccess?.(response, variables, context);\n },\n onError: (err: TError, variables, context) => {\n const {\n resource: resourceName = resourceFromProps,\n errorNotification = errorNotificationFromProps,\n values = valuesFromProps,\n } = variables;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(err, values, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `createMany-${identifier}-notification`,\n description: err.message,\n message: translate(\n \"notifications.createError\",\n {\n resource: translate(`${identifier}.${identifier}`, identifier),\n statusCode: err.statusCode,\n },\n `There was an error creating ${identifier} (status code: ${err.statusCode}`,\n ),\n type: \"error\",\n });\n\n mutationOptions?.onError?.(err, variables, context);\n },\n mutationKey: keys().data().mutation(\"createMany\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useCreateMany\"),\n },\n });\n const { mutate, mutateAsync } = mutationResult;\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutationResult.isPending,\n });\n\n // this function is used to make the `variables` parameter optional\n const handleMutation = (\n variables?: UseCreateManyParams<TData, TError, TVariables>,\n options?: MutateOptions<\n CreateManyResponse<TData>,\n TError,\n UseCreateManyParams<TData, TError, TVariables>,\n unknown\n >,\n ) => {\n return mutate(variables || {}, options);\n };\n\n // this function is used to make the `variables` parameter optional\n const handleMutateAsync = (\n variables?: UseCreateManyParams<TData, TError, TVariables>,\n options?: MutateOptions<\n CreateManyResponse<TData>,\n TError,\n UseCreateManyParams<TData, TError, TVariables>,\n unknown\n >,\n ) => {\n return mutateAsync(variables || {}, options);\n };\n\n return {\n mutation: mutationResult,\n mutate: handleMutation,\n mutateAsync: handleMutateAsync,\n overtime: { elapsedTime },\n };\n};\n\nconst missingResourceError = new Error(\n \"[useCreateMany]: `resource` is not defined or not matched but is required\",\n);\n\nconst missingValuesError = new Error(\n \"[useCreateMany]: `values` is not provided but is required\",\n);\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type MutateOptions,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { handleMultiple, pickDataProvider } from \"@definitions/helpers\";\nimport {\n useCancelNotification,\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n useMutationMode,\n useOnError,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n GetListResponse,\n GetManyResponse,\n GetOneResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n MutationMode,\n PrevContext as UpdateContext,\n QueryResponse,\n UpdateManyResponse,\n} from \"../../contexts/data/types\";\nimport type { UseMutationResult } from \"../../definitions/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport { ActionTypes } from \"../../contexts/undoableQueue/types\";\n\nexport type OptimisticUpdateManyMapType<TData, TVariables> = {\n list?:\n | ((\n previous: GetListResponse<TData> | null | undefined,\n values: TVariables,\n ids: BaseKey[],\n ) => GetListResponse<TData> | null)\n | boolean;\n many?:\n | ((\n previous: GetManyResponse<TData> | null | undefined,\n values: TVariables,\n ids: BaseKey[],\n ) => GetManyResponse<TData> | null)\n | boolean;\n detail?:\n | ((\n previous: GetOneResponse<TData> | null | undefined,\n values: TVariables,\n id: BaseKey,\n ) => GetOneResponse<TData> | null)\n | boolean;\n};\n\nexport type UpdateManyParams<TData, TError, TVariables> = {\n /**\n * ids for mutation function\n */\n ids?: BaseKey[];\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * [Determines when mutations are executed](/docs/advanced-tutorials/mutation-mode/)\n */\n mutationMode?: MutationMode;\n /**\n * Duration in ms to wait before executing the mutation when `mutationMode = \"undoable\"`\n */\n undoableTimeout?: number;\n /**\n * Provides a function to cancel the mutation when `mutationMode = \"undoable\"`\n */\n onCancel?: (cancelMutation: () => void) => void;\n /**\n * Values for mutation function\n */\n values?: TVariables;\n /**\n * meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * meta data for `dataProvider`\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n * @default {\n * list: true,\n * many: true,\n * detail: true,\n * }\n */\n optimisticUpdateMap?: OptimisticUpdateManyMapType<TData, TVariables>;\n} & SuccessErrorNotification<\n UpdateManyResponse<TData>,\n TError,\n { ids: BaseKey[]; values: TVariables }\n>;\n\nexport type UseUpdateManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n> &\n UseLoadingOvertimeReturnType;\n\nexport type UseUpdateManyProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n \"mutationFn\" | \"onMutate\"\n >;\n} & UseLoadingOvertimeOptionsProps &\n UpdateManyParams<TData, TError, TVariables>;\n\n/**\n * `useUpdateMany` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for multiple update mutations.\n *\n * It uses `updateMany` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useUpdateMany} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\nexport const useUpdateMany = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n ids: idsFromProps,\n resource: resourceFromProps,\n values: valuesFromProps,\n dataProviderName: dataProviderNameFromProps,\n successNotification: successNotificationFromProps,\n errorNotification: errorNotificationFromProps,\n meta: metaFromProps,\n mutationMode: mutationModeFromProps,\n undoableTimeout: undoableTimeoutFromProps,\n onCancel: onCancelFromProps,\n optimisticUpdateMap: optimisticUpdateMapFromProps,\n invalidates: invalidatesFromProps,\n mutationOptions,\n overtimeOptions,\n}: UseUpdateManyProps<TData, TError, TVariables> = {}): UseUpdateManyReturnType<\n TData,\n TError,\n TVariables\n> => {\n const { resources, select } = useResourceParams();\n const queryClient = useQueryClient();\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const {\n mutationMode: mutationModeContext,\n undoableTimeout: undoableTimeoutContext,\n } = useMutationMode();\n const { mutate: checkError } = useOnError();\n const { notificationDispatch } = useCancelNotification();\n const publish = usePublish();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const { log } = useLog();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutationResult = useMutation<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >({\n mutationFn: ({\n ids = idsFromProps,\n values = valuesFromProps,\n resource: resourceName = resourceFromProps,\n onCancel = onCancelFromProps,\n mutationMode = mutationModeFromProps,\n undoableTimeout = undoableTimeoutFromProps,\n meta = metaFromProps,\n dataProviderName = dataProviderNameFromProps,\n }: UpdateManyParams<TData, TError, TVariables>) => {\n if (!ids) throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n const undoableTimeoutPropOrContext =\n undoableTimeout ?? undoableTimeoutContext;\n\n const selectedDataProvider = dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n );\n\n const mutationFn = () => {\n if (selectedDataProvider.updateMany) {\n return selectedDataProvider.updateMany<TData, TVariables>({\n resource: resource.name,\n ids,\n variables: values,\n meta: combinedMeta,\n });\n }\n return handleMultiple(\n ids.map((id) =>\n selectedDataProvider.update<TData, TVariables>({\n resource: resource.name,\n id,\n variables: values,\n meta: combinedMeta,\n }),\n ),\n );\n };\n\n if (!(mutationModePropOrContext === \"undoable\")) {\n return mutationFn();\n }\n\n const updatePromise = new Promise<UpdateManyResponse<TData>>(\n (resolve, reject) => {\n const doMutation = () => {\n mutationFn()\n .then((result) => resolve(result))\n .catch((err) => reject(err));\n };\n\n const cancelMutation = () => {\n reject({ message: \"mutationCancelled\" });\n };\n\n if (onCancel) {\n onCancel(cancelMutation);\n }\n\n notificationDispatch({\n type: ActionTypes.ADD,\n payload: {\n id: ids,\n resource: identifier,\n cancelMutation: cancelMutation,\n doMutation: doMutation,\n seconds: undoableTimeoutPropOrContext,\n isSilent: !!onCancel,\n },\n });\n },\n );\n return updatePromise;\n },\n onMutate: async ({\n resource: resourceName = resourceFromProps,\n ids = idsFromProps,\n values = valuesFromProps,\n mutationMode = mutationModeFromProps,\n dataProviderName = dataProviderNameFromProps,\n meta = metaFromProps,\n optimisticUpdateMap = optimisticUpdateMapFromProps ?? {\n list: true,\n many: true,\n detail: true,\n },\n }) => {\n if (!ids) throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n const { gqlMutation: _, gqlQuery: __, ...preferredMeta } = meta ?? {};\n\n const queryKey = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n await queryClient.cancelQueries({\n queryKey: resourceKeys.get(),\n });\n\n const previousQueries = queryClient.getQueriesData<QueryResponse<TData>>({\n queryKey: resourceKeys.get(),\n });\n\n if (mutationModePropOrContext !== \"pessimistic\") {\n if (optimisticUpdateMap.list) {\n // Set the previous queries to the new ones:\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"list\")\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.list === \"function\") {\n return optimisticUpdateMap.list(previous, values, ids);\n }\n\n if (!previous) {\n return null;\n }\n\n const data = previous.data.map((record: TData) => {\n if (\n record.id !== undefined &&\n ids\n .filter((id) => id !== undefined)\n .map(String)\n .includes(record.id.toString())\n ) {\n return {\n ...record,\n ...values,\n };\n }\n\n return record;\n });\n\n return {\n ...previous,\n data,\n };\n },\n );\n }\n\n if (optimisticUpdateMap.many) {\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys.action(\"many\").get(),\n },\n (previous?: GetManyResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.many === \"function\") {\n return optimisticUpdateMap.many(previous, values, ids);\n }\n\n if (!previous) {\n return null;\n }\n\n const data = previous.data.map((record: TData) => {\n if (\n record.id !== undefined &&\n ids\n .filter((id) => id !== undefined)\n .map(String)\n .includes(record.id.toString())\n ) {\n return {\n ...record,\n ...values,\n };\n }\n return record;\n });\n return {\n ...previous,\n data,\n };\n },\n );\n }\n\n if (optimisticUpdateMap.detail) {\n for (const id of ids) {\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"one\")\n .id(id)\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetOneResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.detail === \"function\") {\n return optimisticUpdateMap.detail(previous, values, id);\n }\n\n if (!previous) {\n return null;\n }\n\n const data = {\n ...previous.data,\n ...values,\n };\n return {\n ...previous,\n data,\n };\n },\n );\n }\n }\n }\n\n return {\n previousQueries,\n };\n },\n onSettled: (data, error, variables, context) => {\n const {\n ids = idsFromProps,\n resource: resourceName = resourceFromProps,\n dataProviderName = dataProviderNameFromProps,\n invalidates = invalidatesFromProps,\n } = variables;\n if (!ids) throw missingIdError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n // invalidate the cache for the list and many queries:\n invalidateStore({\n resource: identifier,\n invalidates: invalidates ?? [\"list\", \"many\"],\n dataProviderName: pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n ),\n });\n\n ids.forEach((id) =>\n invalidateStore({\n resource: identifier,\n invalidates: invalidates ?? [\"detail\"],\n dataProviderName: pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n ),\n id,\n }),\n );\n\n notificationDispatch({\n type: ActionTypes.REMOVE,\n payload: { id: ids, resource: identifier },\n });\n\n mutationOptions?.onSettled?.(data, error, variables, context);\n },\n onSuccess: (data, variables, context) => {\n const {\n ids = idsFromProps,\n resource: resourceName = resourceFromProps,\n values = valuesFromProps,\n meta = metaFromProps,\n dataProviderName: dataProviderNameFromProp = dataProviderNameFromProps,\n successNotification = successNotificationFromProps,\n } = variables;\n if (!ids) throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n const resourceSingular = textTransformers.singular(identifier);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(data, { ids, values }, identifier)\n : successNotification;\n\n handleNotification(notificationConfig, {\n key: `${ids}-${identifier}-notification`,\n description: translate(\"notifications.success\", \"Successful\"),\n message: translate(\n \"notifications.editSuccess\",\n {\n resource: translate(`${identifier}.${identifier}`, identifier),\n },\n `Successfully updated ${resourceSingular}`,\n ),\n type: \"success\",\n });\n\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"updated\",\n payload: {\n ids: ids.map(String),\n },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n const previousData: any[] = [];\n if (context) {\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n ids.forEach((id) => {\n const queryData = queryClient.getQueryData<UpdateManyResponse<TData>>(\n resourceKeys.action(\"one\").id(id).get(),\n );\n\n previousData.push(\n Object.keys(values || {}).reduce<any>((acc, item: any) => {\n acc[item] = queryData?.data?.[item];\n return acc;\n }, {}),\n );\n });\n }\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"updateMany\",\n resource: resource.name,\n data: values,\n previousData,\n meta: {\n ...rest,\n dataProviderName,\n ids,\n },\n });\n\n mutationOptions?.onSuccess?.(data, variables, context);\n },\n onError: (err: TError, variables, context) => {\n const {\n ids = idsFromProps,\n resource: resourceName = resourceFromProps,\n errorNotification = errorNotificationFromProps,\n values = valuesFromProps,\n } = variables;\n if (!ids) throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n // set back the queries to the context:\n if (context) {\n for (const query of context.previousQueries) {\n queryClient.setQueryData(query[0], query[1]);\n }\n }\n\n if (err.message !== \"mutationCancelled\") {\n checkError(err);\n\n const resourceSingular = textTransformers.singular(identifier);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(err, { ids, values }, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${ids}-${identifier}-updateMany-error-notification`,\n message: translate(\n \"notifications.editError\",\n {\n resource: resourceSingular,\n statusCode: err.statusCode,\n },\n `Error when updating ${resourceSingular} (status code: ${err.statusCode})`,\n ),\n description: err.message,\n type: \"error\",\n });\n }\n\n mutationOptions?.onError?.(err, variables, context);\n },\n mutationKey: keys().data().mutation(\"updateMany\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useUpdateMany\"),\n },\n });\n const { mutate, mutateAsync, ...mutation } = mutationResult;\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutation.isPending,\n });\n\n // this function is used to make the `variables` parameter optional\n const handleMutation = (\n variables?: UpdateManyParams<TData, TError, TVariables>,\n options?: MutateOptions<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n ) => {\n return mutate(variables || {}, options);\n };\n\n // this function is used to make the `variables` parameter optional\n const handleMutateAsync = (\n variables?: UpdateManyParams<TData, TError, TVariables>,\n options?: MutateOptions<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n ) => {\n return mutateAsync(variables || {}, options);\n };\n\n return {\n mutation: mutationResult,\n mutate: handleMutation,\n mutateAsync: handleMutateAsync,\n overtime: { elapsedTime },\n };\n};\n\nconst missingResourceError = new Error(\n \"[useUpdateMany]: `resource` is not defined or not matched but is required\",\n);\n\nconst missingIdError = new Error(\n \"[useUpdateMany]: `id` is not defined but is required in edit and clone actions\",\n);\n\nconst missingValuesError = new Error(\n \"[useUpdateMany]: `values` is not provided but is required\",\n);\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { handleMultiple, pickDataProvider } from \"@definitions\";\nimport {\n useCancelNotification,\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n useMutationMode,\n useOnError,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n DeleteManyResponse,\n GetListResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n MutationMode,\n PrevContext as DeleteContext,\n PreviousQuery,\n} from \"../../contexts/data/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport { ActionTypes } from \"../../contexts/undoableQueue/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type DeleteManyParams<TData, TError, TVariables> = {\n /**\n * ids for mutation function\n */\n ids: BaseKey[];\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * [Determines when mutations are executed](/docs/advanced-tutorials/mutation-mode/)\n */\n mutationMode?: MutationMode;\n /**\n * Duration in ms to wait before executing the mutation when `mutationMode = \"undoable\"`\n */\n undoableTimeout?: number;\n /**\n * Provides a function to cancel the mutation when `mutationMode = \"undoable\"`\n */\n onCancel?: (cancelMutation: () => void) => void;\n /**\n * Metadata query for dataProvider\n */\n meta?: MetaQuery;\n /**\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n /**\n * Values for mutation function\n */\n values?: TVariables;\n} & SuccessErrorNotification<DeleteManyResponse<TData>, TError, BaseKey[]>;\n\nexport type UseDeleteManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = {\n mutation: UseMutationResult<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n unknown\n >;\n mutate: UseMutationResult<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >[\"mutate\"];\n mutateAsync: UseMutationResult<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >[\"mutateAsync\"];\n} & UseLoadingOvertimeReturnType;\n\nexport type UseDeleteManyProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\" | \"onSettled\" | \"onMutate\"\n >;\n} & UseLoadingOvertimeOptionsProps;\n\n/**\n * `useDeleteMany` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for multiple delete mutations.\n *\n * It uses `deleteMany` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useDeleteMany} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TVariables - Values for params. default `{}`\n *\n */\nexport const useDeleteMany = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n mutationOptions,\n overtimeOptions,\n}: UseDeleteManyProps<TData, TError, TVariables> = {}): UseDeleteManyReturnType<\n TData,\n TError,\n TVariables\n> => {\n const { mutate: checkError } = useOnError();\n\n const {\n mutationMode: mutationModeContext,\n undoableTimeout: undoableTimeoutContext,\n } = useMutationMode();\n const dataProvider = useDataProvider();\n const { notificationDispatch } = useCancelNotification();\n const translate = useTranslate();\n const publish = usePublish();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const { log } = useLog();\n const { resources, select } = useResourceParams();\n const queryClient = useQueryClient();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutation = useMutation<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >({\n mutationFn: ({\n resource: resourceName,\n ids,\n mutationMode,\n undoableTimeout,\n onCancel,\n meta,\n dataProviderName,\n values,\n }: DeleteManyParams<TData, TError, TVariables>) => {\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n const undoableTimeoutPropOrContext =\n undoableTimeout ?? undoableTimeoutContext;\n\n const selectedDataProvider = dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n );\n\n const mutationFn = () => {\n if (selectedDataProvider.deleteMany) {\n return selectedDataProvider.deleteMany<TData, TVariables>({\n resource: resource.name,\n ids,\n meta: combinedMeta,\n variables: values,\n });\n }\n return handleMultiple(\n ids.map((id) =>\n selectedDataProvider.deleteOne<TData, TVariables>({\n resource: resource.name,\n id,\n meta: combinedMeta,\n variables: values,\n }),\n ),\n );\n };\n\n if (!(mutationModePropOrContext === \"undoable\")) {\n return mutationFn();\n }\n\n const updatePromise = new Promise<DeleteManyResponse<TData>>(\n (resolve, reject) => {\n const doMutation = () => {\n mutationFn()\n .then((result) => resolve(result))\n .catch((err) => reject(err));\n };\n\n const cancelMutation = () => {\n reject({ message: \"mutationCancelled\" });\n };\n\n if (onCancel) {\n onCancel(cancelMutation);\n }\n\n notificationDispatch({\n type: ActionTypes.ADD,\n payload: {\n id: ids,\n resource: identifier,\n cancelMutation: cancelMutation,\n doMutation: doMutation,\n seconds: undoableTimeoutPropOrContext,\n isSilent: !!onCancel,\n },\n });\n },\n );\n return updatePromise;\n },\n onMutate: async ({\n ids,\n resource: resourceName,\n mutationMode,\n dataProviderName,\n meta,\n }) => {\n const { identifier } = select(resourceName);\n\n const { gqlMutation: _, gqlQuery: __, ...preferredMeta } = meta ?? {};\n\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n await queryClient.cancelQueries({\n queryKey: resourceKeys.get(),\n });\n\n const previousQueries: PreviousQuery<TData>[] =\n queryClient.getQueriesData({\n queryKey: resourceKeys.get(),\n });\n\n if (mutationModePropOrContext !== \"pessimistic\") {\n // Set the previous queries to the new ones:\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"list\")\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (!previous) {\n return null;\n }\n\n const data = previous.data.filter(\n (item) =>\n item.id && !ids.map(String).includes(item.id.toString()),\n );\n\n return {\n data,\n total: previous.total - 1,\n };\n },\n );\n\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys.action(\"many\").get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (!previous) {\n return null;\n }\n\n const data = previous.data.filter((record: TData) => {\n if (record.id) {\n return !ids.map(String).includes(record.id.toString());\n }\n return false;\n });\n\n return {\n ...previous,\n data,\n };\n },\n );\n\n for (const id of ids) {\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"one\")\n .id(id)\n .params(preferredMeta)\n .get(),\n },\n (previous?: any | null) => {\n if (!previous || previous.data.id === id) {\n return null;\n }\n return {\n ...previous,\n };\n },\n );\n }\n }\n\n return {\n previousQueries,\n };\n },\n // Always refetch after error or success:\n onSettled: (\n _data,\n _error,\n {\n resource: resourceName,\n ids,\n dataProviderName,\n invalidates = [\"list\", \"many\"],\n },\n ) => {\n const { identifier } = select(resourceName);\n\n // invalidate the cache for the list and many queries:\n invalidateStore({\n resource: identifier,\n dataProviderName: pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n ),\n invalidates,\n });\n\n notificationDispatch({\n type: ActionTypes.REMOVE,\n payload: { id: ids, resource: identifier },\n });\n },\n onSuccess: (\n _data,\n {\n ids,\n resource: resourceName,\n meta,\n dataProviderName: dataProviderNameFromProp,\n successNotification,\n },\n ) => {\n const { resource, identifier } = select(resourceName);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n // Remove the queries from the cache:\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n ids.forEach((id) =>\n queryClient.removeQueries({\n queryKey: resourceKeys.action(\"one\").id(id).get(),\n }),\n );\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(_data, ids, identifier)\n : successNotification;\n\n handleNotification(notificationConfig, {\n key: `${ids}-${identifier}-notification`,\n description: translate(\"notifications.success\", \"Success\"),\n message: translate(\n \"notifications.deleteSuccess\",\n {\n resource: translate(`${identifier}.${identifier}`, identifier),\n },\n `Successfully deleted ${identifier}`,\n ),\n type: \"success\",\n });\n\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"deleted\",\n payload: { ids },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"deleteMany\",\n resource: resource.name,\n meta: {\n ids,\n dataProviderName,\n ...rest,\n },\n });\n\n ids.forEach((id) =>\n queryClient.removeQueries({\n queryKey: resourceKeys.action(\"one\").id(id).get(),\n }),\n );\n },\n onError: (\n err,\n { ids, resource: resourceName, errorNotification },\n context,\n ) => {\n const { identifier } = select(resourceName);\n\n // set back the queries to the context:\n if (context) {\n for (const query of context.previousQueries) {\n queryClient.setQueryData(query[0], query[1]);\n }\n }\n\n if (err.message !== \"mutationCancelled\") {\n checkError(err);\n const resourceSingular = textTransformers.singular(identifier);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(err, ids, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${ids}-${identifier}-notification`,\n message: translate(\n \"notifications.deleteError\",\n {\n resource: resourceSingular,\n statusCode: err.statusCode,\n },\n `Error (status code: ${err.statusCode})`,\n ),\n description: err.message,\n type: \"error\",\n });\n }\n },\n mutationKey: keys().data().mutation(\"deleteMany\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useDeleteMany\"),\n },\n });\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutation.isPending,\n });\n\n return {\n mutation,\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync,\n overtime: { elapsedTime },\n };\n};\n","import { useDataProvider, useResourceParams } from \"@hooks\";\n\nexport const useApiUrl = (dataProviderName?: string): string => {\n const dataProvider = useDataProvider();\n const { resource } = useResourceParams();\n\n const { getApiUrl } = dataProvider(\n dataProviderName ?? resource?.meta?.dataProviderName,\n );\n\n return getApiUrl();\n};\n","import { useEffect } from \"react\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type QueryObserverResult,\n type UseQueryOptions,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { prepareQueryContext } from \"@definitions/helpers\";\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CrudFilter,\n CrudSort,\n CustomResponse,\n HttpError,\n MetaQuery,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\ninterface UseCustomConfig<TQuery, TPayload> {\n sorters?: CrudSort[];\n filters?: CrudFilter[];\n query?: TQuery;\n payload?: TPayload;\n headers?: {};\n}\n\n// Clean type without custom callback extensions\nexport type UseCustomQueryOptions<TQueryFnData, TError, TData> = Omit<\n UseQueryOptions<CustomResponse<TQueryFnData>, TError, CustomResponse<TData>>,\n \"queryKey\" | \"queryFn\"\n> & {\n // Make queryKey and queryFn optional for backward compatibility\n queryKey?: UseQueryOptions<\n CustomResponse<TQueryFnData>,\n TError,\n CustomResponse<TData>\n >[\"queryKey\"];\n queryFn?: UseQueryOptions<\n CustomResponse<TQueryFnData>,\n TError,\n CustomResponse<TData>\n >[\"queryFn\"];\n};\n\nexport type UseCustomProps<TQueryFnData, TError, TQuery, TPayload, TData> = {\n /**\n * request's URL\n */\n url: string;\n /**\n * request's method (`GET`, `POST`, etc.)\n */\n method: \"get\" | \"delete\" | \"head\" | \"options\" | \"post\" | \"put\" | \"patch\";\n /**\n * The config of your request. You can send headers, payload, query, filters and sorters using this field\n */\n config?: UseCustomConfig<TQuery, TPayload>;\n /**\n * react-query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options\n */\n queryOptions?: UseCustomQueryOptions<TQueryFnData, TError, TData>;\n /**\n * meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * meta data for `dataProvider`\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n CustomResponse<TData>,\n TError,\n Prettify<UseCustomConfig<TQuery, TPayload> & MetaQuery>\n> &\n UseLoadingOvertimeOptionsProps;\n\n/**\n * `useCustom` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/guides/queries `useQuery`} used for custom requests.\n *\n * It uses the `custom` method from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useCustom} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TQuery - Values for query params\n * @typeParam TPayload - Values for params\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport type UseCustomReturnType<TData, TError> = {\n query: QueryObserverResult<CustomResponse<TData>, TError>;\n result: {\n data: CustomResponse<TData>[\"data\"];\n };\n} & UseLoadingOvertimeReturnType;\n\nexport const useCustom = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TQuery = unknown,\n TPayload = unknown,\n TData extends BaseRecord = TQueryFnData,\n>({\n url,\n method,\n config,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\n dataProviderName,\n overtimeOptions,\n}: UseCustomProps<\n TQueryFnData,\n TError,\n TQuery,\n TPayload,\n TData\n>): UseCustomReturnType<TData, TError> => {\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const preferredMeta = meta;\n\n const { custom } = dataProvider(dataProviderName);\n\n const combinedMeta = getMeta({ meta: preferredMeta });\n\n if (custom) {\n const queryResponse = useQuery<\n CustomResponse<TQueryFnData>,\n TError,\n CustomResponse<TData>\n >({\n queryKey: keys()\n .data(dataProviderName)\n .mutation(\"custom\")\n .params({\n method,\n url,\n ...config,\n ...(preferredMeta || {}),\n })\n .get(),\n queryFn: (context) =>\n custom<TQueryFnData>({\n url,\n method,\n ...config,\n meta: {\n ...combinedMeta,\n ...prepareQueryContext(context as any),\n },\n }),\n ...queryOptions,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useCustom\"),\n },\n });\n\n // Handle success\n useEffect(() => {\n if (queryResponse.isSuccess && queryResponse.data) {\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(queryResponse.data, {\n ...config,\n ...combinedMeta,\n })\n : successNotification;\n\n handleNotification(notificationConfig);\n }\n }, [queryResponse.isSuccess, queryResponse.data, successNotification]);\n\n // Handle error\n useEffect(() => {\n if (queryResponse.isError && queryResponse.error) {\n checkError(queryResponse.error);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(queryResponse.error, {\n ...config,\n ...combinedMeta,\n })\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${method}-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: queryResponse.error.statusCode },\n `Error (status code: ${queryResponse.error.statusCode})`,\n ),\n description: queryResponse.error.message,\n type: \"error\",\n });\n }\n }, [queryResponse.isError, queryResponse.error?.message]);\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: queryResponse.isFetching,\n });\n\n return {\n query: queryResponse,\n result: {\n data: queryResponse.data?.data || ({} as TData),\n },\n overtime: { elapsedTime },\n };\n }\n throw Error(\"Not implemented custom on data provider.\");\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CreateResponse,\n HttpError,\n MetaQuery,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\ninterface UseCustomMutationConfig {\n headers?: {};\n}\n\ntype useCustomMutationParams<TData, TError, TVariables> = {\n url: string;\n method: \"post\" | \"put\" | \"patch\" | \"delete\";\n values: TVariables;\n /**\n * Meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n config?: UseCustomMutationConfig;\n} & SuccessErrorNotification<\n CreateResponse<TData>,\n TError,\n Prettify<UseCustomMutationConfig & MetaQuery>\n>;\n\nexport type UseCustomMutationReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutation: UseMutationResult<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n >;\n mutate: UseMutationResult<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n >[\"mutate\"];\n mutateAsync: UseMutationResult<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n >[\"mutateAsync\"];\n} & UseLoadingOvertimeReturnType;\n\nexport type UseCustomMutationOptions<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationOptions<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCustomMutationProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: UseCustomMutationOptions<TData, TError, TVariables>;\n} & UseLoadingOvertimeOptionsProps;\n\n/**\n * `useCustomMutation` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for create mutations.\n *\n * It uses the `custom` method from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useCustomMutation} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences/#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\n\nexport const useCustomMutation = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n mutationOptions,\n overtimeOptions,\n}: UseCustomMutationProps<\n TData,\n TError,\n TVariables\n> = {}): UseCustomMutationReturnType<TData, TError, TVariables> &\n UseLoadingOvertimeReturnType => {\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const mutationResult = useMutation<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n >({\n mutationKey: keys().data().mutation(\"customMutation\").get(),\n mutationFn: ({\n url,\n method,\n values,\n meta,\n dataProviderName,\n config,\n }: useCustomMutationParams<TData, TError, TVariables>) => {\n const combinedMeta = getMeta({\n meta: meta,\n });\n\n const { custom } = dataProvider(dataProviderName);\n\n if (custom) {\n return custom<TData>({\n url,\n method,\n payload: values,\n meta: combinedMeta,\n headers: { ...config?.headers },\n });\n }\n\n throw Error(\"Not implemented custom on data provider.\");\n },\n onSuccess: (data, variables, context) => {\n const {\n successNotification: successNotificationFromProp,\n config,\n meta,\n } = variables;\n\n const notificationConfig =\n typeof successNotificationFromProp === \"function\"\n ? successNotificationFromProp(data, {\n ...config,\n ...(meta || {}),\n })\n : successNotificationFromProp;\n\n handleNotification(notificationConfig);\n\n mutationOptions?.onSuccess?.(data, variables, context);\n },\n onError: (err: TError, variables, context) => {\n const {\n errorNotification: errorNotificationFromProp,\n method,\n config,\n meta,\n } = variables;\n\n checkError(err);\n\n const notificationConfig =\n typeof errorNotificationFromProp === \"function\"\n ? errorNotificationFromProp(err, {\n ...config,\n ...(meta || {}),\n })\n : errorNotificationFromProp;\n\n handleNotification(notificationConfig, {\n key: `${method}-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: err.statusCode },\n `Error (status code: ${err.statusCode})`,\n ),\n description: err.message,\n type: \"error\",\n });\n\n mutationOptions?.onError?.(err, variables, context);\n },\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useCustomMutation\"),\n },\n });\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutationResult.isPending,\n });\n\n return {\n mutation: mutationResult,\n mutate: mutationResult.mutate,\n mutateAsync: mutationResult.mutateAsync,\n overtime: { elapsedTime },\n };\n};\n","import { useCallback, useContext } from \"react\";\n\nimport { DataContext } from \"@contexts/data\";\nimport { type DataProvider, IDataContext } from \"../../contexts/data/types\";\nexport const useDataProvider = (): ((\n /**\n * The name of the `data provider` you want to access\n */\n dataProviderName?: string,\n) => DataProvider) => {\n const context = useContext(DataContext);\n\n const handleDataProvider = useCallback(\n (dataProviderName?: string) => {\n if (dataProviderName) {\n const dataProvider = context?.[dataProviderName];\n if (!dataProvider) {\n throw new Error(`\"${dataProviderName}\" Data provider not found`);\n }\n\n if (dataProvider && !context?.default) {\n throw new Error(\n \"If you have multiple data providers, you must provide default data provider property\",\n );\n }\n\n return context[dataProviderName];\n }\n\n if (context.default) {\n return context.default;\n }\n\n throw new Error(\n `There is no \"default\" data provider. Please pass dataProviderName.`,\n );\n },\n [context],\n );\n\n return handleDataProvider;\n};\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type { DataProvider, DataProviders, IDataContext } from \"./types\";\n\nexport const defaultDataProvider: DataProviders = {\n default: {} as DataProvider,\n};\n\nexport const DataContext =\n React.createContext<IDataContext>(defaultDataProvider);\n\ntype Props = PropsWithChildren<{\n dataProvider?: DataProvider | DataProviders;\n}>;\n\nexport const DataContextProvider: React.FC<Props> = ({\n children,\n dataProvider,\n}) => {\n let providerValue = defaultDataProvider;\n\n if (dataProvider) {\n if (\n !(\"default\" in dataProvider) &&\n (\"getList\" in dataProvider || \"getOne\" in dataProvider)\n ) {\n providerValue = {\n default: dataProvider,\n };\n } else {\n providerValue = dataProvider;\n }\n }\n\n return (\n <DataContext.Provider value={providerValue}>\n {children}\n </DataContext.Provider>\n );\n};\n","import { useEffect } from \"react\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type InfiniteData,\n type UseInfiniteQueryOptions,\n type UseInfiniteQueryResult,\n useInfiniteQuery,\n} from \"@tanstack/react-query\";\n\nimport {\n getNextPageParam,\n getPreviousPageParam,\n handlePaginationParams,\n pickDataProvider,\n prepareQueryContext,\n} from \"@definitions/helpers\";\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useResourceParams,\n useResourceSubscription,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CrudFilter,\n CrudSort,\n GetListResponse,\n HttpError,\n MetaQuery,\n Pagination,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport type { MakeOptional } from \"../../definitions/types\";\n\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport interface UseInfiniteListConfig {\n pagination?: Pagination;\n hasPagination?: boolean;\n filters?: CrudFilter[];\n}\n\ntype BaseInfiniteListProps = {\n /**\n * Metadata query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Pagination properties\n */\n pagination?: Pagination;\n /**\n * Sorter parameters\n */\n sorters?: CrudSort[];\n /**\n * Filter parameters\n */\n filters?: CrudFilter[];\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use\n */\n dataProviderName?: string;\n};\n\n// Custom type to extend UseInfiniteQueryOptions\nexport type UseInfiniteListQueryOptions<TQueryFnData, TError, TData> =\n MakeOptional<\n UseInfiniteQueryOptions<\n GetListResponse<TQueryFnData>,\n TError,\n InfiniteData<GetListResponse<TData>>\n >,\n \"queryKey\" | \"queryFn\" | \"initialPageParam\"\n >;\n\nexport type UseInfiniteListProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * Tanstack Query's [useInfiniteQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useInfiniteQuery) options\n */\n queryOptions?: Omit<\n UseInfiniteListQueryOptions<TQueryFnData, TError, TData>,\n \"getNextPageParam\"\n > & {\n /**\n * Make `getNextPageParam` optional to allow custom pagination logic\n */\n getNextPageParam?: UseInfiniteListQueryOptions<\n TQueryFnData,\n TError,\n TData\n >[\"getNextPageParam\"];\n };\n} & BaseInfiniteListProps &\n SuccessErrorNotification<\n InfiniteData<GetListResponse<TData>>,\n TError,\n Prettify<BaseInfiniteListProps>\n > &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps & {\n onSuccess?: (data: InfiniteData<GetListResponse<TData>>) => void;\n onError?: (error: TError) => void;\n };\n\nexport type UseInfiniteListReturnType<TData, TError> = {\n query: UseInfiniteQueryResult<InfiniteData<GetListResponse<TData>>, TError>;\n result: {\n data: InfiniteData<GetListResponse<TData>> | undefined;\n hasNextPage: boolean | undefined;\n hasPreviousPage: boolean | undefined;\n };\n} & UseLoadingOvertimeReturnType;\n\n/**\n * `useInfiniteList` is a modified version of `react-query`'s {@link https://tanstack.com/query/latest/docs/react/guides/infinite-queries `useInfiniteQuery`} used for retrieving items from a `resource` with pagination, sort, and filter configurations.\n *\n * It uses the `getList` method as the query function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useInfiniteList} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport const useInfiniteList = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n resource: resourceFromProp,\n filters,\n pagination,\n sorters,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\n liveMode,\n onLiveEvent,\n liveParams,\n dataProviderName,\n overtimeOptions,\n onSuccess,\n onError,\n}: UseInfiniteListProps<\n TQueryFnData,\n TError,\n TData\n>): UseInfiniteListReturnType<TData, TError> => {\n const { resources, resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const pickedDataProvider = pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n );\n const preferredMeta = meta;\n const prefferedFilters = filters;\n const prefferedSorters = sorters;\n const prefferedPagination = handlePaginationParams({\n pagination,\n });\n const isServerPagination = prefferedPagination.mode === \"server\";\n const notificationValues = {\n meta: preferredMeta,\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n pagination: prefferedPagination,\n sorters: prefferedSorters,\n };\n\n const isEnabled =\n queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n const combinedMeta = getMeta({ resource, meta: preferredMeta });\n\n const { getList } = dataProvider(pickedDataProvider);\n\n useResourceSubscription({\n resource: identifier,\n types: [\"*\"],\n params: {\n meta: combinedMeta,\n pagination: prefferedPagination,\n hasPagination: isServerPagination,\n sort: prefferedSorters,\n sorters: prefferedSorters,\n filters: prefferedFilters,\n subscriptionType: \"useList\",\n ...liveParams,\n },\n channel: `resources/${resource?.name}`,\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n meta: {\n ...combinedMeta,\n dataProviderName: pickedDataProvider,\n },\n });\n\n const queryResponse = useInfiniteQuery<\n GetListResponse<TQueryFnData>,\n TError,\n InfiniteData<GetListResponse<TData>>\n >({\n queryKey: keys()\n .data(pickedDataProvider)\n .resource(identifier)\n .action(\"infinite\")\n .params({\n ...(preferredMeta || {}),\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n ...(isServerPagination && {\n pagination: prefferedPagination,\n }),\n ...(sorters && {\n sorters,\n }),\n })\n .get(),\n queryFn: (context) => {\n const paginationProperties = {\n ...prefferedPagination,\n currentPage: context.pageParam,\n };\n\n const meta = {\n ...combinedMeta,\n ...prepareQueryContext(context),\n };\n\n return getList<TQueryFnData>({\n resource: resource?.name || \"\",\n pagination: prefferedPagination,\n filters: prefferedFilters,\n sorters: prefferedSorters,\n meta,\n }).then(({ data, total, ...rest }) => {\n return {\n data,\n total,\n pagination: paginationProperties,\n ...rest,\n };\n });\n },\n initialPageParam:\n queryOptions?.initialPageParam ?? prefferedPagination.currentPage,\n getNextPageParam: (lastPage) => getNextPageParam(lastPage),\n getPreviousPageParam: (lastPage) => getPreviousPageParam(lastPage),\n ...queryOptions,\n meta: {\n ...(queryOptions?.meta ?? {}),\n ...getXRay(\"useInfiniteList\", resource?.name),\n },\n });\n\n // Handle success\n useEffect(() => {\n if (queryResponse.isSuccess && queryResponse.data) {\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(\n queryResponse.data as unknown as InfiniteData<\n GetListResponse<TData>\n >,\n notificationValues,\n identifier,\n )\n : successNotification;\n\n handleNotification(notificationConfig);\n\n onSuccess?.(\n queryResponse.data as unknown as InfiniteData<GetListResponse<TData>>,\n );\n }\n }, [\n queryResponse.isSuccess,\n queryResponse.data,\n successNotification,\n onSuccess,\n ]);\n\n // Handle error\n useEffect(() => {\n if (queryResponse.isError && queryResponse.error) {\n checkError(queryResponse.error);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(\n queryResponse.error,\n notificationValues,\n identifier,\n )\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${identifier}-useInfiniteList-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: queryResponse.error.statusCode },\n `Error (status code: ${queryResponse.error.statusCode})`,\n ),\n description: queryResponse.error.message,\n type: \"error\",\n });\n\n onError?.(queryResponse.error);\n }\n }, [queryResponse.isError, queryResponse.error?.message]);\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: queryResponse.isFetching,\n });\n\n queryResponse.data?.pages;\n\n return {\n query: queryResponse,\n result: {\n data: queryResponse.data,\n hasNextPage: queryResponse.hasNextPage,\n hasPreviousPage: queryResponse.hasPreviousPage,\n },\n overtime: { elapsedTime },\n };\n};\n","import { useContext, useEffect } from \"react\";\n\nimport { LiveContext } from \"@contexts/live\";\nimport { RefineContext } from \"@contexts/refine\";\nimport { useInvalidate } from \"@hooks/invalidate\";\nimport { useResourceParams } from \"@hooks\";\n\nimport type {\n BaseKey,\n CrudFilter,\n CrudSort,\n MetaQuery,\n Pagination,\n} from \"../../../contexts/data/types\";\nimport type { LiveEvent, LiveModeProps } from \"../../../contexts/live/types\";\nimport type { IRefineContext } from \"../../../contexts/refine/types\";\n\nexport type UseResourceSubscriptionProps = {\n channel: string;\n params?: {\n ids?: BaseKey[];\n id?: BaseKey;\n sorters?: CrudSort[];\n filters?: CrudFilter[];\n subscriptionType: \"useList\" | \"useOne\" | \"useMany\";\n [key: string]: any;\n };\n types: LiveEvent[\"type\"][];\n resource?: string;\n enabled?: boolean;\n meta?: MetaQuery & { dataProviderName?: string };\n} & LiveModeProps;\n\nexport type PublishType = (event: LiveEvent) => void;\n\nexport const useResourceSubscription = ({\n resource: resourceFromProp,\n params,\n channel,\n types,\n enabled = true,\n liveMode: liveModeFromProp,\n onLiveEvent,\n meta,\n}: UseResourceSubscriptionProps): void => {\n const { resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n\n const { liveProvider } = useContext(LiveContext);\n const {\n liveMode: liveModeFromContext,\n onLiveEvent: onLiveEventContextCallback,\n } = useContext<IRefineContext>(RefineContext);\n\n const liveMode = liveModeFromProp ?? liveModeFromContext;\n\n const invalidate = useInvalidate();\n\n const dataProviderName =\n meta?.dataProviderName ?? resource?.meta?.dataProviderName;\n\n useEffect(() => {\n let subscription: any;\n\n const callback = (event: LiveEvent) => {\n if (liveMode === \"auto\") {\n invalidate({\n resource: identifier,\n dataProviderName,\n invalidates: [\"resourceAll\"],\n invalidationFilters: {\n type: \"active\",\n refetchType: \"active\",\n },\n invalidationOptions: { cancelRefetch: false },\n });\n }\n\n onLiveEvent?.(event);\n onLiveEventContextCallback?.(event);\n };\n\n if (liveMode && liveMode !== \"off\" && enabled) {\n subscription = liveProvider?.subscribe({\n channel,\n params: {\n resource: resource?.name,\n ...params,\n },\n types,\n callback,\n meta: {\n ...meta,\n dataProviderName,\n },\n });\n }\n\n return () => {\n if (subscription) {\n liveProvider?.unsubscribe(subscription);\n }\n };\n }, [enabled]);\n};\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type { ILiveContext } from \"./types\";\n\nexport const LiveContext = React.createContext<ILiveContext>({});\n\nexport const LiveContextProvider: React.FC<PropsWithChildren<ILiveContext>> = ({\n liveProvider,\n children,\n}) => {\n return (\n <LiveContext.Provider value={{ liveProvider }}>\n {children}\n </LiveContext.Provider>\n );\n};\n","import { useCallback } from \"react\";\n\nimport {\n type InvalidateOptions,\n type InvalidateQueryFilters,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { pickDataProvider } from \"@definitions\";\nimport { useKeys, useResourceParams } from \"@hooks\";\n\nimport type { BaseKey, IQueryKeys } from \"../../contexts/data/types\";\n\nexport type UseInvalidateProp = {\n resource?: string;\n id?: BaseKey;\n dataProviderName?: string;\n invalidates: Array<keyof IQueryKeys> | false;\n invalidationFilters?: InvalidateQueryFilters;\n invalidationOptions?: InvalidateOptions;\n};\n\nexport const useInvalidate = (): ((\n props: UseInvalidateProp,\n) => Promise<void>) => {\n const { resources } = useResourceParams();\n const queryClient = useQueryClient();\n const { keys } = useKeys();\n\n const invalidate = useCallback(\n async ({\n resource,\n dataProviderName,\n invalidates,\n id,\n invalidationFilters = { type: \"all\", refetchType: \"active\" },\n invalidationOptions = { cancelRefetch: false },\n }: UseInvalidateProp) => {\n if (invalidates === false) {\n return;\n }\n const dp = pickDataProvider(resource, dataProviderName, resources);\n\n const queryKey = keys()\n .data(dp)\n .resource(resource ?? \"\");\n\n await Promise.all(\n invalidates.map((key) => {\n switch (key) {\n case \"all\":\n return queryClient.invalidateQueries({\n queryKey: keys().data(dp).get(),\n ...invalidationFilters,\n ...invalidationOptions,\n });\n case \"list\":\n return queryClient.invalidateQueries({\n queryKey: queryKey.action(\"list\").get(),\n ...invalidationFilters,\n ...invalidationOptions,\n });\n case \"many\":\n return queryClient.invalidateQueries({\n queryKey: queryKey.action(\"many\").get(),\n ...invalidationFilters,\n ...invalidationOptions,\n });\n case \"resourceAll\":\n return queryClient.invalidateQueries({\n queryKey: queryKey.get(),\n ...invalidationFilters,\n ...invalidationOptions,\n });\n case \"detail\":\n return queryClient.invalidateQueries({\n queryKey: queryKey\n .action(\"one\")\n .id(id || \"\")\n .get(),\n ...invalidationFilters,\n ...invalidationOptions,\n });\n default:\n return;\n }\n }),\n );\n\n return;\n },\n [],\n );\n\n return invalidate;\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\n\nimport type { LiveModeProps } from \"../../../contexts/live/types\";\nimport type { IRefineContext } from \"../../../contexts/refine/types\";\n\nexport const useLiveMode = (\n liveMode: LiveModeProps[\"liveMode\"],\n): LiveModeProps[\"liveMode\"] => {\n const { liveMode: liveModeFromContext } =\n useContext<IRefineContext>(RefineContext);\n\n return liveMode ?? liveModeFromContext;\n};\n","import { useContext, useEffect } from \"react\";\n\nimport { LiveContext } from \"@contexts/live\";\n\nimport type {\n BaseKey,\n CrudFilter,\n CrudSort,\n MetaQuery,\n Pagination,\n} from \"../../../contexts/data/types\";\nimport type { LiveEvent } from \"../../../contexts/live/types\";\n\nexport type UseSubscriptionProps = {\n /**\n * Channel name to subscribe.\n */\n channel: string;\n /**\n * Callback that is run when new events from subscription arrive.\n */\n onLiveEvent: (event: LiveEvent) => void;\n /**\n * Type of events to subscribe. `\"*\"` means all events.\n * @type Array<\"deleted\" | \"updated\" | \"created\" | \"*\" | string>\n */\n types?: LiveEvent[\"type\"][];\n /**\n * Determines subscription should subscribe or not.\n * @type Array<\"deleted\" | \"updated\" | \"created\" | \"*\" | string>\n */\n enabled?: boolean;\n params?: {\n ids?: BaseKey[];\n id?: BaseKey;\n sorters?: CrudSort[];\n filters?: CrudFilter[];\n subscriptionType?: \"useList\" | \"useOne\" | \"useMany\";\n resource?: string;\n [key: string]: any;\n };\n meta?: MetaQuery & { dataProviderName?: string };\n};\n\nexport const useSubscription = ({\n params,\n channel,\n types = [\"*\"],\n enabled = true,\n onLiveEvent,\n meta,\n}: UseSubscriptionProps): void => {\n const { liveProvider } = useContext(LiveContext);\n\n useEffect(() => {\n let subscription: any;\n\n if (enabled) {\n subscription = liveProvider?.subscribe({\n channel,\n params,\n types,\n callback: onLiveEvent,\n meta: {\n ...meta,\n dataProviderName: meta?.dataProviderName ?? \"default\",\n },\n });\n }\n\n return () => {\n if (subscription) {\n liveProvider?.unsubscribe(subscription);\n }\n };\n }, [enabled]);\n};\n","import { useContext } from \"react\";\n\nimport { LiveContext } from \"@contexts/live\";\nimport type { LiveProvider } from \"../../../contexts/live/types\";\n\nexport const usePublish: () => NonNullable<LiveProvider>[\"publish\"] = () => {\n const { liveProvider } = useContext(LiveContext);\n\n return liveProvider?.publish;\n};\n","import { useContext } from \"react\";\n\nimport { UndoableQueueContext } from \"@contexts/undoableQueue\";\nimport type { IUndoableQueue } from \"../../../contexts/undoableQueue/types\";\n\nexport type UseCancelNotificationType = () => {\n notifications: IUndoableQueue[];\n notificationDispatch: React.Dispatch<any>;\n};\n\nexport const useCancelNotification: UseCancelNotificationType = () => {\n const { notifications, notificationDispatch } =\n useContext(UndoableQueueContext);\n\n return { notifications, notificationDispatch };\n};\n","import React, {\n createContext,\n useReducer,\n type PropsWithChildren,\n} from \"react\";\n\nimport isEqual from \"lodash/isEqual\";\n\nimport { UndoableQueue } from \"../../components\";\nimport {\n ActionTypes,\n type IUndoableQueue,\n type IUndoableQueueContext,\n} from \"./types\";\n\nexport const UndoableQueueContext = createContext<IUndoableQueueContext>({\n notifications: [],\n notificationDispatch: () => false,\n});\n\nconst initialState: IUndoableQueue[] = [];\n\nexport const undoableQueueReducer = (state: IUndoableQueue[], action: any) => {\n switch (action.type) {\n case ActionTypes.ADD: {\n const newState = state.filter((notificationItem: IUndoableQueue) => {\n return !(\n isEqual(notificationItem.id, action.payload.id) &&\n notificationItem.resource === action.payload.resource\n );\n });\n\n return [\n ...newState,\n {\n ...action.payload,\n isRunning: true,\n },\n ];\n }\n case ActionTypes.REMOVE:\n return state.filter(\n (notificationItem: IUndoableQueue) =>\n !(\n isEqual(notificationItem.id, action.payload.id) &&\n notificationItem.resource === action.payload.resource\n ),\n );\n case ActionTypes.DECREASE_NOTIFICATION_SECOND:\n return state.map((notificationItem: IUndoableQueue) => {\n if (\n isEqual(notificationItem.id, action.payload.id) &&\n notificationItem.resource === action.payload.resource\n ) {\n return {\n ...notificationItem,\n seconds: action.payload.seconds - 1000,\n };\n }\n return notificationItem;\n });\n default:\n return state;\n }\n};\n\nexport const UndoableQueueContextProvider: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n const [notifications, notificationDispatch] = useReducer(\n undoableQueueReducer,\n initialState,\n );\n\n const notificationData = { notifications, notificationDispatch };\n\n return (\n <UndoableQueueContext.Provider value={notificationData}>\n {children}\n {typeof window !== \"undefined\"\n ? notifications.map((notification) => (\n <UndoableQueue\n key={`${notification.id}-${notification.resource}-queue`}\n notification={notification}\n />\n ))\n : null}\n </UndoableQueueContext.Provider>\n );\n};\n","import { useContext } from \"react\";\n\nimport { NotificationContext } from \"@contexts/notification\";\nimport type { INotificationContext } from \"../../../contexts/notification/types\";\n\nexport const useNotification = (): INotificationContext => {\n const { open, close } = useContext(NotificationContext);\n\n return { open, close };\n};\n","import React, { createContext, type PropsWithChildren } from \"react\";\n\nimport type { INotificationContext } from \"./types\";\n\nexport const NotificationContext = createContext<INotificationContext>({});\n\nexport const NotificationContextProvider: React.FC<\n PropsWithChildren<INotificationContext>\n> = ({ open, close, children }) => {\n return (\n <NotificationContext.Provider value={{ open, close }}>\n {children}\n </NotificationContext.Provider>\n );\n};\n","import { useCallback } from \"react\";\n\nimport { useNotification } from \"@hooks\";\n\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\n\nexport const useHandleNotification = (): typeof handleNotification => {\n const { open } = useNotification();\n\n const handleNotification = useCallback(\n (\n notification: OpenNotificationParams | false | undefined,\n fallbackNotification?: OpenNotificationParams,\n ) => {\n if (notification !== false) {\n if (notification) {\n open?.(notification);\n } else if (fallbackNotification) {\n open?.(fallbackNotification);\n }\n }\n },\n [],\n );\n\n return handleNotification;\n};\n","import { useCallback, useContext } from \"react\";\n\nimport { I18nContext } from \"@contexts/i18n\";\n\n/**\n * If you need to change the locale at runtime, refine provides the `useSetLocale` hook.\n * It returns the changeLocale method from `i18nProvider` under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/translate/useSetLocale} for more details.\n */\nexport const useSetLocale = () => {\n const { i18nProvider } = useContext(I18nContext);\n\n return useCallback((lang: string) => i18nProvider?.changeLocale(lang), []);\n};\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type { II18nContext } from \"./types\";\n\nexport const I18nContext = React.createContext<II18nContext>({});\n\nexport const I18nContextProvider: React.FC<PropsWithChildren<II18nContext>> = ({\n children,\n i18nProvider,\n}) => {\n return (\n <I18nContext.Provider\n value={{\n i18nProvider,\n }}\n >\n {children}\n </I18nContext.Provider>\n );\n};\n","import { useContext, useMemo } from \"react\";\n\nimport { I18nContext } from \"@contexts/i18n\";\n\n/**\n * If you need to translate the texts in your own components, refine provides the `useTranslate` hook.\n * It returns the translate method from `i18nProvider` under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/translate/useTranslate} for more details.\n */\nexport const useTranslate = () => {\n const { i18nProvider } = useContext(I18nContext);\n\n const fn = useMemo(() => {\n function translate(\n key: string,\n options?: any,\n defaultMessage?: string,\n ): string;\n function translate(key: string, defaultMessage?: string): string;\n\n function translate(\n key: string,\n options?: string | any,\n defaultMessage?: string,\n ) {\n return (\n i18nProvider?.translate(key, options, defaultMessage) ??\n defaultMessage ??\n (typeof options === \"string\" && typeof defaultMessage === \"undefined\"\n ? options\n : key)\n );\n }\n\n return translate;\n }, [i18nProvider]);\n\n return fn;\n};\n","import { useCallback, useContext } from \"react\";\n\nimport { I18nContext } from \"@contexts/i18n\";\n\nexport type UseGetLocaleType = () => () => string;\n\n/**\n * If you need to know the current locale, refine provides the `useGetLocale` hook.\n * It returns the `getLocale` method from `i18nProvider` under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/translate/useGetLocale} for more details.\n */\nexport const useGetLocale: UseGetLocaleType = () => {\n const { i18nProvider } = useContext(I18nContext);\n\n if (!i18nProvider) {\n throw new Error(\n \"useGetLocale cannot be called without i18n provider being defined.\",\n );\n }\n\n return useCallback(() => i18nProvider.getLocale(), []);\n};\n","import { useGetLocale } from \"./useGetLocale\";\nimport { useSetLocale } from \"./useSetLocale\";\nimport { useTranslate } from \"./useTranslate\";\n\n/**\n * It combines `useTranslate`, `useSetLocale` and `useGetLocale` hooks for a better developer experience.\n * It returns `i18nProvider` methods under the hood.\n * @returns `translate` method to translate the texts.\n * @returns `changeLocale` method to change the locale\n * @returns `getLocale` method to get the current locale.\n *\n * @see {@link https://refine.dev/docs/i18n/i18n-provider/} for more details.\n */\nexport const useTranslation = () => {\n const translate = useTranslate();\n const changeLocale = useSetLocale();\n const getLocale = useGetLocale();\n\n return {\n translate,\n changeLocale,\n getLocale,\n };\n};\n","import { useState } from \"react\";\n\nimport papaparse from \"papaparse\";\nimport warnOnce from \"warn-once\";\n\nimport {\n downloadInBrowser,\n pickDataProvider,\n useUserFriendlyName,\n} from \"@definitions\";\nimport { useDataProvider, useMeta, useResourceParams } from \"@hooks\";\n\nimport type {\n BaseRecord,\n CrudFilter,\n CrudSort,\n MetaQuery,\n} from \"../../contexts/data/types\";\nimport type { MapDataFn } from \"./types\";\n\ntype UseExportOptionsType<\n TData extends BaseRecord = BaseRecord,\n TVariables = any,\n> = {\n /**\n * Resource name for API data interactions\n * @default Resource name that it reads from route\n */\n resource?: string;\n /**\n * A mapping function that runs for every record. Mapped data will be included in the file contents\n */\n mapData?: MapDataFn<TData, TVariables>;\n /**\n * Sorts records\n */\n sorters?: CrudSort[];\n /**\n * Filters records\n */\n filters?: CrudFilter[];\n maxItemCount?: number;\n /**\n * Requests to fetch data are made as batches by page size. By default, it is 20. Used for `getList` method of `DataProvider`\n */\n pageSize?: number;\n /**\n * Used for exporting options\n * @type [UnparseConfig](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/papaparse)\n */\n unparseConfig?: papaparse.UnparseConfig;\n /**\n * Metadata query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n /**\n * Callback to handle error events of this hook\n */\n onError?: (error: any) => void;\n /**\n * Whether to generate download of the CSV in browser environments, defaults to true.\n */\n download?: boolean;\n /**\n * Custom filename for the export file\n */\n filename?: string;\n /**\n * Whether to use text file format instead of CSV\n * @default false\n */\n useTextFile?: boolean;\n /**\n * Whether to include BOM (Byte Order Mark) in the file\n * @default true\n */\n useBom?: boolean;\n /**\n * Title to be shown at the top of the exported file\n */\n title?: string;\n /**\n * Whether to show the title in the exported file\n * @default false\n */\n showTitle?: boolean;\n};\n\ntype UseExportReturnType = {\n isLoading: boolean;\n triggerExport: () => Promise<string | undefined>;\n};\n\n/**\n * `useExport` hook allows you to make your resources exportable.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/import-export/useExport} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TVariables - Values for params.\n *\n */\nexport const useExport = <\n TData extends BaseRecord = BaseRecord,\n TVariables = any,\n>({\n resource: resourceFromProps,\n sorters,\n filters,\n maxItemCount,\n pageSize = 20,\n mapData = (item) => item as any,\n unparseConfig,\n meta,\n dataProviderName,\n onError,\n download,\n filename: customFilename,\n useTextFile = false,\n useBom = true,\n title = \"My Generated Report\",\n showTitle = false,\n}: UseExportOptionsType<TData, TVariables> = {}): UseExportReturnType => {\n const [isLoading, setIsLoading] = useState(false);\n\n const dataProvider = useDataProvider();\n const getMeta = useMeta();\n const { resource, resources, identifier } = useResourceParams({\n resource: resourceFromProps,\n });\n const getFriendlyName = useUserFriendlyName();\n\n const defaultFilename = `${getFriendlyName(\n identifier,\n \"plural\",\n )}-${new Date().toLocaleString()}`;\n\n const filename = customFilename ?? defaultFilename;\n\n const { getList } = dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n );\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const triggerExport = async () => {\n setIsLoading(true);\n\n let rawData: BaseRecord[] = [];\n\n let currentPage = 1;\n let preparingData = true;\n while (preparingData) {\n try {\n const { data, total } = await getList<TData>({\n resource: resource?.name ?? \"\",\n filters,\n sorters: sorters ?? [],\n pagination: {\n currentPage,\n pageSize,\n mode: \"server\",\n },\n meta: combinedMeta,\n });\n\n currentPage++;\n\n rawData.push(...data);\n\n if (maxItemCount && rawData.length >= maxItemCount) {\n rawData = rawData.slice(0, maxItemCount);\n preparingData = false;\n }\n\n if (total === rawData.length) {\n preparingData = false;\n }\n } catch (error) {\n setIsLoading(false);\n preparingData = false;\n\n onError?.(error);\n\n return;\n }\n }\n\n // Use provided unparseConfig or create default one\n const finalUnparseConfig: papaparse.UnparseConfig = {\n // Default settings for better compatibility\n quotes: true,\n header: true,\n ...unparseConfig,\n };\n\n let csv = papaparse.unparse(\n rawData.map(mapData as any),\n finalUnparseConfig,\n );\n if (showTitle) {\n csv = `${title}\\r\\n\\n${csv}`;\n }\n\n if (typeof window !== \"undefined\" && csv.length > 0 && (download ?? true)) {\n const fileExtension = useTextFile ? \".txt\" : \".csv\";\n const fileType = `text/${useTextFile ? \"plain\" : \"csv\"};charset=utf8;`;\n const downloadFilename = `${filename.replace(/ /g, \"_\")}${fileExtension}`;\n\n downloadInBrowser(\n downloadFilename,\n `${useBom ? \"\\ufeff\" : \"\"}${csv}`,\n fileType,\n );\n }\n\n setIsLoading(false);\n return csv;\n };\n\n return {\n isLoading,\n triggerExport,\n };\n};\n","import React from \"react\";\nimport warnOnce from \"warn-once\";\n\nimport {\n useMeta,\n useOne,\n useCreate,\n useUpdate,\n useResourceParams,\n useInvalidate,\n useMutationMode,\n useRefineOptions,\n useLoadingOvertime,\n useWarnAboutChange,\n useRedirectionAfterSubmission,\n} from \"@hooks\";\n\nimport {\n redirectPage,\n asyncDebounce,\n deferExecution,\n} from \"@definitions/helpers\";\n\nimport type { UpdateParams } from \"../data/useUpdate\";\nimport type { UseCreateParams } from \"../data/useCreate\";\nimport type { UseFormProps, UseFormReturnType } from \"./types\";\nimport type {\n BaseKey,\n BaseRecord,\n CreateResponse,\n HttpError,\n UpdateResponse,\n} from \"../../contexts/data/types\";\n\nexport type {\n ActionParams,\n UseFormProps,\n UseFormReturnType,\n AutoSaveIndicatorElements,\n AutoSaveProps,\n AutoSaveReturnType,\n FormAction,\n RedirectAction,\n FormWithSyncWithLocationParams,\n} from \"./types\";\n\n/**\n * This hook orchestrates Refine's data hooks to create, edit, and clone data. It also provides a set of features to make it easier for users to implement their real world needs and handle edge cases such as redirects, invalidation, auto-save and more.\n *\n * @see {@link https://refine.dev/docs/data/hooks/use-form} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/core/interface-references/#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/core/interface-references/#httperror `HttpError`}\n * @typeParam TVariables - Values for params. default `{}`\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/core/interface-references/#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n * @typeParam TResponse - Result data returned by the mutation function. Extends {@link https://refine.dev/docs/core/interface-references/#baserecord `BaseRecord`}. Defaults to `TData`\n * @typeParam TResponseError - Custom error object that extends {@link https://refine.dev/docs/core/interface-references/#httperror `HttpError`}. Defaults to `TError`\n *\n */\nexport const useForm = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n>(\n props: UseFormProps<\n TQueryFnData,\n TError,\n TVariables,\n TData,\n TResponse,\n TResponseError\n > = {},\n): UseFormReturnType<\n TQueryFnData,\n TError,\n TVariables,\n TData,\n TResponse,\n TResponseError\n> => {\n const getMeta = useMeta();\n const invalidate = useInvalidate();\n const { redirect: defaultRedirect } = useRefineOptions();\n const { mutationMode: defaultMutationMode } = useMutationMode();\n\n const { setWarnWhen } = useWarnAboutChange();\n const handleSubmitWithRedirect = useRedirectionAfterSubmission();\n\n const pickedMeta = props.meta;\n const mutationMode = props.mutationMode ?? defaultMutationMode;\n\n const {\n id,\n setId,\n resource,\n identifier,\n formAction: action,\n } = useResourceParams({\n resource: props.resource,\n id: props.id,\n action: props.action,\n });\n\n const [autosaved, setAutosaved] = React.useState(false);\n\n const isEdit = action === \"edit\";\n const isClone = action === \"clone\";\n const isCreate = action === \"create\";\n\n const combinedMeta = getMeta({\n resource,\n meta: pickedMeta,\n });\n\n const isIdRequired = (isEdit || isClone) && Boolean(props.resource);\n const isIdDefined = typeof props.id !== \"undefined\";\n const isQueryDisabled = props.queryOptions?.enabled === false;\n\n /**\n * When a custom resource is provided through props, `id` will not be inferred from the URL to avoid any potential faulty requests.\n * In this case, `id` is required to be passed through props.\n * If `id` is not handled, a warning will be thrown in development mode.\n */\n warnOnce(\n isIdRequired && !isIdDefined && !isQueryDisabled,\n idWarningMessage(action, identifier, id),\n );\n\n /**\n * Target action to redirect after form submission.\n */\n const redirectAction = redirectPage({\n redirectFromProps: props.redirect,\n action,\n redirectOptions: defaultRedirect,\n });\n\n /**\n * Redirection function to be used in internal redirects and to be provided to the user.\n */\n const redirect: UseFormReturnType[\"redirect\"] = (\n redirect = isEdit ? \"list\" : \"edit\",\n redirectId = id,\n routeParams = {},\n ) => {\n handleSubmitWithRedirect({\n redirect: redirect,\n resource,\n id: redirectId,\n meta: { ...pickedMeta, ...routeParams },\n });\n };\n\n const queryResult = useOne<TQueryFnData, TError, TData>({\n resource: identifier,\n id,\n queryOptions: {\n // Only enable the query if it's not a create action and the `id` is defined\n enabled: !isCreate && id !== undefined,\n ...props.queryOptions,\n },\n liveMode: props.liveMode,\n onLiveEvent: props.onLiveEvent,\n liveParams: props.liveParams,\n meta: { ...combinedMeta, ...props.queryMeta },\n dataProviderName: props.dataProviderName,\n overtimeOptions: { enabled: false },\n });\n\n const createMutation = useCreate<TResponse, TResponseError, TVariables>({\n mutationOptions: props.createMutationOptions,\n overtimeOptions: { enabled: false },\n });\n\n const updateMutation = useUpdate<TResponse, TResponseError, TVariables>({\n mutationOptions: props.updateMutationOptions,\n overtimeOptions: { enabled: false },\n });\n\n const mutationResult = isEdit ? updateMutation : createMutation;\n const isMutationLoading = mutationResult.mutation.isPending;\n const formLoading = isMutationLoading || queryResult.query.isFetching;\n\n const { elapsedTime } = useLoadingOvertime({\n ...props.overtimeOptions,\n isLoading: formLoading,\n });\n\n React.useEffect(() => {\n // After `autosaved` is set to `true`, it won't be set to `false` again.\n // Therefore, the `invalidate` function will be called only once at the end of the hooks lifecycle.\n return () => {\n if (\n props.autoSave?.invalidateOnUnmount &&\n autosaved &&\n identifier &&\n typeof id !== \"undefined\"\n ) {\n invalidate({\n id,\n invalidates: props.invalidates || [\"list\", \"many\", \"detail\"],\n dataProviderName: props.dataProviderName,\n resource: identifier,\n });\n }\n };\n }, [props.autoSave?.invalidateOnUnmount, autosaved]);\n\n const onFinish = async (\n values: TVariables,\n { isAutosave = false }: { isAutosave?: boolean } = {},\n ) => {\n const isPessimistic = mutationMode === \"pessimistic\";\n\n // Disable warning trigger when the form is being submitted\n setWarnWhen(false);\n\n // Redirect after a successful form submission\n const onSuccessRedirect = (id?: BaseKey) => redirect(redirectAction, id);\n\n const submissionPromise = new Promise<\n CreateResponse<TResponse> | UpdateResponse<TResponse> | void\n >((resolve, reject) => {\n // Reject the mutation if the resource is not defined\n if (!resource) return reject(missingResourceError);\n // Reject the mutation if the `id` is not defined in edit action\n // This line is commented out because the `id` might not be set for some cases and edit is done on a resource.\n // if (isEdit && !id) return reject(missingIdError);\n // Reject the mutation if the `id` is not defined in clone action\n if (isClone && !id) return reject(missingIdError);\n // Reject the mutation if there's no `values` passed\n if (!values) return reject(missingValuesError);\n // Auto Save is only allowed in edit action\n if (isAutosave && !isEdit) return reject(autosaveOnNonEditError);\n\n if (!isPessimistic && !isAutosave) {\n // If the mutation mode is not pessimistic, handle the redirect immediately in an async manner\n // `setWarnWhen` blocks the redirects until set to `false`\n // If redirect is done before the value is properly set, it will be blocked.\n // We're deferring the execution of the redirect to ensure that the value is set properly.\n deferExecution(() => onSuccessRedirect());\n // Resolve the promise immediately\n resolve();\n }\n\n const variables:\n | UpdateParams<TResponse, TResponseError, TVariables>\n | UseCreateParams<TResponse, TResponseError, TVariables> = {\n values,\n resource: identifier ?? resource.name,\n meta: { ...combinedMeta, ...props.mutationMeta },\n dataProviderName: props.dataProviderName,\n invalidates: isAutosave ? [] : props.invalidates,\n successNotification: isAutosave ? false : props.successNotification,\n errorNotification: isAutosave ? false : props.errorNotification,\n // Update specific variables\n ...(isEdit\n ? {\n id: id ?? \"\",\n mutationMode,\n undoableTimeout: props.undoableTimeout,\n optimisticUpdateMap: props.optimisticUpdateMap,\n }\n : {}),\n };\n\n const { mutateAsync } = isEdit ? updateMutation : createMutation;\n\n mutateAsync(variables as any, {\n // Call user-defined `onMutationSuccess` and `onMutationError` callbacks if provided\n // These callbacks will not have an effect on the submission promise\n onSuccess: props.onMutationSuccess\n ? (data, _, context) => {\n props.onMutationSuccess?.(data, values, context, isAutosave);\n }\n : undefined,\n onError: props.onMutationError\n ? (error: TResponseError, _, context) => {\n props.onMutationError?.(error, values, context, isAutosave);\n }\n : undefined,\n })\n // If the mutation mode is pessimistic, resolve the promise after the mutation is succeeded\n .then((data) => {\n if (isPessimistic && !isAutosave) {\n deferExecution(() => onSuccessRedirect(data?.data?.id));\n }\n if (isAutosave) {\n setAutosaved(true);\n }\n resolve(data);\n })\n // If the mutation mode is pessimistic, reject the promise after the mutation is failed\n .catch(reject);\n });\n\n return submissionPromise;\n };\n\n const onFinishAutoSave = asyncDebounce(\n (values: TVariables) => onFinish(values, { isAutosave: true }),\n props.autoSave?.debounce || 1000,\n \"Cancelled by debounce\",\n );\n\n const overtime = {\n elapsedTime,\n };\n\n const autoSaveProps = {\n status: updateMutation.mutation.status,\n data: updateMutation.mutation.data,\n error: updateMutation.mutation.error,\n };\n\n return {\n onFinish,\n onFinishAutoSave,\n formLoading,\n mutation: mutationResult.mutation,\n query: queryResult.query,\n autoSaveProps,\n id,\n setId,\n redirect,\n overtime,\n };\n};\n\nconst missingResourceError = new Error(\n \"[useForm]: `resource` is not defined or not matched but is required\",\n);\n\nconst missingIdError = new Error(\n \"[useForm]: `id` is not defined but is required in edit and clone actions\",\n);\n\nconst missingValuesError = new Error(\n \"[useForm]: `values` is not provided but is required\",\n);\n\nconst autosaveOnNonEditError = new Error(\n \"[useForm]: `autoSave` is only allowed in edit action\",\n);\n\nconst idWarningMessage = (action?: string, identifier?: string, id?: BaseKey) =>\n `[useForm]: action: \"${action}\", resource: \"${identifier}\", id: ${id}\n\nIf you don't use the \\`setId\\` method to set the \\`id\\`, you should pass the \\`id\\` prop to \\`useForm\\`. Otherwise, \\`useForm\\` will not be able to infer the \\`id\\` from the current URL with custom resource provided.\n\nSee https://refine.dev/docs/data/hooks/use-form/#id-`;\n","import { useCallback } from \"react\";\n\nimport { useNavigation } from \"@hooks\";\n\nimport type { BaseKey, MetaQuery } from \"../../contexts/data/types\";\nimport type { IResourceItem } from \"../../contexts/resource/types\";\nimport type { RedirectAction } from \"../form/types\";\n\nexport type UseRedirectionAfterSubmissionType = () => (options: {\n redirect: RedirectAction;\n resource?: IResourceItem;\n id?: BaseKey;\n meta?: MetaQuery;\n}) => void;\n\nexport const useRedirectionAfterSubmission: UseRedirectionAfterSubmissionType =\n () => {\n const { show, edit, list, create } = useNavigation();\n\n const handleSubmitWithRedirect = useCallback(\n ({\n redirect,\n resource,\n id,\n meta = {},\n }: {\n redirect: RedirectAction;\n resource?: IResourceItem;\n id?: BaseKey;\n meta?: MetaQuery;\n }) => {\n if (redirect && resource) {\n if (!!resource.show && redirect === \"show\" && id) {\n return show(resource, id, undefined, meta);\n }\n\n if (!!resource.edit && redirect === \"edit\" && id) {\n return edit(resource, id, undefined, meta);\n }\n\n if (!!resource.create && redirect === \"create\") {\n return create(resource, undefined, meta);\n }\n\n return list(resource, \"push\", meta);\n }\n return;\n },\n [],\n );\n\n return handleSubmitWithRedirect;\n };\n","import React, { useCallback, useContext } from \"react\";\n\nimport { RouterContext } from \"@contexts/router\";\nimport { useResourceParams } from \"@hooks/use-resource-params\";\n\nimport type { BaseKey } from \"../../../contexts/data/types\";\nimport type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type {\n Action,\n GoConfig as GoConfigBase,\n} from \"../../../contexts/router/types\";\nimport { useGetToPath } from \"../use-get-to-path\";\n\ntype ResourceWithoutId = {\n /**\n * The name or identifier of the resource.\n */\n resource: string;\n action: Extract<Action, \"create\" | \"list\">;\n id?: never;\n meta?: Record<string, unknown>;\n};\n\ntype ResourceWithId = {\n /**\n * The name or identifier of the resource.\n */\n resource: string;\n action: Extract<Action, \"edit\" | \"show\" | \"clone\">;\n id: BaseKey;\n meta?: Record<string, unknown>;\n};\n\nexport type Resource = ResourceWithoutId | ResourceWithId;\n\nexport type GoConfigWithResource = Omit<GoConfigBase, \"to\"> & {\n to?: GoConfigBase[\"to\"] | Resource;\n};\n\nexport const useGo = () => {\n const routerContext = useContext(RouterContext);\n const { select: resourceSelect } = useResourceParams();\n const getToPath = useGetToPath();\n\n const useGo = React.useMemo(\n () => routerContext?.go ?? (() => () => undefined),\n [routerContext?.go],\n );\n\n const goFromRouter = useGo();\n\n const go = useCallback(\n (config: GoConfigWithResource | GoConfigBase) => {\n if (typeof config.to !== \"object\") {\n return goFromRouter({ ...config, to: config.to });\n }\n\n // when config.to is an object, it means that we want to go to a resource.\n // so we need to find the path for the resource.\n const { resource } = resourceSelect(config.to.resource);\n handleResourceErrors(config.to, resource);\n const newTo = getToPath({\n resource,\n action: config.to.action,\n meta: {\n id: config.to.id,\n ...config.to.meta,\n },\n });\n\n return goFromRouter({\n ...config,\n to: newTo,\n });\n },\n [resourceSelect, goFromRouter],\n );\n\n return go;\n};\n\n/**\n * handle errors for resource\n * @internal\n */\nexport const handleResourceErrors = (to: Resource, resource: IResourceItem) => {\n if (!to?.action || !to?.resource) {\n throw new Error(`[useGo]: \"action\" or \"resource\" is required.`);\n }\n\n if ([\"edit\", \"show\", \"clone\"].includes(to?.action) && !to.id) {\n throw new Error(\n `[useGo]: [action: ${to.action}] requires an \"id\" for resource [resource: ${to.resource}]`,\n );\n }\n\n const actionUrl = resource[to.action];\n if (!actionUrl) {\n throw new Error(\n `[useGo]: [action: ${to.action}] is not defined for [resource: ${to.resource}]`,\n );\n }\n};\n","import React, { createContext, type PropsWithChildren } from \"react\";\nimport type { RouterProvider } from \"./types\";\n\nconst defaultRouterProvider = {};\n\nexport const RouterContext = createContext<RouterProvider>(\n defaultRouterProvider,\n);\n\nexport const RouterContextProvider: React.FC<\n PropsWithChildren<{ router?: RouterProvider }>\n> = ({ children, router }) => {\n return (\n <RouterContext.Provider value={router ?? defaultRouterProvider}>\n {children}\n </RouterContext.Provider>\n );\n};\n","import React, { useContext } from \"react\";\n\nimport { ResourceContext } from \"@contexts/resource\";\nimport { useId } from \"./use-id\";\nimport { useAction } from \"./use-action\";\nimport type { BaseKey } from \"../../contexts/data/types\";\nimport type { IResourceItem } from \"../../contexts/resource/types\";\nimport type { Action } from \"../../contexts/router/types\";\nimport type { FormAction } from \"../form/types\";\nimport { type SelectReturnType, useResource } from \"./use-resource\";\n\ntype Props = {\n id?: BaseKey;\n resource?: string;\n action?: Action;\n};\n\ntype ResourceParams = {\n id?: BaseKey;\n setId: React.Dispatch<React.SetStateAction<BaseKey | undefined>>;\n resource?: IResourceItem;\n resources: IResourceItem[];\n action?: Action;\n identifier?: string;\n formAction: FormAction;\n select: <T extends boolean = true>(\n resourceName: string,\n force?: T,\n ) => SelectReturnType<T>;\n};\n\n/**\n * Interactions in Refine has 3 main parameters: resource, action and id.\n *\n * This hook is used to manage these parameters based on below conditions and outputs the final parameters.\n *\n * `resource`: The resource to be used. (either the identifier or the name of the resource)\n * - If a `resource` is provided, it will be used (even if it's not defined in the <Refine/> component)\n * - If a `resource` is not provided, it will be inferred from the route.\n * `id`: The `id` of the record to be used.\n * - If an `id` is provided, it will be used.\n * - If an `id` is not provided, it will either be inferred from the route or will be `undefined`.\n * -- If a custom resource is provided and it's different from the inferred resource, the id will be undefined.\n * -- If a custom resource is provided and it's same as the inferred resource, the id will be inferred from the route.\n * -- If a custom resource is not provided, the id will be inferred from the route.\n * `action`: The action to be used.\n * - If an `action` is provided, it will be used.\n * - If an `action` is not provided, it will be inferred from the route.\n * `formAction`: The action to be used in the form.\n * - `formAction` can only be \"edit\", \"clone\" or \"create\".\n * - If action is \"edit\" or \"clone\", `formAction` will be the same as action.\n * - Same as `id`, if passed resource is different from inferred resource, `formAction` will fallback to \"create\" and ignore the action from the route.\n */\nexport function useResourceParams(props?: Props): ResourceParams {\n const { resources } = useContext(ResourceContext);\n\n const {\n select,\n identifier: inferredIdentifier,\n resource: inferredResource,\n } = useResource();\n const resourceToCheck = props?.resource ?? inferredIdentifier;\n const { identifier = undefined, resource = undefined } = resourceToCheck\n ? select(resourceToCheck, true)\n : {};\n\n const isSameResource = inferredIdentifier === identifier;\n const inferredId = useId();\n const action = useAction(props?.action);\n\n const defaultId = React.useMemo(() => {\n if (!isSameResource) return props?.id;\n\n return props?.id ?? inferredId;\n }, [isSameResource, props?.id, inferredId]);\n\n const [id, setId] = React.useState<BaseKey | undefined>(defaultId);\n\n React.useMemo(() => setId(defaultId), [defaultId]);\n\n const formAction = React.useMemo(() => {\n if (!isSameResource && !props?.action) {\n return \"create\";\n }\n\n if (action === \"edit\" || action === \"clone\") {\n return action;\n }\n\n return \"create\";\n }, [action, isSameResource, props?.action]);\n\n return {\n id,\n setId,\n resource: resource || inferredResource,\n resources,\n action,\n identifier,\n formAction,\n select,\n };\n}\n","import React from \"react\";\n\nimport { useDeepMemo } from \"@hooks/deepMemo\";\n\nimport type { IResourceContext, IResourceItem, ResourceProps } from \"./types\";\n\nexport const ResourceContext = React.createContext<IResourceContext>({\n resources: [],\n});\n\nexport const ResourceContextProvider: React.FC<\n React.PropsWithChildren<{ resources: ResourceProps[] }>\n> = ({ resources: providedResources, children }) => {\n const resources: IResourceItem[] = useDeepMemo(() => {\n return providedResources ?? [];\n }, [providedResources]);\n\n return (\n <ResourceContext.Provider value={{ resources }}>\n {children}\n </ResourceContext.Provider>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useMemoized } from \"@hooks/memoized\";\n\n/**\n * Hook that memoizes the given dependency array and checks the consecutive calls with deep equality and returns the same value as the first call if dependencies are not changed.\n * @internal\n */\nexport const useDeepMemo = <T,>(\n fn: () => T,\n dependencies: React.DependencyList,\n): T => {\n const memoizedDependencies = useMemoized(dependencies);\n\n const value = useMemo(fn, memoizedDependencies);\n\n return value;\n};\n","import { useRef } from \"react\";\nimport isEqual from \"lodash/isEqual\";\n\n/**\n * Hook that memoizes the given value with deep equality.\n * @internal\n */\nexport const useMemoized = <T = unknown>(value: T): T => {\n const ref = useRef(value);\n\n if (!isEqual(ref.current, value)) {\n ref.current = value;\n }\n\n return ref.current;\n};\n","import React from \"react\";\nimport { useParse } from \"../use-parse\";\n\nexport const useParsed = <\n TParams extends Record<string, any> = Record<string, any>,\n>() => {\n const parse = useParse();\n\n const parsed = React.useMemo(() => parse<TParams>(), [parse]);\n\n return parsed;\n};\n","import { RouterContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\nimport type {\n ParseFunction,\n ParseResponse,\n} from \"../../../contexts/router/types\";\n\ntype UseParseType = () => <\n TParams extends Record<string, any> = Record<string, any>,\n>() => ParseResponse<TParams>;\n\nexport const useParse: UseParseType = () => {\n const routerContext = useContext(RouterContext);\n\n const useParse = React.useMemo(\n () =>\n routerContext?.parse ??\n (() =>\n (() => {\n return {};\n }) as ParseFunction),\n [routerContext?.parse],\n );\n\n const parse = useParse();\n\n return parse as ReturnType<UseParseType>;\n};\n","import { useParsed } from \"../../router/use-parsed\";\nimport type { BaseKey } from \"../../../contexts/data/types\";\n\n/**\n * Returns the id from the router.\n *\n * Additionally, if an id is provided as a parameter, it will be used instead of the inferred id.\n *\n * @internal usage only\n */\nexport const useId = (id?: BaseKey) => {\n const parsed = useParsed();\n\n return id ?? parsed.id;\n};\n","import { useParsed } from \"../../router/use-parsed\";\nimport type { Action } from \"../../../contexts/router/types\";\n\n/**\n * Returns the action from the router.\n *\n * Additionally, if an action is provided as a parameter, it will be used instead of the inferred action.\n *\n * @internal usage only\n */\nexport const useAction = (action?: Action) => {\n const parsed = useParsed();\n\n return action ?? parsed.action;\n};\n","import { useContext } from \"react\";\n\nimport { ResourceContext } from \"@contexts/resource\";\n\nimport type { IResourceItem } from \"../../../contexts/resource/types\";\nimport { pickResource } from \"../../../definitions/helpers/pick-resource\";\nimport { useParsed } from \"../../router/use-parsed\";\n\n/**\n * Matches the resource by identifier.\n * If not provided, the resource from the route will be returned.\n * If your resource does not explicitly define an identifier, the resource name will be used.\n */\nexport type UseResourceParam = string | undefined;\n\nexport type SelectReturnType<T extends boolean> = T extends true\n ? { resource: IResourceItem; identifier: string }\n : { resource: IResourceItem; identifier: string } | undefined;\n\nexport type UseResourceReturnType = {\n resources: IResourceItem[];\n resource?: IResourceItem;\n select: <T extends boolean = true>(\n resourceName: string,\n force?: T,\n ) => SelectReturnType<T>;\n identifier?: string;\n};\n\ntype UseResourceReturnTypeWithResource = UseResourceReturnType & {\n resource: IResourceItem;\n identifier: string;\n};\n\n/**\n * @internal\n */\nexport function useResource(): UseResourceReturnType;\n/**\n * @internal\n */\nexport function useResource<TIdentifier = UseResourceParam>(\n identifier: TIdentifier,\n): TIdentifier extends NonNullable<UseResourceParam>\n ? UseResourceReturnTypeWithResource\n : UseResourceReturnType;\n/**\n *\n * @internal\n *\n * `useResource` is used to get `resources` that are defined as property of the `<Refine>` component.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/resource/useResource} for more details.\n *\n */\nexport function useResource(args?: UseResourceParam): UseResourceReturnType {\n const { resources } = useContext(ResourceContext);\n\n const params = useParsed();\n\n const select = <T extends boolean = true>(\n resourceName: string,\n force = true,\n ): SelectReturnType<T> => {\n const pickedResource = pickResource(resourceName, resources);\n\n if (pickedResource) {\n return {\n resource: pickedResource,\n identifier: pickedResource.identifier ?? pickedResource.name,\n } as SelectReturnType<T>;\n }\n\n if (force) {\n const resource: IResourceItem = {\n name: resourceName,\n identifier: resourceName,\n };\n\n const identifier = resource.identifier ?? resource.name;\n\n return {\n resource,\n identifier,\n } as SelectReturnType<T>;\n }\n\n return undefined as SelectReturnType<T>;\n };\n\n let resource: IResourceItem | undefined = undefined;\n // we try to pick the resource from props first\n const identifier = args;\n if (identifier) {\n const pickedFromProps = pickResource(identifier, resources);\n if (pickedFromProps) {\n resource = pickedFromProps;\n } else {\n resource = {\n name: identifier,\n };\n }\n } else if (params?.resource) {\n resource = params.resource;\n }\n\n return {\n resources,\n resource,\n select,\n identifier: resource?.identifier ?? resource?.name,\n };\n}\n","import React from \"react\";\n\nimport type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport { getActionRoutesFromResource } from \"../../../definitions/helpers/router\";\nimport { composeRoute } from \"../../../definitions/helpers/router/compose-route\";\nimport { useResourceParams } from \"../../use-resource-params\";\nimport { useParsed } from \"../use-parsed\";\n\ntype UseToPathParams = {\n resource?: IResourceItem;\n action: Action;\n meta?: Record<string, unknown>;\n};\n\ntype GetToPathFn = (params: UseToPathParams) => string | undefined;\n\n/**\n * Returns a function to get the route for a given action and resource.\n * If resource is not provided, it will use the resource from the route.\n * If the resource is not found, it will return undefined.\n * If the action is not found, it will return undefined.\n * `meta` can be provided to compose the routes with parameters. (Can be used for nested routes.)\n */\nexport const useGetToPath = (): GetToPathFn => {\n const { resource: resourceFromRoute, resources } = useResourceParams();\n const parsed = useParsed();\n\n const fn = React.useCallback(\n ({ resource, action, meta }: UseToPathParams): string | undefined => {\n const selectedResource = resource || resourceFromRoute;\n\n if (!selectedResource) {\n return undefined;\n }\n\n const actionRoutes = getActionRoutesFromResource(\n selectedResource,\n resources,\n );\n\n const actionRoute = actionRoutes.find(\n (item) => item.action === action,\n )?.route;\n\n if (!actionRoute) {\n return undefined;\n }\n\n const composed = composeRoute(\n actionRoute,\n selectedResource?.meta,\n parsed,\n meta,\n );\n\n return composed;\n },\n [resources, resourceFromRoute, parsed],\n );\n\n return fn;\n};\n","import { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { getActionRoutesFromResource } from \"@definitions/helpers/router\";\nimport { composeRoute } from \"@definitions/helpers/router/compose-route\";\nimport { useResourceParams } from \"@hooks\";\nimport { useGo } from \"@hooks/router/use-go\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\n\nimport type { BaseKey, MetaQuery } from \"../../contexts/data/types\";\nimport type { IResourceItem } from \"../../contexts/resource/types\";\n\nexport type HistoryType = \"push\" | \"replace\";\n\n/**\n * `refine` uses {@link https://reactrouter.com/en/main/hooks/use-navigate#usenavigate `React Router`} and comes with all redirects out of the box.\n * It allows you to manage your routing operations in refine.\n * Using this hook, you can manage all the routing operations of your application very easily.\n *\n * @internal This is an internal hook of refine. Do not use it directly.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/navigation/useNavigation} for more details.\n */\nexport const useNavigation = () => {\n const { resources } = useResourceParams();\n const parsed = useParsed();\n const go = useGo();\n\n const handleUrl = (url: string, type: HistoryType = \"push\") => {\n go({ to: url, type });\n };\n\n const createUrl = (\n resource: string | IResourceItem,\n meta: MetaQuery = {},\n ) => {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const createActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"create\")?.route;\n\n if (!createActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(createActionRoute, resourceItem?.meta, parsed, meta),\n type: \"path\",\n query: meta.query,\n }) as string;\n };\n\n const editUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const editActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"edit\")?.route;\n\n if (!editActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(editActionRoute, resourceItem?.meta, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n query: meta.query,\n }) as string;\n };\n\n const cloneUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const cloneActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"clone\")?.route;\n\n if (!cloneActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(cloneActionRoute, resourceItem?.meta, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n query: meta.query,\n }) as string;\n };\n\n const showUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const showActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"show\")?.route;\n\n if (!showActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(showActionRoute, resourceItem?.meta, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n query: meta.query,\n }) as string;\n };\n\n const listUrl = (resource: string | IResourceItem, meta: MetaQuery = {}) => {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const listActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"list\")?.route;\n\n if (!listActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(listActionRoute, resourceItem?.meta, parsed, meta),\n type: \"path\",\n query: meta.query,\n }) as string;\n };\n\n const create = (\n resource: string | IResourceItem,\n type: HistoryType = \"push\",\n meta: MetaQuery = {},\n ) => {\n handleUrl(createUrl(resource, meta), type);\n };\n\n const edit = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaQuery = {},\n ) => {\n handleUrl(editUrl(resource, id, meta), type);\n };\n\n const clone = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaQuery = {},\n ) => {\n handleUrl(cloneUrl(resource, id, meta), type);\n };\n\n const show = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaQuery = {},\n ) => {\n handleUrl(showUrl(resource, id, meta), type);\n };\n\n const list = (\n resource: string | IResourceItem,\n type: HistoryType = \"push\",\n meta: MetaQuery = {},\n ) => {\n handleUrl(listUrl(resource, meta), type);\n };\n\n return {\n create,\n createUrl,\n edit,\n editUrl,\n clone,\n cloneUrl,\n show,\n showUrl,\n list,\n listUrl,\n };\n};\n","import warnOnce from \"warn-once\";\nimport { useMeta, useOne, useResourceParams } from \"@hooks\";\n\nimport type { UseShowProps, UseShowReturnType } from \"./types\";\nimport type { BaseKey, BaseRecord, HttpError } from \"../../contexts/data/types\";\n\nexport type {\n UseShowProps,\n UseShowReturnType,\n} from \"./types\";\n\n/**\n * `useShow` hook allows you to fetch the desired record.\n * It uses `getOne` method as query function from the dataProvider that is\n * passed to {@link https://refine.dev/docs/core/refine-component `<Refine>`}.\n *\n * @see {@link https://refine.dev/docs/data/hooks/use-show} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/core/interface-references/#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/core/interface-references/#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/core/interface-references/#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\nexport const useShow = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n resource: resourceFromProp,\n id,\n meta,\n queryOptions,\n overtimeOptions,\n ...useOneProps\n}: UseShowProps<TQueryFnData, TError, TData> = {}): UseShowReturnType<\n TData,\n TError\n> => {\n const {\n resource,\n identifier,\n id: showId,\n setId: setShowId,\n } = useResourceParams({\n id,\n resource: resourceFromProp,\n });\n\n const getMeta = useMeta();\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n warnOnce(\n Boolean(resourceFromProp) && !showId,\n idWarningMessage(identifier, showId),\n );\n\n const queryResult = useOne<TQueryFnData, TError, TData>({\n resource: identifier,\n id: showId ?? \"\",\n queryOptions: {\n enabled: showId !== undefined,\n ...queryOptions,\n },\n meta: combinedMeta,\n overtimeOptions,\n ...useOneProps,\n });\n\n return {\n query: queryResult.query,\n result: queryResult.result,\n showId,\n setShowId,\n overtime: queryResult.overtime,\n };\n};\n\nconst idWarningMessage = (identifier?: string, id?: BaseKey) =>\n `[useShow]: resource: \"${identifier}\", id: ${id} \\n\\nIf you don't use the \\`setShowId\\` method to set the \\`showId\\`, you should pass the \\`id\\` prop to \\`useShow\\`. Otherwise, \\`useShow\\` will not be able to infer the \\`id\\` from the current URL. \\n\\nSee https://refine.dev/docs/data/hooks/use-show/#resource`;\n","import { useEffect, useState } from \"react\";\n\nimport chunk from \"lodash/chunk\";\nimport papaparse from \"papaparse\";\n\nimport { importCSVMapper, sequentialPromises } from \"@definitions\";\nimport { useCreate, useCreateMany, useMeta, useResourceParams } from \"@hooks\";\n\nimport type {\n BaseRecord,\n HttpError,\n MetaQuery,\n} from \"../../contexts/data/types\";\nimport type { UseCreateReturnType } from \"../../hooks/data/useCreate\";\nimport type { UseCreateManyReturnType } from \"../../hooks/data/useCreateMany\";\nimport type { MapDataFn } from \"../export/types\";\n\nexport type ImportSuccessResult<TVariables, TData> = {\n request: TVariables[];\n type: \"success\";\n response: TData[];\n};\n\nexport type ImportErrorResult<TVariables> = {\n request: TVariables[];\n type: \"error\";\n response: HttpError[];\n};\n\nexport type OnFinishParams<TVariables, TData> = {\n succeeded: ImportSuccessResult<TVariables, TData>[];\n errored: ImportErrorResult<TVariables>[];\n};\n\nexport type OnProgressParams = {\n totalAmount: number;\n processedAmount: number;\n};\n\nexport type ImportOptions<\n TItem,\n TVariables = any,\n TData extends BaseRecord = BaseRecord,\n> = {\n /**\n * Resource name for API data interactions.\n * @default Resource name that it reads from route\n */\n resource?: string;\n /**\n * A mapping function that runs for every record. Mapped data will be included in the file contents.\n */\n mapData?: MapDataFn<TItem, TVariables>;\n /**\n * Custom Papa Parse options.\n * @type [`ParseConfig`](https://www.papaparse.com/docs)\n */\n paparseOptions?: papaparse.ParseConfig;\n /**\n * Requests batch size. If it is 1, all records are sent one by one. By default, it is [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER) to send all records in one batch. If it is more than 1, `createMany` should be implemented on DataProvider.\n */\n batchSize?: number;\n /**\n * Called with errors and successful responses when all requests are sent.\n */\n onFinish?: (results: OnFinishParams<TVariables, TData>) => void;\n /**\n * Metadata query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Metadata query for `dataProvider`\n /**\n * A callback function that returns a current state of uploading process.\n *\n * Ex: `percentage = onProgressParams.processedAmount / onProgressParams.totalAmount * 100`\n */\n onProgress?: (onProgressParams: OnProgressParams) => void;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n};\n\nexport type CreatedValuesType<TVariables, TData> =\n | ImportSuccessResult<TVariables, TData>\n | ImportErrorResult<TVariables>;\n\nexport type HandleChangeType<TVariables, TData> = (onChangeParams: {\n file: Partial<File>;\n}) => Promise<CreatedValuesType<TVariables, TData>[]>;\n\nexport type UseImportInputPropsType = {\n type: \"file\";\n accept: string;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\nexport type UseImportReturnType<\n TData extends BaseRecord = BaseRecord,\n TVariables = {},\n TError extends HttpError = HttpError,\n> = {\n inputProps: UseImportInputPropsType;\n mutationResult:\n | UseCreateReturnType<TData, TError, TVariables>\n | UseCreateManyReturnType<TData, TError, TVariables>;\n isLoading: boolean;\n handleChange: HandleChangeType<TVariables, TData>;\n};\n\n/**\n * `useImport` hook allows you to handle your csv import logic easily.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/import-export/useImport} for more details.\n *\n * @typeParam TItem - Interface of parsed csv data\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences/#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\nexport const useImport = <\n TItem = any,\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = any,\n>({\n resource: resourceFromProps,\n mapData = (item) => item as unknown as TVariables,\n paparseOptions,\n batchSize = Number.MAX_SAFE_INTEGER,\n onFinish,\n meta,\n onProgress,\n dataProviderName,\n}: ImportOptions<TItem, TVariables, TData> = {}): UseImportReturnType<\n TData,\n TVariables,\n TError\n> => {\n const [processedAmount, setProcessedAmount] = useState<number>(0);\n const [totalAmount, setTotalAmount] = useState<number>(0);\n const [isLoading, setIsLoading] = useState(false);\n\n const { resource, identifier } = useResourceParams({\n resource: resourceFromProps,\n });\n\n const getMeta = useMeta();\n\n const createMany = useCreateMany<TData, TError, TVariables>();\n const create = useCreate<TData, TError, TVariables>();\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n let mutationResult:\n | UseCreateReturnType<TData, TError, TVariables>\n | UseCreateManyReturnType<TData, TError, TVariables>;\n\n if (batchSize === 1) {\n mutationResult = create;\n } else {\n mutationResult = createMany;\n }\n\n const handleCleanup = () => {\n setTotalAmount(0);\n setProcessedAmount(0);\n setIsLoading(false);\n };\n\n const handleFinish = (\n createdValues: CreatedValuesType<TVariables, TData>[],\n ) => {\n const result = {\n succeeded: createdValues.filter(\n (item) => item.type === \"success\",\n ) as unknown as ImportSuccessResult<TVariables, TData>[],\n errored: createdValues.filter(\n (item) => item.type === \"error\",\n ) as unknown as ImportErrorResult<TVariables>[],\n };\n\n onFinish?.(result);\n setIsLoading(false);\n };\n\n useEffect(() => {\n onProgress?.({ totalAmount, processedAmount });\n }, [totalAmount, processedAmount]);\n\n const handleChange: HandleChangeType<TVariables, TData> = ({ file }) => {\n handleCleanup();\n return new Promise<CreatedValuesType<TVariables, TData>[]>((resolve) => {\n setIsLoading(true);\n papaparse.parse(file as any, {\n complete: async ({ data }: { data: unknown[][] }) => {\n const values = importCSVMapper(data, mapData);\n\n setTotalAmount(values.length);\n\n if (batchSize === 1) {\n // Create Processor Functions\n const valueFns = values.map((value) => {\n const fn = async () => {\n const response = await create.mutateAsync({\n resource: identifier ?? \"\",\n values: value,\n successNotification: false,\n errorNotification: false,\n dataProviderName,\n meta: combinedMeta,\n });\n\n return { response, value };\n };\n return fn;\n });\n // Sequentially run processor functions and process resolves/rejects\n const createdValues = await sequentialPromises(\n valueFns,\n ({ response, value }) => {\n setProcessedAmount((currentAmount) => {\n return currentAmount + 1;\n });\n\n return {\n response: [response.data],\n type: \"success\",\n request: [value],\n } as ImportSuccessResult<TVariables, TData>;\n },\n (error: HttpError, index) => {\n return {\n response: [error],\n type: \"error\",\n request: [values[index]],\n } as ImportErrorResult<TVariables>;\n },\n );\n // Resolve with created values\n resolve(createdValues);\n } else {\n // Create Chunks\n const chunks = chunk(values, batchSize);\n // Create Chunk Processor Functions\n const chunkedFns = chunks.map((chunkedValues) => {\n const fn = async () => {\n const response = await createMany.mutateAsync({\n resource: identifier ?? \"\",\n values: chunkedValues,\n successNotification: false,\n errorNotification: false,\n dataProviderName,\n meta: combinedMeta,\n });\n\n return {\n response,\n value: chunkedValues,\n currentBatchLength: chunkedValues.length,\n };\n };\n\n return fn;\n });\n // Sequentially run chunked functions and process resolves/rejects\n const createdValues = await sequentialPromises(\n chunkedFns,\n ({ response, currentBatchLength, value }) => {\n setProcessedAmount((currentAmount) => {\n return currentAmount + currentBatchLength;\n });\n\n return {\n response: response.data,\n type: \"success\",\n request: value,\n } as ImportSuccessResult<TVariables, TData>;\n },\n (error: HttpError, index) => {\n return {\n response: [error],\n type: \"error\",\n request: chunks[index],\n } as ImportErrorResult<TVariables>;\n },\n );\n // resolve with all created values\n resolve(createdValues);\n }\n },\n\n ...paparseOptions,\n });\n }).then((createdValues) => {\n handleFinish(createdValues);\n return createdValues;\n });\n };\n\n return {\n inputProps: {\n type: \"file\",\n accept: \".csv\",\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files && event.target.files.length > 0) {\n handleChange({ file: event.target.files[0] });\n }\n },\n },\n mutationResult,\n isLoading,\n handleChange,\n };\n};\n","import { useCallback, useState } from \"react\";\n\nexport type useModalReturnType = {\n visible: boolean;\n show: () => void;\n close: () => void;\n};\n\nexport type useModalProps = {\n /**\n * Initial state of the modal\n */\n defaultVisible?: boolean;\n};\n\nexport const useModal = ({\n defaultVisible = false,\n}: useModalProps = {}): useModalReturnType => {\n const [visible, setVisible] = useState(defaultVisible);\n\n const show = useCallback(() => setVisible(true), [visible]);\n const close = useCallback(() => setVisible(false), [visible]);\n\n return {\n visible,\n show,\n close,\n };\n};\n","import { RouterContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\n\nexport const useBack = () => {\n const routerContext = useContext(RouterContext);\n\n const useBack = React.useMemo(\n () => routerContext?.back ?? (() => () => undefined),\n [routerContext?.back],\n );\n\n const back = useBack();\n\n return back;\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport { useGetToPath } from \"../use-get-to-path\";\n\ntype UseToPathParams = {\n resource?: IResourceItem;\n action: Action;\n meta?: Record<string, unknown>;\n};\n\n/**\n * Returns the route for a given action and resource.\n * If resource is not provided, it will use the resource from the route.\n * If the resource is not found, it will return undefined.\n * If the action is not found, it will return undefined.\n * `meta` can be provided to compose the routes with parameters. (Can be used for nested routes.)\n */\nexport const useToPath = ({\n resource,\n action,\n meta,\n}: UseToPathParams): string | undefined => {\n const getToPath = useGetToPath();\n\n return getToPath({ resource, action, meta });\n};\n","import React, { type Ref, forwardRef, useContext } from \"react\";\nimport { useGo } from \"@hooks/router\";\nimport { RouterContext } from \"@contexts/router\";\nimport type { GoConfigWithResource } from \"../../hooks/router/use-go\";\nimport warnOnce from \"warn-once\";\n\ntype LinkPropsWithGo = {\n go: Omit<GoConfigWithResource, \"type\">;\n};\n\ntype LinkPropsWithTo = {\n to: string;\n};\n\nexport type LinkProps<TProps = {}> = React.PropsWithChildren<\n (LinkPropsWithGo | LinkPropsWithTo) & TProps\n>;\n\n/**\n * @param to The path to navigate to.\n * @param go The useGo.go params to navigate to. If `to` provided, this will be ignored.\n * @returns routerProvider.Link if it is provided, otherwise an anchor tag.\n */\nconst LinkComponent = <TProps = {}>(\n props: LinkProps<TProps>,\n ref: Ref<Element>,\n) => {\n const routerContext = useContext(RouterContext);\n const LinkFromContext = routerContext?.Link;\n\n const goFunction = useGo();\n\n let resolvedTo = \"\";\n if (\"go\" in props) {\n if (!routerContext?.go) {\n warnOnce(\n true,\n \"[Link]: `routerProvider` is not found. To use `go`, Please make sure that you have provided the `routerProvider` for `<Refine />` https://refine.dev/docs/routing/router-provider/ \\n\",\n );\n }\n resolvedTo = goFunction({ ...props.go, type: \"path\" }) as string;\n }\n if (\"to\" in props) {\n resolvedTo = props.to;\n }\n\n if (LinkFromContext) {\n return (\n <LinkFromContext\n ref={ref}\n {...props}\n to={resolvedTo}\n // This is a workaround to avoid passing `go` to the Link component.\n go={undefined}\n />\n );\n }\n return (\n <a\n ref={ref}\n href={resolvedTo}\n {...props}\n // This is a workaround to avoid passing `go` and `to` to the anchor tag.\n to={undefined}\n go={undefined}\n />\n );\n};\n\nexport const Link = forwardRef(LinkComponent) as <T = {}>(\n props: LinkProps<T> & { ref?: Ref<Element> },\n) => ReturnType<typeof LinkComponent>;\n","import { Link } from \"../../../components/link\";\n\nexport const useLink = () => {\n return Link;\n};\n","import { useContext } from \"react\";\n\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseQueryOptions,\n type UseQueryResult,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { sanitizeResource } from \"@definitions/helpers/sanitize-resource\";\nimport { useKeys } from \"@hooks/useKeys\";\nimport type {\n CanParams,\n CanReturnType,\n} from \"../../../contexts/accessControl/types\";\n\nexport type UseCanProps = CanParams & {\n /**\n * TansSack Query's [useQuery](https://tanstack.com/query/latest/docs/framework/react/reference/useQuery) options\n */\n // Make queryKey and queryFn optional\n queryOptions?: Omit<UseQueryOptions<CanReturnType>, \"queryKey\"> & {\n queryKey?: UseQueryOptions<CanReturnType>[\"queryKey\"];\n };\n};\n\n/**\n * `useCan` uses the `can` as the query function for `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/guides/queries `useQuery`}. It takes the parameters that `can` takes. It can also be configured with `queryOptions` for `useQuery`. Returns the result of `useQuery`.\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/accessControl/useCan} for more details.\n *\n * @typeParam CanParams {@link https://refine.dev/docs/core/interfaceReferences#canparams}\n * @typeParam CanReturnType {@link https://refine.dev/docs/core/interfaceReferences#canreturntype}\n *\n */\nexport const useCan = ({\n action,\n resource,\n params,\n queryOptions: hookQueryOptions,\n}: UseCanProps): UseQueryResult<CanReturnType> => {\n const { can, options: globalOptions } = useContext(AccessControlContext);\n const { keys } = useKeys();\n\n const { queryOptions: globalQueryOptions } = globalOptions || {};\n\n const mergedQueryOptions = {\n ...globalQueryOptions,\n ...hookQueryOptions,\n };\n\n /**\n * Since `react-query` stringifies the query keys, it will throw an error for a circular dependency if we include `React.ReactNode` elements inside the keys.\n * The feature in #2220(https://github.com/refinedev/refine/issues/2220) includes such change and to fix this, we need to remove `icon` property in the `resource`\n */\n const { resource: _resource, ...paramsRest } = params ?? {};\n\n const sanitizedResource = sanitizeResource(_resource);\n\n const queryResponse = useQuery<CanReturnType>({\n queryKey: keys()\n .access()\n .resource(resource)\n .action(action)\n .params({\n params: { ...paramsRest, resource: sanitizedResource },\n enabled: mergedQueryOptions?.enabled,\n })\n .get(),\n // Enabled check for `can` is enough to be sure that it's defined in the query function but TS is not smart enough to know that.\n queryFn: () =>\n can?.({\n action,\n resource,\n params: { ...paramsRest, resource: sanitizedResource },\n }) ?? Promise.resolve({ can: true }),\n enabled: typeof can !== \"undefined\",\n ...mergedQueryOptions,\n meta: {\n ...mergedQueryOptions?.meta,\n ...getXRay(\"useCan\", resource, [\n \"useButtonCanAccess\",\n \"useNavigationButton\",\n ]),\n },\n retry: false,\n });\n\n return typeof can === \"undefined\"\n ? ({ data: { can: true } } as typeof queryResponse)\n : queryResponse;\n};\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type {\n IAccessControlContext,\n IAccessControlContextReturnType,\n} from \"./types\";\n\nexport const AccessControlContext =\n React.createContext<IAccessControlContextReturnType>({\n options: {\n buttons: { enableAccessControl: true, hideIfUnauthorized: false },\n },\n });\n\nexport const AccessControlContextProvider: React.FC<\n PropsWithChildren<IAccessControlContext>\n> = ({ can, children, options }) => {\n return (\n <AccessControlContext.Provider\n value={{\n can,\n options: options\n ? {\n ...options,\n buttons: {\n enableAccessControl: true,\n hideIfUnauthorized: false,\n ...options.buttons,\n },\n }\n : {\n buttons: {\n enableAccessControl: true,\n hideIfUnauthorized: false,\n },\n queryOptions: undefined,\n },\n }}\n >\n {children}\n </AccessControlContext.Provider>\n );\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\n\n/**\n * Remove all properties that are non-serializable from a resource object.\n */\nexport const sanitizeResource = (\n resource?: Partial<IResourceItem> &\n Required<Pick<IResourceItem, \"name\">> & { children?: unknown } & Record<\n string,\n any\n >,\n):\n | (Partial<IResourceItem> & Required<Pick<IResourceItem, \"name\">>)\n | undefined => {\n if (!resource) {\n return undefined;\n }\n\n const {\n list,\n edit,\n create,\n show,\n clone,\n children,\n meta,\n icon,\n ...restResource\n } = resource;\n\n const { icon: _metaIcon, ...restMeta } = meta ?? {};\n\n return {\n ...restResource,\n ...(meta ? { meta: restMeta } : {}),\n };\n};\n","import React from \"react\";\n\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { sanitizeResource } from \"@definitions/helpers/sanitize-resource\";\n\nimport type { IAccessControlContext } from \"../../contexts/accessControl/types\";\n\nexport const useCanWithoutCache = (): IAccessControlContext => {\n const { can: canFromContext } = React.useContext(AccessControlContext);\n\n const can = React.useMemo(() => {\n if (!canFromContext) {\n return undefined;\n }\n\n const canWithSanitizedResource: NonNullable<typeof canFromContext> =\n async ({ params, ...rest }) => {\n const sanitizedResource = params?.resource\n ? sanitizeResource(params.resource)\n : undefined;\n\n return canFromContext({\n ...rest,\n ...(params\n ? {\n params: {\n ...params,\n resource: sanitizedResource,\n },\n }\n : {}),\n });\n };\n\n return canWithSanitizedResource;\n }, [canFromContext]);\n\n return { can };\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport type {\n QueryObserverResult,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\nimport debounce from \"lodash/debounce\";\nimport get from \"lodash/get\";\nimport uniqBy from \"lodash/uniqBy\";\n\nimport { useList, useMany, useMeta } from \"@hooks\";\nimport type { UseManyReturnType } from \"../data/useMany\";\n\nimport type {\n BaseKey,\n BaseOption,\n BaseRecord,\n CrudFilter,\n CrudSort,\n GetListResponse,\n GetManyResponse,\n HttpError,\n MetaQuery,\n Pagination,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport type { BaseListProps } from \"../data/useList\";\nimport { useResourceParams } from \"../use-resource-params\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\nimport type { MakeOptional } from \"../../definitions/types\";\n\nexport type SelectedOptionsOrder = \"in-place\" | \"selected-first\";\n\nexport type UseSelectProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * Set the option's label value\n * @default `\"title\"`\n */\n optionLabel?:\n | (keyof TData extends string ? keyof TData : never)\n | ((item: TData) => string);\n /**\n * Set the option's value\n * @default `\"id\"`\n */\n optionValue?:\n | (keyof TData extends string ? keyof TData : never)\n | ((item: TData) => string);\n /**\n * Field name to search for.\n * @description If provided `optionLabel` is a string, uses `optionLabel`'s value.\n * @default `\"title\"`\n * @example\n * // when optionLabel is string.\n * useSelect({ optionLabel: \"name\" })\n * // uses `name` field.\n * @example\n * // when optionLabel is function.\n * useSelect({ optionLabel: (field) => field.description })\n * // uses `title`, since `optionLabel` is a function.\n */\n searchField?: keyof TData extends string ? keyof TData : never;\n /**\n * Allow us to sort the options\n */\n sorters?: CrudSort[];\n /**\n * Resource name for API data interactions\n */\n filters?: CrudFilter[];\n /**\n * Adds extra `options`\n */\n defaultValue?: BaseKey | BaseKey[];\n /**\n * Allow us to sort the selection options\n * @default `in-place`\n */\n selectedOptionsOrder?: SelectedOptionsOrder;\n /**\n * The number of milliseconds to delay\n * @default `300`\n */\n debounce?: number;\n /**\n * react-query [useQuery](https://react-query.tanstack.com/reference/useQuery) options\n */\n queryOptions?: MakeOptional<\n UseQueryOptions<\n GetListResponse<TQueryFnData>,\n TError,\n GetListResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n >;\n /**\n * Pagination option from [`useList()`](/docs/api-reference/core/hooks/data/useList/)\n * @type { currentPage?: number; pageSize?: number;}\n * @default `undefined`\n */\n pagination?: Prettify<\n Omit<Pagination, \"mode\"> & {\n /**\n * Whether to use server side pagination or not.\n * @default \"off\"\n */\n mode?: Pagination[\"mode\"];\n }\n >;\n /**\n * react-query [useQuery](https://react-query.tanstack.com/reference/useQuery) options\n */\n defaultValueQueryOptions?: MakeOptional<\n UseQueryOptions<\n GetManyResponse<TQueryFnData>,\n TError,\n GetManyResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n >;\n /**\n * If defined, this callback allows us to override all filters for every search request.\n * @default `undefined`\n */\n onSearch?: (value: string) => CrudFilter[];\n /**\n * Additional meta data to pass to the `useMany` from the data provider\n */\n meta?: MetaQuery;\n /**\n * Additional meta data to pass to the `useMany` from the data provider\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default `default`\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n> &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps;\n\nexport type UseSelectReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TOption extends BaseOption = BaseOption,\n> = {\n query: QueryObserverResult<GetListResponse<TData>, TError>;\n defaultValueQuery: UseManyReturnType<TData, TError>;\n onSearch: (value: string) => void;\n options: TOption[];\n} & UseLoadingOvertimeReturnType;\n\n/**\n * `useSelect` hook is used to fetch data from the dataProvider and return the options for the select box.\n *\n * It uses `getList` method as query function from the dataProvider that is\n * passed to {@link https://refine.dev/docs/api-reference/core/components/refine-config/ `<Refine>`}.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/useSelect} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport const useSelect = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n TOption extends BaseOption = BaseOption,\n>(\n props: UseSelectProps<TQueryFnData, TError, TData>,\n): UseSelectReturnType<TData, TError, TOption> => {\n const [search, setSearch] = useState<CrudFilter[]>([]);\n const [options, setOptions] = useState<TOption[]>([]);\n const [selectedOptions, setSelectedOptions] = useState<TOption[]>([]);\n\n const {\n resource: resourceFromProps,\n sorters,\n filters = [],\n optionLabel = \"title\",\n optionValue = \"id\",\n searchField = typeof optionLabel === \"string\" ? optionLabel : \"title\",\n debounce: debounceValue = 300,\n successNotification,\n errorNotification,\n defaultValueQueryOptions: defaultValueQueryOptionsFromProps,\n queryOptions,\n pagination,\n liveMode,\n defaultValue = [],\n selectedOptionsOrder = \"in-place\",\n onLiveEvent,\n onSearch: onSearchFromProp,\n liveParams,\n meta,\n dataProviderName,\n overtimeOptions,\n } = props;\n\n const getOptionLabel = useCallback(\n (item: TData) => {\n if (typeof optionLabel === \"string\") {\n return get(item, optionLabel);\n }\n\n return optionLabel(item);\n },\n [optionLabel],\n );\n\n const getOptionValue = useCallback(\n (item: TData) => {\n if (typeof optionValue === \"string\") {\n return get(item, optionValue);\n }\n\n return optionValue(item);\n },\n [optionValue],\n );\n\n const { resource, identifier } = useResourceParams({\n resource: resourceFromProps,\n });\n\n const getMeta = useMeta();\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const defaultValues = Array.isArray(defaultValue)\n ? defaultValue\n : [defaultValue];\n\n const defaultValueQueryOptions =\n defaultValueQueryOptionsFromProps ?? (queryOptions as any);\n\n const defaultValueQueryOnSuccess = useCallback(\n (data: GetManyResponse<TData>) => {\n setSelectedOptions(\n data.data.map(\n (item) =>\n ({\n label: getOptionLabel(item),\n value: getOptionValue(item),\n }) as TOption,\n ),\n );\n },\n [optionLabel, optionValue],\n );\n\n const defaultQueryOnSuccess = useCallback(\n (data: GetListResponse<TData>) => {\n setOptions(\n data.data.map(\n (item) =>\n ({\n label: getOptionLabel(item),\n value: getOptionValue(item),\n }) as TOption,\n ),\n );\n },\n [optionLabel, optionValue],\n );\n\n const defaultValueQueryResult = useMany<TQueryFnData, TError, TData>({\n resource: identifier ?? resource?.name ?? \"\",\n ids: defaultValues,\n queryOptions: {\n ...defaultValueQueryOptions,\n enabled:\n defaultValues.length > 0 && (defaultValueQueryOptions?.enabled ?? true),\n },\n overtimeOptions: { enabled: false },\n meta: combinedMeta,\n liveMode: \"off\",\n dataProviderName,\n });\n\n const queryResult = useList<TQueryFnData, TError, TData>({\n resource: identifier,\n sorters,\n filters: filters.concat(search),\n pagination: {\n currentPage: pagination?.currentPage,\n pageSize: pagination?.pageSize ?? 10,\n mode: pagination?.mode,\n },\n queryOptions,\n overtimeOptions: { enabled: false },\n successNotification,\n errorNotification,\n meta: combinedMeta,\n liveMode,\n liveParams,\n onLiveEvent,\n dataProviderName,\n });\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading:\n queryResult.query.isFetching || defaultValueQueryResult.query.isFetching,\n });\n\n const combinedOptions = useMemo(\n () =>\n uniqBy(\n selectedOptionsOrder === \"in-place\"\n ? [...options, ...selectedOptions]\n : [...selectedOptions, ...options],\n \"value\",\n ),\n [options, selectedOptions],\n );\n\n /**\n * To avoid any changes in the `onSearch` callback,\n * We're storing `onSearchFromProp` in a ref and accessing it in the `onSearch` callback.\n */\n const onSearchFromPropRef = useRef(onSearchFromProp);\n\n const onSearch = useMemo(() => {\n return debounce((value: string) => {\n if (onSearchFromPropRef.current) {\n setSearch(onSearchFromPropRef.current(value));\n return;\n }\n\n if (!value) {\n setSearch([]);\n return;\n }\n\n setSearch([\n {\n field: searchField,\n operator: \"contains\",\n value,\n },\n ]);\n }, debounceValue);\n }, [searchField, debounceValue]);\n\n useEffect(() => {\n onSearchFromPropRef.current = onSearchFromProp;\n }, [onSearchFromProp]);\n\n // default value query onSuccess\n useEffect(() => {\n const data = defaultValueQueryResult.query.data;\n if (data && defaultValueQueryResult.query.isSuccess) {\n defaultValueQueryOnSuccess(data);\n }\n }, [\n defaultValueQueryResult.query.data,\n defaultValueQueryResult.query.isSuccess,\n ]);\n\n // query onSuccess\n useEffect(() => {\n const data = queryResult.query.data;\n if (data && queryResult.query.isSuccess) {\n defaultQueryOnSuccess(data);\n }\n }, [queryResult.result.data, queryResult.query.isSuccess]);\n\n return {\n query: queryResult.query,\n defaultValueQuery: defaultValueQueryResult,\n options: combinedOptions,\n onSearch,\n overtime: { elapsedTime },\n };\n};\n","import React, { useState, useEffect, useCallback } from \"react\";\n\nimport type {\n QueryObserverResult,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\nimport differenceWith from \"lodash/differenceWith\";\nimport isEqual from \"lodash/isEqual\";\nimport warnOnce from \"warn-once\";\n\nimport {\n parseTableParams,\n setInitialFilters,\n setInitialSorters,\n unionFilters,\n unionSorters,\n} from \"@definitions/table\";\nimport {\n useGo,\n useList,\n useLiveMode,\n useMeta,\n useParsed,\n useResourceParams,\n useSyncWithLocation,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CrudFilter,\n CrudSort,\n GetListResponse,\n HttpError,\n MetaQuery,\n Pagination,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport type { BaseListProps } from \"../data/useList\";\nimport type { MakeOptional } from \"../../definitions/types/index\";\nimport type {\n UseLoadingOvertimeOptionsProps,\n UseLoadingOvertimeReturnType,\n} from \"../useLoadingOvertime\";\n\ntype SetFilterBehavior = \"merge\" | \"replace\";\n\nexport type useTableProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n * @default Resource name that it reads from route\n */\n resource?: string;\n /**\n * Configuration for pagination\n */\n pagination?: Pagination;\n /**\n * Sort configs\n */\n sorters?: {\n /**\n * Initial sorter state\n */\n initial?: CrudSort[];\n /**\n * Default and unchangeable sorter state\n * @default `[]`\n */\n permanent?: CrudSort[];\n /**\n * Whether to use server side sorting or not.\n * @default \"server\"\n */\n mode?: \"server\" | \"off\";\n };\n /**\n * Filter configs\n */\n filters?: {\n /**\n * Initial filter state\n */\n initial?: CrudFilter[];\n /**\n * Default and unchangeable filter state\n * @default `[]`\n */\n permanent?: CrudFilter[];\n /**\n * Default behavior of the `setFilters` function\n * @default `\"merge\"`\n */\n defaultBehavior?: SetFilterBehavior;\n /**\n * Whether to use server side filter or not.\n * @default \"server\"\n */\n mode?: \"server\" | \"off\";\n };\n /**\n * Sortings, filters, page index and records shown per page are tracked by browser history\n * @default Value set in [Refine](/docs/api-reference/core/components/refine-config/#syncwithlocation). If a custom resource is given, it will be `false`\n */\n syncWithLocation?: boolean;\n /**\n * react-query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options\n */\n queryOptions?: MakeOptional<\n UseQueryOptions<\n GetListResponse<TQueryFnData>,\n TError,\n GetListResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n >;\n /**\n * Metadata query for dataProvider\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n> &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps;\n\ntype ReactSetState<T> = React.Dispatch<React.SetStateAction<T>>;\n\ntype SyncWithLocationParams = {\n pagination: { currentPage?: number; pageSize?: number };\n sorters: CrudSort[];\n filters: CrudFilter[];\n};\n\nexport type useTableReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n> = {\n tableQuery: QueryObserverResult<GetListResponse<TData>, TError>;\n sorters: CrudSort[];\n setSorters: (sorter: CrudSort[]) => void;\n filters: CrudFilter[];\n setFilters: ((filters: CrudFilter[], behavior?: SetFilterBehavior) => void) &\n ((setter: (prevFilters: CrudFilter[]) => CrudFilter[]) => void);\n createLinkForSyncWithLocation: (params: SyncWithLocationParams) => string;\n currentPage: number;\n setCurrentPage: ReactSetState<useTableReturnType[\"currentPage\"]>;\n pageSize: number;\n setPageSize: ReactSetState<useTableReturnType[\"pageSize\"]>;\n pageCount: number;\n result: {\n data: TData[];\n total: number | undefined;\n };\n} & UseLoadingOvertimeReturnType;\n\n/**\n * By using useTable, you are able to get properties that are compatible with\n * Ant Design {@link https://ant.design/components/table/ `<Table>`} component.\n * All features such as sorting, filtering and pagination comes as out of box.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/useTable} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nconst defaultPermanentFilter: CrudFilter[] = [];\nconst defaultPermanentSorter: CrudSort[] = [];\n\nexport function useTable<\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n pagination,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n syncWithLocation: syncWithLocationProp,\n resource: resourceFromProp,\n successNotification,\n errorNotification,\n queryOptions,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta,\n dataProviderName,\n overtimeOptions,\n}: useTableProps<TQueryFnData, TError, TData> = {}): useTableReturnType<\n TData,\n TError\n> {\n const { syncWithLocation: syncWithLocationContext } = useSyncWithLocation();\n\n const syncWithLocation = syncWithLocationProp ?? syncWithLocationContext;\n\n const liveMode = useLiveMode(liveModeFromProp);\n\n const getMeta = useMeta();\n const parsedParams = useParsed();\n\n const isServerSideFilteringEnabled =\n (filtersFromProp?.mode || \"server\") === \"server\";\n const isServerSideSortingEnabled =\n (sortersFromProp?.mode || \"server\") === \"server\";\n const isPaginationEnabled = pagination?.mode !== \"off\";\n const prefferedCurrentPage = pagination?.currentPage;\n const prefferedPageSize = pagination?.pageSize;\n const preferredMeta = meta;\n\n // Parse table params from URL if available\n const { parsedCurrentPage, parsedPageSize, parsedSorter, parsedFilters } =\n parseTableParams(parsedParams.params?.search ?? \"?\");\n\n const preferredInitialFilters = filtersFromProp?.initial;\n const preferredPermanentFilters =\n filtersFromProp?.permanent ?? defaultPermanentFilter;\n\n const preferredInitialSorters = sortersFromProp?.initial;\n const preferredPermanentSorters =\n sortersFromProp?.permanent ?? defaultPermanentSorter;\n\n const prefferedFilterBehavior = filtersFromProp?.defaultBehavior ?? \"merge\";\n\n let defaultCurrentPage: number;\n let defaultPageSize: number;\n let defaultSorter: CrudSort[] | undefined;\n let defaultFilter: CrudFilter[] | undefined;\n\n if (syncWithLocation) {\n defaultCurrentPage =\n parsedParams?.params?.currentPage ||\n parsedCurrentPage ||\n prefferedCurrentPage ||\n 1;\n defaultPageSize =\n parsedParams?.params?.pageSize ||\n parsedPageSize ||\n prefferedPageSize ||\n 10;\n defaultSorter =\n parsedParams?.params?.sorters ||\n (parsedSorter.length ? parsedSorter : preferredInitialSorters);\n defaultFilter =\n parsedParams?.params?.filters ||\n (parsedFilters.length ? parsedFilters : preferredInitialFilters);\n } else {\n defaultCurrentPage = prefferedCurrentPage || 1;\n defaultPageSize = prefferedPageSize || 10;\n defaultSorter = preferredInitialSorters;\n defaultFilter = preferredInitialFilters;\n }\n\n const go = useGo();\n\n const { resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n\n const combinedMeta = getMeta({\n resource,\n meta: preferredMeta,\n });\n\n React.useEffect(() => {\n warnOnce(\n typeof identifier === \"undefined\",\n \"useTable: `resource` is not defined.\",\n );\n }, [identifier]);\n\n const [sorters, setSorters] = useState<CrudSort[]>(\n setInitialSorters(preferredPermanentSorters, defaultSorter ?? []),\n );\n const [filters, setFilters] = useState<CrudFilter[]>(\n setInitialFilters(preferredPermanentFilters, defaultFilter ?? []),\n );\n const [currentPage, setCurrentPage] = useState<number>(defaultCurrentPage);\n const [pageSize, setPageSize] = useState<number>(defaultPageSize);\n\n const getCurrentQueryParams = (): object => {\n // We get QueryString parameters that are uncontrolled by refine.\n const { sorters, filters, pageSize, current, ...rest } =\n parsedParams?.params ?? {};\n\n return rest;\n };\n\n const createLinkForSyncWithLocation = ({\n pagination: { currentPage, pageSize },\n sorters,\n filters,\n }: SyncWithLocationParams) => {\n return (\n go({\n type: \"path\",\n options: {\n keepHash: true,\n keepQuery: true,\n },\n query: {\n ...(isPaginationEnabled ? { currentPage, pageSize } : {}),\n sorters,\n filters,\n ...getCurrentQueryParams(),\n },\n }) ?? \"\"\n );\n };\n\n useEffect(() => {\n if (parsedParams?.params?.search === \"\") {\n setCurrentPage(defaultCurrentPage);\n setPageSize(defaultPageSize);\n setSorters(\n setInitialSorters(preferredPermanentSorters, defaultSorter ?? []),\n );\n setFilters(\n setInitialFilters(preferredPermanentFilters, defaultFilter ?? []),\n );\n }\n }, [parsedParams?.params?.search]);\n\n useEffect(() => {\n if (syncWithLocation) {\n go({\n type: \"replace\",\n options: {\n keepQuery: true,\n },\n query: {\n ...(isPaginationEnabled ? { pageSize, currentPage } : {}),\n sorters: differenceWith(sorters, preferredPermanentSorters, isEqual),\n filters: differenceWith(filters, preferredPermanentFilters, isEqual),\n },\n });\n }\n }, [syncWithLocation, currentPage, pageSize, sorters, filters]);\n\n const queryResult = useList<TQueryFnData, TError, TData>({\n resource: identifier,\n pagination: { currentPage: currentPage, pageSize, mode: pagination?.mode },\n filters: isServerSideFilteringEnabled\n ? unionFilters(preferredPermanentFilters, filters)\n : undefined,\n sorters: isServerSideSortingEnabled\n ? unionSorters(preferredPermanentSorters, sorters)\n : undefined,\n queryOptions,\n overtimeOptions,\n successNotification,\n errorNotification,\n meta: combinedMeta,\n liveMode,\n liveParams,\n onLiveEvent,\n dataProviderName,\n });\n\n const setFiltersAsMerge = useCallback(\n (newFilters: CrudFilter[]) => {\n setFilters((prevFilters) =>\n unionFilters(preferredPermanentFilters, newFilters, prevFilters),\n );\n },\n [preferredPermanentFilters],\n );\n\n const setFiltersAsReplace = useCallback(\n (newFilters: CrudFilter[]) => {\n setFilters(unionFilters(preferredPermanentFilters, newFilters));\n },\n [preferredPermanentFilters],\n );\n\n const setFiltersWithSetter = useCallback(\n (setter: (prevFilters: CrudFilter[]) => CrudFilter[]) => {\n setFilters((prev) =>\n unionFilters(preferredPermanentFilters, setter(prev)),\n );\n },\n [preferredPermanentFilters],\n );\n\n const setFiltersFn: useTableReturnType<TQueryFnData>[\"setFilters\"] =\n useCallback(\n (\n setterOrFilters,\n behavior: SetFilterBehavior = prefferedFilterBehavior,\n ) => {\n if (typeof setterOrFilters === \"function\") {\n setFiltersWithSetter(setterOrFilters);\n } else {\n if (behavior === \"replace\") {\n setFiltersAsReplace(setterOrFilters);\n } else {\n setFiltersAsMerge(setterOrFilters);\n }\n }\n },\n [setFiltersWithSetter, setFiltersAsReplace, setFiltersAsMerge],\n );\n\n const setSortWithUnion = useCallback(\n (newSorter: CrudSort[]) => {\n setSorters(() => unionSorters(preferredPermanentSorters, newSorter));\n },\n [preferredPermanentSorters],\n );\n\n return {\n tableQuery: queryResult.query,\n sorters,\n setSorters: setSortWithUnion,\n filters,\n setFilters: setFiltersFn,\n currentPage,\n setCurrentPage,\n pageSize,\n setPageSize,\n pageCount: pageSize\n ? Math.ceil((queryResult.result?.total ?? 0) / pageSize)\n : 1,\n createLinkForSyncWithLocation,\n overtime: queryResult.overtime,\n result: {\n data: queryResult.result?.data || [],\n total: queryResult.result?.total,\n },\n };\n}\n","import { useContext } from \"react\";\n\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { ResourceContext } from \"@contexts/resource\";\nimport { hasPermission } from \"@definitions/helpers\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { useGetIdentity } from \"@hooks/auth\";\nimport { useKeys } from \"@hooks/useKeys\";\n\nimport type { LogParams } from \"../../../contexts/auditLog/types\";\nimport type { BaseKey } from \"../../../contexts/data/types\";\n\ntype LogRenameData =\n | {\n resource?: string;\n }\n | undefined;\n\nexport type UseLogReturnType<TLogData, TLogRenameData> = {\n log: UseMutationResult<TLogData, Error, LogParams>;\n rename: UseMutationResult<\n TLogRenameData,\n Error,\n {\n id: BaseKey;\n name: string;\n }\n >;\n};\n\nexport type UseLogMutationProps<\n TLogData,\n TLogRenameData extends LogRenameData = LogRenameData,\n> = {\n logMutationOptions?: Omit<\n UseMutationOptions<TLogData, Error, LogParams, unknown>,\n \"mutationFn\"\n >;\n renameMutationOptions?: Omit<\n UseMutationOptions<\n TLogRenameData,\n Error,\n { id: BaseKey; name: string },\n unknown\n >,\n \"mutationFn\" | \"onSuccess\"\n >;\n};\n\n/**\n * useLog is used to `create` a new and `rename` the existing audit log.\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/audit-log/useLog} for more details.\n */\n\nexport const useLog = <\n TLogData,\n TLogRenameData extends LogRenameData = LogRenameData,\n>({\n logMutationOptions,\n renameMutationOptions,\n}: UseLogMutationProps<TLogData, TLogRenameData> = {}): UseLogReturnType<\n TLogData,\n TLogRenameData\n> => {\n const queryClient = useQueryClient();\n const auditLogContext = useContext(AuditLogContext);\n const { keys } = useKeys();\n\n const { resources } = useContext(ResourceContext);\n\n const {\n data: identityData,\n refetch,\n isLoading,\n } = useGetIdentity({\n queryOptions: {\n enabled: !!auditLogContext?.create,\n },\n });\n\n const log = useMutation<TLogData, Error, LogParams, unknown>({\n mutationFn: async (params: LogParams) => {\n const resource = pickResource(params.resource, resources);\n const logPermissions = resource?.meta?.audit;\n\n if (logPermissions) {\n if (!hasPermission(logPermissions, params.action)) {\n return;\n }\n }\n\n let authorData;\n if (isLoading && !!auditLogContext?.create) {\n authorData = await refetch();\n }\n\n return await auditLogContext.create?.({\n ...params,\n author: identityData ?? authorData?.data,\n });\n },\n mutationKey: keys().audit().action(\"log\").get(),\n ...logMutationOptions,\n meta: {\n ...logMutationOptions?.meta,\n ...getXRay(\"useLog\"),\n },\n });\n\n const rename = useMutation<\n TLogRenameData,\n Error,\n { id: BaseKey; name: string },\n unknown\n >({\n mutationFn: async (params: { id: BaseKey; name: string }) => {\n return await auditLogContext.update?.(params);\n },\n onSuccess: (data: TLogRenameData) => {\n if (data?.resource) {\n queryClient.invalidateQueries({\n queryKey: keys()\n .audit()\n .resource(data?.resource ?? \"\")\n .action(\"list\")\n .get(),\n });\n }\n },\n mutationKey: keys().audit().action(\"rename\").get(),\n ...renameMutationOptions,\n meta: {\n ...renameMutationOptions?.meta,\n ...getXRay(\"useLog\"),\n },\n });\n\n return { log, rename };\n};\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type { IAuditLogContext } from \"./types\";\n\nexport const AuditLogContext = React.createContext<IAuditLogContext>({});\n\nexport const AuditLogContextProvider: React.FC<\n PropsWithChildren<IAuditLogContext>\n> = ({ create, get, update, children }) => {\n return (\n <AuditLogContext.Provider value={{ create, get, update }}>\n {children}\n </AuditLogContext.Provider>\n );\n};\n","import { useContext } from \"react\";\n\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseQueryOptions,\n type UseQueryResult,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { useKeys } from \"@hooks/useKeys\";\n\nimport type { HttpError } from \"../../../contexts/data/types\";\nimport type { MakeOptional } from \"../../../definitions/types\";\n\nexport type UseLogProps<TQueryFnData, TError, TData> = {\n resource: string;\n action?: string;\n meta?: Record<number | string, any>;\n author?: Record<number | string, any>;\n queryOptions?: MakeOptional<\n UseQueryOptions<TQueryFnData, TError, TData>,\n \"queryKey\" | \"queryFn\"\n >;\n};\n\n/**\n * useLogList is used to get and filter audit logs.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/audit-log/useLogList} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function.\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Defaults to `TQueryFnData`\n *\n */\nexport const useLogList = <\n TQueryFnData = any,\n TError extends HttpError = HttpError,\n TData = TQueryFnData,\n>({\n resource,\n action,\n meta,\n author,\n queryOptions,\n}: UseLogProps<TQueryFnData, TError, TData>): UseQueryResult<TData, TError> => {\n const { get } = useContext(AuditLogContext);\n const { keys } = useKeys();\n\n const queryResponse = useQuery<TQueryFnData, TError, TData>({\n queryKey: keys()\n .audit()\n .resource(resource)\n .action(\"list\")\n .params(meta)\n .get(),\n queryFn: () =>\n get?.({\n resource,\n action,\n author,\n meta,\n }) ?? Promise.resolve([]),\n enabled: typeof get !== \"undefined\",\n ...queryOptions,\n retry: false,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useLogList\", resource),\n },\n });\n\n return queryResponse;\n};\n","import React, { useContext } from \"react\";\n\nimport warnOnce from \"warn-once\";\n\nimport { I18nContext } from \"@contexts/i18n\";\nimport { getActionRoutesFromResource } from \"@definitions/helpers/router\";\nimport { composeRoute } from \"@definitions/helpers/router/compose-route\";\nimport { useRefineContext, useResourceParams, useTranslate } from \"@hooks\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\n\nimport type { IResourceItem } from \"../../contexts/resource/types\";\nimport { pickResource } from \"../../definitions/helpers/pick-resource/index\";\n\nexport type BreadcrumbsType = {\n label: string;\n href?: string;\n icon?: React.ReactNode;\n};\n\ntype UseBreadcrumbReturnType = {\n breadcrumbs: BreadcrumbsType[];\n};\n\ntype UseBreadcrumbProps = {\n /**\n * Additional params to be used in the route generation process.\n */\n meta?: Record<string, string | number>;\n};\n\nexport const useBreadcrumb = ({\n meta: metaFromProps = {},\n}: UseBreadcrumbProps = {}): UseBreadcrumbReturnType => {\n const { i18nProvider } = useContext(I18nContext);\n const parsed = useParsed();\n const translate = useTranslate();\n const { action, resource, resources } = useResourceParams();\n const {\n options: { textTransformers },\n } = useRefineContext();\n\n const breadcrumbs: BreadcrumbsType[] = [];\n\n if (!resource?.name) {\n return { breadcrumbs };\n }\n\n const addBreadcrumb = (parentName: string | IResourceItem) => {\n const parentResource =\n typeof parentName === \"string\"\n ? pickResource(parentName, resources) ?? {\n name: parentName,\n }\n : parentName;\n\n if (parentResource) {\n const grandParentName = parentResource?.meta?.parent;\n if (grandParentName) {\n addBreadcrumb(grandParentName);\n }\n const listActionOfResource = getActionRoutesFromResource(\n parentResource,\n resources,\n ).find((r) => r.action === \"list\");\n\n const hrefRaw = listActionOfResource?.resource?.list\n ? listActionOfResource?.route\n : undefined;\n\n const href = hrefRaw\n ? composeRoute(hrefRaw, parentResource?.meta, parsed, metaFromProps)\n : undefined;\n\n breadcrumbs.push({\n label:\n parentResource.meta?.label ??\n translate(\n `${parentResource.name}.${parentResource.name}`,\n textTransformers.humanize(parentResource.name),\n ),\n href: href,\n icon: parentResource.meta?.icon,\n });\n }\n };\n\n addBreadcrumb(resource);\n\n if (action && action !== \"list\") {\n const key = `actions.${action}`;\n const actionLabel = translate(key);\n if (typeof i18nProvider !== \"undefined\" && actionLabel === key) {\n warnOnce(\n true,\n `[useBreadcrumb]: Breadcrumb missing translate key for the \"${action}\" action. Please add \"actions.${action}\" key to your translation file.\\nFor more information, see https://refine.dev/docs/api-reference/core/hooks/useBreadcrumb/#i18n-support`,\n );\n breadcrumbs.push({\n label: translate(\n `buttons.${action}`,\n textTransformers.humanize(action),\n ),\n });\n } else {\n breadcrumbs.push({\n label: translate(key, textTransformers.humanize(action)),\n });\n }\n }\n\n return {\n breadcrumbs,\n };\n};\n","import React from \"react\";\n\nimport { useUserFriendlyName } from \"@definitions\";\nimport { getParentResource } from \"@definitions/helpers/router\";\n\nimport { useParsed, useResourceParams, useTranslate } from \"..\";\nimport { createResourceKey } from \"../../definitions/helpers/menu/create-resource-key\";\nimport {\n type FlatTreeItem,\n createTree,\n} from \"../../definitions/helpers/menu/create-tree\";\nimport { useGetToPath } from \"../router/use-get-to-path/index\";\n\ntype UseMenuReturnType = {\n defaultOpenKeys: string[];\n selectedKey: string;\n menuItems: TreeMenuItem[];\n};\n\nexport type UseMenuProps = {\n meta?: Record<string, any>;\n hideOnMissingParameter?: boolean;\n};\n\nexport type TreeMenuItem = Omit<\n FlatTreeItem,\n \"label\" | \"route\" | \"children\"\n> & {\n route?: string;\n icon?: React.ReactNode;\n label?: string;\n children: TreeMenuItem[];\n};\n\nconst getCleanPath = (pathname: string) => {\n return pathname\n .split(\"?\")[0]\n .split(\"#\")[0]\n .replace(/(.+)(\\/$)/, \"$1\");\n};\n\n/**\n * `useMenu` is used to get menu items of the default sidebar.\n * These items include a link to dashboard page (if it exists) and links to the user defined resources\n * (passed as children to {@link https://refine.dev/docs/core/components/refine-config `<Refine>`}).\n * This hook can also be used to build custom menus, which is also used by default sidebar to show menu items.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/ui/useMenu} for more details.\n */\nexport const useMenu = (\n { meta, hideOnMissingParameter = true }: UseMenuProps = {\n hideOnMissingParameter: true,\n },\n): UseMenuReturnType => {\n const translate = useTranslate();\n\n const getToPath = useGetToPath();\n const { resource, resources } = useResourceParams();\n const { pathname } = useParsed();\n const getFriendlyName = useUserFriendlyName();\n\n const cleanPathname = pathname ? getCleanPath(pathname) : undefined;\n\n const cleanRoute = `/${(cleanPathname ?? \"\").replace(/^\\//, \"\")}`;\n\n const selectedKey = resource\n ? createResourceKey(resource, resources)\n : cleanRoute ?? \"\";\n\n const defaultOpenKeys = React.useMemo(() => {\n if (!resource) return [];\n let parent = getParentResource(resource, resources);\n const keys = [createResourceKey(resource, resources)];\n while (parent) {\n keys.push(createResourceKey(parent, resources));\n parent = getParentResource(parent, resources);\n }\n return keys;\n }, []);\n\n const prepareItem = React.useCallback(\n (item: FlatTreeItem): TreeMenuItem | undefined => {\n if (item?.meta?.hide) {\n return undefined;\n }\n if (!item?.list && item.children.length === 0) return undefined;\n\n const composed = item.list\n ? getToPath({\n resource: item,\n action: \"list\",\n meta,\n })\n : undefined;\n\n if (\n hideOnMissingParameter &&\n composed &&\n composed.match(/(\\/|^):(.+?)(\\/|$){1}/)\n )\n return undefined;\n\n return {\n ...item,\n route: composed,\n icon: item.meta?.icon,\n label:\n item?.meta?.label ??\n translate(\n `${item.name}.${item.name}`,\n getFriendlyName(item.name, \"plural\"),\n ),\n };\n },\n [meta, getToPath, translate, hideOnMissingParameter],\n );\n\n const treeItems = React.useMemo(() => {\n const treeMenuItems = createTree(resources);\n\n // add paths to items and their nodes recursively\n const prepare = (items: TreeMenuItem[]): TreeMenuItem[] => {\n return items.flatMap((item) => {\n const preparedNodes = prepare(item.children);\n const newItem = prepareItem({\n ...item,\n children: preparedNodes,\n });\n\n if (!newItem) return [];\n\n return [newItem];\n });\n };\n\n return prepare(treeMenuItems);\n }, [resources, prepareItem]);\n\n return {\n defaultOpenKeys,\n selectedKey,\n menuItems: treeItems,\n };\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport {\n getParentResource,\n removeLeadingTrailingSlashes,\n} from \"../../helpers/router\";\n\nexport const createResourceKey = (\n resource: IResourceItem,\n resources: IResourceItem[],\n) => {\n const parents: IResourceItem[] = [];\n\n let currentParentResource = getParentResource(resource, resources);\n while (currentParentResource) {\n parents.push(currentParentResource);\n currentParentResource = getParentResource(currentParentResource, resources);\n }\n parents.reverse();\n\n const key = [...parents, resource]\n .map((r) => removeLeadingTrailingSlashes(r.identifier ?? r.name))\n .join(\"/\");\n\n return `/${key.replace(/^\\//, \"\")}`;\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport { getParentResource } from \"../router\";\nimport { createResourceKey } from \"./create-resource-key\";\n\nexport type Tree = {\n item: IResourceItem;\n children: { [key: string]: Tree };\n};\n\nexport type FlatTreeItem = IResourceItem & {\n key: string;\n children: FlatTreeItem[];\n};\n\nexport const createTree = (resources: IResourceItem[]): FlatTreeItem[] => {\n const root: Tree = {\n item: {\n name: \"__root__\",\n },\n children: {},\n };\n\n resources.forEach((resource) => {\n const parents: IResourceItem[] = [];\n\n let currentParent = getParentResource(resource, resources);\n while (currentParent) {\n parents.push(currentParent);\n currentParent = getParentResource(currentParent, resources);\n }\n parents.reverse();\n\n let currentTree = root;\n\n parents.forEach((parent) => {\n const key = parent.identifier ?? parent.name;\n\n if (!currentTree.children[key]) {\n currentTree.children[key] = {\n item: parent,\n children: {},\n };\n }\n currentTree = currentTree.children[key];\n });\n\n const key = resource.identifier ?? resource.name;\n\n if (!currentTree.children[key]) {\n currentTree.children[key] = {\n item: resource,\n children: {},\n };\n }\n });\n\n const flatten = (tree: Tree): FlatTreeItem[] => {\n const items: FlatTreeItem[] = [];\n\n Object.keys(tree.children).forEach((key) => {\n const itemKey = createResourceKey(tree.children[key].item, resources);\n const item: FlatTreeItem = {\n ...tree.children[key].item,\n key: itemKey,\n children: flatten(tree.children[key]),\n };\n items.push(item);\n });\n\n return items;\n };\n\n return flatten(root);\n};\n","import React, {\n type ReactNode,\n createContext,\n useContext,\n useMemo,\n} from \"react\";\n\ntype MetaContextValue = Record<string, any>;\n\nexport const MetaContext = createContext<MetaContextValue>({});\n\n/**\n * Is used to provide meta data to the children components.\n * @internal\n */\nexport const MetaContextProvider = ({\n children,\n value,\n}: { children: ReactNode; value: MetaContextValue }) => {\n const currentValue = useMetaContext();\n\n const metaContext = useMemo(() => {\n return {\n ...currentValue,\n ...value,\n };\n }, [currentValue, value]);\n\n return (\n <MetaContext.Provider value={metaContext}>{children}</MetaContext.Provider>\n );\n};\n\n/**\n * @internal\n * @returns The MetaContext value.\n */\nexport const useMetaContext = () => {\n const context = useContext(MetaContext);\n if (!context) {\n throw new Error(\"useMetaContext must be used within a MetaContextProvider\");\n }\n\n return useContext(MetaContext);\n};\n","import { useMetaContext } from \"@contexts/metaContext\";\nimport { sanitizeResource } from \"@definitions/helpers/sanitize-resource\";\nimport { useParsed } from \"@hooks/router\";\n\nimport type { MetaQuery } from \"../../contexts/data/types\";\nimport type { IResourceItem } from \"../../contexts/resource/types\";\n\n/**\n * Hook that returns a function to get meta.\n * The meta is a combination of the resource meta, hook meta, query params and metaContext value.\n * @internal\n */\nexport const useMeta = () => {\n const { params } = useParsed();\n\n const metaContext = useMetaContext();\n\n const getMetaFn = ({\n resource,\n meta: metaFromProp,\n }: {\n resource?: IResourceItem;\n meta?: MetaQuery;\n } = {}) => {\n const { meta } = sanitizeResource(resource) ?? { meta: {} };\n\n // this fields came from the query params and should be removed from the meta because they are not part of the meta.\n const {\n filters: _filters,\n sorters: _sorters,\n currentPage: _currentPage,\n pageSize: _pageSize,\n ...additionalParams\n } = params ?? {};\n\n const result: Record<string, unknown> = {\n ...meta,\n ...additionalParams,\n ...metaFromProp,\n };\n\n // when MultiTenancyProvider from \"@refinedev-ee/multi-tenancy\" is provided, we need to add tenantId to the meta\n if (metaContext?.tenantId) {\n result[\"tenantId\"] = metaContext.tenantId;\n }\n\n return result;\n };\n\n return getMetaFn;\n};\n","import { RefineContext } from \"@contexts/refine\";\nimport React from \"react\";\n\nexport const useRefineOptions = () => {\n const { options } = React.useContext(RefineContext);\n\n return options;\n};\n","import { useRefineOptions } from \"../../use-refine-options\";\nimport { useTranslate } from \"../../i18n\";\n\nexport type ActionableButtonProps = {\n type: \"save\" | \"export\" | \"import\";\n};\n\nexport type ActionableButtonValues = {\n label: string;\n};\n\nexport function useActionableButton({\n type,\n}: ActionableButtonProps): ActionableButtonValues {\n const translate = useTranslate();\n const {\n textTransformers: { humanize },\n } = useRefineOptions();\n\n const key = `buttons.${type}`;\n const fallback = humanize(type);\n\n const label = translate(key, fallback);\n\n return { label };\n}\n","import React from \"react\";\n\nimport { useUserFriendlyName } from \"../../../definitions/helpers/useUserFriendlyName\";\nimport { useResourceParams } from \"../../use-resource-params\";\nimport { useRefineOptions } from \"../../use-refine-options\";\nimport { useButtonCanAccess } from \"../button-can-access\";\nimport { useNavigation } from \"../../navigation\";\nimport { useTranslate } from \"../../i18n\";\nimport { useLink } from \"../../router\";\n\nimport type { BaseKey } from \"../../../contexts/data/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport type { CanReturnType } from \"../../../contexts/accessControl/types\";\n\nexport type NavigationButtonProps = {\n action: Action;\n id?: BaseKey;\n resource?: string;\n meta?: Record<string, unknown>;\n accessControl?: {\n enabled?: boolean;\n hideIfUnauthorized?: boolean;\n };\n};\n\nexport type NavigationButtonValues = {\n to: string;\n label: string;\n disabled: boolean;\n title: string;\n hidden: boolean;\n canAccess: CanReturnType | undefined;\n LinkComponent: React.ComponentType<\n React.PropsWithChildren<{\n [prop: string]: any;\n to: string;\n }>\n >;\n};\n\nexport function useNavigationButton(\n props: NavigationButtonProps,\n): NavigationButtonValues {\n const navigation = useNavigation();\n const Link = useLink();\n const translate = useTranslate();\n const getUserFriendlyName = useUserFriendlyName();\n const {\n textTransformers: { humanize },\n } = useRefineOptions();\n\n const { id, resource, identifier } = useResourceParams({\n resource: props.resource,\n id: props.action === \"create\" ? undefined : props.id,\n });\n\n const { canAccess, title, hidden, disabled } = useButtonCanAccess({\n action: props.action,\n accessControl: props.accessControl,\n meta: props.meta,\n id,\n resource,\n });\n\n const LinkComponent = Link;\n\n const to = React.useMemo(() => {\n if (!resource) return \"\";\n switch (props.action) {\n case \"create\":\n case \"list\":\n return navigation[`${props.action}Url`](resource, props.meta);\n default:\n if (!id) return \"\";\n return navigation[`${props.action}Url`](resource, id, props.meta);\n }\n }, [resource, id, props.meta, navigation[`${props.action}Url`]]);\n\n const label =\n props.action === \"list\"\n ? translate(\n `${identifier ?? props.resource}.titles.list`,\n getUserFriendlyName(\n resource?.meta?.label ?? identifier ?? props.resource,\n \"plural\",\n ),\n )\n : translate(`buttons.${props.action}`, humanize(props.action));\n\n return {\n to,\n label,\n title,\n disabled,\n hidden,\n canAccess,\n LinkComponent,\n };\n}\n","import React from \"react\";\n\nimport { AccessControlContext } from \"../../../contexts/accessControl\";\nimport { useCan } from \"../../accessControl\";\nimport { useTranslate } from \"../../i18n\";\n\nimport type { CanReturnType } from \"../../../contexts/accessControl/types\";\nimport type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport type { BaseKey } from \"../../../contexts/data/types\";\n\ntype ButtonCanAccessProps = {\n action: Action | \"delete\";\n resource?: IResourceItem;\n id?: BaseKey;\n accessControl?: {\n enabled?: boolean;\n hideIfUnauthorized?: boolean;\n };\n meta?: Record<string, unknown>;\n};\n\ntype ButtonCanAccessValues = {\n title: string;\n hidden: boolean;\n disabled: boolean;\n canAccess: CanReturnType | undefined;\n};\n\nexport const useButtonCanAccess = (\n props: ButtonCanAccessProps,\n): ButtonCanAccessValues => {\n const translate = useTranslate();\n const accessControlContext = React.useContext(AccessControlContext);\n\n const accessControlEnabled =\n props.accessControl?.enabled ??\n accessControlContext.options.buttons.enableAccessControl;\n\n const hideIfUnauthorized =\n props.accessControl?.hideIfUnauthorized ??\n accessControlContext.options.buttons.hideIfUnauthorized;\n\n const { data: canAccess } = useCan({\n resource: props.resource?.name,\n action: props.action === \"clone\" ? \"create\" : props.action,\n params: { meta: props.meta, id: props.id, resource: props.resource },\n queryOptions: {\n enabled: accessControlEnabled,\n },\n });\n\n const title = React.useMemo(() => {\n if (canAccess?.can) return \"\";\n if (canAccess?.reason) return canAccess.reason;\n\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n }, [canAccess?.can, canAccess?.reason, translate]);\n\n const hidden = accessControlEnabled && hideIfUnauthorized && !canAccess?.can;\n\n const disabled = canAccess?.can === false;\n\n return {\n title,\n hidden,\n disabled,\n canAccess,\n };\n};\n","import { useTranslate } from \"../../i18n\";\nimport { useDelete } from \"../../data/useDelete\";\nimport { useButtonCanAccess } from \"../button-can-access\";\nimport { useResourceParams } from \"../../use-resource-params\";\nimport { useMutationMode, useWarnAboutChange } from \"../../refine\";\n\nimport type { BaseKey, DeleteOneResponse } from \"../../../contexts/data/types\";\nimport type { CanReturnType } from \"../../../contexts/accessControl/types\";\nimport type { DeleteParams } from \"../../data/useDelete\";\n\nexport type DeleteButtonProps = {\n resource?: string;\n id?: BaseKey;\n dataProviderName?: string;\n meta?: Record<string, unknown>;\n accessControl?: {\n enabled?: boolean;\n hideIfUnauthorized?: boolean;\n };\n onSuccess?: (value: DeleteOneResponse) => void;\n} & Pick<\n DeleteParams<any, any, any>,\n \"mutationMode\" | \"successNotification\" | \"errorNotification\" | \"invalidates\"\n>;\n\nexport type DeleteButtonValues = {\n label: string;\n title: string;\n hidden: boolean;\n loading: boolean;\n disabled: boolean;\n canAccess: CanReturnType | undefined;\n confirmOkLabel: string;\n cancelLabel: string;\n confirmTitle: string;\n onConfirm: () => void;\n};\n\nexport function useDeleteButton(props: DeleteButtonProps): DeleteButtonValues {\n const translate = useTranslate();\n const {\n mutation: { mutate, isPending, variables },\n } = useDelete();\n const { setWarnWhen } = useWarnAboutChange();\n const { mutationMode } = useMutationMode(props.mutationMode);\n\n const { id, resource, identifier } = useResourceParams({\n resource: props.resource,\n id: props.id,\n });\n\n const { title, disabled, hidden, canAccess } = useButtonCanAccess({\n action: \"delete\",\n accessControl: props.accessControl,\n id,\n resource,\n });\n\n const label = translate(\"buttons.delete\", \"Delete\");\n\n const confirmOkLabel = translate(\"buttons.delete\", \"Delete\");\n\n const confirmTitle = translate(\"buttons.confirm\", \"Are you sure?\");\n\n const cancelLabel = translate(\"buttons.cancel\", \"Cancel\");\n\n const loading = id === variables?.id && isPending;\n\n const onConfirm = () => {\n if (id && identifier) {\n setWarnWhen(false);\n mutate(\n {\n id,\n resource: identifier,\n mutationMode,\n successNotification: props.successNotification,\n errorNotification: props.errorNotification,\n meta: props.meta,\n dataProviderName: props.dataProviderName,\n invalidates: props.invalidates,\n },\n {\n onSuccess: props.onSuccess,\n },\n );\n }\n };\n\n return {\n label,\n title,\n hidden,\n disabled,\n canAccess,\n loading,\n confirmOkLabel,\n cancelLabel,\n confirmTitle,\n onConfirm,\n };\n}\n","import { useQueryClient } from \"@tanstack/react-query\";\n\nimport { useTranslate } from \"../../i18n\";\nimport { useInvalidate } from \"../../invalidate\";\nimport { useResourceParams } from \"../../use-resource-params\";\nimport { useKeys } from \"../../useKeys\";\nimport { pickDataProvider } from \"../../../definitions\";\n\nimport type { BaseKey } from \"../../../contexts/data/types\";\n\nexport type RefreshButtonProps = {\n resource?: string;\n id?: BaseKey;\n dataProviderName?: string;\n meta?: Record<string, unknown>;\n};\n\nexport type RefreshButtonValues = {\n onClick: () => void;\n label: string;\n loading: boolean;\n};\n\nexport function useRefreshButton(\n props: RefreshButtonProps,\n): RefreshButtonValues {\n const translate = useTranslate();\n const { keys } = useKeys();\n\n const queryClient = useQueryClient();\n const invalidates = useInvalidate();\n\n const { identifier, id, resources } = useResourceParams({\n resource: props.resource,\n id: props.id,\n });\n\n const loading = !!queryClient.isFetching({\n queryKey: keys()\n .data(pickDataProvider(identifier, props.dataProviderName, resources))\n .resource(identifier)\n .action(\"one\")\n .get(),\n });\n\n const onClick = () => {\n invalidates({\n id,\n invalidates: [\"detail\"],\n dataProviderName: props.dataProviderName,\n resource: identifier,\n });\n };\n\n const label = translate(\"buttons.refresh\", \"Refresh\");\n\n return {\n onClick,\n label,\n loading,\n };\n}\n","import { useActionableButton } from \"./actionable-button\";\nimport { useNavigationButton } from \"./navigation-button\";\n\nimport type { NavigationButtonProps } from \"./navigation-button\";\nimport type { Prettify } from \"../../contexts/data/types\";\n\nexport { useDeleteButton } from \"./delete-button\";\n\nexport { useRefreshButton } from \"./refresh-button\";\n\nexport const useShowButton = (\n props: Prettify<Omit<NavigationButtonProps, \"action\">>,\n) => useNavigationButton({ ...props, action: \"show\" });\n\nexport const useEditButton = (\n props: Prettify<Omit<NavigationButtonProps, \"action\">>,\n) => useNavigationButton({ ...props, action: \"edit\" });\n\nexport const useCloneButton = (\n props: Prettify<Omit<NavigationButtonProps, \"action\">>,\n) => useNavigationButton({ ...props, action: \"clone\" });\n\nexport const useCreateButton = (\n props: Prettify<Omit<NavigationButtonProps, \"action\" | \"id\">>,\n) => useNavigationButton({ ...props, action: \"create\" });\n\nexport const useListButton = (\n props: Prettify<Omit<NavigationButtonProps, \"action\" | \"id\">>,\n) => useNavigationButton({ ...props, action: \"list\" });\n\nexport const useSaveButton = () => useActionableButton({ type: \"save\" });\n\nexport const useExportButton = () => useActionableButton({ type: \"export\" });\n\nexport const useImportButton = () => useActionableButton({ type: \"import\" });\n","import React, {\n type DetailedHTMLProps,\n type HTMLAttributes,\n type FormHTMLAttributes,\n} from \"react\";\n\nimport {\n ForgotPasswordPage,\n LoginPage,\n RegisterPage,\n UpdatePasswordPage,\n} from \"./components\";\n\nimport type { AuthPageProps } from \"./types\";\n\nexport type DivPropsType = DetailedHTMLProps<\n HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\nexport type FormPropsType = DetailedHTMLProps<\n FormHTMLAttributes<HTMLFormElement>,\n HTMLFormElement\n>;\n\nexport type AuthProps = AuthPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\n/**\n * **refine** has a default auth page form which is served on `/login` route when the `authProvider` configuration is provided.\n * @param title is not implemented yet.\n * @see {@link https://refine.dev/docs/api-reference/core/components/auth-page/} for more details.\n */\nexport const AuthPage: React.FC<AuthProps> = (props) => {\n const { type } = props;\n const renderView = () => {\n switch (type) {\n case \"register\":\n return <RegisterPage {...props} />;\n case \"forgotPassword\":\n return <ForgotPasswordPage {...props} />;\n case \"updatePassword\":\n return <UpdatePasswordPage {...props} />;\n default:\n return <LoginPage {...props} />;\n }\n };\n\n return <>{renderView()}</>;\n};\n","import React, { useState } from \"react\";\n\nimport { useLink, useLogin, useTranslate } from \"@hooks\";\n\nimport type { DivPropsType, FormPropsType } from \"../..\";\nimport type { LoginFormTypes, LoginPageProps } from \"../../types\";\n\ntype LoginProps = LoginPageProps<DivPropsType, DivPropsType, FormPropsType>;\n\nexport const LoginPage: React.FC<LoginProps> = ({\n providers,\n registerLink,\n forgotPasswordLink,\n rememberMe,\n contentProps,\n wrapperProps,\n renderContent,\n formProps,\n title = undefined,\n hideForm,\n mutationVariables,\n}) => {\n const Link = useLink();\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [remember, setRemember] = useState(false);\n\n const translate = useTranslate();\n\n const { mutate: login } = useLogin<LoginFormTypes>();\n\n const renderLink = (link: string, text?: string) => {\n return <Link to={link}>{text}</Link>;\n };\n\n const renderProviders = () => {\n if (providers) {\n return providers.map((provider) => (\n <div\n key={provider.name}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: \"1rem\",\n }}\n >\n <button\n onClick={() =>\n login({\n ...mutationVariables,\n providerName: provider.name,\n })\n }\n style={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n {provider?.icon}\n {provider.label ?? <label>{provider.label}</label>}\n </button>\n </div>\n ));\n }\n return null;\n };\n\n const content = (\n <div {...contentProps}>\n <h1 style={{ textAlign: \"center\" }}>\n {translate(\"pages.login.title\", \"Sign in to your account\")}\n </h1>\n {renderProviders()}\n {!hideForm && (\n <>\n <hr />\n <form\n onSubmit={(e) => {\n e.preventDefault();\n login({ ...mutationVariables, email, password, remember });\n }}\n {...formProps}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 25,\n }}\n >\n <label htmlFor=\"email-input\">\n {translate(\"pages.login.fields.email\", \"Email\")}\n </label>\n <input\n id=\"email-input\"\n name=\"email\"\n type=\"text\"\n size={20}\n autoCorrect=\"off\"\n spellCheck={false}\n autoCapitalize=\"off\"\n required\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n <label htmlFor=\"password-input\">\n {translate(\"pages.login.fields.password\", \"Password\")}\n </label>\n <input\n id=\"password-input\"\n type=\"password\"\n name=\"password\"\n required\n size={20}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n />\n {rememberMe ?? (\n <>\n <label htmlFor=\"remember-me-input\">\n {translate(\"pages.login.buttons.rememberMe\", \"Remember me\")}\n <input\n id=\"remember-me-input\"\n name=\"remember\"\n type=\"checkbox\"\n size={20}\n checked={remember}\n value={remember.toString()}\n onChange={() => {\n setRemember(!remember);\n }}\n />\n </label>\n </>\n )}\n <br />\n {forgotPasswordLink ??\n renderLink(\n \"/forgot-password\",\n translate(\n \"pages.login.buttons.forgotPassword\",\n \"Forgot password?\",\n ),\n )}\n <input\n type=\"submit\"\n value={translate(\"pages.login.signin\", \"Sign in\")}\n />\n {registerLink ?? (\n <span>\n {translate(\n \"pages.login.buttons.noAccount\",\n \"Don’t have an account?\",\n )}{\" \"}\n {renderLink(\n \"/register\",\n translate(\"pages.login.register\", \"Sign up\"),\n )}\n </span>\n )}\n </div>\n </form>\n </>\n )}\n {registerLink !== false && hideForm && (\n <div style={{ textAlign: \"center\" }}>\n {translate(\"pages.login.buttons.noAccount\", \"Don’t have an account?\")}{\" \"}\n {renderLink(\n \"/register\",\n translate(\"pages.login.register\", \"Sign up\"),\n )}\n </div>\n )}\n </div>\n );\n\n return (\n <div {...wrapperProps}>\n {renderContent ? renderContent(content, title) : content}\n </div>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { useLink, useRegister, useTranslate } from \"@hooks\";\n\nimport type { DivPropsType, FormPropsType } from \"../..\";\nimport type { RegisterPageProps } from \"../../types\";\n\ntype RegisterProps = RegisterPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\nexport const RegisterPage: React.FC<RegisterProps> = ({\n providers,\n loginLink,\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title = undefined,\n hideForm,\n mutationVariables,\n}) => {\n const Link = useLink();\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n const translate = useTranslate();\n\n const { mutate: register, isPending } = useRegister();\n\n const renderLink = (link: string, text?: string) => {\n return <Link to={link}>{text}</Link>;\n };\n\n const renderProviders = () => {\n if (providers) {\n return providers.map((provider) => (\n <div\n key={provider.name}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: \"1rem\",\n }}\n >\n <button\n onClick={() =>\n register({\n ...mutationVariables,\n providerName: provider.name,\n })\n }\n style={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n {provider?.icon}\n {provider.label ?? <label>{provider.label}</label>}\n </button>\n </div>\n ));\n }\n return null;\n };\n\n const content = (\n <div {...contentProps}>\n <h1 style={{ textAlign: \"center\" }}>\n {translate(\"pages.register.title\", \"Sign up for your account\")}\n </h1>\n {renderProviders()}\n {!hideForm && (\n <>\n <hr />\n <form\n onSubmit={(e) => {\n e.preventDefault();\n register({ ...mutationVariables, email, password });\n }}\n {...formProps}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 25,\n }}\n >\n <label htmlFor=\"email-input\">\n {translate(\"pages.register.fields.email\", \"Email\")}\n </label>\n <input\n id=\"email-input\"\n name=\"email\"\n type=\"email\"\n size={20}\n autoCorrect=\"off\"\n spellCheck={false}\n autoCapitalize=\"off\"\n required\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n <label htmlFor=\"password-input\">\n {translate(\"pages.register.fields.password\", \"Password\")}\n </label>\n <input\n id=\"password-input\"\n name=\"password\"\n type=\"password\"\n required\n size={20}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n />\n <input\n type=\"submit\"\n value={translate(\"pages.register.buttons.submit\", \"Sign up\")}\n disabled={isPending}\n />\n {loginLink ?? (\n <>\n <span>\n {translate(\n \"pages.login.buttons.haveAccount\",\n \"Have an account?\",\n )}{\" \"}\n {renderLink(\n \"/login\",\n translate(\"pages.login.signin\", \"Sign in\"),\n )}\n </span>\n </>\n )}\n </div>\n </form>\n </>\n )}\n {loginLink !== false && hideForm && (\n <div style={{ textAlign: \"center\" }}>\n {translate(\"pages.login.buttons.haveAccount\", \"Have an account?\")}{\" \"}\n {renderLink(\"/login\", translate(\"pages.login.signin\", \"Sign in\"))}\n </div>\n )}\n </div>\n );\n\n return (\n <div {...wrapperProps}>\n {renderContent ? renderContent(content, title) : content}\n </div>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { useForgotPassword, useLink, useTranslate } from \"@hooks\";\n\nimport type { DivPropsType, FormPropsType } from \"../..\";\nimport type {\n ForgotPasswordFormTypes,\n ForgotPasswordPageProps,\n} from \"../../types\";\n\ntype ForgotPasswordProps = ForgotPasswordPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\nexport const ForgotPasswordPage: React.FC<ForgotPasswordProps> = ({\n loginLink,\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title = undefined,\n mutationVariables,\n}) => {\n const translate = useTranslate();\n const Link = useLink();\n\n const [email, setEmail] = useState(\"\");\n\n const { mutate: forgotPassword, isPending } =\n useForgotPassword<ForgotPasswordFormTypes>();\n\n const renderLink = (link: string, text?: string) => {\n return <Link to={link}>{text}</Link>;\n };\n\n const content = (\n <div {...contentProps}>\n <h1 style={{ textAlign: \"center\" }}>\n {translate(\"pages.forgotPassword.title\", \"Forgot your password?\")}\n </h1>\n <hr />\n <form\n onSubmit={(e) => {\n e.preventDefault();\n forgotPassword({ ...mutationVariables, email });\n }}\n {...formProps}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 25,\n }}\n >\n <label htmlFor=\"email-input\">\n {translate(\"pages.forgotPassword.fields.email\", \"Email\")}\n </label>\n <input\n id=\"email-input\"\n name=\"email\"\n type=\"mail\"\n autoCorrect=\"off\"\n spellCheck={false}\n autoCapitalize=\"off\"\n required\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n <input\n type=\"submit\"\n disabled={isPending}\n value={translate(\n \"pages.forgotPassword.buttons.submit\",\n \"Send reset instructions\",\n )}\n />\n <br />\n {loginLink ?? (\n <span>\n {translate(\n \"pages.register.buttons.haveAccount\",\n \"Have an account? \",\n )}{\" \"}\n {renderLink(\"/login\", translate(\"pages.login.signin\", \"Sign in\"))}\n </span>\n )}\n </div>\n </form>\n </div>\n );\n\n return (\n <div {...wrapperProps}>\n {renderContent ? renderContent(content, title) : content}\n </div>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { useActiveAuthProvider } from \"@definitions/helpers\";\nimport { useTranslate, useUpdatePassword } from \"@hooks\";\n\nimport type { DivPropsType, FormPropsType } from \"../..\";\nimport type {\n UpdatePasswordFormTypes,\n UpdatePasswordPageProps,\n} from \"../../types\";\n\ntype UpdatePasswordProps = UpdatePasswordPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\nexport const UpdatePasswordPage: React.FC<UpdatePasswordProps> = ({\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title = undefined,\n mutationVariables,\n}) => {\n const translate = useTranslate();\n\n const authProvider = useActiveAuthProvider();\n const { mutate: updatePassword, isPending } =\n useUpdatePassword<UpdatePasswordFormTypes>();\n\n const [newPassword, setNewPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n\n const content = (\n <div {...contentProps}>\n <h1 style={{ textAlign: \"center\" }}>\n {translate(\"pages.updatePassword.title\", \"Update Password\")}\n </h1>\n <hr />\n <form\n onSubmit={(e) => {\n e.preventDefault();\n updatePassword({\n ...mutationVariables,\n password: newPassword,\n confirmPassword,\n });\n }}\n {...formProps}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 25,\n }}\n >\n <label htmlFor=\"password-input\">\n {translate(\"pages.updatePassword.fields.password\", \"New Password\")}\n </label>\n <input\n id=\"password-input\"\n name=\"password\"\n type=\"password\"\n required\n size={20}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n />\n <label htmlFor=\"confirm-password-input\">\n {translate(\n \"pages.updatePassword.fields.confirmPassword\",\n \"Confirm New Password\",\n )}\n </label>\n <input\n id=\"confirm-password-input\"\n name=\"confirmPassword\"\n type=\"password\"\n required\n size={20}\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n />\n <input\n type=\"submit\"\n disabled={isPending}\n value={translate(\"pages.updatePassword.buttons.submit\", \"Update\")}\n />\n </div>\n </form>\n </div>\n );\n\n return (\n <div {...wrapperProps}>\n {renderContent ? renderContent(content, title) : content}\n </div>\n );\n};\n","import React from \"react\";\nimport { ConfigSuccessPage } from \"../config-success\";\nimport { useRefineContext } from \"@hooks/refine\";\nimport { ConfigErrorPage } from \"../config-error\";\n\nexport const WelcomePage = () => {\n const { __initialized } = useRefineContext();\n\n return (\n <>\n <ConfigSuccessPage />\n {!__initialized && <ConfigErrorPage />}\n </>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { useMediaQuery } from \"@definitions/helpers\";\n\ntype CardInfo = {\n title: string;\n description: string;\n link: string;\n iconUrl: string;\n};\n\nconst cards: CardInfo[] = [\n {\n title: \"Documentation\",\n description:\n \"Learn about the technical details of using Refine in your projects.\",\n link: \"https://refine.dev/docs\",\n iconUrl:\n \"https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/book.svg\",\n },\n {\n title: \"Tutorial\",\n description:\n \"Learn how to use Refine by building a fully-functioning CRUD app, from scratch to full launch.\",\n link: \"https://refine.dev/tutorial\",\n iconUrl:\n \"https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/hat.svg\",\n },\n {\n title: \"Templates\",\n description:\n \"Explore a range of pre-built templates, perfect everything from admin panels to dashboards and CRMs.\",\n link: \"https://refine.dev/templates\",\n iconUrl:\n \"https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/application.svg\",\n },\n {\n title: \"Community\",\n description: \"Join our Discord community and keep up with the latest news.\",\n link: \"https://discord.gg/refine\",\n iconUrl:\n \"https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/discord.svg\",\n },\n];\n\n/**\n * It is a page that welcomes you after the configuration is completed.\n */\nexport const ConfigSuccessPage: React.FC = () => {\n const isTablet = useMediaQuery(\"(max-width: 1010px)\");\n const isMobile = useMediaQuery(\"(max-width: 650px)\");\n\n const getGridTemplateColumns = () => {\n if (isMobile) {\n return \"1, 280px\";\n }\n if (isTablet) {\n return \"2, 280px\";\n }\n return \"4, 1fr\";\n };\n\n const getHeaderFontSize = () => {\n if (isMobile) {\n return \"32px\";\n }\n if (isTablet) {\n return \"40px\";\n }\n return \"48px\";\n };\n\n const getSubHeaderFontSize = () => {\n if (isMobile) {\n return \"16px\";\n }\n if (isTablet) {\n return \"20px\";\n }\n return \"24px\";\n };\n\n return (\n <div\n style={{\n position: \"fixed\",\n zIndex: 10,\n inset: 0,\n overflow: \"auto\",\n width: \"100dvw\",\n height: \"100dvh\",\n }}\n >\n <div\n style={{\n overflow: \"hidden\",\n position: \"relative\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n background: isMobile\n ? \"url(https://refine.ams3.cdn.digitaloceanspaces.com/website/static/assets/landing-noise.webp), radial-gradient(88.89% 50% at 50% 100%, rgba(38, 217, 127, 0.10) 0%, rgba(38, 217, 127, 0.00) 100%), radial-gradient(88.89% 50% at 50% 0%, rgba(71, 235, 235, 0.15) 0%, rgba(71, 235, 235, 0.00) 100%), #1D1E30\"\n : isTablet\n ? \"url(https://refine.ams3.cdn.digitaloceanspaces.com/website/static/assets/landing-noise.webp), radial-gradient(66.67% 50% at 50% 100%, rgba(38, 217, 127, 0.10) 0%, rgba(38, 217, 127, 0.00) 100%), radial-gradient(66.67% 50% at 50% 0%, rgba(71, 235, 235, 0.15) 0%, rgba(71, 235, 235, 0.00) 100%), #1D1E30\"\n : \"url(https://refine.ams3.cdn.digitaloceanspaces.com/website/static/assets/landing-noise.webp), radial-gradient(35.56% 50% at 50% 100%, rgba(38, 217, 127, 0.12) 0%, rgba(38, 217, 127, 0) 100%), radial-gradient(35.56% 50% at 50% 0%, rgba(71, 235, 235, 0.18) 0%, rgba(71, 235, 235, 0) 100%), #1D1E30\",\n minHeight: \"100%\",\n minWidth: \"100%\",\n fontFamily: \"Arial\",\n color: \"#FFFFFF\",\n }}\n >\n <div\n style={{\n zIndex: 2,\n position: \"absolute\",\n width: isMobile ? \"400px\" : \"800px\",\n height: \"552px\",\n opacity: \"0.5\",\n background:\n \"url(https://refine.ams3.cdn.digitaloceanspaces.com/assets/welcome-page-hexagon.png)\",\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"contain\",\n top: \"0\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n }}\n />\n <div style={{ height: isMobile ? \"40px\" : \"80px\" }} />\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\n <div\n style={{\n backgroundRepeat: \"no-repeat\",\n backgroundSize: isMobile ? \"112px 58px\" : \"224px 116px\",\n backgroundImage:\n \"url(https://refine.ams3.cdn.digitaloceanspaces.com/assets/refine-logo.svg)\",\n width: isMobile ? 112 : 224,\n height: isMobile ? 58 : 116,\n }}\n />\n </div>\n <div\n style={{\n height: isMobile ? \"120px\" : isTablet ? \"200px\" : \"30vh\",\n minHeight: isMobile ? \"120px\" : isTablet ? \"200px\" : \"200px\",\n }}\n />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n textAlign: \"center\",\n }}\n >\n <h1\n style={{\n fontSize: getHeaderFontSize(),\n fontWeight: 700,\n margin: \"0px\",\n }}\n >\n Welcome Aboard!\n </h1>\n <h4\n style={{\n fontSize: getSubHeaderFontSize(),\n fontWeight: 400,\n margin: \"0px\",\n }}\n >\n Your configuration is completed.\n </h4>\n </div>\n <div style={{ height: \"64px\" }} />\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${getGridTemplateColumns()})`,\n justifyContent: \"center\",\n gap: \"48px\",\n paddingRight: \"16px\",\n paddingLeft: \"16px\",\n paddingBottom: \"32px\",\n maxWidth: \"976px\",\n margin: \"auto\",\n }}\n >\n {cards.map((card) => (\n <Card key={`welcome-page-${card.title}`} card={card} />\n ))}\n </div>\n </div>\n </div>\n );\n};\n\ntype CardProps = {\n card: CardInfo;\n};\n\nconst Card: React.FC<CardProps> = ({ card }) => {\n const { title, description, iconUrl, link } = card;\n\n const [isHover, setIsHover] = useState(false);\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <a\n onPointerEnter={() => setIsHover(true)}\n onPointerLeave={() => setIsHover(false)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n color: \"#fff\",\n textDecoration: \"none\",\n }}\n href={link}\n >\n <div\n style={{\n width: \"16px\",\n height: \"16px\",\n backgroundPosition: \"center\",\n backgroundSize: \"contain\",\n backgroundRepeat: \"no-repeat\",\n backgroundImage: `url(${iconUrl})`,\n }}\n />\n <span\n style={{\n fontSize: \"16px\",\n fontWeight: 700,\n marginLeft: \"13px\",\n marginRight: \"14px\",\n }}\n >\n {title}\n </span>\n <svg\n style={{\n transition:\n \"transform 0.5s ease-in-out, opacity 0.2s ease-in-out\",\n ...(isHover && {\n transform: \"translateX(4px)\",\n opacity: 1,\n }),\n }}\n width=\"12\"\n height=\"8\"\n fill=\"none\"\n opacity=\"0.5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.293.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 0 1-1.414-1.414L8.586 5H1a1 1 0 0 1 0-2h7.586L7.293 1.707a1 1 0 0 1 0-1.414Z\"\n fill=\"#fff\"\n />\n </svg>\n </a>\n </div>\n <span\n style={{\n fontSize: \"12px\",\n opacity: 0.5,\n lineHeight: \"16px\",\n }}\n >\n {description}\n </span>\n </div>\n );\n};\n","import React from \"react\";\n\nexport const ConfigErrorPage = () => {\n return (\n <div\n style={{\n position: \"fixed\",\n zIndex: 11,\n inset: 0,\n overflow: \"auto\",\n width: \"100dvw\",\n height: \"100dvh\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n padding: \"24px\",\n background: \"#14141FBF\",\n backdropFilter: \"blur(3px)\",\n }}\n >\n <div\n style={{\n maxWidth: \"640px\",\n width: \"100%\",\n background: \"#1D1E30\",\n borderRadius: \"16px\",\n border: \"1px solid #303450\",\n boxShadow: \"0px 0px 120px -24px #000000\",\n }}\n >\n <div\n style={{\n padding: \"16px 20px\",\n borderBottom: \"1px solid #303450\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n position: \"relative\",\n }}\n >\n <ErrorGradient\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n }}\n />\n <div\n style={{\n lineHeight: \"24px\",\n fontSize: \"16px\",\n color: \"#FFFFFF\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"16px\",\n }}\n >\n <ErrorIcon />\n <span\n style={{\n fontWeight: 400,\n }}\n >\n Configuration Error\n </span>\n </div>\n </div>\n <div\n style={{\n padding: \"20px\",\n color: \"#A3ADC2\",\n lineHeight: \"20px\",\n fontSize: \"14px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"20px\",\n }}\n >\n <p\n style={{\n margin: 0,\n padding: 0,\n lineHeight: \"28px\",\n fontSize: \"16px\",\n }}\n >\n <code\n style={{\n display: \"inline-block\",\n background: \"#30345080\",\n padding: \"0 4px\",\n lineHeight: \"24px\",\n fontSize: \"16px\",\n borderRadius: \"4px\",\n color: \"#FFFFFF\",\n }}\n >\n {\"<Refine />\"}\n </code>{\" \"}\n is not initialized. Please make sure you have it mounted in your\n app and placed your components inside it.\n </p>\n <div>\n <ExampleImplementation />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nconst ExampleImplementation = () => {\n return (\n <pre\n style={{\n display: \"block\",\n overflowX: \"auto\",\n borderRadius: \"8px\",\n fontSize: \"14px\",\n lineHeight: \"24px\",\n backgroundColor: \"#14141F\",\n color: \"#E5ECF2\",\n padding: \"16px\",\n margin: \"0\",\n maxHeight: \"400px\",\n overflow: \"auto\",\n }}\n >\n <span style={{ color: \"#FF7B72\" }}>import</span> {\"{\"} Refine, WelcomePage{\" \"}\n {\"}\"} <span style={{ color: \"#FF7B72\" }}>from</span>{\" \"}\n <span style={{ color: \"#A5D6FF\" }}>{'\"@refinedev/core\"'}</span>;{\"\\n\"}\n {\"\\n\"}\n <span style={{ color: \"#FF7B72\" }}>export</span>{\" \"}\n <span style={{ color: \"#FF7B72\" }}>default</span>{\" \"}\n <span>\n <span style={{ color: \"#FF7B72\" }}>function</span>{\" \"}\n <span style={{ color: \"#FFA657\" }}>App</span>\n (\n <span style={{ color: \"rgb(222, 147, 95)\" }} />){\" \"}\n </span>\n {\"{\"}\n {\"\\n\"}\n {\" \"}\n <span style={{ color: \"#FF7B72\" }}>return</span> ({\"\\n\"}\n {\" \"}\n <span>\n <span style={{ color: \"#79C0FF\" }}>\n &lt;\n <span style={{ color: \"#79C0FF\" }}>Refine</span>\n {\"\\n\"}\n {\" \"}\n <span style={{ color: \"#E5ECF2\", opacity: 0.6 }}>\n {\"// \"}\n <span>...</span>\n </span>\n {\"\\n\"}\n {\" \"}&gt;\n </span>\n {\"\\n\"}\n {\" \"}\n <span style={{ opacity: 0.6 }}>\n {\"{\"}\n {\"/* ... */\"}\n {\"}\"}\n </span>\n {\"\\n\"}\n {\" \"}\n <span style={{ color: \"#79C0FF\" }}>\n &lt;\n <span style={{ color: \"#79C0FF\" }}>WelcomePage</span> /&gt;\n </span>\n {\"\\n\"}\n {\" \"}\n <span style={{ opacity: 0.6 }}>\n {\"{\"}\n {\"/* ... */\"}\n {\"}\"}\n </span>\n {\"\\n\"}\n {\" \"}\n <span style={{ color: \"#79C0FF\" }}>\n &lt;/\n <span style={{ color: \"#79C0FF\" }}>Refine</span>\n &gt;\n </span>\n </span>\n {\"\\n\"}\n {\" \"});{\"\\n\"}\n {\"}\"}\n </pre>\n );\n};\n\nconst ErrorGradient = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={204}\n height={56}\n viewBox=\"0 0 204 56\"\n fill=\"none\"\n {...props}\n >\n <path fill=\"url(#welcome-page-error-gradient-a)\" d=\"M12 0H0v12L12 0Z\" />\n <path\n fill=\"url(#welcome-page-error-gradient-b)\"\n d=\"M28 0h-8L0 20v8L28 0Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-c)\"\n d=\"M36 0h8L0 44v-8L36 0Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-d)\"\n d=\"M60 0h-8L0 52v4h4L60 0Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-e)\"\n d=\"M68 0h8L20 56h-8L68 0Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-f)\"\n d=\"M92 0h-8L28 56h8L92 0Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-g)\"\n d=\"M100 0h8L52 56h-8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-h)\"\n d=\"M124 0h-8L60 56h8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-i)\"\n d=\"M140 0h-8L76 56h8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-j)\"\n d=\"M132 0h8L84 56h-8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-k)\"\n d=\"M156 0h-8L92 56h8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-l)\"\n d=\"M164 0h8l-56 56h-8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-m)\"\n d=\"M188 0h-8l-56 56h8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-n)\"\n d=\"M204 0h-8l-56 56h8l56-56Z\"\n />\n <defs>\n <radialGradient\n id=\"welcome-page-error-gradient-a\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-b\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-c\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-d\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-e\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-f\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-g\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-h\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-i\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-j\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-k\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-l\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-m\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-n\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n </defs>\n </svg>\n);\n\nconst ErrorIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={16}\n height={16}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n {...props}\n >\n <path\n fill=\"#FF4C4D\"\n fillRule=\"evenodd\"\n d=\"M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16Z\"\n clipRule=\"evenodd\"\n />\n <path\n fill=\"#fff\"\n fillRule=\"evenodd\"\n d=\"M7 8a1 1 0 1 0 2 0V5a1 1 0 1 0-2 0v3Zm0 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n","import React from \"react\";\n\nimport { useQuerySubscription } from \"@refinedev/devtools-internal\";\nimport {\n keepPreviousData,\n QueryClient,\n QueryClientProvider,\n} from \"@tanstack/react-query\";\n\nimport { RouteChangeHandler } from \"@components\";\nimport { Telemetry } from \"@components/telemetry\";\nimport { handleRefineOptions } from \"@definitions\";\nimport { useDeepMemo } from \"@hooks/deepMemo\";\n\nimport { AccessControlContextProvider } from \"../../../contexts/accessControl\";\nimport { AuditLogContextProvider } from \"../../../contexts/auditLog\";\nimport { AuthProviderContextProvider } from \"../../../contexts/auth\";\nimport { DataContextProvider } from \"../../../contexts/data\";\nimport { I18nContextProvider } from \"../../../contexts/i18n\";\nimport { LiveContextProvider } from \"../../../contexts/live\";\nimport { NotificationContextProvider } from \"../../../contexts/notification\";\nimport { RefineContextProvider } from \"../../../contexts/refine\";\nimport { ResourceContextProvider } from \"../../../contexts/resource\";\nimport { RouterContextProvider } from \"../../../contexts/router\";\nimport { UndoableQueueContextProvider } from \"../../../contexts/undoableQueue\";\nimport { UnsavedWarnContextProvider } from \"../../../contexts/unsavedWarn\";\n\nimport type { RefineProps } from \"../../../contexts/refine/types\";\nimport { useRouterMisuseWarning } from \"../../../hooks/router/use-router-misuse-warning/index\";\n\n/**\n * {@link https://refine.dev/docs/api-reference/core/components/refine-config `<Refine> component`} is the entry point of a refine app.\n * It is where the highest level of configuration of the app occurs.\n * Only a dataProvider is required to bootstrap the app. After adding a dataProvider, resources can be added as property.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/components/refine-config} for more details.\n */\nexport const Refine: React.FC<RefineProps> = ({\n authProvider,\n dataProvider,\n routerProvider,\n notificationProvider,\n accessControlProvider,\n auditLogProvider,\n resources,\n children,\n liveProvider,\n i18nProvider,\n onLiveEvent,\n options,\n}) => {\n const {\n optionsWithDefaults,\n disableTelemetryWithDefault,\n reactQueryWithDefaults,\n } = handleRefineOptions({\n options,\n });\n\n const queryClient = useDeepMemo(() => {\n if (reactQueryWithDefaults.clientConfig instanceof QueryClient) {\n return reactQueryWithDefaults.clientConfig;\n }\n\n return new QueryClient({\n ...reactQueryWithDefaults.clientConfig,\n defaultOptions: {\n ...reactQueryWithDefaults.clientConfig.defaultOptions,\n queries: {\n refetchOnWindowFocus: false,\n placeholderData: keepPreviousData,\n ...reactQueryWithDefaults.clientConfig.defaultOptions?.queries,\n },\n },\n });\n }, [reactQueryWithDefaults.clientConfig]);\n\n useQuerySubscription(queryClient);\n\n const useNotificationProviderValues = React.useMemo(() => {\n return typeof notificationProvider === \"function\"\n ? notificationProvider\n : () => notificationProvider;\n }, [notificationProvider]);\n\n const notificationProviderContextValues = useNotificationProviderValues();\n\n /**\n * Warn our users if they are using the old way of routing in the wrong prop.\n */\n useRouterMisuseWarning(routerProvider);\n /** */\n\n return (\n <QueryClientProvider client={queryClient}>\n <NotificationContextProvider {...notificationProviderContextValues}>\n <AuthProviderContextProvider\n {...(authProvider ?? {})}\n isProvided={Boolean(authProvider)}\n >\n <DataContextProvider dataProvider={dataProvider}>\n <LiveContextProvider liveProvider={liveProvider}>\n <RouterContextProvider router={routerProvider}>\n <ResourceContextProvider resources={resources ?? []}>\n <I18nContextProvider i18nProvider={i18nProvider}>\n <AccessControlContextProvider\n {...(accessControlProvider ?? {})}\n >\n <AuditLogContextProvider {...(auditLogProvider ?? {})}>\n <UndoableQueueContextProvider>\n <RefineContextProvider\n mutationMode={optionsWithDefaults.mutationMode}\n warnWhenUnsavedChanges={\n optionsWithDefaults.warnWhenUnsavedChanges\n }\n syncWithLocation={\n optionsWithDefaults.syncWithLocation\n }\n undoableTimeout={\n optionsWithDefaults.undoableTimeout\n }\n liveMode={optionsWithDefaults.liveMode}\n onLiveEvent={onLiveEvent}\n options={optionsWithDefaults}\n >\n <UnsavedWarnContextProvider>\n <React.Fragment>\n {children}\n {!disableTelemetryWithDefault && <Telemetry />}\n <RouteChangeHandler />\n </React.Fragment>\n </UnsavedWarnContextProvider>\n </RefineContextProvider>\n </UndoableQueueContextProvider>\n </AuditLogContextProvider>\n </AccessControlContextProvider>\n </I18nContextProvider>\n </ResourceContextProvider>\n </RouterContextProvider>\n </LiveContextProvider>\n </DataContextProvider>\n </AuthProviderContextProvider>\n </NotificationContextProvider>\n </QueryClientProvider>\n );\n};\n","import React from \"react\";\n\nimport { useTelemetryData } from \"@hooks/useTelemetryData\";\n\nimport type { ITelemetryData } from \"./types\";\n\nconst encode = (payload: ITelemetryData): string | undefined => {\n try {\n const stringifiedPayload = JSON.stringify(payload || {});\n\n if (typeof btoa !== \"undefined\") {\n return btoa(stringifiedPayload);\n }\n\n return Buffer.from(stringifiedPayload).toString(\"base64\");\n } catch (err) {\n return undefined;\n }\n};\n\nconst throughImage = (src: string) => {\n const img = new Image();\n\n img.src = src;\n};\n\nconst throughFetch = (src: string) => {\n fetch(src);\n};\n\nconst transport = (src: string) => {\n if (typeof Image !== \"undefined\") {\n throughImage(src);\n } else if (typeof fetch !== \"undefined\") {\n throughFetch(src);\n }\n};\n\nexport const Telemetry: React.FC<{}> = () => {\n const payload = useTelemetryData();\n const sent = React.useRef(false);\n\n React.useEffect(() => {\n if (sent.current) {\n return;\n }\n const encoded = encode(payload);\n\n if (!encoded) {\n return;\n }\n\n transport(`https://telemetry.refine.dev/telemetry?payload=${encoded}`);\n sent.current = true;\n }, []);\n\n return null;\n};\n","import { useContext } from \"react\";\n\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { DataContext } from \"@contexts/data\";\nimport { I18nContext } from \"@contexts/i18n\";\nimport { LiveContext } from \"@contexts/live\";\nimport { NotificationContext } from \"@contexts/notification\";\nimport { RouterContext } from \"@contexts/router\";\nimport { useResourceParams } from \"@hooks/use-resource-params\";\n\nimport { useIsExistAuthentication, useRefineContext } from \"..\";\nimport type { ITelemetryData } from \"../../components/telemetry/types\";\n\n// It reads and updates from package.json during build. ref: tsup.config.ts\nconst REFINE_VERSION = \"5.0.2\";\n\nexport const useTelemetryData = (): ITelemetryData => {\n const auth = useIsExistAuthentication();\n const auditLogContext = useContext(AuditLogContext);\n const { liveProvider } = useContext(LiveContext);\n const routerContext = useContext(RouterContext);\n const dataContext = useContext(DataContext);\n const { i18nProvider } = useContext(I18nContext);\n const notificationContext = useContext(NotificationContext);\n const accessControlContext = useContext(AccessControlContext);\n const { resources } = useResourceParams();\n const refineOptions = useRefineContext();\n\n const auditLog =\n !!auditLogContext.create ||\n !!auditLogContext.get ||\n !!auditLogContext.update;\n\n const live =\n !!liveProvider?.publish ||\n !!liveProvider?.subscribe ||\n !!liveProvider?.unsubscribe;\n\n const router =\n !!routerContext.Link ||\n !!routerContext.go ||\n !!routerContext.back ||\n !!routerContext.parse;\n\n const data = !!dataContext;\n\n const i18n =\n !!i18nProvider?.changeLocale ||\n !!i18nProvider?.getLocale ||\n !!i18nProvider?.translate;\n\n const notification =\n !!notificationContext.close || !!notificationContext.open;\n\n const accessControl = !!accessControlContext.can;\n\n const projectId = refineOptions?.options?.projectId;\n\n return {\n providers: {\n auth,\n auditLog,\n live,\n router,\n data,\n i18n,\n notification,\n accessControl,\n },\n version: REFINE_VERSION,\n resourceCount: resources.length,\n projectId,\n };\n};\n","import type { RouterProvider } from \"../../../contexts/router/types\";\n\nexport const checkRouterPropMisuse = (value: RouterProvider) => {\n // check if `routerProvider` prop is passed with legacy properties.\n // If yes, console.warn the user to use `legacyRuterProvider` prop instead.\n const bindings = [\"go\", \"parse\", \"back\", \"Link\"];\n\n // check if `value` contains properties other than `bindings`\n const otherProps = Object.keys(value).filter(\n (key) => !bindings.includes(key),\n );\n\n const hasOtherProps = otherProps.length > 0;\n\n if (hasOtherProps) {\n console.warn(\n `Unsupported properties are found in \\`routerProvider\\` prop. You provided \\`${otherProps.join(\n \", \",\n )}\\`. Supported properties are \\`${bindings.join(\n \", \",\n )}\\`. You may wanted to use \\`legacyRouterProvider\\` prop instead.`,\n );\n\n return true;\n }\n\n return false;\n};\n","import { checkRouterPropMisuse } from \"@definitions/helpers/check-router-prop-misuse\";\nimport React from \"react\";\nimport type { RouterProvider } from \"../../../contexts/router/types\";\n\nexport const useRouterMisuseWarning = (value?: RouterProvider) => {\n const warned = React.useRef(false);\n\n React.useEffect(() => {\n if (warned.current === false) {\n if (value) {\n const warn = checkRouterPropMisuse(value);\n if (warn) {\n warned.current = true;\n }\n }\n }\n }, [value]);\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { useCancelNotification, useNotification, useTranslate } from \"@hooks\";\n\nimport { userFriendlySecond } from \"@definitions/helpers\";\nimport {\n ActionTypes,\n type IUndoableQueue,\n} from \"../../contexts/undoableQueue/types\";\n\nexport const UndoableQueue: React.FC<{\n notification: IUndoableQueue;\n}> = ({ notification }) => {\n const translate = useTranslate();\n\n const { notificationDispatch } = useCancelNotification();\n const { open } = useNotification();\n\n const [timeoutId, setTimeoutId] = useState<number | undefined>();\n\n const cancelNotification = () => {\n if (notification.isRunning === true) {\n if (notification.seconds === 0) {\n notification.doMutation();\n }\n if (!notification.isSilent) {\n open?.({\n key: `${notification.id}-${notification.resource}-notification`,\n type: \"progress\",\n message: translate(\n \"notifications.undoable\",\n {\n seconds: userFriendlySecond(notification.seconds),\n },\n `You have ${userFriendlySecond(\n notification.seconds,\n )} seconds to undo`,\n ),\n cancelMutation: notification.cancelMutation,\n undoableTimeout: userFriendlySecond(notification.seconds),\n });\n }\n\n if (notification.seconds > 0) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n const newTimeoutId = setTimeout(() => {\n notificationDispatch({\n type: ActionTypes.DECREASE_NOTIFICATION_SECOND,\n payload: {\n id: notification.id,\n seconds: notification.seconds,\n resource: notification.resource,\n },\n });\n }, 1000) as unknown as number;\n\n setTimeoutId(newTimeoutId);\n }\n }\n };\n\n useEffect(() => {\n cancelNotification();\n }, [notification]);\n\n return null;\n};\n","import React from \"react\";\nimport { useActiveAuthProvider } from \"@definitions/index\";\nimport { useGo, useIsAuthenticated, useParsed } from \"@hooks\";\nimport type { GoConfig } from \"../../contexts/router/types\";\n\nexport type AuthCheckParams = any;\n\nexport type AuthenticatedProps = {\n /**\n * Unique key to identify the component.\n * This is required if you have multiple `Authenticated` components at the same level.\n * @required\n */\n key: React.Key;\n /**\n * Whether to redirect user if not logged in or not.\n * If not set, user will be redirected to `redirectTo` property of the `check` function's response.\n * If set to a string, user will be redirected to that string.\n *\n * This property only works if `fallback` is **not set**.\n */\n redirectOnFail?: string | true;\n /**\n * Whether to append current path to search params of the redirect url at `to` property.\n *\n * By default, `to` parameter is used by successful invocations of the `useLogin` hook.\n * If `to` present, it will be used as the redirect url after successful login.\n */\n appendCurrentPathToQuery?: boolean;\n /**\n * Content to show if user is not logged in.\n */\n fallback?: React.ReactNode;\n /**\n * Content to show while checking whether user is logged in or not.\n */\n loading?: React.ReactNode;\n /**\n * Content to show if user is logged in.\n */\n children?: React.ReactNode;\n /**\n * optional params to be passed to the Auth Provider's check method via the useIsAuthenticated hook.\n */\n params?: AuthCheckParams;\n};\n\n/**\n * `<Authenticated>` is the component form of {@link https://refine.dev/docs/api-reference/core/hooks/auth/useAuthenticated `useAuthenticated`}. It internally uses `useAuthenticated` to provide it's functionality.\n *\n * @requires {@link https://react.dev/learn/rendering-lists#why-does-react-need-keys `key`} prop if you have multiple components at the same level.\n * In React, components don't automatically unmount and remount with prop changes, which is generally good for performance. However, for specific cases this can cause issues like unwanted content rendering (`fallback` or `children`). To solve this, assigning unique `key` values to each instance of component is necessary, forcing React to unmount and remount the component, rather than just updating its props.\n * @example\n *```tsx\n * <Authenticated key=\"dashboard\">\n * <h1>Dashboard Page</h1>\n * </Authenticated>\n *```\n *\n * @see {@link https://refine.dev/docs/core/components/auth/authenticated `<Authenticated>`} component for more details.\n */\nexport function Authenticated({\n redirectOnFail = true,\n appendCurrentPathToQuery = true,\n children,\n fallback: fallbackContent,\n loading: loadingContent,\n params,\n}: AuthenticatedProps): React.JSX.Element | null {\n const activeAuthProvider = useActiveAuthProvider();\n const hasAuthProvider = Boolean(activeAuthProvider?.isProvided);\n const parsed = useParsed();\n const go = useGo();\n\n const {\n isFetching,\n data: {\n authenticated: isAuthenticatedStatus,\n redirectTo: authenticatedRedirect,\n } = {},\n } = useIsAuthenticated({\n params,\n });\n\n const isAuthenticated = hasAuthProvider ? isAuthenticatedStatus : true;\n // when there is no auth provider\n if (!hasAuthProvider) {\n return <>{children ?? null}</>;\n }\n\n // when checking authentication status\n if (isFetching) {\n return <>{loadingContent ?? null}</>;\n }\n\n // when user is authenticated return children\n if (isAuthenticated) {\n return <>{children ?? null}</>;\n }\n // when user is not authenticated redirect or render fallbackContent\n\n // render fallbackContent if it is exist\n if (typeof fallbackContent !== \"undefined\") {\n return <>{fallbackContent ?? null}</>;\n }\n // if there is no fallbackContent, redirect page\n\n // Redirect url to use. use redirectOnFail if it is set.\n // Otherwise use redirectTo property of the check function's response.\n const appliedRedirect =\n typeof redirectOnFail === \"string\"\n ? redirectOnFail\n : (authenticatedRedirect as string | undefined);\n\n // Current pathname to append to the redirect url.\n // User will be redirected to this url after successful mutation. (like login)\n const pathname = `${parsed.pathname}`.replace(/(\\?.*|#.*)$/, \"\");\n\n // Redirect if appliedRedirect is set, otherwise return null.\n if (appliedRedirect) {\n const queryToValue: string | undefined = parsed.params?.to\n ? parsed.params.to\n : go({\n to: pathname,\n options: { keepQuery: true },\n type: \"path\",\n });\n\n return (\n <Redirect\n config={{\n to: appliedRedirect,\n query:\n appendCurrentPathToQuery && (queryToValue ?? \"\").length > 1\n ? {\n to: queryToValue,\n }\n : undefined,\n type: \"replace\",\n }}\n />\n );\n }\n\n return null;\n}\n\nconst Redirect = ({ config }: { config: GoConfig }) => {\n const go = useGo();\n\n React.useEffect(() => {\n go(config);\n }, [go, config]);\n\n return null;\n};\n","import { useEffect, useContext } from \"react\";\nimport { useActiveAuthProvider } from \"@definitions/index\";\nimport { RouterContext } from \"../../contexts/router\";\n\nexport const RouteChangeHandler: React.FC = () => {\n const routerContext = useContext(RouterContext);\n const authProvider = useActiveAuthProvider();\n const parse = routerContext.parse?.();\n const pathname = parse?.()?.pathname || \"\";\n\n useEffect(() => {\n authProvider?.check?.().catch(() => false);\n }, [pathname]);\n\n return null;\n};\n","import React, { useEffect } from \"react\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\n\nimport { useCan, useResourceParams } from \"@hooks\";\n\nimport type { CanReturnType } from \"../../contexts/accessControl/types\";\nimport type { BaseKey } from \"../../contexts/data/types\";\nimport type { IResourceItem } from \"../../contexts/resource/types\";\n\ntype ITreeResource = IResourceItem & {\n key?: string;\n children: ITreeResource[];\n};\n\ntype CanParams = {\n resource?: IResourceItem & { children?: ITreeResource[] };\n id?: BaseKey;\n [key: string]: any;\n};\n\ntype OnUnauthorizedProps = {\n resource?: string;\n reason?: string;\n action: string;\n params: CanParams;\n};\n\ntype CanAccessBaseProps = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * Intended action on resource\n */\n action: string;\n /**\n * Parameters associated with the resource\n * @type { resource?: [IResourceItem](https://refine.dev/docs/api-reference/core/interfaceReferences/#canparams), id?: [BaseKey](https://refine.dev/docs/api-reference/core/interfaceReferences/#basekey), [key: string]: any }\n */\n params?: CanParams;\n /**\n * Content to show if access control returns `false`\n */\n fallback?: React.ReactNode;\n /**\n * Callback function to be called if access control returns `can: false`\n */\n onUnauthorized?: (props: OnUnauthorizedProps) => void;\n children: React.ReactNode;\n queryOptions?: Omit<\n UseQueryOptions<CanReturnType>,\n \"queryKey\" | \"queryFn\"\n > & {\n queryKey?: UseQueryOptions<CanReturnType>[\"queryKey\"];\n queryFn?: UseQueryOptions<CanReturnType>[\"queryFn\"];\n };\n};\n\ntype CanAccessWithoutParamsProps = {\n [key in Exclude<\n keyof CanAccessBaseProps,\n \"fallback\" | \"children\"\n >]?: undefined;\n} & {\n [key in \"fallback\" | \"children\"]?: CanAccessBaseProps[key];\n};\n\nexport type CanAccessProps = CanAccessBaseProps | CanAccessWithoutParamsProps;\n\nexport const CanAccess: React.FC<CanAccessProps> = ({\n resource: resourceFromProp,\n action: actionFromProp,\n params: paramsFromProp,\n fallback,\n onUnauthorized,\n children,\n queryOptions: componentQueryOptions,\n ...rest\n}) => {\n const {\n id,\n resource,\n action: fallbackAction = \"\",\n } = useResourceParams({\n resource: resourceFromProp,\n id: paramsFromProp?.id,\n });\n\n const action = actionFromProp ?? fallbackAction;\n\n const params = paramsFromProp ?? {\n id,\n resource,\n };\n\n const { data } = useCan({\n resource: resource?.name,\n action,\n params,\n queryOptions: componentQueryOptions,\n });\n\n useEffect(() => {\n if (onUnauthorized && data?.can === false) {\n onUnauthorized({\n resource: resource?.name,\n action,\n reason: data?.reason,\n params,\n });\n }\n }, [data?.can]);\n\n if (data?.can) {\n if (React.isValidElement(children)) {\n const Children = React.cloneElement(children, rest);\n return Children;\n }\n\n return <>{children}</>;\n }\n\n if (data?.can === false) {\n return <>{fallback ?? null}</>;\n }\n\n return null;\n};\n","import React, { type CSSProperties, type SVGProps, useEffect } from \"react\";\nimport { CSSRules } from \"./styles\";\n\nconst text =\n \"If you find Refine useful, you can contribute to its growth by giving it a star on GitHub\";\n\ntype Props = {\n containerStyle?: CSSProperties;\n};\n\nexport const GitHubBanner = ({ containerStyle }: Props) => {\n useEffect(() => {\n const styleTag = document.createElement(\"style\");\n document.head.appendChild(styleTag);\n CSSRules.forEach((rule) =>\n styleTag.sheet?.insertRule(rule, styleTag.sheet.cssRules.length),\n );\n }, []);\n\n return (\n <div\n className=\"banner bg-top-announcement\"\n style={{\n width: \"100%\",\n height: \"48px\",\n }}\n >\n <div\n style={{\n position: \"relative\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n paddingLeft: \"200px\",\n width: \"100%\",\n maxWidth: \"100vw\",\n height: \"100%\",\n borderBottom: \"1px solid #47ebeb26\",\n ...containerStyle,\n }}\n >\n <div\n className=\"top-announcement-mask\"\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n borderBottom: \"1px solid #47ebeb26\",\n }}\n >\n <div\n style={{\n position: \"relative\",\n width: \"960px\",\n height: \"100%\",\n display: \"flex\",\n justifyContent: \"space-between\",\n margin: \"0 auto\",\n }}\n >\n <div\n style={{\n width: \"calc(50% - 300px)\",\n height: \"100%\",\n position: \"relative\",\n }}\n >\n <GlowSmall\n style={{\n animationDelay: \"1.5s\",\n position: \"absolute\",\n top: \"2px\",\n right: \"220px\",\n }}\n id={\"1\"}\n />\n <GlowSmall\n style={{\n animationDelay: \"1s\",\n position: \"absolute\",\n top: \"8px\",\n right: \"100px\",\n transform: \"rotate(180deg)\",\n }}\n id={\"2\"}\n />\n <GlowBig\n style={{\n position: \"absolute\",\n right: \"10px\",\n }}\n id={\"3\"}\n />\n </div>\n\n <div\n style={{\n width: \"calc(50% - 300px)\",\n height: \"100%\",\n position: \"relative\",\n }}\n >\n <GlowSmall\n style={{\n animationDelay: \"2s\",\n position: \"absolute\",\n top: \"6px\",\n right: \"180px\",\n transform: \"rotate(180deg)\",\n }}\n id={\"4\"}\n />\n <GlowSmall\n style={{\n animationDelay: \"0.5s\",\n transitionDelay: \"1.3s\",\n position: \"absolute\",\n top: \"2px\",\n right: \"40px\",\n }}\n id={\"5\"}\n />\n <GlowBig\n style={{\n position: \"absolute\",\n right: \"-70px\",\n }}\n id={\"6\"}\n />\n </div>\n </div>\n </div>\n <Text text={text} />\n </div>\n </div>\n );\n};\n\nconst Text = ({ text }: { text: string }) => {\n return (\n <a\n className=\"gh-link\"\n href=\"https://s.refine.dev/github-support\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{\n position: \"absolute\",\n height: \"100%\",\n padding: \"0 60px\",\n display: \"flex\",\n flexWrap: \"nowrap\",\n whiteSpace: \"nowrap\",\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundImage:\n \"linear-gradient(90deg, rgba(31, 63, 72, 0.00) 0%, #1F3F48 10%, #1F3F48 90%, rgba(31, 63, 72, 0.00) 100%)\",\n }}\n >\n <div\n style={{\n color: \"#fff\",\n display: \"flex\",\n flexDirection: \"row\",\n gap: \"8px\",\n }}\n >\n <span\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n ⭐️\n </span>\n <span\n className=\"text\"\n style={{\n fontSize: \"16px\",\n lineHeight: \"24px\",\n }}\n >\n {text}\n </span>\n <span\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n ⭐️\n </span>\n </div>\n </a>\n );\n};\n\nconst GlowSmall = ({ style, ...props }: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={80}\n height={40}\n fill=\"none\"\n style={{\n opacity: 1,\n animation: \"top-announcement-glow 1s ease-in-out infinite alternate\",\n ...style,\n }}\n >\n <circle cx={40} r={40} fill={`url(#${props.id}-a)`} fillOpacity={0.5} />\n <defs>\n <radialGradient\n id={`${props.id}-a`}\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"matrix(0 40 -40 0 40 0)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#47EBEB\" />\n <stop offset={1} stopColor=\"#47EBEB\" stopOpacity={0} />\n </radialGradient>\n </defs>\n </svg>\n );\n};\n\nconst GlowBig = ({ style, ...props }: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={120}\n height={48}\n fill=\"none\"\n {...props}\n style={{\n opacity: 1,\n animation: \"top-announcement-glow 1s ease-in-out infinite alternate\",\n ...style,\n }}\n >\n <circle\n cx={60}\n cy={24}\n r={60}\n fill={`url(#${props.id}-a)`}\n fillOpacity={0.5}\n />\n <defs>\n <radialGradient\n id={`${props.id}-a`}\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"matrix(0 60 -60 0 60 24)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#47EBEB\" />\n <stop offset={1} stopColor=\"#47EBEB\" stopOpacity={0} />\n </radialGradient>\n </defs>\n </svg>\n);\n","export const CSSRules = [\n `\n .bg-top-announcement {\n border-bottom: 1px solid rgba(71, 235, 235, 0.15);\n background: radial-gradient(\n 218.19% 111.8% at 0% 0%,\n rgba(71, 235, 235, 0.1) 0%,\n rgba(71, 235, 235, 0.2) 100%\n ),\n #14141f;\n }\n `,\n `\n .top-announcement-mask {\n mask-image: url(https://refine.ams3.cdn.digitaloceanspaces.com/website/static/assets/hexagon.svg);\n -webkit-mask-image: url(https://refine.ams3.cdn.digitaloceanspaces.com/website/static/assets/hexagon.svg);\n mask-repeat: repeat;\n -webkit-mask-repeat: repeat;\n background: rgba(71, 235, 235, 0.25);\n }\n `,\n `\n .banner {\n display: flex;\n @media (max-width: 1000px) {\n display: none;\n }\n }`,\n `\n .gh-link, .gh-link:hover, .gh-link:active, .gh-link:visited, .gh-link:focus {\n text-decoration: none;\n z-index: 9;\n }\n `,\n `\n @keyframes top-announcement-glow {\n 0% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n }\n }\n `,\n];\n","import React from \"react\";\n\nimport { useTranslate } from \"@hooks/i18n\";\n\nimport type { BaseRecord, HttpError } from \"../../contexts/data/types\";\nimport type { AutoSaveIndicatorElements } from \"../../hooks/form/types\";\nimport type { UseUpdateReturnType } from \"../../hooks/data/useUpdate\";\n\nexport type AutoSaveIndicatorProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n /**\n * The data returned by the update request.\n */\n data?: UseUpdateReturnType<TData, TError, TVariables>[\"mutation\"][\"data\"];\n /**\n * The error returned by the update request.\n */\n error?: UseUpdateReturnType<TData, TError, TVariables>[\"mutation\"][\"error\"];\n /**\n * The status of the update request.\n */\n status: UseUpdateReturnType<TData, TError, TVariables>[\"mutation\"][\"status\"];\n\n /**\n * The elements to display for each status.\n */\n elements?: AutoSaveIndicatorElements;\n};\n\nexport const AutoSaveIndicator: React.FC<AutoSaveIndicatorProps> = ({\n status,\n elements: {\n success = (\n <Message translationKey=\"autoSave.success\" defaultMessage=\"saved\" />\n ),\n error = (\n <Message\n translationKey=\"autoSave.error\"\n defaultMessage=\"auto save failure\"\n />\n ),\n loading = (\n <Message translationKey=\"autoSave.loading\" defaultMessage=\"saving...\" />\n ),\n idle = (\n <Message\n translationKey=\"autoSave.idle\"\n defaultMessage=\"waiting for changes\"\n />\n ),\n } = {},\n}) => {\n switch (status) {\n case \"success\":\n return <>{success}</>;\n case \"error\":\n return <>{error}</>;\n case \"pending\":\n return <>{loading}</>;\n case \"idle\":\n return <>{idle}</>;\n default:\n return <>{idle}</>;\n }\n};\n\nconst Message = ({\n translationKey,\n defaultMessage,\n}: {\n translationKey: string;\n defaultMessage: string;\n}) => {\n const translate = useTranslate();\n\n return <span>{translate(translationKey, defaultMessage)}</span>;\n};\n"],"mappings":"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","names":["src_exports","__export","AccessControlContext","ActionTypes","AuthPage","Authenticated","AutoSaveIndicator","CanAccess","ErrorComponent","GitHubBanner","I18nContext","KeyBuilder","Link","MetaContextProvider","Refine","ResourceContext","RouteChangeHandler","UndoableQueue","WelcomePage","file2Base64","flattenObjectKeys","generateDefaultDocumentTitle","getDefaultFilter","getDefaultSortOrder","getNextPageParam","getPreviousPageParam","handleUseParams","importCSVMapper","keys","matchResourceFromRoute","parseTableParams","parseTableParamsFromQuery","pickDataProvider","propertyPathToArray","setInitialFilters","setInitialSorters","stringifyTableParams","unionFilters","unionSorters","useActiveAuthProvider","useApiUrl","useBack","useBreadcrumb","useCan","useCanWithoutCache","useCancelNotification","useCloneButton","useCreate","useCreateButton","useCreateMany","useCustom","useCustomMutation","useDataProvider","useDelete","useDeleteButton","useDeleteMany","useEditButton","useExport","useExportButton","useForgotPassword","useForm","useGetIdentity","useGetLocale","useGetToPath","useGo","useHandleNotification","useImport","useImportButton","useInfiniteList","useInvalidate","useInvalidateAuthStore","useIsAuthenticated","useIsExistAuthentication","useKeys","useLink","useList","useListButton","useLiveMode","useLoadingOvertime","useLog","useLogList","useLogin","useLogout","useMany","useMenu","useMeta","useMetaContext","useModal","useMutationMode","useNavigation","useNotification","useOnError","useOne","useParse","useParsed","usePermissions","usePublish","useRedirectionAfterSubmission","useRefineContext","useRefineOptions","useRefreshButton","useRegister","useResourceParams","useResourceSubscription","useSaveButton","useSelect","useSetLocale","useShow","useShowButton","useSubscription","useSyncWithLocation","useTable","useToPath","useTranslate","useTranslation","useUpdate","useUpdateMany","useUpdatePassword","useUserFriendlyName","useWarnAboutChange","__toCommonJS","import_react","import_devtools_internal","import_react_query","import_react","AuthProviderContext","React","AuthProviderContextProvider","__name","children","isProvided","authProvider","handleLogin","params","_a","error","handleRegister","handleLogout","handleCheck","result","handleForgotPassword","handleUpdatePassword","useAuthProviderContext","import_differenceWith","import_unionWith","import_qs","import_warn_once","parseTableParams","__name","url","currentPage","pageSize","sorters","sorter","filters","qs","parseTableParamsFromQuery","params","stringifyTableParams","options","pagination","rest","finalSorters","compareFilters","left","right","compareSorters","unionFilters","permanentFilter","newFilters","prevFilters","f","warnOnce","unionWith","crudFilter","unionSorters","permanentSorter","newSorters","crudSorter","setInitialFilters","defaultFilter","differenceWith","setInitialSorters","defaultSorter","getDefaultSortOrder","columnName","sortItem","item","getDefaultFilter","operatorType","filter","operator","field","userFriendlySecond","__name","miliseconds","import_fromPairs","import_zip","importCSVMapper","__name","data","mapData","item","headers","body","entry","fromPairs","zip","index","array","handleUseParams","__name","params","hasPermission","__name","permissions","action","i","humanizeString","__name","text","import_react","import_pluralize","defaultTitle","React","defaultRefineOptions","humanizeString","pluralize","RefineContext","RefineContextProvider","__name","mutationMode","warnWhenUnsavedChanges","syncWithLocation","undoableTimeout","children","liveMode","onLiveEvent","options","handleRefineOptions","__name","options","disableTelemetry","liveMode","mutationMode","reactQueryClientConfig","reactQueryDevtoolConfig","syncWithLocation","undoableTimeout","warnWhenUnsavedChanges","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","optionsWithDefaults","defaultRefineOptions","disableTelemetryWithDefault","reactQueryWithDefaults","redirectPage","__name","redirectFromProps","action","redirectOptions","sequentialPromises","__name","promises","onEachResolve","onEachReject","results","index","promise","result","error","pickResource","__name","identifier","resources","resource","r","pickDataProvider","__name","resourceName","dataProviderName","resources","resource","pickResource","meta","handleMultiple","__name","promises","res","getNextPageParam","__name","lastPage","pagination","cursor","current","pageSize","totalPages","getPreviousPageParam","isParameter","__name","segment","splitToSegments","__name","path","segment","isSegmentCountsSame","__name","route","resourceRoute","routeSegments","splitToSegments","resourceRouteSegments","removeLeadingTrailingSlashes","__name","route","checkBySegments","__name","route","resourceRoute","stdRoute","removeLeadingTrailingSlashes","stdResourceRoute","isSegmentCountsSame","routeSegments","splitToSegments","segment","index","isParameter","getActionRoutesFromResource","__name","resource","resources","actions","action","route","pickMatchedRoute","__name","routes","_a","sanitizedRoutes","route","splitToSegments","removeLeadingTrailingSlashes","segmentsCount","eligibleRoutes","i","nonParametrizedRoutes","isParameter","matchResourceFromRoute","__name","route","resources","allFound","resource","getActionRoutesFromResource","actionRoute","checkBySegments","mostEligible","pickMatchedRoute","getParentResource","__name","resource","resources","_a","parentName","pickRouteParams","__name","route","splitToSegments","removeLeadingTrailingSlashes","s","isParameter","prepareRouteParams","__name","routeParams","meta","acc","key","value","composeRoute","__name","designatedRoute","resourceMeta","parsed","meta","routeParams","pickRouteParams","preparedRouteParams","prepareRouteParams","match","key","fromParams","useActiveAuthProvider","__name","authProvider","useAuthProviderContext","handlePaginationParams","__name","pagination","mode","currentPage","pageSize","import_react","useMediaQuery","__name","query","matches","setMatches","media","listener","safeTranslate","__name","translate","key","defaultMessage","options","translated","fallback","import_react","useMutationMode","__name","preferredMutationMode","preferredUndoableTimeout","mutationMode","undoableTimeout","RefineContext","import_react","import_react","UnsavedWarnContext","React","UnsavedWarnContextProvider","__name","children","warnWhen","setWarnWhen","useWarnAboutChange","__name","warnWhenUnsavedChanges","RefineContext","warnWhen","setWarnWhen","UnsavedWarnContext","import_react","useSyncWithLocation","__name","syncWithLocation","RefineContext","import_react","useRefineContext","__name","mutationMode","syncWithLocation","undoableTimeout","warnWhenUnsavedChanges","liveMode","onLiveEvent","options","__initialized","RefineContext","useUserFriendlyName","__name","textTransformers","useRefineContext","name","type","humanizeName","generateDefaultDocumentTitle","translate","resource","action","id","resourceName","getUserFriendlyName","_a","getFriendlyName","useUserFriendlyName","actionPrefixMatcher","identifier","resourceNameFallback","resourceNameWithFallback","defaultTitle","safeTranslate","suffix","autoGeneratedTitle","__name","BaseKeyBuilder","segments","__name","ParamsKeyBuilder","paramsValue","DataIdRequiringKeyBuilder","idValue","DataIdsRequiringKeyBuilder","idsValue","el","DataResourceKeyBuilder","actionType","DataKeyBuilder","resourceName","mutationName","AuthKeyBuilder","AccessResourceKeyBuilder","AccessKeyBuilder","AuditActionKeyBuilder","AuditKeyBuilder","KeyBuilder","name","keys","isNested","__name","obj","isArray","flattenObjectKeys","prefix","acc","key","currentPrefix","item","index","propertyPathToArray","__name","propertyPath","item","downloadInBrowser","__name","filename","content","type","blob","link","blobUrl","deferExecution","__name","fn","import_debounce","asyncDebounce","__name","func","wait","cancelReason","callbacks","cancelPrevious","cb","_a","debouncedFunc","debounce","args","resolve","reject","runner","prepareQueryContext","__name","context","queryContext","file2Base64","__name","file","resolve","reject","reader","resultHandler","error","useKeys","__name","keys","usePermissions","options","params","getPermissions","useAuthProviderContext","keys","useKeys","__name","import_devtools_internal","import_react_query","useGetIdentity","queryOptions","getIdentity","useAuthProviderContext","keys","useKeys","__name","import_devtools_internal","import_react_query","import_react_query","useInvalidateAuthStore","__name","queryClient","keys","useKeys","action","useLogout","mutationOptions","invalidateAuthStore","useInvalidateAuthStore","go","useGo","open","close","useNotification","logoutFromContext","useAuthProviderContext","keys","useKeys","data","variables","success","error","redirectTo","successNotification","redirectPath","redirect","buildSuccessNotification","buildNotification","__name","import_devtools_internal","import_react_query","useLogin","mutationOptions","_a","invalidateAuthStore","useInvalidateAuthStore","go","useGo","parsed","useParsed","close","open","useNotification","loginFromContext","useAuthProviderContext","keys","useKeys","to","success","redirectTo","error","successNotification","buildSuccessNotification","buildNotification","__name","import_devtools_internal","import_react_query","useRegister","mutationOptions","invalidateAuthStore","useInvalidateAuthStore","go","useGo","close","open","useNotification","registerFromContext","useAuthProviderContext","keys","useKeys","success","redirectTo","error","successNotification","buildSuccessNotification","buildNotification","__name","import_devtools_internal","import_react_query","useForgotPassword","mutationOptions","go","useGo","open","close","useNotification","forgotPasswordFromContext","useAuthProviderContext","keys","useKeys","success","redirectTo","error","successNotification","buildSuccessNotification","buildNotification","__name","import_devtools_internal","import_react_query","useUpdatePassword","mutationOptions","go","useGo","updatePasswordFromContext","useAuthProviderContext","close","open","useNotification","keys","useKeys","params","useParsed","variables","success","redirectTo","error","successNotification","buildSuccessNotification","buildNotification","__name","import_devtools_internal","import_react_query","useIsAuthenticated","queryOptions","params","check","useAuthProviderContext","keys","useKeys","__name","import_devtools_internal","import_react_query","useOnError","go","useGo","onErrorFromContext","useAuthProviderContext","keys","useKeys","logout","useLogout","shouldLogout","redirectTo","__name","useIsExistAuthentication","__name","isProvided","useAuthProviderContext","import_react","import_devtools_internal","import_react_query","import_react","useLoadingOvertime","__name","enabledProp","isLoading","intervalProp","onIntervalProp","elapsedTime","setElapsedTime","options","useRefineContext","overtime","interval","onInterval","enabled","intervalFn","prevElapsedTime","useList","__name","resourceFromProp","filters","pagination","sorters","queryOptions","successNotification","errorNotification","meta","liveMode","onLiveEvent","liveParams","dataProviderName","overtimeOptions","_a","_b","_c","resources","resource","identifier","useResourceParams","dataProvider","useDataProvider","translate","useTranslate","checkError","useOnError","handleNotification","useHandleNotification","getMeta","useMeta","keys","useKeys","pickedDataProvider","pickDataProvider","preferredMeta","prefferedFilters","prefferedSorters","prefferedPagination","handlePaginationParams","isServerPagination","combinedMeta","notificationValues","isEnabled","getList","useResourceSubscription","queryResponse","context","prepareQueryContext","rawData","data","currentPage","mode","pageSize","notificationConfig","elapsedTime","useLoadingOvertime","import_react","import_devtools_internal","import_react_query","useOne","__name","resourceFromProp","id","queryOptions","successNotification","errorNotification","meta","liveMode","onLiveEvent","liveParams","dataProviderName","overtimeOptions","_a","_b","resources","resource","identifier","useResourceParams","dataProvider","useDataProvider","translate","useTranslate","checkError","useOnError","handleNotification","useHandleNotification","getMeta","useMeta","keys","useKeys","preferredMeta","pickedDataProvider","pickDataProvider","getOne","combinedMeta","isEnabled","useResourceSubscription","queryResponse","context","prepareQueryContext","notificationConfig","elapsedTime","useLoadingOvertime","import_react","import_devtools_internal","import_react_query","import_warn_once","useMany","__name","resourceFromProp","ids","queryOptions","successNotification","errorNotification","meta","liveMode","onLiveEvent","liveParams","dataProviderName","overtimeOptions","_a","_b","resources","resource","identifier","useResourceParams","dataProvider","useDataProvider","translate","useTranslate","checkError","useOnError","handleNotification","useHandleNotification","getMeta","useMeta","keys","useKeys","preferredMeta","pickedDataProvider","pickDataProvider","isEnabled","getMany","getOne","combinedMeta","hasIds","hasResource","manuallyEnabled","warnOnce","idsWarningMessage","resourceWarningMessage","useResourceSubscription","queryResponse","context","prepareQueryContext","handleMultiple","id","notificationConfig","elapsedTime","useLoadingOvertime","import_devtools_internal","import_react_query","ActionTypes","useUpdate","__name","idFromProps","resourceFromProps","valuesFromProps","dataProviderNameFromProps","successNotificationFromProps","errorNotificationFromProps","metaFromProps","mutationModeFromProps","undoableTimeoutFromProps","onCancelFromProps","optimisticUpdateMapFromProps","invalidatesFromProps","mutationOptions","overtimeOptions","resources","select","useResourceParams","queryClient","dataProvider","useDataProvider","mutationModeContext","undoableTimeoutContext","useMutationMode","checkError","useOnError","translate","useTranslate","publish","usePublish","log","useLog","notificationDispatch","useCancelNotification","handleNotification","useHandleNotification","invalidateStore","useInvalidate","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutationResult","id","values","resourceName","mutationMode","undoableTimeout","onCancel","meta","dataProviderName","missingIdError","missingValuesError","missingResourceError","resource","identifier","combinedMeta","mutationModePropOrContext","undoableTimeoutPropOrContext","pickDataProvider","resolve","reject","doMutation","result","err","cancelMutation","optimisticUpdateMap","_","__","preferredMeta","resourceKeys","previousQueries","previous","data","record","_a","error","variables","context","invalidates","_b","successNotification","dataProviderNameFromProp","resourceSingular","notificationConfig","previousData","queryData","acc","item","_fields","_operation","_variables","rest","errorNotification","query","mutate","mutateAsync","elapsedTime","useLoadingOvertime","options","import_devtools_internal","import_react_query","useCreate","__name","resourceFromProps","valuesFromProps","dataProviderNameFromProps","successNotificationFromProps","errorNotificationFromProps","invalidatesFromProps","metaFromProps","mutationOptions","overtimeOptions","checkError","useOnError","dataProvider","useDataProvider","invalidateStore","useInvalidate","resources","select","useResourceParams","translate","useTranslate","publish","usePublish","log","useLog","handleNotification","useHandleNotification","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutationResult","resourceName","values","meta","dataProviderName","missingValuesError","missingResourceError","resource","identifier","combinedMeta","pickDataProvider","data","variables","context","_a","_b","_c","successNotificationFromProp","dataProviderNameFromProp","invalidates","resourceSingular","notificationConfig","_fields","_operation","_variables","rest","err","errorNotificationFromProp","mutate","mutateAsync","mutation","elapsedTime","useLoadingOvertime","options","import_devtools_internal","import_react_query","useDelete","__name","mutationOptions","overtimeOptions","checkError","useOnError","dataProvider","useDataProvider","resources","select","useResourceParams","queryClient","mutationModeContext","undoableTimeoutContext","useMutationMode","notificationDispatch","useCancelNotification","translate","useTranslate","publish","usePublish","log","useLog","handleNotification","useHandleNotification","invalidateStore","useInvalidate","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutation","id","mutationMode","undoableTimeout","resourceName","onCancel","meta","dataProviderName","values","resource","identifier","combinedMeta","mutationModePropOrContext","undoableTimeoutPropOrContext","pickDataProvider","resolve","reject","doMutation","result","err","cancelMutation","_","__","preferredMeta","resourceKeys","previousQueries","previous","record","_a","data","_data","_error","invalidates","successNotification","dataProviderNameFromProp","context","resourceSingular","notificationConfig","_fields","_operation","_variables","rest","errorNotification","query","elapsedTime","useLoadingOvertime","import_devtools_internal","import_react_query","useCreateMany","__name","resourceFromProps","valuesFromProps","dataProviderNameFromProps","successNotificationFromProps","errorNotificationFromProps","metaFromProps","invalidatesFromProps","mutationOptions","overtimeOptions","dataProvider","useDataProvider","resources","select","useResourceParams","translate","useTranslate","publish","usePublish","handleNotification","useHandleNotification","invalidateStore","useInvalidate","log","useLog","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutationResult","resourceName","values","meta","dataProviderName","missingValuesError","missingResourceError","resource","identifier","combinedMeta","selectedDataProvider","pickDataProvider","handleMultiple","val","response","variables","context","_a","successNotification","dataProviderNameFromProp","invalidates","resourcePlural","notificationConfig","ids","item","_fields","_operation","_variables","rest","err","errorNotification","mutate","mutateAsync","elapsedTime","useLoadingOvertime","options","import_devtools_internal","import_react_query","useUpdateMany","__name","idsFromProps","resourceFromProps","valuesFromProps","dataProviderNameFromProps","successNotificationFromProps","errorNotificationFromProps","metaFromProps","mutationModeFromProps","undoableTimeoutFromProps","onCancelFromProps","optimisticUpdateMapFromProps","invalidatesFromProps","mutationOptions","overtimeOptions","resources","select","useResourceParams","queryClient","dataProvider","useDataProvider","translate","useTranslate","mutationModeContext","undoableTimeoutContext","useMutationMode","checkError","useOnError","notificationDispatch","useCancelNotification","publish","usePublish","handleNotification","useHandleNotification","invalidateStore","useInvalidate","log","useLog","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutationResult","ids","values","resourceName","onCancel","mutationMode","undoableTimeout","meta","dataProviderName","missingIdError","missingValuesError","missingResourceError","resource","identifier","combinedMeta","mutationModePropOrContext","undoableTimeoutPropOrContext","selectedDataProvider","pickDataProvider","mutationFn","handleMultiple","id","resolve","reject","doMutation","result","err","cancelMutation","optimisticUpdateMap","_","__","preferredMeta","queryKey","resourceKeys","previousQueries","previous","data","record","error","variables","context","_a","invalidates","dataProviderNameFromProp","successNotification","resourceSingular","notificationConfig","previousData","queryData","acc","item","_fields","_operation","_variables","rest","errorNotification","query","mutate","mutateAsync","mutation","elapsedTime","useLoadingOvertime","options","import_devtools_internal","import_react_query","useDeleteMany","__name","mutationOptions","overtimeOptions","checkError","useOnError","mutationModeContext","undoableTimeoutContext","useMutationMode","dataProvider","useDataProvider","notificationDispatch","useCancelNotification","translate","useTranslate","publish","usePublish","handleNotification","useHandleNotification","invalidateStore","useInvalidate","log","useLog","resources","select","useResourceParams","queryClient","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutation","resourceName","ids","mutationMode","undoableTimeout","onCancel","meta","dataProviderName","values","resource","identifier","combinedMeta","mutationModePropOrContext","undoableTimeoutPropOrContext","selectedDataProvider","pickDataProvider","mutationFn","handleMultiple","id","resolve","reject","doMutation","result","err","cancelMutation","_","__","preferredMeta","resourceKeys","previousQueries","previous","item","data","record","_data","_error","invalidates","dataProviderNameFromProp","successNotification","notificationConfig","_fields","_operation","_variables","rest","errorNotification","context","query","resourceSingular","elapsedTime","useLoadingOvertime","useApiUrl","__name","dataProviderName","_a","dataProvider","useDataProvider","resource","useResourceParams","getApiUrl","import_react","import_devtools_internal","import_react_query","useCustom","__name","url","method","config","queryOptions","successNotification","errorNotification","meta","dataProviderName","overtimeOptions","_a","_b","dataProvider","useDataProvider","translate","useTranslate","checkError","useOnError","handleNotification","useHandleNotification","getMeta","useMeta","keys","useKeys","preferredMeta","custom","combinedMeta","queryResponse","context","prepareQueryContext","notificationConfig","elapsedTime","useLoadingOvertime","import_devtools_internal","import_react_query","useCustomMutation","__name","mutationOptions","overtimeOptions","checkError","useOnError","handleNotification","useHandleNotification","dataProvider","useDataProvider","translate","useTranslate","getMeta","useMeta","keys","useKeys","mutationResult","url","method","values","meta","dataProviderName","config","combinedMeta","custom","data","variables","context","_a","successNotificationFromProp","notificationConfig","err","errorNotificationFromProp","elapsedTime","useLoadingOvertime","import_react","import_react","defaultDataProvider","DataContext","React","DataContextProvider","__name","children","dataProvider","providerValue","useDataProvider","__name","context","DataContext","dataProviderName","dataProvider","import_react","import_devtools_internal","import_react_query","useInfiniteList","__name","resourceFromProp","filters","pagination","sorters","queryOptions","successNotification","errorNotification","meta","liveMode","onLiveEvent","liveParams","dataProviderName","overtimeOptions","onSuccess","onError","_a","_b","resources","resource","identifier","useResourceParams","dataProvider","useDataProvider","translate","useTranslate","checkError","useOnError","handleNotification","useHandleNotification","getMeta","useMeta","keys","useKeys","pickedDataProvider","pickDataProvider","preferredMeta","prefferedFilters","prefferedSorters","prefferedPagination","handlePaginationParams","isServerPagination","notificationValues","isEnabled","combinedMeta","getList","useResourceSubscription","queryResponse","context","paginationProperties","prepareQueryContext","data","total","rest","lastPage","getNextPageParam","getPreviousPageParam","notificationConfig","elapsedTime","useLoadingOvertime","import_react","import_react","LiveContext","React","LiveContextProvider","__name","liveProvider","children","import_react","import_react_query","useInvalidate","__name","resources","useResourceParams","queryClient","keys","useKeys","resource","dataProviderName","invalidates","id","invalidationFilters","invalidationOptions","dp","pickDataProvider","queryKey","key","useResourceSubscription","__name","resourceFromProp","params","channel","types","enabled","liveModeFromProp","onLiveEvent","meta","_a","resource","identifier","useResourceParams","liveProvider","LiveContext","liveModeFromContext","onLiveEventContextCallback","RefineContext","liveMode","invalidate","useInvalidate","dataProviderName","subscription","callback","event","import_react","useLiveMode","__name","liveMode","liveModeFromContext","RefineContext","import_react","useSubscription","__name","params","channel","types","enabled","onLiveEvent","meta","liveProvider","LiveContext","subscription","import_react","usePublish","__name","liveProvider","LiveContext","import_react","import_react","import_isEqual","UndoableQueueContext","initialState","undoableQueueReducer","__name","state","action","notificationItem","isEqual","UndoableQueueContextProvider","children","notifications","notificationDispatch","notificationData","React","notification","UndoableQueue","useCancelNotification","__name","notifications","notificationDispatch","UndoableQueueContext","import_react","import_react","NotificationContext","NotificationContextProvider","__name","open","close","children","React","useNotification","__name","open","close","NotificationContext","import_react","useHandleNotification","__name","open","useNotification","notification","fallbackNotification","import_react","import_react","I18nContext","React","I18nContextProvider","__name","children","i18nProvider","useSetLocale","__name","i18nProvider","I18nContext","lang","import_react","useTranslate","__name","i18nProvider","I18nContext","translate","key","options","defaultMessage","import_react","useGetLocale","__name","i18nProvider","I18nContext","useTranslation","__name","translate","useTranslate","changeLocale","useSetLocale","getLocale","useGetLocale","import_react","import_papaparse","useExport","__name","resourceFromProps","sorters","filters","maxItemCount","pageSize","mapData","item","unparseConfig","meta","dataProviderName","onError","download","customFilename","useTextFile","useBom","title","showTitle","isLoading","setIsLoading","dataProvider","useDataProvider","getMeta","useMeta","resource","resources","identifier","useResourceParams","defaultFilename","useUserFriendlyName","filename","getList","pickDataProvider","combinedMeta","rawData","currentPage","preparingData","data","total","error","finalUnparseConfig","csv","papaparse","fileExtension","fileType","downloadFilename","downloadInBrowser","import_react","import_warn_once","useForm","__name","props","_a","_b","_c","getMeta","useMeta","invalidate","useInvalidate","defaultRedirect","useRefineOptions","defaultMutationMode","useMutationMode","setWarnWhen","useWarnAboutChange","handleSubmitWithRedirect","useRedirectionAfterSubmission","pickedMeta","mutationMode","id","setId","resource","identifier","action","useResourceParams","autosaved","setAutosaved","React","isEdit","isClone","isCreate","combinedMeta","isIdRequired","isIdDefined","isQueryDisabled","warnOnce","idWarningMessage","redirectAction","redirectPage","redirect","redirectId","routeParams","queryResult","useOne","createMutation","useCreate","updateMutation","useUpdate","mutationResult","formLoading","elapsedTime","useLoadingOvertime","onFinish","values","isAutosave","isPessimistic","onSuccessRedirect","resolve","reject","missingResourceError","missingIdError","missingValuesError","autosaveOnNonEditError","deferExecution","variables","mutateAsync","data","_","context","error","onFinishAutoSave","asyncDebounce","overtime","autoSaveProps","import_react","useRedirectionAfterSubmission","__name","show","edit","list","create","useNavigation","redirect","resource","id","meta","import_react","import_react","defaultRouterProvider","RouterContext","RouterContextProvider","__name","children","router","React","import_react","import_react","import_react","import_react","import_isEqual","useMemoized","__name","value","ref","isEqual","useDeepMemo","__name","fn","dependencies","memoizedDependencies","useMemoized","ResourceContext","React","ResourceContextProvider","__name","providedResources","children","resources","useDeepMemo","import_react","import_react","useParse","__name","routerContext","RouterContext","React","useParsed","__name","parse","useParse","React","useId","__name","id","parsed","useParsed","useAction","__name","action","parsed","useParsed","import_react","useResource","args","resources","ResourceContext","params","useParsed","select","__name","resourceName","force","pickedResource","pickResource","resource","identifier","pickedFromProps","useResourceParams","props","resources","ResourceContext","select","inferredIdentifier","inferredResource","useResource","resourceToCheck","identifier","resource","isSameResource","inferredId","useId","action","useAction","defaultId","React","id","setId","formAction","__name","import_react","useGetToPath","__name","resourceFromRoute","resources","useResourceParams","parsed","useParsed","React","resource","action","meta","_a","selectedResource","actionRoute","getActionRoutesFromResource","item","composeRoute","useGo","__name","routerContext","RouterContext","resourceSelect","useResourceParams","getToPath","useGetToPath","goFromRouter","React","config","resource","handleResourceErrors","newTo","to","useNavigation","__name","resources","useResourceParams","parsed","useParsed","go","useGo","handleUrl","url","type","createUrl","resource","meta","_a","resourceItem","pickResource","createActionRoute","getActionRoutesFromResource","r","composeRoute","editUrl","id","encodedId","editActionRoute","cloneUrl","cloneActionRoute","showUrl","showActionRoute","listUrl","listActionRoute","import_warn_once","useShow","__name","resourceFromProp","id","meta","queryOptions","overtimeOptions","useOneProps","resource","identifier","showId","setShowId","useResourceParams","combinedMeta","useMeta","warnOnce","idWarningMessage","queryResult","useOne","import_react","import_chunk","import_papaparse","useImport","__name","resourceFromProps","mapData","item","paparseOptions","batchSize","onFinish","meta","onProgress","dataProviderName","processedAmount","setProcessedAmount","totalAmount","setTotalAmount","isLoading","setIsLoading","resource","identifier","useResourceParams","getMeta","useMeta","createMany","useCreateMany","create","useCreate","combinedMeta","mutationResult","handleCleanup","handleFinish","createdValues","result","handleChange","file","resolve","papaparse","data","values","importCSVMapper","valueFns","value","sequentialPromises","response","currentAmount","error","index","chunks","chunk","chunkedFns","chunkedValues","currentBatchLength","event","import_react","useModal","__name","defaultVisible","visible","setVisible","show","close","import_react","useBack","__name","routerContext","RouterContext","React","useToPath","__name","resource","action","meta","useGetToPath","import_react","import_warn_once","LinkComponent","__name","props","ref","routerContext","RouterContext","LinkFromContext","goFunction","useGo","resolvedTo","warnOnce","React","Link","useLink","__name","Link","import_react","import_devtools_internal","import_react_query","import_react","AccessControlContext","React","AccessControlContextProvider","__name","can","children","options","sanitizeResource","__name","resource","list","edit","create","show","clone","children","meta","icon","restResource","_metaIcon","restMeta","useCan","__name","action","resource","params","hookQueryOptions","can","globalOptions","AccessControlContext","keys","useKeys","globalQueryOptions","mergedQueryOptions","_resource","paramsRest","sanitizedResource","sanitizeResource","queryResponse","import_react","useCanWithoutCache","__name","canFromContext","React","AccessControlContext","params","rest","sanitizedResource","sanitizeResource","import_react","import_debounce","import_get","import_uniqBy","useSelect","__name","props","search","setSearch","options","setOptions","selectedOptions","setSelectedOptions","resourceFromProps","sorters","filters","optionLabel","optionValue","searchField","debounceValue","successNotification","errorNotification","defaultValueQueryOptionsFromProps","queryOptions","pagination","liveMode","defaultValue","selectedOptionsOrder","onLiveEvent","onSearchFromProp","liveParams","meta","dataProviderName","overtimeOptions","getOptionLabel","item","get","getOptionValue","resource","identifier","useResourceParams","combinedMeta","useMeta","defaultValues","defaultValueQueryOptions","defaultValueQueryOnSuccess","data","defaultQueryOnSuccess","defaultValueQueryResult","useMany","queryResult","useList","elapsedTime","useLoadingOvertime","combinedOptions","uniqBy","onSearchFromPropRef","onSearch","debounce","value","import_react","import_differenceWith","import_isEqual","import_warn_once","defaultPermanentFilter","defaultPermanentSorter","useTable","pagination","filtersFromProp","sortersFromProp","syncWithLocationProp","resourceFromProp","successNotification","errorNotification","queryOptions","liveModeFromProp","onLiveEvent","liveParams","meta","dataProviderName","overtimeOptions","_a","_b","_c","_d","_e","_f","_g","_h","_i","syncWithLocationContext","useSyncWithLocation","syncWithLocation","liveMode","useLiveMode","getMeta","useMeta","parsedParams","useParsed","isServerSideFilteringEnabled","isServerSideSortingEnabled","isPaginationEnabled","prefferedCurrentPage","prefferedPageSize","preferredMeta","parsedCurrentPage","parsedPageSize","parsedSorter","parsedFilters","parseTableParams","preferredInitialFilters","preferredPermanentFilters","preferredInitialSorters","preferredPermanentSorters","prefferedFilterBehavior","defaultCurrentPage","defaultPageSize","defaultSorter","defaultFilter","go","useGo","resource","identifier","useResourceParams","combinedMeta","React","warnOnce","sorters","setSorters","setInitialSorters","filters","setFilters","setInitialFilters","currentPage","setCurrentPage","pageSize","setPageSize","getCurrentQueryParams","__name","current","rest","createLinkForSyncWithLocation","differenceWith","isEqual","queryResult","useList","unionFilters","unionSorters","setFiltersAsMerge","newFilters","prevFilters","setFiltersAsReplace","setFiltersWithSetter","setter","prev","setFiltersFn","setterOrFilters","behavior","setSortWithUnion","newSorter","import_react","import_devtools_internal","import_react_query","import_react","AuditLogContext","React","AuditLogContextProvider","__name","create","get","update","children","useLog","__name","logMutationOptions","renameMutationOptions","queryClient","auditLogContext","AuditLogContext","keys","useKeys","resources","ResourceContext","identityData","refetch","isLoading","useGetIdentity","log","params","_a","_b","resource","pickResource","logPermissions","hasPermission","authorData","rename","data","import_react","import_devtools_internal","import_react_query","useLogList","__name","resource","action","meta","author","queryOptions","get","AuditLogContext","keys","useKeys","import_react","import_warn_once","useBreadcrumb","__name","metaFromProps","i18nProvider","I18nContext","parsed","useParsed","translate","useTranslate","action","resource","resources","useResourceParams","textTransformers","useRefineContext","breadcrumbs","addBreadcrumb","parentName","_a","_b","_c","_d","parentResource","pickResource","grandParentName","listActionOfResource","getActionRoutesFromResource","r","hrefRaw","href","composeRoute","key","actionLabel","warnOnce","import_react","createResourceKey","__name","resource","resources","parents","currentParentResource","getParentResource","r","removeLeadingTrailingSlashes","createTree","__name","resources","root","resource","parents","currentParent","getParentResource","currentTree","parent","key","flatten","tree","items","itemKey","createResourceKey","item","getCleanPath","__name","pathname","useMenu","meta","hideOnMissingParameter","translate","useTranslate","getToPath","useGetToPath","resource","resources","useResourceParams","useParsed","getFriendlyName","useUserFriendlyName","cleanRoute","selectedKey","createResourceKey","defaultOpenKeys","React","parent","getParentResource","keys","prepareItem","item","_a","_b","_c","composed","treeItems","treeMenuItems","createTree","prepare","items","preparedNodes","newItem","import_react","MetaContext","MetaContextProvider","__name","children","value","currentValue","useMetaContext","metaContext","React","useMeta","__name","params","useParsed","metaContext","useMetaContext","resource","metaFromProp","meta","sanitizeResource","_filters","_sorters","_currentPage","_pageSize","additionalParams","result","import_react","useRefineOptions","__name","options","React","RefineContext","useActionableButton","type","translate","useTranslate","humanize","useRefineOptions","key","fallback","__name","import_react","import_react","useButtonCanAccess","__name","props","_a","_b","_c","translate","useTranslate","accessControlContext","React","AccessControlContext","accessControlEnabled","hideIfUnauthorized","canAccess","useCan","title","hidden","disabled","useNavigationButton","props","_a","navigation","useNavigation","Link","useLink","translate","useTranslate","getUserFriendlyName","useUserFriendlyName","humanize","useRefineOptions","id","resource","identifier","useResourceParams","canAccess","title","hidden","disabled","useButtonCanAccess","LinkComponent","to","React","label","__name","useDeleteButton","props","translate","useTranslate","mutate","isPending","variables","useDelete","setWarnWhen","useWarnAboutChange","mutationMode","useMutationMode","id","resource","identifier","useResourceParams","title","disabled","hidden","canAccess","useButtonCanAccess","label","confirmOkLabel","confirmTitle","cancelLabel","loading","__name","import_react_query","useRefreshButton","props","translate","useTranslate","keys","useKeys","queryClient","invalidates","useInvalidate","identifier","id","resources","useResourceParams","loading","pickDataProvider","onClick","__name","label","useShowButton","__name","props","useNavigationButton","useEditButton","useCloneButton","useCreateButton","useListButton","useSaveButton","useActionableButton","useExportButton","useImportButton","ErrorComponent","__name","errorMessage","setErrorMessage","translate","useTranslate","go","useGo","action","resource","useResourceParams","React","import_react","import_react","LoginPage","__name","providers","registerLink","forgotPasswordLink","rememberMe","contentProps","wrapperProps","renderContent","formProps","title","hideForm","mutationVariables","Link","useLink","email","setEmail","password","setPassword","remember","setRemember","translate","useTranslate","login","useLogin","renderLink","link","text","React","renderProviders","provider","content","e","import_react","RegisterPage","__name","providers","loginLink","wrapperProps","contentProps","renderContent","formProps","title","hideForm","mutationVariables","Link","useLink","email","setEmail","password","setPassword","translate","useTranslate","register","isPending","useRegister","renderLink","link","text","React","renderProviders","provider","content","e","import_react","ForgotPasswordPage","__name","loginLink","wrapperProps","contentProps","renderContent","formProps","title","mutationVariables","translate","useTranslate","Link","useLink","email","setEmail","forgotPassword","isPending","useForgotPassword","renderLink","link","text","React","content","e","import_react","UpdatePasswordPage","__name","wrapperProps","contentProps","renderContent","formProps","title","mutationVariables","translate","useTranslate","authProvider","useActiveAuthProvider","updatePassword","isPending","useUpdatePassword","newPassword","setNewPassword","confirmPassword","setConfirmPassword","content","React","e","AuthPage","__name","props","type","React","RegisterPage","ForgotPasswordPage","UpdatePasswordPage","LoginPage","import_react","import_react","cards","ConfigSuccessPage","__name","isTablet","useMediaQuery","isMobile","getGridTemplateColumns","getHeaderFontSize","getSubHeaderFontSize","React","card","Card","title","description","iconUrl","link","isHover","setIsHover","import_react","ConfigErrorPage","__name","React","ErrorGradient","ErrorIcon","ExampleImplementation","props","WelcomePage","__name","__initialized","useRefineContext","React","ConfigSuccessPage","ConfigErrorPage","import_react","import_devtools_internal","import_react_query","import_react","import_react","REFINE_VERSION","useTelemetryData","__name","_a","auth","useIsExistAuthentication","auditLogContext","AuditLogContext","liveProvider","LiveContext","routerContext","RouterContext","dataContext","DataContext","i18nProvider","I18nContext","notificationContext","NotificationContext","accessControlContext","AccessControlContext","resources","useResourceParams","refineOptions","useRefineContext","auditLog","live","router","data","i18n","notification","accessControl","projectId","encode","__name","payload","stringifiedPayload","throughImage","src","img","throughFetch","transport","Telemetry","useTelemetryData","sent","React","encoded","checkRouterPropMisuse","__name","value","bindings","otherProps","key","import_react","useRouterMisuseWarning","__name","value","warned","React","checkRouterPropMisuse","Refine","__name","authProvider","dataProvider","routerProvider","notificationProvider","accessControlProvider","auditLogProvider","resources","children","liveProvider","i18nProvider","onLiveEvent","options","optionsWithDefaults","disableTelemetryWithDefault","reactQueryWithDefaults","handleRefineOptions","queryClient","useDeepMemo","_a","notificationProviderContextValues","React","useRouterMisuseWarning","NotificationContextProvider","AuthProviderContextProvider","DataContextProvider","LiveContextProvider","RouterContextProvider","ResourceContextProvider","I18nContextProvider","AccessControlContextProvider","AuditLogContextProvider","UndoableQueueContextProvider","RefineContextProvider","UnsavedWarnContextProvider","Telemetry","RouteChangeHandler","import_react","UndoableQueue","__name","notification","translate","useTranslate","notificationDispatch","useCancelNotification","open","useNotification","timeoutId","setTimeoutId","cancelNotification","userFriendlySecond","newTimeoutId","import_react","Authenticated","redirectOnFail","appendCurrentPathToQuery","children","fallbackContent","loadingContent","params","_a","activeAuthProvider","useActiveAuthProvider","hasAuthProvider","parsed","useParsed","go","useGo","isFetching","isAuthenticatedStatus","authenticatedRedirect","useIsAuthenticated","isAuthenticated","React","appliedRedirect","pathname","queryToValue","Redirect","__name","config","import_react","RouteChangeHandler","__name","_a","_b","routerContext","RouterContext","authProvider","useActiveAuthProvider","parse","pathname","import_react","CanAccess","__name","resourceFromProp","actionFromProp","paramsFromProp","fallback","onUnauthorized","children","componentQueryOptions","rest","id","resource","fallbackAction","useResourceParams","action","params","data","useCan","React","import_react","CSSRules","text","GitHubBanner","__name","containerStyle","styleTag","CSSRules","rule","_a","React","GlowSmall","GlowBig","Text","style","props","import_react","AutoSaveIndicator","__name","status","success","React","Message","error","loading","idle","translationKey","defaultMessage","translate","useTranslate"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/components/pages/error/index.tsx","../src/hooks/auth/usePermissions/index.ts","../src/contexts/auth/index.tsx","../src/definitions/table/index.ts","../src/definitions/helpers/userFriendlySeconds/index.ts","../src/definitions/helpers/importCSVMapper/index.ts","../src/definitions/helpers/handleUseParams/index.tsx","../src/definitions/helpers/hasPermission/index.ts","../src/definitions/helpers/humanizeString/index.ts","../src/contexts/refine/index.tsx","../src/definitions/helpers/handleRefineOptions/index.ts","../src/definitions/helpers/redirectPage/index.ts","../src/definitions/helpers/sequentialPromises/index.ts","../src/definitions/helpers/pick-resource/index.ts","../src/definitions/helpers/pickDataProvider/index.ts","../src/definitions/helpers/handleMultiple/index.ts","../src/definitions/helpers/useInfinitePagination/index.ts","../src/definitions/helpers/router/is-parameter.ts","../src/definitions/helpers/router/split-to-segments.ts","../src/definitions/helpers/router/is-segment-counts-same.ts","../src/definitions/helpers/router/remove-leading-trailing-slashes.ts","../src/definitions/helpers/router/check-by-segments.ts","../src/definitions/helpers/router/get-action-routes-from-resource.ts","../src/definitions/helpers/router/pick-matched-route.ts","../src/definitions/helpers/router/match-resource-from-route.ts","../src/definitions/helpers/router/get-parent-resource.ts","../src/definitions/helpers/router/pick-route-params.ts","../src/definitions/helpers/router/prepare-route-params.ts","../src/definitions/helpers/router/compose-route.ts","../src/definitions/helpers/useActiveAuthProvider/index.ts","../src/definitions/helpers/handlePaginationParams/index.ts","../src/definitions/helpers/useMediaQuery/index.ts","../src/definitions/helpers/safe-translate/index.ts","../src/hooks/refine/useMutationMode.ts","../src/hooks/refine/useWarnAboutChange/index.ts","../src/contexts/unsavedWarn/index.tsx","../src/hooks/refine/useSyncWithLocation.ts","../src/hooks/refine/useRefineContext.ts","../src/definitions/helpers/useUserFriendlyName/index.ts","../src/definitions/helpers/generateDocumentTitle/index.ts","../src/definitions/helpers/keys/index.ts","../src/definitions/helpers/flatten-object-keys/index.ts","../src/definitions/helpers/property-path-to-array/index.ts","../src/definitions/helpers/downloadInBrowser/index.ts","../src/definitions/helpers/defer-execution/index.ts","../src/definitions/helpers/async-debounce/index.ts","../src/definitions/helpers/prepare-query-context/index.ts","../src/definitions/upload/file2Base64/index.ts","../src/hooks/useKeys/index.tsx","../src/hooks/auth/useGetIdentity/index.ts","../src/hooks/auth/useLogout/index.ts","../src/hooks/auth/useInvalidateAuthStore/index.ts","../src/hooks/auth/useLogin/index.ts","../src/hooks/auth/useRegister/index.ts","../src/hooks/auth/useForgotPassword/index.ts","../src/hooks/auth/useUpdatePassword/index.ts","../src/hooks/auth/useIsAuthenticated/index.ts","../src/hooks/auth/useOnError/index.ts","../src/hooks/auth/useIsExistAuthentication/index.ts","../src/hooks/data/useList.ts","../src/hooks/useLoadingOvertime/index.ts","../src/hooks/data/useOne.ts","../src/hooks/data/useMany.ts","../src/hooks/data/useUpdate.ts","../src/contexts/undoableQueue/types.ts","../src/hooks/data/useCreate.ts","../src/hooks/data/useDelete.ts","../src/hooks/data/useCreateMany.ts","../src/hooks/data/useUpdateMany.ts","../src/hooks/data/useDeleteMany.ts","../src/hooks/data/useApiUrl.ts","../src/hooks/data/useCustom.ts","../src/hooks/data/useCustomMutation.ts","../src/hooks/data/useDataProvider.tsx","../src/contexts/data/index.tsx","../src/hooks/data/useInfiniteList.ts","../src/hooks/live/useResourceSubscription/index.ts","../src/contexts/live/index.tsx","../src/hooks/invalidate/index.tsx","../src/hooks/live/useLiveMode/index.ts","../src/hooks/live/useSubscription/index.ts","../src/hooks/live/usePublish/index.ts","../src/hooks/notification/useCancelNotification/index.tsx","../src/contexts/undoableQueue/index.tsx","../src/hooks/notification/useNotification/index.ts","../src/contexts/notification/index.tsx","../src/hooks/notification/useHandleNotification/index.ts","../src/hooks/i18n/useSetLocale.ts","../src/contexts/i18n/index.tsx","../src/hooks/i18n/useTranslate.ts","../src/hooks/i18n/useGetLocale.ts","../src/hooks/i18n/useTranslation.tsx","../src/hooks/export/index.ts","../src/hooks/form/index.ts","../src/hooks/redirection/index.ts","../src/hooks/router/use-go/index.tsx","../src/contexts/router/index.tsx","../src/hooks/use-resource-params/index.ts","../src/contexts/resource/index.tsx","../src/hooks/deepMemo/index.tsx","../src/hooks/memoized/index.tsx","../src/hooks/router/use-parsed/index.tsx","../src/hooks/router/use-parse/index.tsx","../src/hooks/use-resource-params/use-id/index.tsx","../src/hooks/use-resource-params/use-action/index.tsx","../src/hooks/use-resource-params/use-resource/index.ts","../src/hooks/router/use-get-to-path/index.ts","../src/hooks/navigation/index.ts","../src/hooks/show/index.ts","../src/hooks/import/index.tsx","../src/hooks/modal/useModal/index.tsx","../src/hooks/router/use-back/index.tsx","../src/hooks/router/use-to-path/index.ts","../src/components/link/index.tsx","../src/hooks/router/use-link/index.tsx","../src/hooks/accessControl/useCan/index.ts","../src/contexts/accessControl/index.tsx","../src/definitions/helpers/sanitize-resource/index.ts","../src/hooks/accessControl/useCanWithoutCache.ts","../src/hooks/useSelect/index.ts","../src/hooks/useTable/index.ts","../src/hooks/auditLog/useLog/index.ts","../src/contexts/auditLog/index.tsx","../src/hooks/auditLog/useLogList/index.ts","../src/hooks/breadcrumb/index.ts","../src/hooks/menu/useMenu.tsx","../src/definitions/helpers/menu/create-resource-key.ts","../src/definitions/helpers/menu/create-tree.ts","../src/contexts/metaContext/index.tsx","../src/hooks/useMeta/index.ts","../src/hooks/use-refine-options/index.tsx","../src/hooks/button/actionable-button/index.tsx","../src/hooks/button/navigation-button/index.tsx","../src/hooks/button/button-can-access/index.tsx","../src/hooks/button/delete-button/index.tsx","../src/hooks/button/refresh-button/index.tsx","../src/hooks/button/index.tsx","../src/components/pages/auth/index.tsx","../src/components/pages/auth/components/login/index.tsx","../src/components/pages/auth/components/register/index.tsx","../src/components/pages/auth/components/forgotPassword/index.tsx","../src/components/pages/auth/components/updatePassword/index.tsx","../src/components/pages/welcome/index.tsx","../src/components/pages/config-success/index.tsx","../src/components/pages/config-error/index.tsx","../src/components/containers/refine/index.tsx","../src/components/telemetry/index.tsx","../src/hooks/useTelemetryData/index.ts","../src/definitions/helpers/check-router-prop-misuse/index.ts","../src/hooks/router/use-router-misuse-warning/index.ts","../src/components/undoableQueue/index.tsx","../src/components/authenticated/index.tsx","../src/components/routeChangeHandler/index.tsx","../src/components/canAccess/index.tsx","../src/components/gh-banner/index.tsx","../src/components/gh-banner/styles.ts","../src/components/autoSaveIndicator/index.tsx"],"sourcesContent":["export * from \"./components/index.js\";\nexport * from \"./hooks/index.js\";\n\n// all auth types\nexport * from \"./components/pages/auth/types.js\";\n\nexport {\n getDefaultFilter,\n getDefaultSortOrder,\n parseTableParams,\n parseTableParamsFromQuery,\n setInitialFilters,\n setInitialSorters,\n stringifyTableParams,\n unionFilters,\n unionSorters,\n} from \"./definitions/table/index.js\";\nexport {\n handleUseParams,\n importCSVMapper,\n getNextPageParam,\n getPreviousPageParam,\n matchResourceFromRoute,\n useActiveAuthProvider,\n useUserFriendlyName,\n pickDataProvider,\n keys,\n KeyBuilder,\n flattenObjectKeys,\n propertyPathToArray,\n} from \"./definitions/helpers/index.js\";\nexport { file2Base64 } from \"./definitions/upload/index.js\";\nexport { generateDefaultDocumentTitle } from \"./definitions/index.js\";\n\nexport { ResourceContext } from \"./contexts/resource/index.js\";\n\nexport { AccessControlContext } from \"./contexts/accessControl/index.js\";\n\nexport {\n AccessControlProvider,\n AccessControlProvider as AccessControlBindings,\n CanParams,\n CanResponse,\n CanReturnType,\n IAccessControlContext,\n IAccessControlContextReturnType,\n} from \"./contexts/accessControl/types.js\";\n\nexport {\n AuditLogProvider,\n IAuditLogContext,\n ILog,\n ILogData,\n LogParams,\n} from \"./contexts/auditLog/types.js\";\n\nexport {\n AuthActionResponse,\n AuthProvider,\n CheckResponse,\n IAuthContext,\n IdentityResponse,\n OnErrorResponse,\n PermissionResponse,\n SuccessNotificationResponse,\n} from \"./contexts/auth/types.js\";\n\nexport {\n ConditionalFilter,\n CreateManyResponse,\n CreateResponse,\n CrudFilter,\n CrudFilters,\n CrudOperators,\n CrudSort,\n CrudSorting,\n CustomResponse,\n DataBindings,\n DeleteManyResponse,\n DeleteOneResponse,\n GetListResponse,\n GetManyResponse,\n GetOneResponse,\n LogicalFilter,\n Pagination,\n SortOrder,\n UpdateManyResponse,\n UpdateResponse,\n GetListParams,\n GetManyParams,\n GetOneParams,\n CreateParams,\n CreateManyParams,\n UpdateParams,\n UpdateManyParams,\n DeleteOneParams,\n DeleteManyParams,\n CustomParams,\n DataProvider,\n BaseKey,\n BaseRecord,\n HttpError,\n MetaQuery,\n MutationMode,\n BaseOption,\n IQueryKeys,\n Prettify,\n Context,\n ContextQuery,\n DataProviders,\n IDataContext,\n GraphQLQueryOptions,\n Fields,\n NestedField,\n PrevContext,\n PreviousQuery,\n QueryBuilderOptions,\n QueryResponse,\n RefineError,\n ValidationErrors,\n VariableOptions,\n} from \"./contexts/data/types.js\";\n\nexport {\n I18nContext,\n I18nContext as TranslationContext,\n} from \"./contexts/i18n/index.js\";\n\nexport {\n I18nProvider,\n I18nProvider as TranslationProvider,\n I18nProvider as i18nBindings,\n II18nContext as ITranslationContext,\n} from \"./contexts/i18n/types.js\";\n\nexport {\n ILiveContext,\n ILiveModeContextProvider,\n LiveEvent,\n LiveCommonParams,\n LiveManyParams,\n LiveModeProps,\n LiveOneParams,\n LiveProvider,\n LiveListParams,\n} from \"./contexts/live/types.js\";\n\nexport {\n INotificationContext,\n NotificationProvider,\n NotificationProvider as NotificationsBindings,\n OpenNotificationParams,\n SuccessErrorNotification,\n} from \"./contexts/notification/types.js\";\n\nexport {\n IRefineContext,\n IRefineContextOptions,\n IRefineContextProvider,\n IRefineOptions,\n LayoutProps,\n RefineProps,\n TextTransformers,\n TitleProps,\n} from \"./contexts/refine/types.js\";\n\nexport {\n ResourceProps,\n IResourceComponents,\n IResourceComponentsProps,\n IResourceContext,\n IResourceItem,\n ResourceAuditLogPermissions,\n ResourceBindings,\n RouteableProperties,\n ResourceRoutePath,\n} from \"./contexts/resource/types.js\";\n\nexport {\n Action,\n BackFunction,\n GoConfig,\n GoFunction,\n ParseResponse,\n ParsedParams,\n ParseFunction,\n RouterProvider,\n} from \"./contexts/router/types.js\";\n\nexport {\n ActionTypes,\n IUndoableQueue,\n IUndoableQueueContext,\n} from \"./contexts/undoableQueue/types.js\";\n\nexport { IUnsavedWarnContext } from \"./contexts/unsavedWarn/types.js\";\n\nexport {\n MetaContextProvider,\n useMetaContext,\n} from \"./contexts/metaContext/index.js\";\n\nexport { TreeMenuItem, UseMenuProps } from \"./hooks/menu/useMenu.js\";\n","import React, { useEffect, useState } from \"react\";\n\nimport { useTranslate, useGo, useResourceParams } from \"@hooks\";\n\n/**\n * When the app is navigated to a non-existent route, refine shows a default error page.\n * A custom error component can be used for this error page.\n *\n * @see {@link https://refine.dev/docs/packages/documentation/routers/} for more details.\n */\nexport const ErrorComponent: React.FC = () => {\n const [errorMessage, setErrorMessage] = useState<string>();\n const translate = useTranslate();\n const go = useGo();\n\n const { action, resource } = useResourceParams();\n\n useEffect(() => {\n if (resource && action) {\n setErrorMessage(\n translate(\n \"pages.error.info\",\n {\n action: action,\n resource: resource.name,\n },\n `You may have forgotten to add the \"${action}\" component to \"${resource.name}\" resource.`,\n ),\n );\n }\n }, [resource, action]);\n\n return (\n <>\n <h1>\n {translate(\n \"pages.error.404\",\n undefined,\n \"Sorry, the page you visited does not exist.\",\n )}\n </h1>\n {errorMessage && <p>{errorMessage}</p>}\n <button\n onClick={() => {\n go({ to: \"/\" });\n }}\n >\n {translate(\"pages.error.backHome\", undefined, \"Back Home\")}\n </button>\n </>\n );\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseQueryOptions,\n type UseQueryResult,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useKeys } from \"@hooks/useKeys\";\nimport type { PermissionResponse } from \"../../../contexts/auth/types\";\n\nexport type UsePermissionsProps<\n TData = PermissionResponse,\n TParams extends Record<string, any> = Record<string, any>,\n> = {\n options?: UseQueryOptions<TData>;\n params?: TParams;\n};\nexport type UsePermissionsReturnType<TData = PermissionResponse> =\n UseQueryResult<TData, unknown>;\n\n/**\n * `usePermissions` calls `getPermissions` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/usePermissions} for more details.\n *\n * @typeParam TData - Result data of the query\n *\n */\nexport function usePermissions<\n TData = any,\n TParams extends Record<string, any> = Record<string, any>,\n>({\n options,\n params,\n}: UsePermissionsProps<TData, TParams>): UsePermissionsReturnType<TData> {\n const { getPermissions } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const queryResponse = useQuery<TData>({\n queryKey: keys().auth().action(\"permissions\").get(),\n queryFn: (getPermissions\n ? () => getPermissions(params)\n : () => Promise.resolve(undefined)) as (\n params?: unknown,\n ) => Promise<TData>,\n enabled: !!getPermissions,\n ...options,\n meta: {\n ...options?.meta,\n ...getXRay(\"usePermissions\"),\n },\n });\n\n return queryResponse;\n}\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type { IAuthContext } from \"./types\";\n\nexport const AuthProviderContext = React.createContext<Partial<IAuthContext>>(\n {},\n);\n\nexport const AuthProviderContextProvider: React.FC<\n PropsWithChildren<IAuthContext>\n> = ({ children, isProvided, ...authProvider }) => {\n const handleLogin = async (params: unknown) => {\n try {\n const result = await authProvider.login?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in login: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleRegister = async (params: unknown) => {\n try {\n const result = await authProvider.register?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in register: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleLogout = async (params: unknown) => {\n try {\n const result = await authProvider.logout?.(params);\n\n return result;\n } catch (error) {\n console.warn(\n \"Unhandled Error in logout: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleCheck = async (params: unknown) => {\n try {\n const result = await authProvider.check?.(params);\n\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in check: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleForgotPassword = async (params: unknown) => {\n try {\n const result = await authProvider.forgotPassword?.(params);\n\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in forgotPassword: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n const handleUpdatePassword = async (params: unknown) => {\n try {\n const result = await authProvider.updatePassword?.(params);\n return Promise.resolve(result);\n } catch (error) {\n console.warn(\n \"Unhandled Error in updatePassword: refine always expects a resolved promise.\",\n error,\n );\n return Promise.reject(error);\n }\n };\n\n return (\n <AuthProviderContext.Provider\n value={{\n ...authProvider,\n login: handleLogin as IAuthContext[\"login\"],\n logout: handleLogout as IAuthContext[\"logout\"],\n check: handleCheck as IAuthContext[\"check\"],\n register: handleRegister as IAuthContext[\"register\"],\n forgotPassword: handleForgotPassword as IAuthContext[\"forgotPassword\"],\n updatePassword: handleUpdatePassword as IAuthContext[\"updatePassword\"],\n isProvided,\n }}\n >\n {children}\n </AuthProviderContext.Provider>\n );\n};\n\nexport const useAuthProviderContext = () => {\n const context = React.useContext(AuthProviderContext);\n\n return context;\n};\n","import differenceWith from \"lodash/differenceWith\";\nimport unionWith from \"lodash/unionWith\";\nimport qs, { type IStringifyOptions } from \"qs\";\nimport warnOnce from \"warn-once\";\n\nimport type {\n CrudFilter,\n CrudOperators,\n CrudSort,\n SortOrder,\n} from \"../../contexts/data/types\";\n\nexport const parseTableParams = (url: string) => {\n const { currentPage, pageSize, sorters, sorter, filters } = qs.parse(\n url.substring(1), // remove first ? character\n );\n\n return {\n parsedCurrentPage: currentPage && Number(currentPage),\n parsedPageSize: pageSize && Number(pageSize),\n parsedSorter: (sorters as CrudSort[]) || (sorter as CrudSort[]) || [],\n parsedFilters: (filters as CrudFilter[]) ?? [],\n };\n};\n\nexport const parseTableParamsFromQuery = (params: any) => {\n const { currentPage, pageSize, sorters, sorter, filters } = params;\n\n return {\n parsedCurrentPage: currentPage && Number(currentPage),\n parsedPageSize: pageSize && Number(pageSize),\n parsedSorter: (sorters as CrudSort[]) || (sorter as CrudSort[]) || [],\n parsedFilters: (filters as CrudFilter[]) ?? [],\n };\n};\n\n/**\n * @internal This function is used to stringify table params from the useTable hook.\n */\nexport const stringifyTableParams = (params: {\n pagination?: { currentPage?: number; pageSize?: number };\n sorters: CrudSort[];\n sorter?: CrudSort[];\n filters: CrudFilter[];\n [key: string]: any;\n}): string => {\n const options: IStringifyOptions = {\n skipNulls: true,\n arrayFormat: \"indices\",\n encode: false,\n };\n const { pagination, sorters, sorter, filters, ...rest } = params;\n\n // Prioritize sorters over sorter\n const finalSorters = sorters && sorters.length > 0 ? sorters : sorter;\n\n const queryString = qs.stringify(\n {\n ...rest,\n ...(pagination ? pagination : {}),\n sorters: finalSorters,\n filters,\n },\n options,\n );\n\n return queryString;\n};\n\nexport const compareFilters = (\n left: CrudFilter,\n right: CrudFilter,\n): boolean => {\n if (\n left.operator !== \"and\" &&\n left.operator !== \"or\" &&\n right.operator !== \"and\" &&\n right.operator !== \"or\"\n ) {\n return (\n (\"field\" in left ? left.field : undefined) ===\n (\"field\" in right ? right.field : undefined) &&\n left.operator === right.operator\n );\n }\n\n return (\n (\"key\" in left ? left.key : undefined) ===\n (\"key\" in right ? right.key : undefined) &&\n left.operator === right.operator\n );\n};\n\nexport const compareSorters = (left: CrudSort, right: CrudSort): boolean =>\n left.field === right.field;\n// Keep only one CrudFilter per type according to compareFilters\n// Items in the array that is passed first to unionWith have higher priority\n// CrudFilter items with undefined values are necessary to signify no filter\n// After union, don't keep CrudFilter items with undefined value in the result\n// Items in the arrays with higher priority are put at the end.\nexport const unionFilters = (\n permanentFilter: CrudFilter[],\n newFilters: CrudFilter[],\n prevFilters: CrudFilter[] = [],\n): CrudFilter[] => {\n const isKeyRequired = newFilters.filter(\n (f) => (f.operator === \"or\" || f.operator === \"and\") && !f.key,\n );\n\n if (isKeyRequired.length > 1) {\n warnOnce(\n true,\n \"[conditionalFilters]: You have created multiple Conditional Filters at the top level, this requires the key parameter. \\nFor more information, see https://refine.dev/docs/advanced-tutorials/data-provider/handling-filters/#top-level-multiple-conditional-filters-usage\",\n );\n }\n\n return unionWith(\n permanentFilter,\n newFilters,\n prevFilters,\n compareFilters,\n ).filter(\n (crudFilter) =>\n crudFilter.value !== undefined &&\n crudFilter.value !== null &&\n (crudFilter.operator !== \"or\" ||\n (crudFilter.operator === \"or\" && crudFilter.value.length !== 0)) &&\n (crudFilter.operator !== \"and\" ||\n (crudFilter.operator === \"and\" && crudFilter.value.length !== 0)),\n );\n};\n\nexport const unionSorters = (\n permanentSorter: CrudSort[],\n newSorters: CrudSort[],\n): CrudSort[] =>\n unionWith(permanentSorter, newSorters, compareSorters).filter(\n (crudSorter) => crudSorter.order !== undefined && crudSorter.order !== null,\n );\n// Prioritize filters in the permanentFilter and put it at the end of result array\nexport const setInitialFilters = (\n permanentFilter: CrudFilter[],\n defaultFilter: CrudFilter[],\n): CrudFilter[] => [\n ...differenceWith(defaultFilter, permanentFilter, compareFilters),\n ...permanentFilter,\n];\n\nexport const setInitialSorters = (\n permanentSorter: CrudSort[],\n defaultSorter: CrudSort[],\n): CrudSort[] => [\n ...differenceWith(defaultSorter, permanentSorter, compareSorters),\n ...permanentSorter,\n];\n\nexport const getDefaultSortOrder = (\n columnName: string,\n sorter?: CrudSort[],\n): SortOrder | undefined => {\n if (!sorter) {\n return undefined;\n }\n\n const sortItem = sorter.find((item) => item.field === columnName);\n\n if (sortItem) {\n return sortItem.order as SortOrder;\n }\n\n return undefined;\n};\n\nexport const getDefaultFilter = (\n columnName: string,\n filters?: CrudFilter[],\n operatorType: CrudOperators = \"eq\",\n): CrudFilter[\"value\"] | undefined => {\n const filter = filters?.find((filter) => {\n if (\n filter.operator !== \"or\" &&\n filter.operator !== \"and\" &&\n \"field\" in filter\n ) {\n const { operator, field } = filter;\n return field === columnName && operator === operatorType;\n }\n return undefined;\n });\n\n if (filter) {\n return filter.value || [];\n }\n\n return undefined;\n};\n","export const userFriendlySecond = (miliseconds: number): number => {\n return miliseconds / 1000; //convert to seconds\n};\n","import fromPairs from \"lodash/fromPairs\";\nimport zip from \"lodash/zip\";\n\nimport type { MapDataFn } from \"../../../hooks/export/types\";\n\nexport const importCSVMapper = <TItem = any, TVariables = any>(\n data: any[][],\n mapData: MapDataFn<TItem, TVariables> = (item) => item as any,\n): TVariables[] => {\n const [headers, ...body] = data;\n return body\n .map((entry) => fromPairs(zip(headers, entry)))\n .map((item: any, index, array: any) =>\n mapData.call(undefined, item, index, array),\n );\n};\n","export const handleUseParams = (params: any = {}): any => {\n if (params?.id) {\n return {\n ...params,\n id: decodeURIComponent(params.id),\n };\n }\n return params;\n};\n","export const hasPermission = (\n permissions: string[] | undefined,\n action: string | undefined,\n): boolean => {\n if (!permissions || !action) {\n return false;\n }\n return !!permissions.find((i) => i === action);\n};\n","export const humanizeString = (text: string): string => {\n text = text.replace(/([a-z]{1})([A-Z]{1})/g, \"$1-$2\");\n text = text.replace(/([A-Z]{1})([A-Z]{1})([a-z]{1})/g, \"$1-$2$3\");\n\n text = text\n .toLowerCase()\n .replace(/[_-]+/g, \" \")\n .replace(/\\s{2,}/g, \" \")\n .trim();\n text = text.charAt(0).toUpperCase() + text.slice(1);\n\n return text;\n};\n// https://www.npmjs.com/package/humanize-string\n","import React from \"react\";\n\nimport pluralize from \"pluralize\";\n\nimport { humanizeString } from \"../../definitions/helpers/humanizeString\";\nimport type {\n IRefineContext,\n IRefineContextOptions,\n IRefineContextProvider,\n} from \"./types\";\n\nconst defaultTitle: IRefineContextOptions[\"title\"] = {\n icon: (\n <svg\n width={24}\n height={24}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n data-testid=\"refine-logo\"\n id=\"refine-default-logo\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.7889 0.422291C12.6627 -0.140764 11.3373 -0.140764 10.2111 0.422291L2.21115 4.42229C0.85601 5.09986 0 6.48491 0 8V16C0 17.5151 0.85601 18.9001 2.21115 19.5777L10.2111 23.5777C11.3373 24.1408 12.6627 24.1408 13.7889 23.5777L21.7889 19.5777C23.144 18.9001 24 17.5151 24 16V8C24 6.48491 23.144 5.09986 21.7889 4.42229L13.7889 0.422291ZM8 8C8 5.79086 9.79086 4 12 4C14.2091 4 16 5.79086 16 8V16C16 18.2091 14.2091 20 12 20C9.79086 20 8 18.2091 8 16V8Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M14 8C14 9.10457 13.1046 10 12 10C10.8954 10 10 9.10457 10 8C10 6.89543 10.8954 6 12 6C13.1046 6 14 6.89543 14 8Z\"\n fill=\"currentColor\"\n />\n </svg>\n ),\n text: \"Refine Project\",\n};\n\nexport const defaultRefineOptions: IRefineContextOptions = {\n mutationMode: \"pessimistic\",\n syncWithLocation: false,\n undoableTimeout: 5000,\n warnWhenUnsavedChanges: false,\n liveMode: \"off\",\n redirect: {\n afterCreate: \"list\",\n afterClone: \"list\",\n afterEdit: \"list\",\n },\n overtime: {\n enabled: true,\n interval: 1000,\n },\n textTransformers: {\n humanize: humanizeString,\n plural: pluralize.plural,\n singular: pluralize.singular,\n },\n disableServerSideValidation: false,\n title: defaultTitle,\n};\n\nexport const RefineContext = React.createContext<IRefineContext>({\n mutationMode: \"pessimistic\",\n warnWhenUnsavedChanges: false,\n syncWithLocation: false,\n undoableTimeout: 5000,\n liveMode: \"off\",\n onLiveEvent: undefined,\n options: defaultRefineOptions,\n});\n\nexport const RefineContextProvider: React.FC<IRefineContextProvider> = ({\n mutationMode,\n warnWhenUnsavedChanges,\n syncWithLocation,\n undoableTimeout,\n children,\n liveMode = \"off\",\n onLiveEvent,\n options,\n}) => {\n return (\n <RefineContext.Provider\n value={{\n __initialized: true,\n mutationMode,\n warnWhenUnsavedChanges,\n syncWithLocation,\n undoableTimeout,\n liveMode,\n onLiveEvent,\n options,\n }}\n >\n {children}\n </RefineContext.Provider>\n );\n};\n","import type { QueryClient, QueryClientConfig } from \"@tanstack/react-query\";\n\nimport { defaultRefineOptions } from \"@contexts/refine\";\n\nimport type { MutationMode } from \"../../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../../contexts/live/types\";\nimport type {\n IRefineContextOptions,\n IRefineOptions,\n} from \"../../../contexts/refine/types\";\n\ntype HandleRefineOptionsProps = {\n options?: IRefineOptions;\n mutationMode?: MutationMode;\n syncWithLocation?: boolean;\n warnWhenUnsavedChanges?: boolean;\n undoableTimeout?: number;\n liveMode?: LiveModeProps[\"liveMode\"];\n disableTelemetry?: boolean;\n reactQueryClientConfig?: QueryClientConfig;\n reactQueryDevtoolConfig?: any | false;\n};\n\ntype HandleRefineOptionsReturnValues = {\n optionsWithDefaults: IRefineContextOptions;\n disableTelemetryWithDefault: boolean;\n reactQueryWithDefaults: {\n clientConfig: QueryClientConfig | InstanceType<typeof QueryClient>;\n };\n};\n\nexport const handleRefineOptions = ({\n options,\n disableTelemetry,\n liveMode,\n mutationMode,\n reactQueryClientConfig,\n reactQueryDevtoolConfig,\n syncWithLocation,\n undoableTimeout,\n warnWhenUnsavedChanges,\n}: HandleRefineOptionsProps = {}): HandleRefineOptionsReturnValues => {\n const optionsWithDefaults: IRefineContextOptions = {\n breadcrumb: options?.breadcrumb,\n mutationMode:\n options?.mutationMode ??\n mutationMode ??\n defaultRefineOptions.mutationMode,\n undoableTimeout:\n options?.undoableTimeout ??\n undoableTimeout ??\n defaultRefineOptions.undoableTimeout,\n syncWithLocation:\n options?.syncWithLocation ??\n syncWithLocation ??\n defaultRefineOptions.syncWithLocation,\n warnWhenUnsavedChanges:\n options?.warnWhenUnsavedChanges ??\n warnWhenUnsavedChanges ??\n defaultRefineOptions.warnWhenUnsavedChanges,\n liveMode: options?.liveMode ?? liveMode ?? defaultRefineOptions.liveMode,\n redirect: {\n afterCreate:\n options?.redirect?.afterCreate ??\n defaultRefineOptions.redirect.afterCreate,\n afterClone:\n options?.redirect?.afterClone ??\n defaultRefineOptions.redirect.afterClone,\n afterEdit:\n options?.redirect?.afterEdit ?? defaultRefineOptions.redirect.afterEdit,\n },\n overtime: options?.overtime ?? defaultRefineOptions.overtime,\n textTransformers: {\n humanize:\n options?.textTransformers?.humanize ??\n defaultRefineOptions.textTransformers.humanize,\n plural:\n options?.textTransformers?.plural ??\n defaultRefineOptions.textTransformers.plural,\n singular:\n options?.textTransformers?.singular ??\n defaultRefineOptions.textTransformers.singular,\n },\n disableServerSideValidation:\n options?.disableServerSideValidation ??\n defaultRefineOptions.disableServerSideValidation,\n projectId: options?.projectId,\n title: {\n icon:\n typeof options?.title?.icon === \"undefined\"\n ? defaultRefineOptions.title.icon\n : options?.title?.icon,\n text:\n typeof options?.title?.text === \"undefined\"\n ? defaultRefineOptions.title.text\n : options?.title?.text,\n },\n };\n\n const disableTelemetryWithDefault =\n options?.disableTelemetry ?? disableTelemetry ?? false;\n\n const reactQueryWithDefaults = {\n clientConfig:\n options?.reactQuery?.clientConfig ?? reactQueryClientConfig ?? {},\n devtoolConfig: reactQueryDevtoolConfig ?? {},\n };\n\n return {\n optionsWithDefaults,\n disableTelemetryWithDefault,\n reactQueryWithDefaults,\n };\n};\n","import type { IRefineContextOptions } from \"../../../contexts/refine/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport type { RedirectAction } from \"../../../hooks/form/types\";\n\ntype RedirectPageProps = {\n redirectFromProps?: RedirectAction;\n action: Action;\n redirectOptions: IRefineContextOptions[\"redirect\"];\n};\n\nexport const redirectPage = ({\n redirectFromProps,\n action,\n redirectOptions,\n}: RedirectPageProps): RedirectAction => {\n if (redirectFromProps || redirectFromProps === false) {\n return redirectFromProps;\n }\n\n switch (action) {\n case \"clone\":\n return redirectOptions.afterClone;\n case \"create\":\n return redirectOptions.afterCreate;\n case \"edit\":\n return redirectOptions.afterEdit;\n default:\n return false;\n }\n};\n","type EachResolve<TResolve, Response> = (\n result: TResolve,\n index: number,\n) => Response;\ntype EachReject<TReject, Response> = (\n error: TReject,\n index: number,\n) => Response;\n\nexport const sequentialPromises = async <\n TResolve = unknown,\n TReject = unknown,\n TResolveResponse = unknown,\n TRejectResponse = unknown,\n>(\n promises: (() => Promise<TResolve>)[],\n onEachResolve: EachResolve<TResolve, TResolveResponse>,\n onEachReject: EachReject<TReject, TRejectResponse>,\n): Promise<(TResolveResponse | TRejectResponse)[]> => {\n const results = [];\n // @ts-expect-error Remove this when we enable `downLevelIterations`\n for (const [index, promise] of promises.entries()) {\n try {\n const result = await promise();\n\n results.push(onEachResolve(result, index));\n } catch (error) {\n results.push(onEachReject(error as TReject, index));\n }\n }\n return results;\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\n\n/**\n * Picks the resource based on the provided identifier.\n * It will first try to match based on the identifier, then the name.\n * Identifier fallbacks to `name` if `identifier` is not explicitly provided to the resource.\n */\nexport const pickResource = (\n identifier?: string,\n resources: IResourceItem[] = [],\n): IResourceItem | undefined => {\n if (!identifier) {\n return undefined;\n }\n\n let resource = resources.find((r) => r.identifier === identifier);\n if (!resource) {\n resource = resources.find((r) => r.name === identifier);\n }\n\n return resource;\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport { pickResource } from \"../pick-resource\";\n\n/**\n * Picks the data provider name based on the provided name or fallbacks to resource definition, or `default`.\n */\nexport const pickDataProvider = (\n resourceName?: string,\n dataProviderName?: string,\n resources?: IResourceItem[],\n) => {\n if (dataProviderName) {\n return dataProviderName;\n }\n\n /**\n * In this helper, we don't do `route` based matching therefore there's no need to check for `legacy` behaviors.\n */\n const resource = pickResource(resourceName, resources);\n\n const meta = resource?.meta;\n\n if (meta?.dataProviderName) {\n return meta.dataProviderName;\n }\n\n return \"default\";\n};\n","export const handleMultiple = async <TData = unknown>(\n promises: Promise<{ data: TData }>[],\n): Promise<{ data: TData[] }> => {\n return {\n data: (await Promise.all(promises)).map((res) => res.data),\n };\n};\n","import type { GetListResponse } from \"../../../contexts/data/types\";\n\nexport const getNextPageParam = (lastPage: GetListResponse) => {\n const { pagination, cursor } = lastPage;\n\n // cursor pagination\n if (cursor?.next) {\n return cursor.next;\n }\n\n const current = pagination?.currentPage || 1;\n\n const pageSize = pagination?.pageSize || 10;\n const totalPages = Math.ceil((lastPage.total || 0) / pageSize);\n\n return current < totalPages ? Number(current) + 1 : undefined;\n};\n\nexport const getPreviousPageParam = (lastPage: GetListResponse) => {\n const { pagination, cursor } = lastPage;\n\n // cursor pagination\n if (cursor?.prev) {\n return cursor.prev;\n }\n\n const current = pagination?.currentPage || 1;\n\n return current === 1 ? undefined : current - 1;\n};\n","/**\n * Check if a segment is a parameter. (e.g. :id)\n */\nexport const isParameter = (segment: string) => {\n return segment.startsWith(\":\");\n};\n","/**\n * Split a path to segments.\n */\nexport const splitToSegments = (path: string) => {\n const segments = path.split(\"/\").filter((segment) => segment !== \"\");\n return segments;\n};\n","import { splitToSegments } from \"./split-to-segments\";\n\n/**\n * Checks if the both routes have the same number of segments.\n */\nexport const isSegmentCountsSame = (route: string, resourceRoute: string) => {\n const routeSegments = splitToSegments(route);\n const resourceRouteSegments = splitToSegments(resourceRoute);\n\n return routeSegments.length === resourceRouteSegments.length;\n};\n","/**\n * Remove leading and trailing slashes from a route.\n */\nexport const removeLeadingTrailingSlashes = (route: string) => {\n return route.replace(/^\\/|\\/$/g, \"\");\n};\n","import { isParameter } from \"./is-parameter\";\nimport { isSegmentCountsSame } from \"./is-segment-counts-same\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { splitToSegments } from \"./split-to-segments\";\n\n/**\n * This function if the route and resourceRoute match by segments.\n * - First, trailing and leading slashes are removed\n * - Then, the route and resourceRoute are split to segments and checked if they have the same number of segments\n * - Then, each segment is checked if it is a parameter or if it matches the resourceRoute segment\n * - If all segments match, the function returns true, otherwise false\n */\nexport const checkBySegments = (route: string, resourceRoute: string) => {\n const stdRoute = removeLeadingTrailingSlashes(route);\n const stdResourceRoute = removeLeadingTrailingSlashes(resourceRoute);\n // we need to check if the route and resourceRoute have the same number of segments\n // if not, we can't match them\n if (!isSegmentCountsSame(stdRoute, stdResourceRoute)) {\n return false;\n }\n\n const routeSegments = splitToSegments(stdRoute);\n const resourceRouteSegments = splitToSegments(stdResourceRoute);\n\n return resourceRouteSegments.every((segment, index) => {\n return isParameter(segment) || segment === routeSegments[index];\n });\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type { Action } from \"../../../contexts/router/types\";\n\nexport type ResourceActionRoute = {\n action: Action;\n resource: IResourceItem;\n route: string;\n};\n\n/**\n * This function returns all the routes for available actions for a resource.\n * - It will return an array of objects with the action, the resource and the route\n */\nexport const getActionRoutesFromResource = (\n resource: IResourceItem,\n resources: IResourceItem[],\n) => {\n const actions: ResourceActionRoute[] = [];\n\n const actionList: Action[] = [\"list\", \"show\", \"edit\", \"create\", \"clone\"];\n\n actionList.forEach((action) => {\n const route: string | undefined = resource[action];\n\n if (route) {\n actions.push({\n action,\n resource,\n route: `/${route.replace(/^\\//, \"\")}`,\n });\n }\n });\n\n return actions;\n};\n","import type { ResourceActionRoute } from \"./get-action-routes-from-resource\";\nimport { isParameter } from \"./is-parameter\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { splitToSegments } from \"./split-to-segments\";\n\n/**\n * Picks the most eligible route from the given matched routes.\n * - If there's only one route, it returns it.\n * - If there's more than one route, it picks the best non-greedy match.\n */\nexport const pickMatchedRoute = (\n routes: ResourceActionRoute[],\n): ResourceActionRoute | undefined => {\n // these routes are all matched, we should pick the least parametrized one\n\n // no routes, no match\n if (routes.length === 0) {\n return undefined;\n }\n\n // no need to calculate the route segments if there's only one route\n if (routes.length === 1) {\n return routes[0];\n }\n\n // remove trailing and leading slashes\n // split them to segments\n const sanitizedRoutes = routes.map((route) => ({\n ...route,\n splitted: splitToSegments(removeLeadingTrailingSlashes(route.route)),\n }));\n\n // at this point, before calling this function, we already checked for segment lenghts and expect all of them to be the same\n const segmentsCount = sanitizedRoutes[0]?.splitted.length ?? 0;\n\n let eligibleRoutes: Array<(typeof sanitizedRoutes)[number]> = [\n ...sanitizedRoutes,\n ];\n\n // loop through the segments\n for (let i = 0; i < segmentsCount; i++) {\n const nonParametrizedRoutes = eligibleRoutes.filter(\n (route) => !isParameter(route.splitted[i]),\n );\n\n if (nonParametrizedRoutes.length === 0) {\n // keep the eligible routes as they are\n continue;\n }\n if (nonParametrizedRoutes.length === 1) {\n // no need to continue, we found the route\n eligibleRoutes = nonParametrizedRoutes;\n break;\n }\n\n // we have more than one non-parametrized route, we need to check the next segment\n eligibleRoutes = nonParametrizedRoutes;\n }\n\n return eligibleRoutes[0];\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport { checkBySegments } from \"./check-by-segments\";\nimport { getActionRoutesFromResource } from \"./get-action-routes-from-resource\";\nimport { pickMatchedRoute } from \"./pick-matched-route\";\n\n/**\n * Match the resource from the route\n * - It will calculate all possible routes for resources and their actions\n * - It will check if the route matches any of the possible routes\n * - It will return the most eligible resource and action\n */\nexport const matchResourceFromRoute = (\n route: string,\n resources: IResourceItem[],\n): {\n found: boolean;\n resource?: IResourceItem;\n action?: Action;\n matchedRoute?: string;\n} => {\n const allActionRoutes = resources.flatMap((resource) => {\n return getActionRoutesFromResource(resource, resources);\n });\n\n const allFound = allActionRoutes.filter((actionRoute) => {\n return checkBySegments(route, actionRoute.route);\n });\n\n const mostEligible = pickMatchedRoute(allFound);\n\n return {\n found: !!mostEligible,\n resource: mostEligible?.resource,\n action: mostEligible?.action,\n matchedRoute: mostEligible?.route,\n };\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\n\n/**\n * Returns the parent resource of the given resource.\n * Uses the `resource.meta.parent` property.\n */\nexport const getParentResource = (\n resource: IResourceItem,\n resources: IResourceItem[],\n): IResourceItem | undefined => {\n const parentName = resource.meta?.parent;\n\n if (!parentName) {\n return undefined;\n }\n\n const parentResource = resources.find(\n (resource) => (resource.identifier ?? resource.name) === parentName,\n );\n\n /**\n * If the parent resource is not found, we return a resource object with the name of the parent resource.\n * Because we still want to have nesting and prefixing for the resource even if the parent is not explicitly defined.\n */\n return parentResource ?? { name: parentName };\n};\n","import { splitToSegments } from \"./split-to-segments\";\nimport { removeLeadingTrailingSlashes } from \"./remove-leading-trailing-slashes\";\nimport { isParameter } from \"./is-parameter\";\n\n/**\n * Picks the route parameters from the given route.\n * (e.g. /users/:id/posts/:postId => ['id', 'postId'])\n */\nexport const pickRouteParams = (route: string) => {\n const segments = splitToSegments(removeLeadingTrailingSlashes(route));\n\n return segments.flatMap((s) => {\n if (isParameter(s)) {\n return [s.slice(1)];\n }\n\n return [];\n });\n};\n","/**\n * Prepares the route params by checking the existing params and meta data.\n * Meta data is prioritized over params.\n * Params are prioritized over predetermined id, action and resource.\n * This means, we can use `meta` for user supplied params (both manually or from the query string)\n */\nexport const prepareRouteParams = <\n TRouteParams extends Record<string, unknown> = Record<string, unknown>,\n>(\n routeParams: (keyof TRouteParams)[],\n meta: Record<string, unknown> = {},\n): Partial<TRouteParams> => {\n return routeParams.reduce(\n (acc, key) => {\n const value = meta[key as string];\n if (typeof value !== \"undefined\") {\n acc[key] = value as TRouteParams[keyof TRouteParams];\n }\n return acc;\n },\n {} as Partial<TRouteParams>,\n );\n};\n","import type { MetaQuery } from \"../../../contexts/data/types\";\nimport type { ParseResponse } from \"../../../contexts/router/types\";\nimport { pickRouteParams } from \"./pick-route-params\";\nimport { prepareRouteParams } from \"./prepare-route-params\";\n\n/**\n * This function will compose a route with the given params and meta.\n * - A route can have parameters like (eg: /users/:id)\n * - First we pick the route params from the route (eg: [id])\n * - Then we prepare the route params with the given params and meta (eg: { id: 1 })\n * - Then we replace the route params with the prepared route params (eg: /users/1)\n */\nexport const composeRoute = (\n designatedRoute: string,\n resourceMeta: MetaQuery = {},\n parsed: ParseResponse = {},\n meta: Record<string, unknown> = {},\n): string => {\n // pickRouteParams (from the route)\n const routeParams = pickRouteParams(designatedRoute);\n // prepareRouteParams (from route params, params and meta)\n const preparedRouteParams = prepareRouteParams(routeParams, {\n ...resourceMeta,\n ...(typeof parsed?.id !== \"undefined\" ? { id: parsed.id } : {}),\n ...(typeof parsed?.action !== \"undefined\" ? { action: parsed.action } : {}),\n ...(typeof parsed?.resource !== \"undefined\"\n ? { resource: parsed.resource }\n : {}),\n ...parsed?.params,\n ...meta,\n });\n // replace route params with prepared route params\n return designatedRoute.replace(/:([^\\/]+)/g, (match, key) => {\n const fromParams = preparedRouteParams[key];\n if (typeof fromParams !== \"undefined\") {\n return `${fromParams}`;\n }\n return match;\n });\n};\n","import { useAuthProviderContext } from \"@contexts/auth\";\n\n/**\n * @returns authProvider if provided, otherwise null\n * @internal\n */\nexport const useActiveAuthProvider = () => {\n const authProvider = useAuthProviderContext();\n\n if (authProvider.isProvided) {\n return authProvider;\n }\n\n return null;\n};\n","import type { Pagination } from \"../../../contexts/data/types\";\n\ntype HandlePaginationParamsProps = {\n pagination?: Pagination;\n};\n\nexport const handlePaginationParams = ({\n pagination,\n}: HandlePaginationParamsProps = {}): Required<Pagination> => {\n const mode = pagination?.mode ?? \"server\";\n\n const currentPage = pagination?.currentPage ?? 1;\n\n const pageSize = pagination?.pageSize ?? 10;\n\n return {\n currentPage,\n pageSize,\n mode,\n };\n};\n","import { useState, useEffect } from \"react\";\n\nexport const useMediaQuery = (query: string) => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const media = window.matchMedia(query);\n if (media.matches !== matches) {\n setMatches(media.matches);\n }\n const listener = () => setMatches(media.matches);\n window.addEventListener(\"resize\", listener);\n return () => window.removeEventListener(\"resize\", listener);\n }, [matches, query]);\n\n return matches;\n};\n","import type { useTranslate } from \"../../../hooks/i18n\";\n\nexport const safeTranslate = (\n translate: ReturnType<typeof useTranslate>,\n key: string,\n defaultMessage?: string,\n options?: any,\n) => {\n const translated = options\n ? translate(key, options, defaultMessage)\n : translate(key, defaultMessage);\n\n const fallback = defaultMessage ?? key;\n\n if (translated === key || typeof translated === \"undefined\") {\n return fallback;\n }\n\n return translated;\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\nimport type { IRefineContextOptions } from \"../../contexts/refine/types\";\nimport type { MutationMode } from \"../../contexts/data/types\";\n\ntype UseMutationModeType = (\n preferredMutationMode?: MutationMode,\n preferredUndoableTimeout?: number,\n) => {\n mutationMode: IRefineContextOptions[\"mutationMode\"];\n undoableTimeout: IRefineContextOptions[\"undoableTimeout\"];\n};\n\n/**\n * Mutation mode determines which mode the mutation runs with.\n * Mutations can run under three different modes: `pessimistic`, `optimistic` and `undoable`.\n * Each mode corresponds to a different type of user experience.\n *\n * @see {@link https://refine.dev/docs/guides-and-concepts/mutation-mode} for more details.\n */\nexport const useMutationMode: UseMutationModeType = (\n preferredMutationMode?: MutationMode,\n preferredUndoableTimeout?: number,\n) => {\n const { mutationMode, undoableTimeout } = useContext(RefineContext);\n\n return {\n mutationMode: preferredMutationMode ?? mutationMode,\n undoableTimeout: preferredUndoableTimeout ?? undoableTimeout,\n };\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\nimport { UnsavedWarnContext } from \"@contexts/unsavedWarn\";\nimport type { IRefineContextOptions } from \"../../../contexts/refine/types\";\nimport type { IUnsavedWarnContext } from \"../../../contexts/unsavedWarn/types\";\n\ntype UseWarnAboutChangeType = () => {\n warnWhenUnsavedChanges: IRefineContextOptions[\"warnWhenUnsavedChanges\"];\n warnWhen: NonNullable<IUnsavedWarnContext[\"warnWhen\"]>;\n setWarnWhen: NonNullable<IUnsavedWarnContext[\"setWarnWhen\"]>;\n};\n\n/**\n * When you have unsaved changes and try to leave the current page, **refine** shows a confirmation modal box.\n * To activate this feature, set the `warnWhenUnsavedChanges` to `true`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/components/refine-config#warnwhenunsavedchanges} for more details.\n */\nexport const useWarnAboutChange: UseWarnAboutChangeType = () => {\n const { warnWhenUnsavedChanges } = useContext(RefineContext);\n\n const { warnWhen, setWarnWhen } = useContext(UnsavedWarnContext);\n\n return {\n warnWhenUnsavedChanges,\n warnWhen: Boolean(warnWhen),\n setWarnWhen: setWarnWhen ?? (() => undefined),\n };\n};\n","import React, { useState, type PropsWithChildren } from \"react\";\n\nimport type { IUnsavedWarnContext } from \"./types\";\n\nexport const UnsavedWarnContext = React.createContext<IUnsavedWarnContext>({});\n\nexport const UnsavedWarnContextProvider: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n const [warnWhen, setWarnWhen] = useState(false);\n\n return (\n <UnsavedWarnContext.Provider value={{ warnWhen, setWarnWhen }}>\n {children}\n </UnsavedWarnContext.Provider>\n );\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\nimport type { IRefineContextOptions } from \"../../contexts/refine/types\";\n\ntype UseSyncWithLocationType = () => {\n syncWithLocation: IRefineContextOptions[\"syncWithLocation\"];\n};\n\n/**\n * List query parameter values can be edited manually by typing directly in the URL.\n * To activate this feature `syncWithLocation` needs to be set to `true`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/components/refine-config/#syncwithlocation} for more details.\n */\nexport const useSyncWithLocation: UseSyncWithLocationType = () => {\n const { syncWithLocation } = useContext(RefineContext);\n\n return { syncWithLocation };\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\n\nexport const useRefineContext = () => {\n const {\n mutationMode,\n syncWithLocation,\n undoableTimeout,\n warnWhenUnsavedChanges,\n liveMode,\n onLiveEvent,\n options,\n __initialized,\n } = useContext(RefineContext);\n\n return {\n __initialized,\n mutationMode,\n syncWithLocation,\n undoableTimeout,\n warnWhenUnsavedChanges,\n liveMode,\n onLiveEvent,\n options,\n };\n};\n","import { useRefineContext } from \"@hooks/refine\";\n\n/**\n * A method that the internal uses\n * @internal\n */\nexport const useUserFriendlyName = () => {\n const {\n options: { textTransformers },\n } = useRefineContext();\n\n const getFriendlyName = (name = \"\", type: \"singular\" | \"plural\"): string => {\n const humanizeName = textTransformers.humanize(name);\n if (type === \"singular\") {\n return textTransformers.singular(humanizeName);\n }\n return textTransformers.plural(humanizeName);\n };\n\n return getFriendlyName;\n};\n","import type { useTranslate } from \"../../../hooks/i18n\";\n\nimport type { IResourceItem } from \"../../../contexts/resource/types\";\nimport { safeTranslate } from \"../safe-translate\";\nimport { useUserFriendlyName } from \"../useUserFriendlyName\";\n\n/**\n * Generates document title for the given resource and action.\n */\nexport function generateDefaultDocumentTitle(\n translate: ReturnType<typeof useTranslate>,\n resource?: IResourceItem,\n action?: string,\n id?: string,\n resourceName?: string,\n getUserFriendlyName?: (name: string, type: \"singular\" | \"plural\") => string,\n) {\n const getFriendlyName = getUserFriendlyName || useUserFriendlyName();\n\n const actionPrefixMatcher = {\n create: \"Create new \",\n clone: `#${id ?? \"\"} Clone `,\n edit: `#${id ?? \"\"} Edit `,\n show: `#${id ?? \"\"} Show `,\n list: \"\",\n };\n\n const identifier = resource?.identifier ?? resource?.name;\n\n const resourceNameFallback =\n resource?.meta?.label ??\n (identifier\n ? getFriendlyName(identifier, action === \"list\" ? \"plural\" : \"singular\")\n : identifier);\n\n const resourceNameWithFallback = resourceName ?? resourceNameFallback;\n\n const defaultTitle = safeTranslate(\n translate,\n \"documentTitle.default\",\n \"Refine\",\n );\n const suffix = safeTranslate(translate, \"documentTitle.suffix\", \" | Refine\");\n let autoGeneratedTitle = defaultTitle;\n\n if (action && identifier) {\n autoGeneratedTitle = safeTranslate(\n translate,\n `documentTitle.${identifier}.${action}`,\n `${\n actionPrefixMatcher[action as keyof typeof actionPrefixMatcher] ?? \"\"\n }${resourceNameWithFallback}${suffix}`,\n { id },\n );\n }\n\n return autoGeneratedTitle;\n}\n","import type { BaseKey } from \"../../../contexts/data/types\";\n\ntype ParametrizedDataActions = \"list\" | \"infinite\";\ntype IdRequiredDataActions = \"one\";\ntype IdsRequiredDataActions = \"many\";\ntype DataMutationActions =\n | \"custom\"\n | \"customMutation\"\n | \"create\"\n | \"createMany\"\n | \"update\"\n | \"updateMany\"\n | \"delete\"\n | \"deleteMany\";\n\ntype AuthActionType =\n | \"login\"\n | \"logout\"\n | \"identity\"\n | \"register\"\n | \"forgotPassword\"\n | \"check\"\n | \"onError\"\n | \"permissions\"\n | \"updatePassword\";\n\ntype AuditActionType = \"list\" | \"log\" | \"rename\";\n\ntype IdType = BaseKey;\ntype IdsType = IdType[];\n\ntype ParamsType = any;\n\ntype KeySegment = string | IdType | IdsType | ParamsType;\n\nexport function arrayFindIndex<T>(array: T[], slice: T[]): number {\n return array.findIndex(\n (item, index) =>\n index <= array.length - slice.length &&\n slice.every(\n (sliceItem, sliceIndex) => array[index + sliceIndex] === sliceItem,\n ),\n );\n}\n\nexport function arrayReplace<T>(\n array: T[],\n partToBeReplaced: T[],\n newPart: T[],\n): T[] {\n const newArray: T[] = [...array];\n const startIndex = arrayFindIndex(array, partToBeReplaced);\n\n if (startIndex !== -1) {\n newArray.splice(startIndex, partToBeReplaced.length, ...newPart);\n }\n\n return newArray;\n}\n\nexport function stripUndefined(segments: KeySegment[]) {\n return segments.filter((segment) => segment !== undefined);\n}\n\nclass BaseKeyBuilder {\n segments: KeySegment[] = [];\n\n constructor(segments: KeySegment[] = []) {\n this.segments = segments;\n }\n\n key() {\n return this.segments;\n }\n\n get() {\n return this.segments;\n }\n}\n\nclass ParamsKeyBuilder extends BaseKeyBuilder {\n params(paramsValue?: ParamsType) {\n return new BaseKeyBuilder([...this.segments, paramsValue]);\n }\n}\n\nclass DataIdRequiringKeyBuilder extends BaseKeyBuilder {\n id(idValue?: IdType) {\n return new ParamsKeyBuilder([\n ...this.segments,\n idValue ? String(idValue) : undefined,\n ]);\n }\n}\n\nclass DataIdsRequiringKeyBuilder extends BaseKeyBuilder {\n ids(...idsValue: IdsType) {\n return new ParamsKeyBuilder([\n ...this.segments,\n ...(idsValue.length ? [idsValue.map((el) => String(el))] : []),\n ]);\n }\n}\n\nclass DataResourceKeyBuilder extends BaseKeyBuilder {\n action(actionType: ParametrizedDataActions): ParamsKeyBuilder;\n action(actionType: IdRequiredDataActions): DataIdRequiringKeyBuilder;\n action(actionType: IdsRequiredDataActions): DataIdsRequiringKeyBuilder;\n action(\n actionType:\n | ParametrizedDataActions\n | IdRequiredDataActions\n | IdsRequiredDataActions,\n ): ParamsKeyBuilder | DataIdRequiringKeyBuilder | DataIdsRequiringKeyBuilder {\n if (actionType === \"one\") {\n return new DataIdRequiringKeyBuilder([...this.segments, actionType]);\n }\n if (actionType === \"many\") {\n return new DataIdsRequiringKeyBuilder([...this.segments, actionType]);\n }\n if ([\"list\", \"infinite\"].includes(actionType)) {\n return new ParamsKeyBuilder([...this.segments, actionType]);\n }\n throw new Error(\"Invalid action type\");\n }\n}\n\nclass DataKeyBuilder extends BaseKeyBuilder {\n resource(resourceName?: string) {\n return new DataResourceKeyBuilder([...this.segments, resourceName]);\n }\n\n mutation(mutationName: DataMutationActions) {\n return new ParamsKeyBuilder([\n ...(mutationName === \"custom\" ? this.segments : [this.segments[0]]),\n mutationName,\n ]);\n }\n}\n\nclass AuthKeyBuilder extends BaseKeyBuilder {\n action(actionType: AuthActionType) {\n return new ParamsKeyBuilder([...this.segments, actionType]);\n }\n}\n\nclass AccessResourceKeyBuilder extends BaseKeyBuilder {\n action(resourceName: string) {\n return new ParamsKeyBuilder([...this.segments, resourceName]);\n }\n}\n\nclass AccessKeyBuilder extends BaseKeyBuilder {\n resource(resourceName?: string) {\n return new AccessResourceKeyBuilder([...this.segments, resourceName]);\n }\n}\n\nclass AuditActionKeyBuilder extends BaseKeyBuilder {\n action(actionType: Extract<AuditActionType, \"list\">) {\n return new ParamsKeyBuilder([...this.segments, actionType]);\n }\n}\n\nclass AuditKeyBuilder extends BaseKeyBuilder {\n resource(resourceName?: string) {\n return new AuditActionKeyBuilder([...this.segments, resourceName]);\n }\n\n action(actionType: Extract<AuditActionType, \"rename\" | \"log\">) {\n return new ParamsKeyBuilder([...this.segments, actionType]);\n }\n}\n\nexport class KeyBuilder extends BaseKeyBuilder {\n data(name?: string) {\n return new DataKeyBuilder([\"data\", name || \"default\"]);\n }\n\n auth() {\n return new AuthKeyBuilder([\"auth\"]);\n }\n\n access() {\n return new AccessKeyBuilder([\"access\"]);\n }\n\n audit() {\n return new AuditKeyBuilder([\"audit\"]);\n }\n}\n\nexport const keys = () => new KeyBuilder([]);\n","const isNested = (obj: any) => typeof obj === \"object\" && obj !== null;\nconst isArray = (obj: any) => Array.isArray(obj);\n\nexport const flattenObjectKeys = (obj: any, prefix = \"\") => {\n if (!isNested(obj)) {\n return {\n [prefix]: obj,\n };\n }\n\n return Object.keys(obj).reduce(\n (acc, key) => {\n const currentPrefix = prefix.length ? `${prefix}.` : \"\";\n\n if (isNested(obj[key]) && Object.keys(obj[key]).length) {\n if (isArray(obj[key]) && obj[key].length) {\n obj[key].forEach((item: unknown[], index: number) => {\n Object.assign(\n acc,\n flattenObjectKeys(item, `${currentPrefix + key}.${index}`),\n );\n });\n } else {\n Object.assign(acc, flattenObjectKeys(obj[key], currentPrefix + key));\n }\n // Even if it's a nested object, it should be treated as a key as well\n acc[currentPrefix + key] = obj[key];\n } else {\n acc[currentPrefix + key] = obj[key];\n }\n return acc;\n },\n {} as Record<string, unknown>,\n );\n};\n","export const propertyPathToArray = (propertyPath: string) => {\n return propertyPath\n .split(\".\")\n .map((item) => (!Number.isNaN(Number(item)) ? Number(item) : item));\n};\n","export const downloadInBrowser = (\n filename: string,\n content: string,\n type?: string,\n) => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n const blob = new Blob([content], { type });\n\n const link = document.createElement(\"a\");\n link.setAttribute(\"visibility\", \"hidden\");\n link.download = filename;\n const blobUrl = URL.createObjectURL(blob);\n link.href = blobUrl;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n // As per documentation, call URL.revokeObjectURL to remove the blob from memory.\n setTimeout(() => {\n URL.revokeObjectURL(blobUrl);\n });\n};\n","/**\n * Delays the execution of a callback function asynchronously.\n * This utility function is used to defer the execution of the provided\n * callback, allowing the current call stack to clear before the callback\n * is invoked. It is particularly useful for ensuring non-blocking behavior\n * and providing a clear intent when a 0 ms timeout is used.\n */\nexport const deferExecution = (fn: Function) => {\n setTimeout(fn, 0);\n};\n","import debounce from \"lodash/debounce\";\n\ntype Callbacks<T extends (...args: any) => any> = {\n resolve?: (value: Awaited<ReturnType<T>>) => void;\n reject?: (reason?: any) => void;\n};\n\ntype DebouncedFunction<T extends (...args: any) => any> = {\n (...args: Parameters<T>): Promise<Awaited<ReturnType<T>>>;\n flush: () => void;\n cancel: () => void;\n};\n\n/**\n * Debounces sync and async functions with given wait time. The debounced function returns a promise which can be awaited or catched.\n * Only the last call of the debounced function will resolve or reject.\n * Previous calls will be rejected with the given cancelReason.\n *\n * The original debounce function doesn't work well with async functions,\n * It won't return a promise to resolve/reject and therefore it's not possible to await the result.\n * This will always return a promise to handle and await the result.\n * Previous calls will be rejected immediately after a new call made.\n */\nexport const asyncDebounce = <T extends (...args: any[]) => any>(\n func: T,\n wait = 1000,\n cancelReason?: string,\n): DebouncedFunction<T> => {\n let callbacks: Array<Callbacks<T>> = [];\n\n const cancelPrevious = () => {\n callbacks.forEach((cb) => cb.reject?.(cancelReason));\n callbacks = [];\n };\n\n const debouncedFunc = debounce((...args: Parameters<T>) => {\n const { resolve, reject } = callbacks.pop() || {};\n Promise.resolve(func(...args))\n .then(resolve)\n .catch(reject);\n }, wait);\n\n const runner = (...args: Parameters<T>) => {\n return new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n cancelPrevious();\n\n callbacks.push({\n resolve,\n reject,\n });\n\n debouncedFunc(...args);\n });\n };\n\n runner.flush = () => debouncedFunc.flush();\n runner.cancel = () => {\n debouncedFunc.cancel();\n cancelPrevious();\n };\n\n return runner;\n};\n","import type { QueryFunctionContext, QueryKey } from \"@tanstack/react-query\";\n\ntype Context =\n | QueryFunctionContext<QueryKey, any>\n | QueryFunctionContext<QueryKey, never>;\n\nexport const prepareQueryContext = (\n context: Context,\n): Pick<Context, \"queryKey\" | \"signal\"> => {\n const queryContext: Pick<Context, \"queryKey\" | \"signal\"> = {\n queryKey: context.queryKey,\n signal: undefined as any,\n };\n\n Object.defineProperty(queryContext, \"signal\", {\n enumerable: true,\n get: () => {\n return context.signal;\n },\n });\n\n return queryContext;\n};\n","export const file2Base64 = (file: any): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n const resultHandler = () => {\n if (reader.result) {\n reader.removeEventListener(\"load\", resultHandler, false);\n\n resolve(reader.result as string);\n }\n };\n\n reader.addEventListener(\"load\", resultHandler, false);\n\n reader.readAsDataURL(file.originFileObj as Blob);\n reader.onerror = (error) => {\n reader.removeEventListener(\"load\", resultHandler, false);\n return reject(error);\n };\n });\n};\n","import { keys } from \"@definitions/index\";\n\nexport const useKeys = () => {\n return {\n keys,\n };\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseQueryResult,\n type UseQueryOptions,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useKeys } from \"@hooks\";\nimport type { MakeOptional } from \"../../../definitions/types\";\n\nexport type UseGetIdentityProps<TData = any> = {\n queryOptions?: MakeOptional<UseQueryOptions<TData>, \"queryKey\" | \"queryFn\">;\n};\n\nexport type UseGetIdentityReturnType<TData> = UseQueryResult<TData>;\n\n/**\n * `useGetIdentity` calls `getIdentity` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useGetIdentity} for more details.\n *\n * @typeParam TData - Result data of the query\n *\n */\nexport function useGetIdentity<TData = any>({\n queryOptions,\n}: UseGetIdentityProps<TData> = {}): UseGetIdentityReturnType<TData> {\n const { getIdentity } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const queryResponse = useQuery<TData>({\n queryKey: keys().auth().action(\"identity\").get(),\n queryFn:\n (getIdentity as (params?: unknown) => Promise<TData>) ??\n (() => Promise.resolve({})),\n retry: false,\n enabled: !!getIdentity,\n ...queryOptions,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useGetIdentity\"),\n },\n });\n\n return queryResponse;\n}\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useKeys, useNotification } from \"@hooks\";\n\nimport type {\n AuthActionResponse,\n SuccessNotificationResponse,\n} from \"../../../contexts/auth/types\";\nimport type { RefineError } from \"../../../contexts/data/types\";\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\ntype Variables = {\n redirectPath?: string | false;\n};\n\nexport type UseLogoutProps<TVariables> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLogoutReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n>;\n\n/**\n * `useLogout` calls the `logout` method from the {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useLogout} for more details.\n *\n */\nexport function useLogout<TVariables = {}>({\n mutationOptions,\n}: UseLogoutProps<TVariables> = {}): UseLogoutReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const go = useGo();\n const { open, close } = useNotification();\n const { logout: logoutFromContext } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n (TVariables & Variables) | void,\n unknown\n >({\n mutationKey: keys().auth().action(\"logout\").get(),\n mutationFn: logoutFromContext,\n ...mutationOptions,\n onSuccess: (data, variables) => {\n const { success, error, redirectTo, successNotification } = data;\n const { redirectPath } = variables ?? {};\n\n const redirect = redirectPath ?? redirectTo;\n\n if (success) {\n close?.(\"useLogout-error\");\n\n if (successNotification) {\n open?.(buildSuccessNotification(successNotification));\n }\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirect !== false) {\n if (redirect) {\n go({ to: redirect });\n }\n }\n\n invalidateAuthStore();\n },\n onError: (error) => {\n open?.(buildNotification(error));\n },\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useLogout\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n key: \"useLogout-error\",\n type: \"error\",\n message: error?.name || \"Logout Error\",\n description: error?.message || \"Something went wrong during logout\",\n };\n};\n\nconst buildSuccessNotification = (\n successNotification: SuccessNotificationResponse,\n): OpenNotificationParams => {\n return {\n message: successNotification.message,\n description: successNotification.description,\n key: \"logout-success\",\n type: \"success\",\n };\n};\n","import { useKeys } from \"@hooks/useKeys\";\nimport { useQueryClient } from \"@tanstack/react-query\";\n\nexport const useInvalidateAuthStore = () => {\n const queryClient = useQueryClient();\n const { keys } = useKeys();\n\n const invalidate = async () => {\n await Promise.all(\n ([\"check\", \"identity\", \"permissions\"] as const).map((action) =>\n queryClient.invalidateQueries({\n queryKey: keys().auth().action(action).get(),\n }),\n ),\n );\n };\n\n return invalidate;\n};\n","import React from \"react\";\n\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useKeys, useNotification, useParsed } from \"@hooks\";\n\nimport type {\n AuthActionResponse,\n SuccessNotificationResponse,\n} from \"../../../contexts/auth/types\";\nimport type { RefineError } from \"../../../contexts/data/types\";\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\nexport type UseLoginProps<TVariables> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseLoginReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\n/**\n * `useLogin` calls `login` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useLogin} for more details.\n *\n * @typeParam TData - Result data of the query\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport function useLogin<TVariables = {}>({\n mutationOptions,\n}: UseLoginProps<TVariables> = {}): UseLoginReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const go = useGo();\n const parsed = useParsed();\n\n const { close, open } = useNotification();\n const { login: loginFromContext } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const to = parsed.params?.to;\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >({\n mutationKey: keys().auth().action(\"login\").get(),\n mutationFn: loginFromContext,\n onSuccess: async ({ success, redirectTo, error, successNotification }) => {\n if (success) {\n close?.(\"login-error\");\n\n if (successNotification) {\n open?.(buildSuccessNotification(successNotification));\n }\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (success) {\n if (to) {\n go({ to: to, type: \"replace\" });\n } else if (redirectTo) {\n go({ to: redirectTo, type: \"replace\" });\n }\n }\n\n setTimeout(() => {\n invalidateAuthStore();\n }, 32);\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useLogin\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Login Error\",\n description: error?.message || \"Invalid credentials\",\n key: \"login-error\",\n type: \"error\",\n };\n};\n\nconst buildSuccessNotification = (\n successNotification: SuccessNotificationResponse,\n): OpenNotificationParams => {\n return {\n message: successNotification.message,\n description: successNotification.description,\n key: \"login-success\",\n type: \"success\",\n };\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useKeys, useNavigation, useNotification } from \"@hooks\";\n\nimport type {\n AuthActionResponse,\n SuccessNotificationResponse,\n} from \"../../../contexts/auth/types\";\nimport type { RefineError } from \"../../../contexts/data/types\";\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\nimport { useInvalidateAuthStore } from \"../useInvalidateAuthStore\";\n\nexport type UseRegisterProps<TVariables> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseRegisterReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\n/**\n * `useRegister` calls `register` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useRegister} for more details.\n *\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport function useRegister<TVariables = {}>({\n mutationOptions,\n}: UseRegisterProps<TVariables> = {}): UseRegisterReturnType<TVariables> {\n const invalidateAuthStore = useInvalidateAuthStore();\n const go = useGo();\n const { close, open } = useNotification();\n const { register: registerFromContext } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >({\n mutationKey: keys().auth().action(\"register\").get(),\n mutationFn: registerFromContext,\n\n onSuccess: async ({ success, redirectTo, error, successNotification }) => {\n if (success) {\n close?.(\"register-error\");\n\n if (successNotification) {\n open?.(buildSuccessNotification(successNotification));\n }\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirectTo) {\n go({ to: redirectTo, type: \"replace\" });\n }\n\n if (success) {\n setTimeout(() => {\n invalidateAuthStore();\n }, 32);\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useRegister\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Register Error\",\n description: error?.message || \"Error while registering\",\n key: \"register-error\",\n type: \"error\",\n };\n};\n\nconst buildSuccessNotification = (\n successNotification: SuccessNotificationResponse,\n): OpenNotificationParams => {\n return {\n message: successNotification.message,\n description: successNotification.description,\n key: \"register-success\",\n type: \"success\",\n };\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useKeys, useNotification } from \"@hooks\";\n\nimport type {\n AuthActionResponse,\n SuccessNotificationResponse,\n TForgotPasswordData,\n} from \"../../../contexts/auth/types\";\nimport type { RefineError } from \"../../../contexts/data/types\";\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\n\nexport type UseForgotPasswordProps<TVariables> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse | TForgotPasswordData,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseForgotPasswordReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\n/**\n * `useForgotPassword` calls `forgotPassword` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useForgotPassword} for more details.\n *\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport function useForgotPassword<TVariables = {}>({\n mutationOptions,\n}: UseForgotPasswordProps<TVariables> = {}): UseForgotPasswordReturnType<TVariables> {\n const go = useGo();\n const { open, close } = useNotification();\n const { forgotPassword: forgotPasswordFromContext } =\n useAuthProviderContext();\n const { keys } = useKeys();\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >({\n mutationKey: keys().auth().action(\"forgotPassword\").get(),\n mutationFn: forgotPasswordFromContext,\n\n onSuccess: ({ success, redirectTo, error, successNotification }) => {\n if (success) {\n close?.(\"forgot-password-error\");\n\n if (successNotification) {\n open?.(buildSuccessNotification(successNotification));\n }\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirectTo) {\n go({ to: redirectTo, type: \"replace\" });\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useForgotPassword\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Forgot Password Error\",\n description: error?.message || \"Error while resetting password\",\n key: \"forgot-password-error\",\n type: \"error\",\n };\n};\n\nconst buildSuccessNotification = (\n successNotification: SuccessNotificationResponse,\n): OpenNotificationParams => {\n return {\n message: successNotification.message,\n description: successNotification.description,\n key: \"forgot-password-success\",\n type: \"success\",\n };\n};\n","import React from \"react\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useKeys, useNotification, useParsed } from \"@hooks\";\n\nimport type {\n AuthActionResponse,\n SuccessNotificationResponse,\n} from \"../../../contexts/auth/types\";\nimport type { RefineError } from \"../../../contexts/data/types\";\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\n\nexport type UseUpdatePasswordProps<TVariables> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >,\n \"mutationFn\"\n >;\n};\n\nexport type UseUpdatePasswordReturnType<TVariables> = UseMutationResult<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n>;\n\n/**\n * `useUpdatePassword` calls `updatePassword` method from {@link https://refine.dev/docs/api-reference/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useUpdatePassword} for more details.\n *\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport function useUpdatePassword<TVariables = {}>({\n mutationOptions,\n}: UseUpdatePasswordProps<TVariables> = {}): UseUpdatePasswordReturnType<TVariables> {\n const go = useGo();\n const { updatePassword: updatePasswordFromContext } =\n useAuthProviderContext();\n const { close, open } = useNotification();\n const { keys } = useKeys();\n const parsed = useParsed();\n const params = parsed.params ?? {};\n\n const mutation = useMutation<\n AuthActionResponse,\n Error | RefineError,\n TVariables,\n unknown\n >({\n mutationKey: keys().auth().action(\"updatePassword\").get(),\n mutationFn: async (variables) => {\n return updatePasswordFromContext?.({\n ...params,\n ...variables,\n }) as Promise<AuthActionResponse>;\n },\n onSuccess: ({ success, redirectTo, error, successNotification }) => {\n if (success) {\n close?.(\"update-password-error\");\n\n if (successNotification) {\n open?.(buildSuccessNotification(successNotification));\n }\n }\n\n if (error || !success) {\n open?.(buildNotification(error));\n }\n\n if (redirectTo) {\n go({ to: redirectTo, type: \"replace\" });\n }\n },\n onError: (error: any) => {\n open?.(buildNotification(error));\n },\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useUpdatePassword\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n\nconst buildNotification = (\n error?: Error | RefineError,\n): OpenNotificationParams => {\n return {\n message: error?.name || \"Update Password Error\",\n description: error?.message || \"Error while updating password\",\n key: \"update-password-error\",\n type: \"error\",\n };\n};\n\nconst buildSuccessNotification = (\n successNotification: SuccessNotificationResponse,\n): OpenNotificationParams => {\n return {\n message: successNotification.message,\n description: successNotification.description,\n key: \"update-password-success\",\n type: \"success\",\n };\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseQueryOptions,\n type UseQueryResult,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useKeys } from \"@hooks\";\n\nimport type { CheckResponse } from \"../../../contexts/auth/types\";\n\nexport type UseIsAuthenticatedProps = {\n // Make queryKey and queryFn optional\n queryOptions?: Omit<UseQueryOptions<CheckResponse>, \"queryKey\" | \"queryFn\">;\n params?: any;\n};\n\nexport type UseIsAuthenticatedReturnType = UseQueryResult<CheckResponse, any>;\n\n/**\n * `useIsAuthenticated` calls `check` method from {@link https://refine.dev/docs/authentication/auth-provider/#check `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useIsAuthenticated} for more details.\n *\n */\nexport function useIsAuthenticated({\n queryOptions,\n params,\n}: UseIsAuthenticatedProps = {}): UseIsAuthenticatedReturnType {\n const { check } = useAuthProviderContext();\n const { keys } = useKeys();\n\n const queryResponse = useQuery<CheckResponse>({\n queryKey: keys().auth().action(\"check\").get(),\n queryFn: async () => (await check?.(params)) ?? { authenticated: true },\n retry: false,\n ...queryOptions,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useIsAuthenticated\"),\n },\n });\n\n return queryResponse;\n}\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport { type UseMutationResult, useMutation } from \"@tanstack/react-query\";\n\nimport { useAuthProviderContext } from \"@contexts/auth\";\nimport { useGo, useLogout } from \"@hooks\";\nimport { useKeys } from \"@hooks/useKeys\";\n\nimport type { OnErrorResponse } from \"../../../contexts/auth/types\";\n\nexport type UseOnErrorReturnType = UseMutationResult<\n OnErrorResponse,\n unknown,\n unknown,\n unknown\n>;\n\n/**\n * `useOnError` calls the `checkError` method from the {@link https://refine.dev/docs/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/auth/useCheckError} for more details.\n *\n */\nexport function useOnError(): UseOnErrorReturnType {\n const go = useGo();\n\n const { onError: onErrorFromContext } = useAuthProviderContext();\n\n const { keys } = useKeys();\n\n const { mutate: logout } = useLogout();\n\n const mutation = useMutation<OnErrorResponse, unknown, unknown, unknown>({\n mutationKey: keys().auth().action(\"onError\").get(),\n ...(onErrorFromContext\n ? {\n mutationFn: onErrorFromContext,\n onSuccess: ({ logout: shouldLogout, redirectTo }) => {\n if (shouldLogout) {\n logout({ redirectPath: redirectTo });\n return;\n }\n\n if (redirectTo) {\n go({ to: redirectTo, type: \"replace\" });\n return;\n }\n },\n }\n : {\n mutationFn: () => ({}) as Promise<OnErrorResponse>,\n }),\n meta: {\n ...getXRay(\"useOnError\"),\n },\n });\n\n return {\n ...mutation,\n };\n}\n","import { useAuthProviderContext } from \"@contexts/auth\";\n\n/**\n * A hook that the UI uses\n * @internal\n */\nexport const useIsExistAuthentication = (): boolean => {\n const { isProvided } = useAuthProviderContext();\n\n return Boolean(isProvided);\n};\n","import { useEffect } from \"react\";\n\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type QueryObserverResult,\n type UseQueryOptions,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport {\n handlePaginationParams,\n pickDataProvider,\n prepareQueryContext,\n} from \"@definitions/helpers\";\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useResourceParams,\n useResourceSubscription,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CrudFilter,\n CrudSort,\n GetListResponse,\n HttpError,\n MetaQuery,\n Pagination,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\nimport type { MakeOptional } from \"../../definitions/types/index\";\n\nexport type BaseListProps = {\n /**\n * Pagination properties\n */\n pagination?: Pagination;\n /**\n * Sorter parameters\n */\n sorters?: CrudSort[];\n /**\n * Filter parameters\n */\n filters?: CrudFilter[];\n /**\n * Meta data query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use\n */\n dataProviderName?: string;\n};\n\nexport type UseListQueryOptions<TQueryFnData, TError, TData> = MakeOptional<\n UseQueryOptions<\n GetListResponse<TQueryFnData>,\n TError,\n GetListResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n>;\n\nexport type UseListProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n\n /**\n * Tanstack Query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options\n */\n queryOptions?: UseListQueryOptions<TQueryFnData, TError, TData>;\n} & BaseListProps &\n SuccessErrorNotification<\n GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n > &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps;\n\nexport type UseListReturnType<TData, TError> = {\n query: QueryObserverResult<GetListResponse<TData>, TError>;\n result: {\n data: TData[];\n total: number | undefined;\n };\n} & UseLoadingOvertimeReturnType;\n\nconst EMPTY_ARRAY = Object.freeze([]) as [];\n\n/**\n * `useList` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/guides/queries `useQuery`} used for retrieving items from a `resource` with pagination, sort, and filter configurations.\n *\n * It uses the `getList` method as the query function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useList} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport const useList = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n resource: resourceFromProp,\n filters,\n pagination,\n sorters,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\n liveMode,\n onLiveEvent,\n liveParams,\n dataProviderName,\n overtimeOptions,\n}: UseListProps<TQueryFnData, TError, TData> = {}): UseListReturnType<\n TData,\n TError\n> &\n UseLoadingOvertimeReturnType => {\n const { resources, resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const pickedDataProvider = pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n );\n const preferredMeta = meta;\n const prefferedFilters = filters;\n const prefferedSorters = sorters;\n const prefferedPagination = handlePaginationParams({\n pagination,\n });\n const isServerPagination = prefferedPagination.mode === \"server\";\n\n const combinedMeta = getMeta({ resource, meta: preferredMeta });\n\n const notificationValues = {\n meta: combinedMeta,\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n pagination: prefferedPagination,\n sorters: prefferedSorters,\n };\n\n const isEnabled =\n queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n const { getList } = dataProvider(pickedDataProvider);\n\n useResourceSubscription({\n resource: identifier,\n types: [\"*\"],\n params: {\n meta: combinedMeta,\n pagination: prefferedPagination,\n hasPagination: isServerPagination,\n sorters: prefferedSorters,\n filters: prefferedFilters,\n subscriptionType: \"useList\",\n ...liveParams,\n },\n channel: `resources/${resource?.name}`,\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n meta: {\n ...meta,\n dataProviderName: pickedDataProvider,\n },\n });\n\n const queryResponse = useQuery<\n GetListResponse<TQueryFnData>,\n TError,\n GetListResponse<TData>\n >({\n queryKey: keys()\n .data(pickedDataProvider)\n .resource(identifier ?? \"\")\n .action(\"list\")\n .params({\n ...(preferredMeta || {}),\n filters: prefferedFilters,\n ...(isServerPagination && {\n pagination: prefferedPagination,\n }),\n ...(sorters && {\n sorters,\n }),\n })\n .get(),\n queryFn: (context) => {\n const meta = {\n ...combinedMeta,\n ...prepareQueryContext(context),\n };\n return getList<TQueryFnData>({\n resource: resource?.name ?? \"\",\n pagination: prefferedPagination,\n filters: prefferedFilters,\n sorters: prefferedSorters,\n meta,\n });\n },\n ...queryOptions,\n enabled:\n typeof queryOptions?.enabled !== \"undefined\"\n ? queryOptions?.enabled\n : !!resource?.name,\n select: (rawData) => {\n let data = rawData;\n\n const { currentPage, mode, pageSize } = prefferedPagination;\n\n if (mode === \"client\") {\n data = {\n ...data,\n data: data.data.slice(\n (currentPage - 1) * pageSize,\n currentPage * pageSize,\n ),\n total: data.total,\n };\n }\n\n if (queryOptions?.select) {\n return queryOptions?.select?.(data);\n }\n\n return data as unknown as GetListResponse<TData>;\n },\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useList\", resource?.name),\n },\n });\n\n // Handle success\n useEffect(() => {\n if (queryResponse.isSuccess && queryResponse.data) {\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(\n queryResponse.data,\n notificationValues,\n identifier,\n )\n : successNotification;\n\n handleNotification(notificationConfig);\n }\n }, [queryResponse.isSuccess, queryResponse.data, successNotification]);\n\n // Handle error\n useEffect(() => {\n if (queryResponse.isError && queryResponse.error) {\n checkError(queryResponse.error);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(\n queryResponse.error,\n notificationValues,\n identifier,\n )\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${identifier}-useList-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: queryResponse.error.statusCode },\n `Error (status code: ${queryResponse.error.statusCode})`,\n ),\n description: queryResponse.error.message,\n type: \"error\",\n });\n }\n }, [queryResponse.isError, queryResponse.error?.message]);\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: queryResponse.isFetching,\n });\n\n return {\n query: queryResponse,\n result: {\n data: queryResponse?.data?.data || EMPTY_ARRAY,\n total: queryResponse?.data?.total,\n },\n overtime: { elapsedTime },\n };\n};\n","import { useEffect, useState } from \"react\";\nimport { useRefineContext } from \"..\";\n\nexport type UseLoadingOvertimeRefineContext = Omit<\n UseLoadingOvertimeCoreProps,\n \"isLoading\" | \"interval\"\n> &\n Required<Pick<UseLoadingOvertimeCoreProps, \"interval\">>;\n\nexport type UseLoadingOvertimeOptionsProps = {\n overtimeOptions?: UseLoadingOvertimeCoreOptions;\n};\n\nexport type UseLoadingOvertimeReturnType = {\n overtime: {\n elapsedTime?: number;\n };\n};\n\ntype UseLoadingOvertimeCoreOptions = Omit<\n UseLoadingOvertimeCoreProps,\n \"isLoading\"\n>;\n\ntype UseLoadingOvertimeCoreReturnType = {\n elapsedTime?: number;\n};\n\nexport type UseLoadingOvertimeCoreProps = {\n /**\n * If true, the elapsed time will be calculated. If set to false; the elapsed time will be `undefined`.\n *\n * @default: true\n */\n enabled?: boolean;\n\n /**\n * The loading state. If true, the elapsed time will be calculated.\n */\n isLoading: boolean;\n\n /**\n * The interval in milliseconds. If the loading time exceeds this time, the `onInterval` callback will be called.\n * If not specified, the `interval` value from the `overtime` option of the `RefineProvider` will be used.\n *\n * @default: 1000 (1 second)\n */\n interval?: number;\n\n /**\n * The callback function that will be called when the loading time exceeds the specified time.\n * If not specified, the `onInterval` value from the `overtime` option of the `RefineProvider` will be used.\n *\n * @param elapsedInterval The elapsed time in milliseconds.\n */\n onInterval?: (elapsedInterval: number) => void;\n};\n\n/**\n * if you need to do something when the loading time exceeds the specified time, refine provides the `useLoadingOvertime` hook.\n * It returns the elapsed time in milliseconds.\n *\n * @example\n * const { elapsedTime } = useLoadingOvertime({\n * isLoading,\n * interval: 1000,\n * onInterval(elapsedInterval) {\n * console.log(\"loading overtime\", elapsedInterval);\n * },\n * });\n */\nexport const useLoadingOvertime = ({\n enabled: enabledProp,\n isLoading,\n interval: intervalProp,\n onInterval: onIntervalProp,\n}: UseLoadingOvertimeCoreProps): UseLoadingOvertimeCoreReturnType => {\n const [elapsedTime, setElapsedTime] = useState<number | undefined>(undefined);\n // get overtime options from refine context\n const { options } = useRefineContext();\n const { overtime } = options;\n\n // pick props or refine context options\n const interval = intervalProp ?? overtime.interval;\n const onInterval = onIntervalProp ?? overtime?.onInterval;\n const enabled =\n typeof enabledProp !== \"undefined\"\n ? enabledProp\n : typeof overtime.enabled !== \"undefined\"\n ? overtime.enabled\n : true;\n\n useEffect(() => {\n let intervalFn: ReturnType<typeof setInterval>;\n\n if (enabled && isLoading) {\n intervalFn = setInterval(() => {\n // increase elapsed time\n setElapsedTime((prevElapsedTime) => {\n if (prevElapsedTime === undefined) {\n return interval;\n }\n\n return prevElapsedTime + interval;\n });\n }, interval);\n }\n\n return () => {\n if (typeof intervalFn !== \"undefined\") {\n clearInterval(intervalFn);\n }\n // reset elapsed time\n setElapsedTime(undefined);\n };\n }, [isLoading, interval, enabled]);\n\n useEffect(() => {\n // call onInterval callback\n if (onInterval && elapsedTime) {\n onInterval(elapsedTime);\n }\n }, [elapsedTime]);\n\n return {\n elapsedTime,\n };\n};\n","import { useEffect } from \"react\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type QueryObserverResult,\n type UseQueryOptions,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { pickDataProvider, prepareQueryContext } from \"@definitions\";\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useResourceParams,\n useResourceSubscription,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n GetOneResponse,\n HttpError,\n MetaQuery,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type UseOneProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * id of the item in the resource\n * @type [`BaseKey`](/docs/api-reference/core/interfaceReferences/#basekey)\n */\n id?: BaseKey;\n /**\n * react-query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options\n */\n queryOptions?: Omit<\n UseQueryOptions<\n GetOneResponse<TQueryFnData>,\n TError,\n GetOneResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n > & {\n // Make queryKey and queryFn optional\n queryKey?: UseQueryOptions<\n GetOneResponse<TQueryFnData>,\n TError,\n GetOneResponse<TData>\n >[\"queryKey\"];\n queryFn?: UseQueryOptions<\n GetOneResponse<TQueryFnData>,\n TError,\n GetOneResponse<TData>\n >[\"queryFn\"];\n };\n /**\n * Metadata query for `dataProvider`,\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default `\"default\"``\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n GetOneResponse<TData>,\n TError,\n Prettify<{ id?: BaseKey } & MetaQuery>\n> &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps;\n\nexport type UseOneReturnType<TData, TError> = {\n query: QueryObserverResult<GetOneResponse<TData>, TError>;\n result: TData | undefined;\n} & UseLoadingOvertimeReturnType;\n\n/**\n * `useOne` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/guides/queries `useQuery`} used for retrieving single items from a `resource`.\n *\n * It uses `getOne` method as query function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useOne} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport const useOne = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n resource: resourceFromProp,\n id,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\n liveMode,\n onLiveEvent,\n liveParams,\n dataProviderName,\n overtimeOptions,\n}: UseOneProps<TQueryFnData, TError, TData>): UseOneReturnType<TData, TError> &\n UseLoadingOvertimeReturnType => {\n const { resources, resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const preferredMeta = meta;\n const pickedDataProvider = pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n );\n\n const { getOne } = dataProvider(pickedDataProvider);\n\n const combinedMeta = getMeta({ resource, meta: preferredMeta });\n\n const isEnabled =\n typeof queryOptions?.enabled !== \"undefined\"\n ? queryOptions?.enabled === true\n : typeof resource?.name !== \"undefined\" && typeof id !== \"undefined\";\n\n useResourceSubscription({\n resource: identifier,\n types: [\"*\"],\n channel: `resources/${resource?.name}`,\n params: {\n ids: id ? [id] : [],\n id: id,\n meta: combinedMeta,\n subscriptionType: \"useOne\",\n ...liveParams,\n },\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n meta: {\n ...meta,\n dataProviderName: pickedDataProvider,\n },\n });\n\n const queryResponse = useQuery<\n GetOneResponse<TQueryFnData>,\n TError,\n GetOneResponse<TData>\n >({\n queryKey: keys()\n .data(pickedDataProvider)\n .resource(identifier ?? \"\")\n .action(\"one\")\n .id(id ?? \"\")\n .params({\n ...(preferredMeta || {}),\n })\n .get(),\n queryFn: (context) =>\n getOne<TQueryFnData>({\n resource: resource?.name ?? \"\",\n id: id!,\n meta: {\n ...combinedMeta,\n ...prepareQueryContext(context as any),\n },\n }),\n ...queryOptions,\n enabled: isEnabled,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useOne\", resource?.name),\n },\n });\n\n // Handle success\n useEffect(() => {\n if (queryResponse.isSuccess && queryResponse.data) {\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(\n queryResponse.data,\n {\n id,\n ...combinedMeta,\n },\n identifier,\n )\n : successNotification;\n\n handleNotification(notificationConfig);\n }\n }, [queryResponse.isSuccess, queryResponse.data, successNotification]);\n\n // Handle error\n useEffect(() => {\n if (queryResponse.isError && queryResponse.error) {\n checkError(queryResponse.error);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(\n queryResponse.error,\n {\n id,\n ...combinedMeta,\n },\n identifier,\n )\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${id}-${identifier}-getOne-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: queryResponse.error.statusCode },\n `Error (status code: ${queryResponse.error.statusCode})`,\n ),\n description: queryResponse.error.message,\n type: \"error\",\n });\n }\n }, [queryResponse.isError, queryResponse.error?.message]);\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: queryResponse.isFetching,\n });\n\n return {\n query: queryResponse,\n result: queryResponse.data?.data,\n overtime: { elapsedTime },\n };\n};\n","import { useEffect } from \"react\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type QueryObserverResult,\n type UseQueryOptions,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport {\n handleMultiple,\n pickDataProvider,\n prepareQueryContext,\n} from \"@definitions/helpers\";\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useResourceParams,\n useResourceSubscription,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n GetManyResponse,\n HttpError,\n MetaQuery,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\nimport warnOnce from \"warn-once\";\nimport type { MakeOptional } from \"../../definitions/types\";\n\nexport type UseManyQueryOptions<TQueryFnData, TError, TData> = MakeOptional<\n UseQueryOptions<\n GetManyResponse<TQueryFnData>,\n TError,\n GetManyResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n>;\n\nexport type UseManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n> = {\n query: QueryObserverResult<GetManyResponse<TData>, TError>;\n result: {\n data: TData[];\n };\n} & UseLoadingOvertimeReturnType;\n\nexport type UseManyProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * ids of the item in the resource\n * @type [`BaseKey[]`](/docs/api-reference/core/interfaceReferences/#basekey)\n */\n ids: BaseKey[];\n /**\n * react-query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options\n */\n queryOptions?: UseManyQueryOptions<TQueryFnData, TError, TData>;\n /**\n * Meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<GetManyResponse<TData>, TError, BaseKey[]> &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps;\n\nconst EMPTY_ARRAY = Object.freeze([]) as [];\n\n/**\n * `useMany` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/guides/queries `useQuery`} used for retrieving multiple items from a `resource`.\n *\n * It uses `getMany` method as query function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useMany} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport const useMany = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n resource: resourceFromProp,\n ids,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\n liveMode,\n onLiveEvent,\n liveParams,\n dataProviderName,\n overtimeOptions,\n}: UseManyProps<TQueryFnData, TError, TData>): UseManyReturnType<\n TData,\n TError\n> &\n UseLoadingOvertimeReturnType => {\n const { resources, resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const preferredMeta = meta;\n const pickedDataProvider = pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n );\n const isEnabled =\n queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n const { getMany, getOne } = dataProvider(pickedDataProvider);\n\n const combinedMeta = getMeta({ resource, meta: preferredMeta });\n\n const hasIds = Array.isArray(ids);\n const hasResource = Boolean(resource?.name);\n const manuallyEnabled = queryOptions?.enabled === true;\n\n warnOnce(\n !hasIds && !manuallyEnabled,\n idsWarningMessage(ids, resource?.name || resource?.identifier || \"\"),\n );\n warnOnce(!hasResource && !manuallyEnabled, resourceWarningMessage());\n\n useResourceSubscription({\n resource: identifier,\n types: [\"*\"],\n params: {\n ids: ids ?? [],\n meta: combinedMeta,\n subscriptionType: \"useMany\",\n ...liveParams,\n },\n channel: `resources/${resource?.name ?? \"\"}`,\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n meta: {\n ...meta,\n dataProviderName: pickedDataProvider,\n },\n });\n\n const queryResponse = useQuery<\n GetManyResponse<TQueryFnData>,\n TError,\n GetManyResponse<TData>\n >({\n queryKey: keys()\n .data(pickedDataProvider)\n .resource(identifier)\n .action(\"many\")\n .ids(...(ids ?? []))\n .params({\n ...(preferredMeta || {}),\n })\n .get(),\n queryFn: (context) => {\n const meta = {\n ...combinedMeta,\n ...prepareQueryContext(context as any),\n };\n\n if (getMany) {\n return getMany({\n resource: resource?.name || \"\",\n ids,\n meta,\n });\n }\n return handleMultiple(\n ids.map((id) =>\n getOne<TQueryFnData>({\n resource: resource?.name || \"\",\n id,\n meta,\n }),\n ),\n );\n },\n enabled: hasIds && hasResource,\n ...queryOptions,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useMany\", resource?.name),\n },\n });\n\n // Handle success\n useEffect(() => {\n if (queryResponse.isSuccess && queryResponse.data) {\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(queryResponse.data, ids, identifier)\n : successNotification;\n\n handleNotification(notificationConfig);\n }\n }, [queryResponse.isSuccess, queryResponse.data, successNotification]);\n\n // Handle error\n useEffect(() => {\n if (queryResponse.isError && queryResponse.error) {\n checkError(queryResponse.error);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(queryResponse.error, ids, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${ids[0]}-${identifier}-getMany-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: queryResponse.error.statusCode },\n `Error (status code: ${queryResponse.error.statusCode})`,\n ),\n description: queryResponse.error.message,\n type: \"error\",\n });\n }\n }, [queryResponse.isError, queryResponse.error?.message]);\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: queryResponse.isFetching,\n });\n\n return {\n query: queryResponse,\n result: {\n data: queryResponse?.data?.data || EMPTY_ARRAY,\n },\n overtime: { elapsedTime },\n };\n};\n\nconst idsWarningMessage = (\n ids: BaseKey[],\n resource: string,\n) => `[useMany]: Missing \"ids\" prop. Expected an array of ids, but got \"${typeof ids}\". Resource: \"${resource}\"\n\nSee https://refine.dev/docs/data/hooks/use-many/#ids-`;\n\nconst resourceWarningMessage = () => `[useMany]: Missing \"resource\" prop. Expected a string, but got undefined.\n\nSee https://refine.dev/docs/data/hooks/use-many/#resource-`;\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type MutateOptions,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { pickDataProvider } from \"@definitions/helpers\";\nimport {\n useCancelNotification,\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n useMutationMode,\n useOnError,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n GetListResponse,\n GetManyResponse,\n GetOneResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n MutationMode,\n PrevContext as UpdateContext,\n PreviousQuery,\n UpdateResponse,\n} from \"../../contexts/data/types\";\nimport type { UseMutationResult } from \"../../definitions/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport { ActionTypes } from \"../../contexts/undoableQueue/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type OptimisticUpdateMapType<TData, TVariables> = {\n list?:\n | ((\n previous: GetListResponse<TData> | null | undefined,\n values: TVariables,\n id: BaseKey,\n ) => GetListResponse<TData> | null)\n | boolean;\n many?:\n | ((\n previous: GetManyResponse<TData> | null | undefined,\n values: TVariables,\n id: BaseKey,\n ) => GetManyResponse<TData> | null)\n | boolean;\n detail?:\n | ((\n previous: GetOneResponse<TData> | null | undefined,\n values: TVariables,\n id: BaseKey,\n ) => GetOneResponse<TData> | null)\n | boolean;\n};\n\nexport type UpdateParams<TData, TError, TVariables> = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * id for mutation function\n */\n id?: BaseKey;\n /**\n * [Determines when mutations are executed](/docs/advanced-tutorials/mutation-mode/)\n */\n mutationMode?: MutationMode;\n /**\n * Duration in ms to wait before executing the mutation when `mutationMode = \"undoable\"`\n */\n undoableTimeout?: number;\n /**\n * Provides a function to cancel the mutation when `mutationMode = \"undoable\"`\n */\n onCancel?: (cancelMutation: () => void) => void;\n /**\n * Values for mutation function\n */\n values?: TVariables;\n /**\n * Metadata query for dataProvider\n */\n meta?: MetaQuery;\n /**\n * Metadata query for dataProvider\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n /**\n * You can use it to customize the optimistic update logic.\n * @default {\n * list: true,\n * many: true,\n * detail: true,\n * }\n */\n optimisticUpdateMap?: OptimisticUpdateMapType<TData, TVariables>;\n} & SuccessErrorNotification<\n UpdateResponse<TData>,\n TError,\n { id: BaseKey; values: TVariables }\n>;\n\nexport type UseUpdateReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n> &\n UseLoadingOvertimeReturnType;\n\nexport type UseUpdateProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n \"mutationFn\" | \"onMutate\"\n >;\n} & UseLoadingOvertimeOptionsProps &\n UpdateParams<TData, TError, TVariables>;\n\n/**\n * `useUpdate` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for update mutations.\n *\n * It uses `update` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useUpdate} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences/#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\nexport const useUpdate = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n id: idFromProps,\n resource: resourceFromProps,\n values: valuesFromProps,\n dataProviderName: dataProviderNameFromProps,\n successNotification: successNotificationFromProps,\n errorNotification: errorNotificationFromProps,\n meta: metaFromProps,\n mutationMode: mutationModeFromProps,\n undoableTimeout: undoableTimeoutFromProps,\n onCancel: onCancelFromProps,\n optimisticUpdateMap: optimisticUpdateMapFromProps,\n invalidates: invalidatesFromProps,\n mutationOptions,\n overtimeOptions,\n}: UseUpdateProps<TData, TError, TVariables> = {}): UseUpdateReturnType<\n TData,\n TError,\n TVariables\n> => {\n const { resources, select } = useResourceParams({\n resource: resourceFromProps,\n });\n const queryClient = useQueryClient();\n const dataProvider = useDataProvider();\n\n const {\n mutationMode: mutationModeContext,\n undoableTimeout: undoableTimeoutContext,\n } = useMutationMode();\n const { mutate: checkError } = useOnError();\n const translate = useTranslate();\n const publish = usePublish();\n const { log } = useLog();\n const { notificationDispatch } = useCancelNotification();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutationResult = useMutation<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >({\n mutationFn: ({\n id = idFromProps,\n values = valuesFromProps,\n resource: resourceName = resourceFromProps,\n mutationMode = mutationModeFromProps,\n undoableTimeout = undoableTimeoutFromProps,\n onCancel = onCancelFromProps,\n meta = metaFromProps,\n dataProviderName = dataProviderNameFromProps,\n }) => {\n if (typeof id === \"undefined\") throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n const undoableTimeoutPropOrContext =\n undoableTimeout ?? undoableTimeoutContext;\n\n if (!(mutationModePropOrContext === \"undoable\")) {\n return dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n ).update<TData, TVariables>({\n resource: resource.name,\n id,\n variables: values,\n meta: combinedMeta,\n });\n }\n const updatePromise = new Promise<UpdateResponse<TData>>(\n (resolve, reject) => {\n const doMutation = () => {\n dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n )\n .update<TData, TVariables>({\n resource: resource.name,\n id,\n variables: values,\n meta: combinedMeta,\n })\n .then((result) => resolve(result))\n .catch((err) => reject(err));\n };\n\n const cancelMutation = () => {\n reject({ message: \"mutationCancelled\" });\n };\n\n if (onCancel) {\n onCancel(cancelMutation);\n }\n\n notificationDispatch({\n type: ActionTypes.ADD,\n payload: {\n id: id,\n resource: identifier,\n cancelMutation: cancelMutation,\n doMutation: doMutation,\n seconds: undoableTimeoutPropOrContext,\n isSilent: !!onCancel,\n },\n });\n },\n );\n return updatePromise;\n },\n onMutate: async ({\n resource: resourceName = resourceFromProps,\n id = idFromProps,\n mutationMode = mutationModeFromProps,\n values = valuesFromProps,\n dataProviderName = dataProviderNameFromProps,\n meta = metaFromProps,\n optimisticUpdateMap = optimisticUpdateMapFromProps ?? {\n list: true,\n many: true,\n detail: true,\n },\n }) => {\n if (typeof id === \"undefined\") throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n const { gqlMutation: _, gqlQuery: __, ...preferredMeta } = meta ?? {};\n\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const previousQueries: PreviousQuery<TData>[] =\n queryClient.getQueriesData({\n queryKey: resourceKeys.get(),\n });\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n await queryClient.cancelQueries({\n queryKey: resourceKeys.get(),\n });\n\n if (mutationModePropOrContext !== \"pessimistic\") {\n if (optimisticUpdateMap.list) {\n // Set the previous queries to the new ones:\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"list\")\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.list === \"function\") {\n return optimisticUpdateMap.list(previous, values, id);\n }\n\n if (!previous) {\n return null;\n }\n\n const data = previous.data.map((record: TData) => {\n if (record.id?.toString() === id?.toString()) {\n return {\n id,\n ...record,\n ...values,\n } as unknown as TData;\n }\n return record;\n });\n\n return {\n ...previous,\n data,\n };\n },\n );\n }\n\n if (optimisticUpdateMap.many) {\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys.action(\"many\").get(),\n },\n (previous?: GetManyResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.many === \"function\") {\n return optimisticUpdateMap.many(previous, values, id);\n }\n\n if (!previous) {\n return null;\n }\n\n const data = previous.data.map((record: TData) => {\n if (record.id?.toString() === id?.toString()) {\n record = {\n id,\n ...record,\n ...values,\n } as unknown as TData;\n }\n return record;\n });\n return {\n ...previous,\n data,\n };\n },\n );\n }\n\n if (optimisticUpdateMap.detail) {\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"one\")\n .id(id)\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetOneResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.detail === \"function\") {\n return optimisticUpdateMap.detail(previous, values, id);\n }\n\n if (!previous) {\n return null;\n }\n\n return {\n ...previous,\n data: {\n ...previous.data,\n ...values,\n },\n };\n },\n );\n }\n }\n\n return {\n previousQueries,\n };\n },\n onSettled: (data, error, variables, context) => {\n const {\n id = idFromProps,\n resource: resourceName = resourceFromProps,\n dataProviderName = dataProviderNameFromProps,\n invalidates = invalidatesFromProps ?? [\"list\", \"many\", \"detail\"],\n } = variables;\n if (typeof id === \"undefined\") throw missingIdError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n invalidateStore({\n resource: identifier,\n dataProviderName: pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n ),\n invalidates,\n id,\n });\n\n notificationDispatch({\n type: ActionTypes.REMOVE,\n payload: { id, resource: identifier },\n });\n\n mutationOptions?.onSettled?.(data, error, variables, context);\n },\n onSuccess: (data, variables, context) => {\n const {\n id = idFromProps,\n resource: resourceName = resourceFromProps,\n successNotification = successNotificationFromProps,\n dataProviderName: dataProviderNameFromProp = dataProviderNameFromProps,\n values = valuesFromProps,\n meta = metaFromProps,\n } = variables;\n if (typeof id === \"undefined\") throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n const resourceSingular = textTransformers.singular(identifier);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(data, { id, values }, identifier)\n : successNotification;\n\n handleNotification(notificationConfig, {\n key: `${id}-${identifier}-notification`,\n description: translate(\"notifications.success\", \"Successful\"),\n message: translate(\n \"notifications.editSuccess\",\n {\n resource: translate(\n `${identifier}.${identifier}`,\n resourceSingular,\n ),\n },\n `Successfully updated ${resourceSingular}`,\n ),\n type: \"success\",\n });\n\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"updated\",\n payload: {\n ids: data.data?.id ? [data.data.id] : undefined,\n },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n let previousData: any;\n if (context) {\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const queryData = queryClient.getQueryData<UpdateResponse<TData>>(\n resourceKeys.action(\"one\").id(id).get(),\n );\n\n previousData = Object.keys(values || {}).reduce<any>((acc, item) => {\n acc[item] = queryData?.data?.[item];\n return acc;\n }, {});\n }\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"update\",\n resource: resource.name,\n data: values,\n previousData,\n meta: {\n ...rest,\n dataProviderName,\n id,\n },\n });\n\n mutationOptions?.onSuccess?.(data, variables, context);\n },\n onError: (err: TError, variables, context) => {\n const {\n id = idFromProps,\n resource: resourceName = resourceFromProps,\n errorNotification = errorNotificationFromProps,\n values = valuesFromProps,\n } = variables;\n if (typeof id === \"undefined\") throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n // set back the queries to the context:\n if (context?.previousQueries) {\n for (const query of context.previousQueries) {\n queryClient.setQueryData(query[0], query[1]);\n }\n }\n\n if (err.message !== \"mutationCancelled\") {\n checkError?.(err);\n\n const resourceSingular = textTransformers.singular(identifier);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(err, { id, values }, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${id}-${identifier}-notification`,\n message: translate(\n \"notifications.editError\",\n {\n resource: translate(\n `${identifier}.${identifier}`,\n resourceSingular,\n ),\n statusCode: err.statusCode,\n },\n `Error when updating ${resourceSingular} (status code: ${err.statusCode})`,\n ),\n description: err.message,\n type: \"error\",\n });\n }\n\n mutationOptions?.onError?.(err, variables, context);\n },\n mutationKey: keys().data().mutation(\"update\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useUpdate\"),\n },\n });\n\n const { mutate, mutateAsync } = mutationResult;\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutationResult.isPending,\n });\n\n // this function is used to make the `variables` parameter optional\n const handleMutation = (\n variables?: UpdateParams<TData, TError, TVariables>,\n options?: MutateOptions<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n ) => {\n return mutate(variables || {}, options);\n };\n\n // this function is used to make the `variables` parameter optional\n const handleMutateAsync = (\n variables?: UpdateParams<TData, TError, TVariables>,\n options?: MutateOptions<\n UpdateResponse<TData>,\n TError,\n UpdateParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n ) => {\n return mutateAsync(variables || {}, options);\n };\n\n return {\n mutation: mutationResult,\n mutate: handleMutation,\n mutateAsync: handleMutateAsync,\n overtime: { elapsedTime },\n };\n};\n\nconst missingResourceError = new Error(\n \"[useUpdate]: `resource` is not defined or not matched but is required\",\n);\n\nconst missingIdError = new Error(\n \"[useUpdate]: `id` is not defined but is required in edit and clone actions\",\n);\n\nconst missingValuesError = new Error(\n \"[useUpdate]: `values` is not provided but is required\",\n);\n","import type { BaseKey } from \"../data/types\";\n\nexport enum ActionTypes {\n ADD = \"ADD\",\n REMOVE = \"REMOVE\",\n DECREASE_NOTIFICATION_SECOND = \"DECREASE_NOTIFICATION_SECOND\",\n}\n\nexport interface IUndoableQueue {\n id: BaseKey;\n resource: string;\n cancelMutation: () => void;\n doMutation: () => void;\n seconds: number;\n isRunning: boolean;\n isSilent: boolean;\n}\n\nexport interface IUndoableQueueContext {\n notifications: IUndoableQueue[];\n notificationDispatch: React.Dispatch<any>;\n}\n","import { pickDataProvider } from \"@definitions/helpers\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type MutateOptions,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport {\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n useOnError,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CreateResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n} from \"../../contexts/data/types\";\nimport type { UseMutationResult } from \"../../definitions/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type UseCreateParams<TData, TError, TVariables> = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * Values for mutation function\n */\n values?: TVariables;\n /**\n * Meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Meta data for `dataProvider`\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification<CreateResponse<TData>, TError, TVariables>;\n\nexport type UseCreateReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n CreateResponse<TData>,\n TError,\n UseCreateParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCreateProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n CreateResponse<TData>,\n TError,\n UseCreateParams<TData, TError, TVariables>,\n unknown\n >,\n \"mutationFn\"\n >;\n} & UseLoadingOvertimeOptionsProps &\n UseCreateParams<TData, TError, TVariables>;\n\n/**\n * `useCreate` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for create mutations.\n *\n * It uses `create` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useCreate} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences/#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\n\nexport const useCreate = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n resource: resourceFromProps,\n values: valuesFromProps,\n dataProviderName: dataProviderNameFromProps,\n successNotification: successNotificationFromProps,\n errorNotification: errorNotificationFromProps,\n invalidates: invalidatesFromProps,\n meta: metaFromProps,\n mutationOptions,\n overtimeOptions,\n}: UseCreateProps<TData, TError, TVariables> = {}): UseCreateReturnType<\n TData,\n TError,\n TVariables\n> &\n UseLoadingOvertimeReturnType => {\n const { mutate: checkError } = useOnError();\n const dataProvider = useDataProvider();\n const invalidateStore = useInvalidate();\n const { resources, select } = useResourceParams();\n const translate = useTranslate();\n const publish = usePublish();\n const { log } = useLog();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutationResult = useMutation<\n CreateResponse<TData>,\n TError,\n UseCreateParams<TData, TError, TVariables>,\n unknown\n >({\n mutationFn: ({\n resource: resourceName = resourceFromProps,\n values = valuesFromProps,\n meta = metaFromProps,\n dataProviderName = dataProviderNameFromProps,\n }: UseCreateParams<TData, TError, TVariables>) => {\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n return dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n ).create<TData, TVariables>({\n resource: resource.name,\n variables: values,\n meta: combinedMeta,\n });\n },\n onSuccess: (data, variables, context) => {\n const {\n resource: resourceName = resourceFromProps,\n successNotification:\n successNotificationFromProp = successNotificationFromProps,\n dataProviderName: dataProviderNameFromProp = dataProviderNameFromProps,\n invalidates = invalidatesFromProps ?? [\"list\", \"many\"],\n values = valuesFromProps,\n meta = metaFromProps,\n } = variables;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n const resourceSingular = textTransformers.singular(identifier);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const notificationConfig =\n typeof successNotificationFromProp === \"function\"\n ? successNotificationFromProp(data, values, identifier)\n : successNotificationFromProp;\n\n handleNotification(notificationConfig, {\n key: `create-${identifier}-notification`,\n message: translate(\n \"notifications.createSuccess\",\n {\n resource: translate(\n `${identifier}.${identifier}`,\n resourceSingular,\n ),\n },\n `Successfully created ${resourceSingular}`,\n ),\n description: translate(\"notifications.success\", \"Success\"),\n type: \"success\",\n });\n\n invalidateStore({\n resource: identifier,\n dataProviderName,\n invalidates,\n });\n\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"created\",\n payload: {\n ids: data?.data?.id ? [data.data.id] : undefined,\n },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"create\",\n resource: resource.name,\n data: values,\n meta: {\n ...rest,\n dataProviderName,\n id: data?.data?.id ?? undefined,\n },\n });\n\n mutationOptions?.onSuccess?.(data, variables, context);\n },\n onError: (err: TError, variables, context) => {\n const {\n resource: resourceName = resourceFromProps,\n errorNotification:\n errorNotificationFromProp = errorNotificationFromProps,\n values = valuesFromProps,\n } = variables;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n checkError(err);\n\n const { identifier } = select(resourceName);\n\n const resourceSingular = textTransformers.singular(identifier);\n\n const notificationConfig =\n typeof errorNotificationFromProp === \"function\"\n ? errorNotificationFromProp(err, values, identifier)\n : errorNotificationFromProp;\n\n handleNotification(notificationConfig, {\n key: `create-${identifier}-notification`,\n description: err.message,\n message: translate(\n \"notifications.createError\",\n {\n resource: translate(\n `${identifier}.${identifier}`,\n resourceSingular,\n ),\n statusCode: err.statusCode,\n },\n `There was an error creating ${resourceSingular} (status code: ${err.statusCode})`,\n ),\n type: \"error\",\n });\n\n mutationOptions?.onError?.(err, variables, context);\n },\n mutationKey: keys().data().mutation(\"create\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useCreate\"),\n },\n });\n const { mutate, mutateAsync, ...mutation } = mutationResult;\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutation.isPending,\n });\n\n // this function is used to make the `variables` parameter optional\n const handleMutation = (\n variables?: UseCreateParams<TData, TError, TVariables>,\n options?: MutateOptions<\n CreateResponse<TData>,\n TError,\n UseCreateParams<TData, TError, TVariables>,\n unknown\n >,\n ) => {\n return mutate(variables || {}, options);\n };\n\n // this function is used to make the `variables` parameter optional\n const handleMutateAsync = (\n variables?: UseCreateParams<TData, TError, TVariables>,\n options?: MutateOptions<\n CreateResponse<TData>,\n TError,\n UseCreateParams<TData, TError, TVariables>,\n unknown\n >,\n ) => {\n return mutateAsync(variables || {}, options);\n };\n\n return {\n mutation: mutationResult,\n mutate: handleMutation,\n mutateAsync: handleMutateAsync,\n overtime: { elapsedTime },\n };\n};\n\nconst missingResourceError = new Error(\n \"[useCreate]: `resource` is not defined or not matched but is required\",\n);\n\nconst missingValuesError = new Error(\n \"[useCreate]: `values` is not provided but is required\",\n);\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { pickDataProvider } from \"@definitions/helpers\";\nimport {\n useCancelNotification,\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n useMutationMode,\n useOnError,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n DeleteOneResponse,\n GetListResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n MutationMode,\n PrevContext as DeleteContext,\n PreviousQuery,\n} from \"../../contexts/data/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport { ActionTypes } from \"../../contexts/undoableQueue/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type DeleteParams<TData, TError, TVariables> = {\n /**\n * id for mutation function\n */\n id: BaseKey;\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * [Determines when mutations are executed](/docs/advanced-tutorials/mutation-mode/)\n */\n mutationMode?: MutationMode;\n /**\n * Duration in ms to wait before executing the mutation when `mutationMode = \"undoable\"`\n */\n undoableTimeout?: number;\n /**\n * Provides a function to cancel the mutation when `mutationMode = \"undoable\"`\n */\n onCancel?: (cancelMutation: () => void) => void;\n /**\n * Metadata query for dataProvider\n */\n meta?: MetaQuery;\n /**\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n /**\n * Values for mutation function\n */\n values?: TVariables;\n} & SuccessErrorNotification<DeleteOneResponse<TData>, TError, BaseKey>;\n\nexport type UseDeleteReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = {\n mutation: UseMutationResult<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >;\n mutate: UseMutationResult<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >[\"mutate\"];\n mutateAsync: UseMutationResult<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >[\"mutateAsync\"];\n} & UseLoadingOvertimeReturnType;\n\nexport type UseDeleteProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\" | \"onSettled\" | \"onMutate\"\n >;\n} & UseLoadingOvertimeOptionsProps;\n\n/**\n * `useDelete` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for delete mutations.\n *\n * It uses `deleteOne` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useDelete} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences/#httperror `HttpError`}\n * @typeParam TVariables - Values for params. default `{}`\n *\n */\nexport const useDelete = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n mutationOptions,\n overtimeOptions,\n}: UseDeleteProps<TData, TError, TVariables> = {}): UseDeleteReturnType<\n TData,\n TError,\n TVariables\n> => {\n const { mutate: checkError } = useOnError();\n const dataProvider = useDataProvider();\n\n const { resources, select } = useResourceParams();\n const queryClient = useQueryClient();\n\n const {\n mutationMode: mutationModeContext,\n undoableTimeout: undoableTimeoutContext,\n } = useMutationMode();\n\n const { notificationDispatch } = useCancelNotification();\n const translate = useTranslate();\n const publish = usePublish();\n const { log } = useLog();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutation = useMutation<\n DeleteOneResponse<TData>,\n TError,\n DeleteParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >({\n mutationFn: ({\n id,\n mutationMode,\n undoableTimeout,\n resource: resourceName,\n onCancel,\n meta,\n dataProviderName,\n values,\n }) => {\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n const undoableTimeoutPropOrContext =\n undoableTimeout ?? undoableTimeoutContext;\n\n if (!(mutationModePropOrContext === \"undoable\")) {\n return dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n ).deleteOne<TData, TVariables>({\n resource: resource.name,\n id,\n meta: combinedMeta,\n variables: values,\n });\n }\n\n const deletePromise = new Promise<DeleteOneResponse<TData>>(\n (resolve, reject) => {\n const doMutation = () => {\n dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n )\n .deleteOne<TData, TVariables>({\n resource: resource.name,\n id,\n meta: combinedMeta,\n variables: values,\n })\n .then((result) => resolve(result))\n .catch((err) => reject(err));\n };\n\n const cancelMutation = () => {\n reject({ message: \"mutationCancelled\" });\n };\n\n if (onCancel) {\n onCancel(cancelMutation);\n }\n\n notificationDispatch({\n type: ActionTypes.ADD,\n payload: {\n id,\n resource: identifier,\n cancelMutation: cancelMutation,\n doMutation: doMutation,\n seconds: undoableTimeoutPropOrContext,\n isSilent: !!onCancel,\n },\n });\n },\n );\n return deletePromise;\n },\n onMutate: async ({\n id,\n resource: resourceName,\n mutationMode,\n dataProviderName,\n meta,\n }) => {\n const { identifier } = select(resourceName);\n\n const { gqlMutation: _, gqlQuery: __, ...preferredMeta } = meta ?? {};\n\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n await queryClient.cancelQueries({\n queryKey: resourceKeys.get(),\n });\n\n const previousQueries: PreviousQuery<TData>[] =\n queryClient.getQueriesData({\n queryKey: resourceKeys.get(),\n });\n\n if (mutationModePropOrContext !== \"pessimistic\") {\n // Set the previous queries to the new ones:\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"list\")\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (!previous) {\n return null;\n }\n const data = previous.data.filter(\n (record: TData) => record.id?.toString() !== id.toString(),\n );\n\n return {\n data,\n total: previous.total - 1,\n };\n },\n );\n\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys.action(\"many\").get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (!previous) {\n return null;\n }\n const data = previous.data.filter((record: TData) => {\n return record.id?.toString() !== id?.toString();\n });\n\n return {\n ...previous,\n data,\n };\n },\n );\n }\n\n return {\n previousQueries,\n queryKey: resourceKeys.get(),\n };\n },\n onSettled: (\n _data,\n _error,\n {\n id,\n resource: resourceName,\n dataProviderName,\n invalidates = [\"list\", \"many\"],\n },\n ) => {\n const { identifier } = select(resourceName);\n\n // invalidate the cache for the list and many queries:\n invalidateStore({\n resource: identifier,\n dataProviderName: pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n ),\n invalidates,\n });\n\n notificationDispatch({\n type: ActionTypes.REMOVE,\n payload: { id, resource: identifier },\n });\n },\n onSuccess: (\n _data,\n {\n id,\n resource: resourceName,\n successNotification,\n dataProviderName: dataProviderNameFromProp,\n meta,\n },\n context,\n ) => {\n const { resource, identifier } = select(resourceName);\n const resourceSingular = textTransformers.singular(identifier);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n // Remove the queries from the cache:\n queryClient.removeQueries({\n queryKey: resourceKeys.action(\"one\").get(),\n });\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(_data, id, identifier)\n : successNotification;\n\n handleNotification(notificationConfig, {\n key: `${id}-${identifier}-notification`,\n description: translate(\"notifications.success\", \"Success\"),\n message: translate(\n \"notifications.deleteSuccess\",\n {\n resource: translate(\n `${identifier}.${identifier}`,\n resourceSingular,\n ),\n },\n `Successfully deleted a ${resourceSingular}`,\n ),\n type: \"success\",\n });\n\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"deleted\",\n payload: {\n ids: [id],\n },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"delete\",\n resource: resource.name,\n meta: {\n ...rest,\n dataProviderName,\n id,\n },\n });\n\n // Remove the queries from the cache:\n queryClient.removeQueries({\n queryKey: resourceKeys.action(\"one\").get(),\n });\n },\n onError: (\n err: TError,\n { id, resource: resourceName, errorNotification },\n context,\n ) => {\n const { identifier } = select(resourceName);\n\n // set back the queries to the context:\n if (context) {\n for (const query of context.previousQueries) {\n queryClient.setQueryData(query[0], query[1]);\n }\n }\n\n if (err.message !== \"mutationCancelled\") {\n checkError(err);\n\n const resourceSingular = textTransformers.singular(identifier);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(err, id, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${id}-${identifier}-notification`,\n message: translate(\n \"notifications.deleteError\",\n {\n resource: resourceSingular,\n statusCode: err.statusCode,\n },\n `Error (status code: ${err.statusCode})`,\n ),\n description: err.message,\n type: \"error\",\n });\n }\n },\n mutationKey: keys().data().mutation(\"delete\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useDelete\"),\n },\n });\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutation.isPending,\n });\n\n return {\n mutation,\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync,\n overtime: { elapsedTime },\n };\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type MutateOptions,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport { handleMultiple, pickDataProvider } from \"@definitions\";\nimport {\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CreateManyResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n} from \"../../contexts/data/types\";\nimport type { UseMutationResult } from \"../../definitions/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type UseCreateManyParams<TData, TError, TVariables> = {\n resource?: string;\n values?: TVariables[];\n meta?: MetaQuery;\n dataProviderName?: string;\n invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification<CreateManyResponse<TData>, TError, TVariables[]>;\n\nexport type UseCreateManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n CreateManyResponse<TData>,\n TError,\n UseCreateManyParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCreateManyProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n CreateManyResponse<TData>,\n TError,\n UseCreateManyParams<TData, TError, TVariables>\n >,\n \"mutationFn\"\n >;\n} & UseLoadingOvertimeOptionsProps &\n UseCreateManyParams<TData, TError, TVariables>;\n\n/**\n * `useCreateMany` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for multiple create mutations.\n *\n * It uses `createMany` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useCreateMany} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\nexport const useCreateMany = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n resource: resourceFromProps,\n values: valuesFromProps,\n dataProviderName: dataProviderNameFromProps,\n successNotification: successNotificationFromProps,\n errorNotification: errorNotificationFromProps,\n meta: metaFromProps,\n invalidates: invalidatesFromProps,\n mutationOptions,\n overtimeOptions,\n}: UseCreateManyProps<TData, TError, TVariables> = {}): UseCreateManyReturnType<\n TData,\n TError,\n TVariables\n> &\n UseLoadingOvertimeReturnType => {\n const dataProvider = useDataProvider();\n const { resources, select } = useResourceParams();\n const translate = useTranslate();\n const publish = usePublish();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const { log } = useLog();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutationResult = useMutation<\n CreateManyResponse<TData>,\n TError,\n UseCreateManyParams<TData, TError, TVariables>\n >({\n mutationFn: ({\n resource: resourceName = resourceFromProps,\n values = valuesFromProps,\n meta = metaFromProps,\n dataProviderName = dataProviderNameFromProps,\n }: UseCreateManyParams<TData, TError, TVariables>) => {\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const selectedDataProvider = dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n );\n\n if (selectedDataProvider.createMany) {\n return selectedDataProvider.createMany<TData, TVariables>({\n resource: resource.name,\n variables: values,\n meta: combinedMeta,\n });\n }\n return handleMultiple(\n values.map((val) =>\n selectedDataProvider.create<TData, TVariables>({\n resource: resource.name,\n variables: val,\n meta: combinedMeta,\n }),\n ),\n );\n },\n onSuccess: (response, variables, context) => {\n const {\n resource: resourceName = resourceFromProps,\n successNotification = successNotificationFromProps,\n dataProviderName: dataProviderNameFromProp = dataProviderNameFromProps,\n invalidates = invalidatesFromProps ?? [\"list\", \"many\"],\n values = valuesFromProps,\n meta = metaFromProps,\n } = variables;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n const resourcePlural = textTransformers.plural(identifier);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta,\n });\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(response, values, identifier)\n : successNotification;\n\n handleNotification(notificationConfig, {\n key: `createMany-${identifier}-notification`,\n message: translate(\n \"notifications.createSuccess\",\n {\n resource: translate(`${identifier}.${identifier}`, identifier),\n },\n `Successfully created ${resourcePlural}`,\n ),\n description: translate(\"notifications.success\", \"Success\"),\n type: \"success\",\n });\n\n invalidateStore({\n resource: identifier,\n dataProviderName,\n invalidates,\n });\n\n const ids = response?.data\n .filter((item) => item?.id !== undefined)\n .map((item) => item.id!);\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"created\",\n payload: {\n ids,\n },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"createMany\",\n resource: resource.name,\n data: values,\n meta: {\n dataProviderName,\n ids,\n ...rest,\n },\n });\n\n mutationOptions?.onSuccess?.(response, variables, context);\n },\n onError: (err: TError, variables, context) => {\n const {\n resource: resourceName = resourceFromProps,\n errorNotification = errorNotificationFromProps,\n values = valuesFromProps,\n } = variables;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(err, values, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `createMany-${identifier}-notification`,\n description: err.message,\n message: translate(\n \"notifications.createError\",\n {\n resource: translate(`${identifier}.${identifier}`, identifier),\n statusCode: err.statusCode,\n },\n `There was an error creating ${identifier} (status code: ${err.statusCode}`,\n ),\n type: \"error\",\n });\n\n mutationOptions?.onError?.(err, variables, context);\n },\n mutationKey: keys().data().mutation(\"createMany\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useCreateMany\"),\n },\n });\n const { mutate, mutateAsync } = mutationResult;\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutationResult.isPending,\n });\n\n // this function is used to make the `variables` parameter optional\n const handleMutation = (\n variables?: UseCreateManyParams<TData, TError, TVariables>,\n options?: MutateOptions<\n CreateManyResponse<TData>,\n TError,\n UseCreateManyParams<TData, TError, TVariables>,\n unknown\n >,\n ) => {\n return mutate(variables || {}, options);\n };\n\n // this function is used to make the `variables` parameter optional\n const handleMutateAsync = (\n variables?: UseCreateManyParams<TData, TError, TVariables>,\n options?: MutateOptions<\n CreateManyResponse<TData>,\n TError,\n UseCreateManyParams<TData, TError, TVariables>,\n unknown\n >,\n ) => {\n return mutateAsync(variables || {}, options);\n };\n\n return {\n mutation: mutationResult,\n mutate: handleMutation,\n mutateAsync: handleMutateAsync,\n overtime: { elapsedTime },\n };\n};\n\nconst missingResourceError = new Error(\n \"[useCreateMany]: `resource` is not defined or not matched but is required\",\n);\n\nconst missingValuesError = new Error(\n \"[useCreateMany]: `values` is not provided but is required\",\n);\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type MutateOptions,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { handleMultiple, pickDataProvider } from \"@definitions/helpers\";\nimport {\n useCancelNotification,\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n useMutationMode,\n useOnError,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n GetListResponse,\n GetManyResponse,\n GetOneResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n MutationMode,\n PrevContext as UpdateContext,\n QueryResponse,\n UpdateManyResponse,\n} from \"../../contexts/data/types\";\nimport type { UseMutationResult } from \"../../definitions/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport { ActionTypes } from \"../../contexts/undoableQueue/types\";\n\nexport type OptimisticUpdateManyMapType<TData, TVariables> = {\n list?:\n | ((\n previous: GetListResponse<TData> | null | undefined,\n values: TVariables,\n ids: BaseKey[],\n ) => GetListResponse<TData> | null)\n | boolean;\n many?:\n | ((\n previous: GetManyResponse<TData> | null | undefined,\n values: TVariables,\n ids: BaseKey[],\n ) => GetManyResponse<TData> | null)\n | boolean;\n detail?:\n | ((\n previous: GetOneResponse<TData> | null | undefined,\n values: TVariables,\n id: BaseKey,\n ) => GetOneResponse<TData> | null)\n | boolean;\n};\n\nexport type UpdateManyParams<TData, TError, TVariables> = {\n /**\n * ids for mutation function\n */\n ids?: BaseKey[];\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * [Determines when mutations are executed](/docs/advanced-tutorials/mutation-mode/)\n */\n mutationMode?: MutationMode;\n /**\n * Duration in ms to wait before executing the mutation when `mutationMode = \"undoable\"`\n */\n undoableTimeout?: number;\n /**\n * Provides a function to cancel the mutation when `mutationMode = \"undoable\"`\n */\n onCancel?: (cancelMutation: () => void) => void;\n /**\n * Values for mutation function\n */\n values?: TVariables;\n /**\n * meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * meta data for `dataProvider`\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n * @default {\n * list: true,\n * many: true,\n * detail: true,\n * }\n */\n optimisticUpdateMap?: OptimisticUpdateManyMapType<TData, TVariables>;\n} & SuccessErrorNotification<\n UpdateManyResponse<TData>,\n TError,\n { ids: BaseKey[]; values: TVariables }\n>;\n\nexport type UseUpdateManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationResult<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n> &\n UseLoadingOvertimeReturnType;\n\nexport type UseUpdateManyProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n \"mutationFn\" | \"onMutate\"\n >;\n} & UseLoadingOvertimeOptionsProps &\n UpdateManyParams<TData, TError, TVariables>;\n\n/**\n * `useUpdateMany` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for multiple update mutations.\n *\n * It uses `updateMany` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useUpdateMany} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\nexport const useUpdateMany = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n ids: idsFromProps,\n resource: resourceFromProps,\n values: valuesFromProps,\n dataProviderName: dataProviderNameFromProps,\n successNotification: successNotificationFromProps,\n errorNotification: errorNotificationFromProps,\n meta: metaFromProps,\n mutationMode: mutationModeFromProps,\n undoableTimeout: undoableTimeoutFromProps,\n onCancel: onCancelFromProps,\n optimisticUpdateMap: optimisticUpdateMapFromProps,\n invalidates: invalidatesFromProps,\n mutationOptions,\n overtimeOptions,\n}: UseUpdateManyProps<TData, TError, TVariables> = {}): UseUpdateManyReturnType<\n TData,\n TError,\n TVariables\n> => {\n const { resources, select } = useResourceParams();\n const queryClient = useQueryClient();\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const {\n mutationMode: mutationModeContext,\n undoableTimeout: undoableTimeoutContext,\n } = useMutationMode();\n const { mutate: checkError } = useOnError();\n const { notificationDispatch } = useCancelNotification();\n const publish = usePublish();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const { log } = useLog();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutationResult = useMutation<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >({\n mutationFn: ({\n ids = idsFromProps,\n values = valuesFromProps,\n resource: resourceName = resourceFromProps,\n onCancel = onCancelFromProps,\n mutationMode = mutationModeFromProps,\n undoableTimeout = undoableTimeoutFromProps,\n meta = metaFromProps,\n dataProviderName = dataProviderNameFromProps,\n }: UpdateManyParams<TData, TError, TVariables>) => {\n if (!ids) throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n const undoableTimeoutPropOrContext =\n undoableTimeout ?? undoableTimeoutContext;\n\n const selectedDataProvider = dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n );\n\n const mutationFn = () => {\n if (selectedDataProvider.updateMany) {\n return selectedDataProvider.updateMany<TData, TVariables>({\n resource: resource.name,\n ids,\n variables: values,\n meta: combinedMeta,\n });\n }\n return handleMultiple(\n ids.map((id) =>\n selectedDataProvider.update<TData, TVariables>({\n resource: resource.name,\n id,\n variables: values,\n meta: combinedMeta,\n }),\n ),\n );\n };\n\n if (!(mutationModePropOrContext === \"undoable\")) {\n return mutationFn();\n }\n\n const updatePromise = new Promise<UpdateManyResponse<TData>>(\n (resolve, reject) => {\n const doMutation = () => {\n mutationFn()\n .then((result) => resolve(result))\n .catch((err) => reject(err));\n };\n\n const cancelMutation = () => {\n reject({ message: \"mutationCancelled\" });\n };\n\n if (onCancel) {\n onCancel(cancelMutation);\n }\n\n notificationDispatch({\n type: ActionTypes.ADD,\n payload: {\n id: ids,\n resource: identifier,\n cancelMutation: cancelMutation,\n doMutation: doMutation,\n seconds: undoableTimeoutPropOrContext,\n isSilent: !!onCancel,\n },\n });\n },\n );\n return updatePromise;\n },\n onMutate: async ({\n resource: resourceName = resourceFromProps,\n ids = idsFromProps,\n values = valuesFromProps,\n mutationMode = mutationModeFromProps,\n dataProviderName = dataProviderNameFromProps,\n meta = metaFromProps,\n optimisticUpdateMap = optimisticUpdateMapFromProps ?? {\n list: true,\n many: true,\n detail: true,\n },\n }) => {\n if (!ids) throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n const { gqlMutation: _, gqlQuery: __, ...preferredMeta } = meta ?? {};\n\n const queryKey = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n await queryClient.cancelQueries({\n queryKey: resourceKeys.get(),\n });\n\n const previousQueries = queryClient.getQueriesData<QueryResponse<TData>>({\n queryKey: resourceKeys.get(),\n });\n\n if (mutationModePropOrContext !== \"pessimistic\") {\n if (optimisticUpdateMap.list) {\n // Set the previous queries to the new ones:\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"list\")\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.list === \"function\") {\n return optimisticUpdateMap.list(previous, values, ids);\n }\n\n if (!previous) {\n return null;\n }\n\n const data = previous.data.map((record: TData) => {\n if (\n record.id !== undefined &&\n ids\n .filter((id) => id !== undefined)\n .map(String)\n .includes(record.id.toString())\n ) {\n return {\n ...record,\n ...values,\n };\n }\n\n return record;\n });\n\n return {\n ...previous,\n data,\n };\n },\n );\n }\n\n if (optimisticUpdateMap.many) {\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys.action(\"many\").get(),\n },\n (previous?: GetManyResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.many === \"function\") {\n return optimisticUpdateMap.many(previous, values, ids);\n }\n\n if (!previous) {\n return null;\n }\n\n const data = previous.data.map((record: TData) => {\n if (\n record.id !== undefined &&\n ids\n .filter((id) => id !== undefined)\n .map(String)\n .includes(record.id.toString())\n ) {\n return {\n ...record,\n ...values,\n };\n }\n return record;\n });\n return {\n ...previous,\n data,\n };\n },\n );\n }\n\n if (optimisticUpdateMap.detail) {\n for (const id of ids) {\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"one\")\n .id(id)\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetOneResponse<TData> | null) => {\n if (typeof optimisticUpdateMap.detail === \"function\") {\n return optimisticUpdateMap.detail(previous, values, id);\n }\n\n if (!previous) {\n return null;\n }\n\n const data = {\n ...previous.data,\n ...values,\n };\n return {\n ...previous,\n data,\n };\n },\n );\n }\n }\n }\n\n return {\n previousQueries,\n };\n },\n onSettled: (data, error, variables, context) => {\n const {\n ids = idsFromProps,\n resource: resourceName = resourceFromProps,\n dataProviderName = dataProviderNameFromProps,\n invalidates = invalidatesFromProps,\n } = variables;\n if (!ids) throw missingIdError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n // invalidate the cache for the list and many queries:\n invalidateStore({\n resource: identifier,\n invalidates: invalidates ?? [\"list\", \"many\"],\n dataProviderName: pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n ),\n });\n\n ids.forEach((id) =>\n invalidateStore({\n resource: identifier,\n invalidates: invalidates ?? [\"detail\"],\n dataProviderName: pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n ),\n id,\n }),\n );\n\n notificationDispatch({\n type: ActionTypes.REMOVE,\n payload: { id: ids, resource: identifier },\n });\n\n mutationOptions?.onSettled?.(data, error, variables, context);\n },\n onSuccess: (data, variables, context) => {\n const {\n ids = idsFromProps,\n resource: resourceName = resourceFromProps,\n values = valuesFromProps,\n meta = metaFromProps,\n dataProviderName: dataProviderNameFromProp = dataProviderNameFromProps,\n successNotification = successNotificationFromProps,\n } = variables;\n if (!ids) throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { resource, identifier } = select(resourceName);\n const resourceSingular = textTransformers.singular(identifier);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(data, { ids, values }, identifier)\n : successNotification;\n\n handleNotification(notificationConfig, {\n key: `${ids}-${identifier}-notification`,\n description: translate(\"notifications.success\", \"Successful\"),\n message: translate(\n \"notifications.editSuccess\",\n {\n resource: translate(`${identifier}.${identifier}`, identifier),\n },\n `Successfully updated ${resourceSingular}`,\n ),\n type: \"success\",\n });\n\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"updated\",\n payload: {\n ids: ids.map(String),\n },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n const previousData: any[] = [];\n if (context) {\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n ids.forEach((id) => {\n const queryData = queryClient.getQueryData<UpdateManyResponse<TData>>(\n resourceKeys.action(\"one\").id(id).get(),\n );\n\n previousData.push(\n Object.keys(values || {}).reduce<any>((acc, item: any) => {\n acc[item] = queryData?.data?.[item];\n return acc;\n }, {}),\n );\n });\n }\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"updateMany\",\n resource: resource.name,\n data: values,\n previousData,\n meta: {\n ...rest,\n dataProviderName,\n ids,\n },\n });\n\n mutationOptions?.onSuccess?.(data, variables, context);\n },\n onError: (err: TError, variables, context) => {\n const {\n ids = idsFromProps,\n resource: resourceName = resourceFromProps,\n errorNotification = errorNotificationFromProps,\n values = valuesFromProps,\n } = variables;\n if (!ids) throw missingIdError;\n if (!values) throw missingValuesError;\n if (!resourceName) throw missingResourceError;\n\n const { identifier } = select(resourceName);\n\n // set back the queries to the context:\n if (context) {\n for (const query of context.previousQueries) {\n queryClient.setQueryData(query[0], query[1]);\n }\n }\n\n if (err.message !== \"mutationCancelled\") {\n checkError(err);\n\n const resourceSingular = textTransformers.singular(identifier);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(err, { ids, values }, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${ids}-${identifier}-updateMany-error-notification`,\n message: translate(\n \"notifications.editError\",\n {\n resource: resourceSingular,\n statusCode: err.statusCode,\n },\n `Error when updating ${resourceSingular} (status code: ${err.statusCode})`,\n ),\n description: err.message,\n type: \"error\",\n });\n }\n\n mutationOptions?.onError?.(err, variables, context);\n },\n mutationKey: keys().data().mutation(\"updateMany\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useUpdateMany\"),\n },\n });\n const { mutate, mutateAsync, ...mutation } = mutationResult;\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutation.isPending,\n });\n\n // this function is used to make the `variables` parameter optional\n const handleMutation = (\n variables?: UpdateManyParams<TData, TError, TVariables>,\n options?: MutateOptions<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n ) => {\n return mutate(variables || {}, options);\n };\n\n // this function is used to make the `variables` parameter optional\n const handleMutateAsync = (\n variables?: UpdateManyParams<TData, TError, TVariables>,\n options?: MutateOptions<\n UpdateManyResponse<TData>,\n TError,\n UpdateManyParams<TData, TError, TVariables>,\n UpdateContext<TData>\n >,\n ) => {\n return mutateAsync(variables || {}, options);\n };\n\n return {\n mutation: mutationResult,\n mutate: handleMutation,\n mutateAsync: handleMutateAsync,\n overtime: { elapsedTime },\n };\n};\n\nconst missingResourceError = new Error(\n \"[useUpdateMany]: `resource` is not defined or not matched but is required\",\n);\n\nconst missingIdError = new Error(\n \"[useUpdateMany]: `id` is not defined but is required in edit and clone actions\",\n);\n\nconst missingValuesError = new Error(\n \"[useUpdateMany]: `values` is not provided but is required\",\n);\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { handleMultiple, pickDataProvider } from \"@definitions\";\nimport {\n useCancelNotification,\n useDataProvider,\n useHandleNotification,\n useInvalidate,\n useKeys,\n useLog,\n useMeta,\n useMutationMode,\n useOnError,\n usePublish,\n useRefineContext,\n useResourceParams,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseKey,\n BaseRecord,\n DeleteManyResponse,\n GetListResponse,\n HttpError,\n IQueryKeys,\n MetaQuery,\n MutationMode,\n PrevContext as DeleteContext,\n PreviousQuery,\n} from \"../../contexts/data/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport { ActionTypes } from \"../../contexts/undoableQueue/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport type DeleteManyParams<TData, TError, TVariables> = {\n /**\n * ids for mutation function\n */\n ids: BaseKey[];\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * [Determines when mutations are executed](/docs/advanced-tutorials/mutation-mode/)\n */\n mutationMode?: MutationMode;\n /**\n * Duration in ms to wait before executing the mutation when `mutationMode = \"undoable\"`\n */\n undoableTimeout?: number;\n /**\n * Provides a function to cancel the mutation when `mutationMode = \"undoable\"`\n */\n onCancel?: (cancelMutation: () => void) => void;\n /**\n * Metadata query for dataProvider\n */\n meta?: MetaQuery;\n /**\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default \"default\"\n */\n dataProviderName?: string;\n /**\n * You can use it to manage the invalidations that will occur at the end of the mutation.\n */\n invalidates?: Array<keyof IQueryKeys>;\n /**\n * Values for mutation function\n */\n values?: TVariables;\n} & SuccessErrorNotification<DeleteManyResponse<TData>, TError, BaseKey[]>;\n\nexport type UseDeleteManyReturnType<\n TData extends BaseRecord = BaseRecord,\n TError = HttpError,\n TVariables = {},\n> = {\n mutation: UseMutationResult<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n unknown\n >;\n mutate: UseMutationResult<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >[\"mutate\"];\n mutateAsync: UseMutationResult<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >[\"mutateAsync\"];\n} & UseLoadingOvertimeReturnType;\n\nexport type UseDeleteManyProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: Omit<\n UseMutationOptions<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >,\n \"mutationFn\" | \"onError\" | \"onSuccess\" | \"onSettled\" | \"onMutate\"\n >;\n} & UseLoadingOvertimeOptionsProps;\n\n/**\n * `useDeleteMany` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for multiple delete mutations.\n *\n * It uses `deleteMany` method as mutation function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useDeleteMany} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TVariables - Values for params. default `{}`\n *\n */\nexport const useDeleteMany = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n mutationOptions,\n overtimeOptions,\n}: UseDeleteManyProps<TData, TError, TVariables> = {}): UseDeleteManyReturnType<\n TData,\n TError,\n TVariables\n> => {\n const { mutate: checkError } = useOnError();\n\n const {\n mutationMode: mutationModeContext,\n undoableTimeout: undoableTimeoutContext,\n } = useMutationMode();\n const dataProvider = useDataProvider();\n const { notificationDispatch } = useCancelNotification();\n const translate = useTranslate();\n const publish = usePublish();\n const handleNotification = useHandleNotification();\n const invalidateStore = useInvalidate();\n const { log } = useLog();\n const { resources, select } = useResourceParams();\n const queryClient = useQueryClient();\n const getMeta = useMeta();\n const {\n options: { textTransformers },\n } = useRefineContext();\n const { keys } = useKeys();\n\n const mutation = useMutation<\n DeleteManyResponse<TData>,\n TError,\n DeleteManyParams<TData, TError, TVariables>,\n DeleteContext<TData>\n >({\n mutationFn: ({\n resource: resourceName,\n ids,\n mutationMode,\n undoableTimeout,\n onCancel,\n meta,\n dataProviderName,\n values,\n }: DeleteManyParams<TData, TError, TVariables>) => {\n const { resource, identifier } = select(resourceName);\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n const undoableTimeoutPropOrContext =\n undoableTimeout ?? undoableTimeoutContext;\n\n const selectedDataProvider = dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n );\n\n const mutationFn = () => {\n if (selectedDataProvider.deleteMany) {\n return selectedDataProvider.deleteMany<TData, TVariables>({\n resource: resource.name,\n ids,\n meta: combinedMeta,\n variables: values,\n });\n }\n return handleMultiple(\n ids.map((id) =>\n selectedDataProvider.deleteOne<TData, TVariables>({\n resource: resource.name,\n id,\n meta: combinedMeta,\n variables: values,\n }),\n ),\n );\n };\n\n if (!(mutationModePropOrContext === \"undoable\")) {\n return mutationFn();\n }\n\n const updatePromise = new Promise<DeleteManyResponse<TData>>(\n (resolve, reject) => {\n const doMutation = () => {\n mutationFn()\n .then((result) => resolve(result))\n .catch((err) => reject(err));\n };\n\n const cancelMutation = () => {\n reject({ message: \"mutationCancelled\" });\n };\n\n if (onCancel) {\n onCancel(cancelMutation);\n }\n\n notificationDispatch({\n type: ActionTypes.ADD,\n payload: {\n id: ids,\n resource: identifier,\n cancelMutation: cancelMutation,\n doMutation: doMutation,\n seconds: undoableTimeoutPropOrContext,\n isSilent: !!onCancel,\n },\n });\n },\n );\n return updatePromise;\n },\n onMutate: async ({\n ids,\n resource: resourceName,\n mutationMode,\n dataProviderName,\n meta,\n }) => {\n const { identifier } = select(resourceName);\n\n const { gqlMutation: _, gqlQuery: __, ...preferredMeta } = meta ?? {};\n\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n const mutationModePropOrContext = mutationMode ?? mutationModeContext;\n\n await queryClient.cancelQueries({\n queryKey: resourceKeys.get(),\n });\n\n const previousQueries: PreviousQuery<TData>[] =\n queryClient.getQueriesData({\n queryKey: resourceKeys.get(),\n });\n\n if (mutationModePropOrContext !== \"pessimistic\") {\n // Set the previous queries to the new ones:\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"list\")\n .params(preferredMeta ?? {})\n .get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (!previous) {\n return null;\n }\n\n const data = previous.data.filter(\n (item) =>\n item.id && !ids.map(String).includes(item.id.toString()),\n );\n\n return {\n data,\n total: previous.total - 1,\n };\n },\n );\n\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys.action(\"many\").get(),\n },\n (previous?: GetListResponse<TData> | null) => {\n if (!previous) {\n return null;\n }\n\n const data = previous.data.filter((record: TData) => {\n if (record.id) {\n return !ids.map(String).includes(record.id.toString());\n }\n return false;\n });\n\n return {\n ...previous,\n data,\n };\n },\n );\n\n for (const id of ids) {\n queryClient.setQueriesData(\n {\n queryKey: resourceKeys\n .action(\"one\")\n .id(id)\n .params(preferredMeta)\n .get(),\n },\n (previous?: any | null) => {\n if (!previous || previous.data.id === id) {\n return null;\n }\n return {\n ...previous,\n };\n },\n );\n }\n }\n\n return {\n previousQueries,\n };\n },\n // Always refetch after error or success:\n onSettled: (\n _data,\n _error,\n {\n resource: resourceName,\n ids,\n dataProviderName,\n invalidates = [\"list\", \"many\"],\n },\n ) => {\n const { identifier } = select(resourceName);\n\n // invalidate the cache for the list and many queries:\n invalidateStore({\n resource: identifier,\n dataProviderName: pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n ),\n invalidates,\n });\n\n notificationDispatch({\n type: ActionTypes.REMOVE,\n payload: { id: ids, resource: identifier },\n });\n },\n onSuccess: (\n _data,\n {\n ids,\n resource: resourceName,\n meta,\n dataProviderName: dataProviderNameFromProp,\n successNotification,\n },\n ) => {\n const { resource, identifier } = select(resourceName);\n\n const dataProviderName = pickDataProvider(\n identifier,\n dataProviderNameFromProp,\n resources,\n );\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n // Remove the queries from the cache:\n const resourceKeys = keys()\n .data(pickDataProvider(identifier, dataProviderName, resources))\n .resource(identifier);\n\n ids.forEach((id) =>\n queryClient.removeQueries({\n queryKey: resourceKeys.action(\"one\").id(id).get(),\n }),\n );\n\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(_data, ids, identifier)\n : successNotification;\n\n handleNotification(notificationConfig, {\n key: `${ids}-${identifier}-notification`,\n description: translate(\"notifications.success\", \"Success\"),\n message: translate(\n \"notifications.deleteSuccess\",\n {\n resource: translate(`${identifier}.${identifier}`, identifier),\n },\n `Successfully deleted ${identifier}`,\n ),\n type: \"success\",\n });\n\n publish?.({\n channel: `resources/${resource.name}`,\n type: \"deleted\",\n payload: { ids },\n date: new Date(),\n meta: {\n ...combinedMeta,\n dataProviderName,\n },\n });\n\n const {\n fields: _fields,\n operation: _operation,\n variables: _variables,\n ...rest\n } = combinedMeta || {};\n log?.mutate({\n action: \"deleteMany\",\n resource: resource.name,\n meta: {\n ids,\n dataProviderName,\n ...rest,\n },\n });\n\n ids.forEach((id) =>\n queryClient.removeQueries({\n queryKey: resourceKeys.action(\"one\").id(id).get(),\n }),\n );\n },\n onError: (\n err,\n { ids, resource: resourceName, errorNotification },\n context,\n ) => {\n const { identifier } = select(resourceName);\n\n // set back the queries to the context:\n if (context) {\n for (const query of context.previousQueries) {\n queryClient.setQueryData(query[0], query[1]);\n }\n }\n\n if (err.message !== \"mutationCancelled\") {\n checkError(err);\n const resourceSingular = textTransformers.singular(identifier);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(err, ids, identifier)\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${ids}-${identifier}-notification`,\n message: translate(\n \"notifications.deleteError\",\n {\n resource: resourceSingular,\n statusCode: err.statusCode,\n },\n `Error (status code: ${err.statusCode})`,\n ),\n description: err.message,\n type: \"error\",\n });\n }\n },\n mutationKey: keys().data().mutation(\"deleteMany\").get(),\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useDeleteMany\"),\n },\n });\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutation.isPending,\n });\n\n return {\n mutation,\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync,\n overtime: { elapsedTime },\n };\n};\n","import { useDataProvider, useResourceParams } from \"@hooks\";\n\nexport const useApiUrl = (dataProviderName?: string): string => {\n const dataProvider = useDataProvider();\n const { resource } = useResourceParams();\n\n const { getApiUrl } = dataProvider(\n dataProviderName ?? resource?.meta?.dataProviderName,\n );\n\n return getApiUrl();\n};\n","import { useEffect } from \"react\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type QueryObserverResult,\n type UseQueryOptions,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { prepareQueryContext } from \"@definitions/helpers\";\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CrudFilter,\n CrudSort,\n CustomResponse,\n HttpError,\n MetaQuery,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\ninterface UseCustomConfig<TQuery, TPayload> {\n sorters?: CrudSort[];\n filters?: CrudFilter[];\n query?: TQuery;\n payload?: TPayload;\n headers?: {};\n}\n\n// Clean type without custom callback extensions\nexport type UseCustomQueryOptions<TQueryFnData, TError, TData> = Omit<\n UseQueryOptions<CustomResponse<TQueryFnData>, TError, CustomResponse<TData>>,\n \"queryKey\" | \"queryFn\"\n> & {\n // Make queryKey and queryFn optional for backward compatibility\n queryKey?: UseQueryOptions<\n CustomResponse<TQueryFnData>,\n TError,\n CustomResponse<TData>\n >[\"queryKey\"];\n queryFn?: UseQueryOptions<\n CustomResponse<TQueryFnData>,\n TError,\n CustomResponse<TData>\n >[\"queryFn\"];\n};\n\nexport type UseCustomProps<TQueryFnData, TError, TQuery, TPayload, TData> = {\n /**\n * request's URL\n */\n url: string;\n /**\n * request's method (`GET`, `POST`, etc.)\n */\n method: \"get\" | \"delete\" | \"head\" | \"options\" | \"post\" | \"put\" | \"patch\";\n /**\n * The config of your request. You can send headers, payload, query, filters and sorters using this field\n */\n config?: UseCustomConfig<TQuery, TPayload>;\n /**\n * react-query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options\n */\n queryOptions?: UseCustomQueryOptions<TQueryFnData, TError, TData>;\n /**\n * meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * meta data for `dataProvider`\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n CustomResponse<TData>,\n TError,\n Prettify<UseCustomConfig<TQuery, TPayload> & MetaQuery>\n> &\n UseLoadingOvertimeOptionsProps;\n\n/**\n * `useCustom` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/guides/queries `useQuery`} used for custom requests.\n *\n * It uses the `custom` method from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useCustom} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TQuery - Values for query params\n * @typeParam TPayload - Values for params\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport type UseCustomReturnType<TData, TError> = {\n query: QueryObserverResult<CustomResponse<TData>, TError>;\n result: {\n data: CustomResponse<TData>[\"data\"];\n };\n} & UseLoadingOvertimeReturnType;\n\nconst EMPTY_OBJECT = Object.freeze({}) as any;\n\nexport const useCustom = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TQuery = unknown,\n TPayload = unknown,\n TData extends BaseRecord = TQueryFnData,\n>({\n url,\n method,\n config,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\n dataProviderName,\n overtimeOptions,\n}: UseCustomProps<\n TQueryFnData,\n TError,\n TQuery,\n TPayload,\n TData\n>): UseCustomReturnType<TData, TError> => {\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const preferredMeta = meta;\n\n const { custom } = dataProvider(dataProviderName);\n\n const combinedMeta = getMeta({ meta: preferredMeta });\n\n if (custom) {\n const queryResponse = useQuery<\n CustomResponse<TQueryFnData>,\n TError,\n CustomResponse<TData>\n >({\n queryKey: keys()\n .data(dataProviderName)\n .mutation(\"custom\")\n .params({\n method,\n url,\n ...config,\n ...(preferredMeta || {}),\n })\n .get(),\n queryFn: (context) =>\n custom<TQueryFnData>({\n url,\n method,\n ...config,\n meta: {\n ...combinedMeta,\n ...prepareQueryContext(context as any),\n },\n }),\n ...queryOptions,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useCustom\"),\n },\n });\n\n // Handle success\n useEffect(() => {\n if (queryResponse.isSuccess && queryResponse.data) {\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(queryResponse.data, {\n ...config,\n ...combinedMeta,\n })\n : successNotification;\n\n handleNotification(notificationConfig);\n }\n }, [queryResponse.isSuccess, queryResponse.data, successNotification]);\n\n // Handle error\n useEffect(() => {\n if (queryResponse.isError && queryResponse.error) {\n checkError(queryResponse.error);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(queryResponse.error, {\n ...config,\n ...combinedMeta,\n })\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${method}-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: queryResponse.error.statusCode },\n `Error (status code: ${queryResponse.error.statusCode})`,\n ),\n description: queryResponse.error.message,\n type: \"error\",\n });\n }\n }, [queryResponse.isError, queryResponse.error?.message]);\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: queryResponse.isFetching,\n });\n\n return {\n query: queryResponse,\n result: {\n data: queryResponse.data?.data || EMPTY_OBJECT,\n },\n overtime: { elapsedTime },\n };\n }\n throw Error(\"Not implemented custom on data provider.\");\n};\n","import { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n} from \"@tanstack/react-query\";\n\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CreateResponse,\n HttpError,\n MetaQuery,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\ninterface UseCustomMutationConfig {\n headers?: {};\n}\n\ntype useCustomMutationParams<TData, TError, TVariables> = {\n url: string;\n method: \"post\" | \"put\" | \"patch\" | \"delete\";\n values: TVariables;\n /**\n * Meta data for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n config?: UseCustomMutationConfig;\n} & SuccessErrorNotification<\n CreateResponse<TData>,\n TError,\n Prettify<UseCustomMutationConfig & MetaQuery>\n>;\n\nexport type UseCustomMutationReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutation: UseMutationResult<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n >;\n mutate: UseMutationResult<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n >[\"mutate\"];\n mutateAsync: UseMutationResult<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n >[\"mutateAsync\"];\n} & UseLoadingOvertimeReturnType;\n\nexport type UseCustomMutationOptions<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = UseMutationOptions<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n>;\n\nexport type UseCustomMutationProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n mutationOptions?: UseCustomMutationOptions<TData, TError, TVariables>;\n} & UseLoadingOvertimeOptionsProps;\n\n/**\n * `useCustomMutation` is a modified version of `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/reference/useMutation `useMutation`} for create mutations.\n *\n * It uses the `custom` method from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useCustomMutation} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences/#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\n\nexport const useCustomMutation = <\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n>({\n mutationOptions,\n overtimeOptions,\n}: UseCustomMutationProps<\n TData,\n TError,\n TVariables\n> = {}): UseCustomMutationReturnType<TData, TError, TVariables> &\n UseLoadingOvertimeReturnType => {\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const mutationResult = useMutation<\n CreateResponse<TData>,\n TError,\n useCustomMutationParams<TData, TError, TVariables>,\n unknown\n >({\n mutationKey: keys().data().mutation(\"customMutation\").get(),\n mutationFn: ({\n url,\n method,\n values,\n meta,\n dataProviderName,\n config,\n }: useCustomMutationParams<TData, TError, TVariables>) => {\n const combinedMeta = getMeta({\n meta: meta,\n });\n\n const { custom } = dataProvider(dataProviderName);\n\n if (custom) {\n return custom<TData>({\n url,\n method,\n payload: values,\n meta: combinedMeta,\n headers: { ...config?.headers },\n });\n }\n\n throw Error(\"Not implemented custom on data provider.\");\n },\n onSuccess: (data, variables, context) => {\n const {\n successNotification: successNotificationFromProp,\n config,\n meta,\n } = variables;\n\n const notificationConfig =\n typeof successNotificationFromProp === \"function\"\n ? successNotificationFromProp(data, {\n ...config,\n ...(meta || {}),\n })\n : successNotificationFromProp;\n\n handleNotification(notificationConfig);\n\n mutationOptions?.onSuccess?.(data, variables, context);\n },\n onError: (err: TError, variables, context) => {\n const {\n errorNotification: errorNotificationFromProp,\n method,\n config,\n meta,\n } = variables;\n\n checkError(err);\n\n const notificationConfig =\n typeof errorNotificationFromProp === \"function\"\n ? errorNotificationFromProp(err, {\n ...config,\n ...(meta || {}),\n })\n : errorNotificationFromProp;\n\n handleNotification(notificationConfig, {\n key: `${method}-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: err.statusCode },\n `Error (status code: ${err.statusCode})`,\n ),\n description: err.message,\n type: \"error\",\n });\n\n mutationOptions?.onError?.(err, variables, context);\n },\n ...mutationOptions,\n meta: {\n ...mutationOptions?.meta,\n ...getXRay(\"useCustomMutation\"),\n },\n });\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: mutationResult.isPending,\n });\n\n return {\n mutation: mutationResult,\n mutate: mutationResult.mutate,\n mutateAsync: mutationResult.mutateAsync,\n overtime: { elapsedTime },\n };\n};\n","import { useCallback, useContext } from \"react\";\n\nimport { DataContext } from \"@contexts/data\";\nimport { type DataProvider, IDataContext } from \"../../contexts/data/types\";\nexport const useDataProvider = (): ((\n /**\n * The name of the `data provider` you want to access\n */\n dataProviderName?: string,\n) => DataProvider) => {\n const context = useContext(DataContext);\n\n const handleDataProvider = useCallback(\n (dataProviderName?: string) => {\n if (dataProviderName) {\n const dataProvider = context?.[dataProviderName];\n if (!dataProvider) {\n throw new Error(`\"${dataProviderName}\" Data provider not found`);\n }\n\n if (dataProvider && !context?.default) {\n throw new Error(\n \"If you have multiple data providers, you must provide default data provider property\",\n );\n }\n\n return context[dataProviderName];\n }\n\n if (context.default) {\n return context.default;\n }\n\n throw new Error(\n `There is no \"default\" data provider. Please pass dataProviderName.`,\n );\n },\n [context],\n );\n\n return handleDataProvider;\n};\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type { DataProvider, DataProviders, IDataContext } from \"./types\";\n\nexport const defaultDataProvider: DataProviders = {\n default: {} as DataProvider,\n};\n\nexport const DataContext =\n React.createContext<IDataContext>(defaultDataProvider);\n\ntype Props = PropsWithChildren<{\n dataProvider?: DataProvider | DataProviders;\n}>;\n\nexport const DataContextProvider: React.FC<Props> = ({\n children,\n dataProvider,\n}) => {\n let providerValue = defaultDataProvider;\n\n if (dataProvider) {\n if (\n !(\"default\" in dataProvider) &&\n (\"getList\" in dataProvider || \"getOne\" in dataProvider)\n ) {\n providerValue = {\n default: dataProvider,\n };\n } else {\n providerValue = dataProvider;\n }\n }\n\n return (\n <DataContext.Provider value={providerValue}>\n {children}\n </DataContext.Provider>\n );\n};\n","import { useEffect } from \"react\";\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type InfiniteData,\n type UseInfiniteQueryOptions,\n type UseInfiniteQueryResult,\n useInfiniteQuery,\n} from \"@tanstack/react-query\";\n\nimport {\n getNextPageParam,\n getPreviousPageParam,\n handlePaginationParams,\n pickDataProvider,\n prepareQueryContext,\n} from \"@definitions/helpers\";\nimport {\n useDataProvider,\n useHandleNotification,\n useKeys,\n useMeta,\n useOnError,\n useResourceParams,\n useResourceSubscription,\n useTranslate,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CrudFilter,\n CrudSort,\n GetListResponse,\n HttpError,\n MetaQuery,\n Pagination,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport type { MakeOptional } from \"../../definitions/types\";\n\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\n\nexport interface UseInfiniteListConfig {\n pagination?: Pagination;\n hasPagination?: boolean;\n filters?: CrudFilter[];\n}\n\ntype BaseInfiniteListProps = {\n /**\n * Metadata query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Pagination properties\n */\n pagination?: Pagination;\n /**\n * Sorter parameters\n */\n sorters?: CrudSort[];\n /**\n * Filter parameters\n */\n filters?: CrudFilter[];\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use\n */\n dataProviderName?: string;\n};\n\n// Custom type to extend UseInfiniteQueryOptions\nexport type UseInfiniteListQueryOptions<TQueryFnData, TError, TData> =\n MakeOptional<\n UseInfiniteQueryOptions<\n GetListResponse<TQueryFnData>,\n TError,\n InfiniteData<GetListResponse<TData>>\n >,\n \"queryKey\" | \"queryFn\" | \"initialPageParam\"\n >;\n\nexport type UseInfiniteListProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * Tanstack Query's [useInfiniteQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useInfiniteQuery) options\n */\n queryOptions?: Omit<\n UseInfiniteListQueryOptions<TQueryFnData, TError, TData>,\n \"getNextPageParam\"\n > & {\n /**\n * Make `getNextPageParam` optional to allow custom pagination logic\n */\n getNextPageParam?: UseInfiniteListQueryOptions<\n TQueryFnData,\n TError,\n TData\n >[\"getNextPageParam\"];\n };\n} & BaseInfiniteListProps &\n SuccessErrorNotification<\n InfiniteData<GetListResponse<TData>>,\n TError,\n Prettify<BaseInfiniteListProps>\n > &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps & {\n onSuccess?: (data: InfiniteData<GetListResponse<TData>>) => void;\n onError?: (error: TError) => void;\n };\n\nexport type UseInfiniteListReturnType<TData, TError> = {\n query: UseInfiniteQueryResult<InfiniteData<GetListResponse<TData>>, TError>;\n result: {\n data: InfiniteData<GetListResponse<TData>> | undefined;\n hasNextPage: boolean | undefined;\n hasPreviousPage: boolean | undefined;\n };\n} & UseLoadingOvertimeReturnType;\n\n/**\n * `useInfiniteList` is a modified version of `react-query`'s {@link https://tanstack.com/query/latest/docs/react/guides/infinite-queries `useInfiniteQuery`} used for retrieving items from a `resource` with pagination, sort, and filter configurations.\n *\n * It uses the `getList` method as the query function from the `dataProvider` which is passed to `<Refine>`.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/data/useInfiniteList} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport const useInfiniteList = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n resource: resourceFromProp,\n filters,\n pagination,\n sorters,\n queryOptions,\n successNotification,\n errorNotification,\n meta,\n liveMode,\n onLiveEvent,\n liveParams,\n dataProviderName,\n overtimeOptions,\n onSuccess,\n onError,\n}: UseInfiniteListProps<\n TQueryFnData,\n TError,\n TData\n>): UseInfiniteListReturnType<TData, TError> => {\n const { resources, resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { mutate: checkError } = useOnError();\n const handleNotification = useHandleNotification();\n const getMeta = useMeta();\n const { keys } = useKeys();\n\n const pickedDataProvider = pickDataProvider(\n identifier,\n dataProviderName,\n resources,\n );\n const preferredMeta = meta;\n const prefferedFilters = filters;\n const prefferedSorters = sorters;\n const prefferedPagination = handlePaginationParams({\n pagination,\n });\n const isServerPagination = prefferedPagination.mode === \"server\";\n const notificationValues = {\n meta: preferredMeta,\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n pagination: prefferedPagination,\n sorters: prefferedSorters,\n };\n\n const isEnabled =\n queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n const combinedMeta = getMeta({ resource, meta: preferredMeta });\n\n const { getList } = dataProvider(pickedDataProvider);\n\n useResourceSubscription({\n resource: identifier,\n types: [\"*\"],\n params: {\n meta: combinedMeta,\n pagination: prefferedPagination,\n hasPagination: isServerPagination,\n sort: prefferedSorters,\n sorters: prefferedSorters,\n filters: prefferedFilters,\n subscriptionType: \"useList\",\n ...liveParams,\n },\n channel: `resources/${resource?.name}`,\n enabled: isEnabled,\n liveMode,\n onLiveEvent,\n meta: {\n ...combinedMeta,\n dataProviderName: pickedDataProvider,\n },\n });\n\n const queryResponse = useInfiniteQuery<\n GetListResponse<TQueryFnData>,\n TError,\n InfiniteData<GetListResponse<TData>>\n >({\n queryKey: keys()\n .data(pickedDataProvider)\n .resource(identifier)\n .action(\"infinite\")\n .params({\n ...(preferredMeta || {}),\n filters: prefferedFilters,\n hasPagination: isServerPagination,\n ...(isServerPagination && {\n pagination: prefferedPagination,\n }),\n ...(sorters && {\n sorters,\n }),\n })\n .get(),\n queryFn: (context) => {\n const paginationProperties = {\n ...prefferedPagination,\n currentPage: context.pageParam,\n };\n\n const meta = {\n ...combinedMeta,\n ...prepareQueryContext(context),\n };\n\n return getList<TQueryFnData>({\n resource: resource?.name || \"\",\n pagination: prefferedPagination,\n filters: prefferedFilters,\n sorters: prefferedSorters,\n meta,\n }).then(({ data, total, ...rest }) => {\n return {\n data,\n total,\n pagination: paginationProperties,\n ...rest,\n };\n });\n },\n initialPageParam:\n queryOptions?.initialPageParam ?? prefferedPagination.currentPage,\n getNextPageParam: (lastPage) => getNextPageParam(lastPage),\n getPreviousPageParam: (lastPage) => getPreviousPageParam(lastPage),\n ...queryOptions,\n meta: {\n ...(queryOptions?.meta ?? {}),\n ...getXRay(\"useInfiniteList\", resource?.name),\n },\n });\n\n // Handle success\n useEffect(() => {\n if (queryResponse.isSuccess && queryResponse.data) {\n const notificationConfig =\n typeof successNotification === \"function\"\n ? successNotification(\n queryResponse.data as unknown as InfiniteData<\n GetListResponse<TData>\n >,\n notificationValues,\n identifier,\n )\n : successNotification;\n\n handleNotification(notificationConfig);\n\n onSuccess?.(\n queryResponse.data as unknown as InfiniteData<GetListResponse<TData>>,\n );\n }\n }, [\n queryResponse.isSuccess,\n queryResponse.data,\n successNotification,\n onSuccess,\n ]);\n\n // Handle error\n useEffect(() => {\n if (queryResponse.isError && queryResponse.error) {\n checkError(queryResponse.error);\n\n const notificationConfig =\n typeof errorNotification === \"function\"\n ? errorNotification(\n queryResponse.error,\n notificationValues,\n identifier,\n )\n : errorNotification;\n\n handleNotification(notificationConfig, {\n key: `${identifier}-useInfiniteList-notification`,\n message: translate(\n \"notifications.error\",\n { statusCode: queryResponse.error.statusCode },\n `Error (status code: ${queryResponse.error.statusCode})`,\n ),\n description: queryResponse.error.message,\n type: \"error\",\n });\n\n onError?.(queryResponse.error);\n }\n }, [queryResponse.isError, queryResponse.error?.message]);\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading: queryResponse.isFetching,\n });\n\n queryResponse.data?.pages;\n\n return {\n query: queryResponse,\n result: {\n data: queryResponse.data,\n hasNextPage: queryResponse.hasNextPage,\n hasPreviousPage: queryResponse.hasPreviousPage,\n },\n overtime: { elapsedTime },\n };\n};\n","import { useContext, useEffect } from \"react\";\n\nimport { LiveContext } from \"@contexts/live\";\nimport { RefineContext } from \"@contexts/refine\";\nimport { useInvalidate } from \"@hooks/invalidate\";\nimport { useResourceParams } from \"@hooks\";\n\nimport type {\n BaseKey,\n CrudFilter,\n CrudSort,\n MetaQuery,\n Pagination,\n} from \"../../../contexts/data/types\";\nimport type { LiveEvent, LiveModeProps } from \"../../../contexts/live/types\";\nimport type { IRefineContext } from \"../../../contexts/refine/types\";\n\nexport type UseResourceSubscriptionProps = {\n channel: string;\n params?: {\n ids?: BaseKey[];\n id?: BaseKey;\n sorters?: CrudSort[];\n filters?: CrudFilter[];\n subscriptionType: \"useList\" | \"useOne\" | \"useMany\";\n [key: string]: any;\n };\n types: LiveEvent[\"type\"][];\n resource?: string;\n enabled?: boolean;\n meta?: MetaQuery & { dataProviderName?: string };\n} & LiveModeProps;\n\nexport type PublishType = (event: LiveEvent) => void;\n\nexport const useResourceSubscription = ({\n resource: resourceFromProp,\n params,\n channel,\n types,\n enabled = true,\n liveMode: liveModeFromProp,\n onLiveEvent,\n meta,\n}: UseResourceSubscriptionProps): void => {\n const { resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n\n const { liveProvider } = useContext(LiveContext);\n const {\n liveMode: liveModeFromContext,\n onLiveEvent: onLiveEventContextCallback,\n } = useContext<IRefineContext>(RefineContext);\n\n const liveMode = liveModeFromProp ?? liveModeFromContext;\n\n const invalidate = useInvalidate();\n\n const dataProviderName =\n meta?.dataProviderName ?? resource?.meta?.dataProviderName;\n\n useEffect(() => {\n let subscription: any;\n\n const callback = (event: LiveEvent) => {\n if (liveMode === \"auto\") {\n invalidate({\n resource: identifier,\n dataProviderName,\n invalidates: [\"resourceAll\"],\n invalidationFilters: {\n type: \"active\",\n refetchType: \"active\",\n },\n invalidationOptions: { cancelRefetch: false },\n });\n }\n\n onLiveEvent?.(event);\n onLiveEventContextCallback?.(event);\n };\n\n if (liveMode && liveMode !== \"off\" && enabled) {\n subscription = liveProvider?.subscribe({\n channel,\n params: {\n resource: resource?.name,\n ...params,\n },\n types,\n callback,\n meta: {\n ...meta,\n dataProviderName,\n },\n });\n }\n\n return () => {\n if (subscription) {\n liveProvider?.unsubscribe(subscription);\n }\n };\n }, [enabled]);\n};\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type { ILiveContext } from \"./types\";\n\nexport const LiveContext = React.createContext<ILiveContext>({});\n\nexport const LiveContextProvider: React.FC<PropsWithChildren<ILiveContext>> = ({\n liveProvider,\n children,\n}) => {\n return (\n <LiveContext.Provider value={{ liveProvider }}>\n {children}\n </LiveContext.Provider>\n );\n};\n","import { useCallback } from \"react\";\n\nimport {\n type InvalidateOptions,\n type InvalidateQueryFilters,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { pickDataProvider } from \"@definitions\";\nimport { useKeys, useResourceParams } from \"@hooks\";\n\nimport type { BaseKey, IQueryKeys } from \"../../contexts/data/types\";\n\nexport type UseInvalidateProp = {\n resource?: string;\n id?: BaseKey;\n dataProviderName?: string;\n invalidates: Array<keyof IQueryKeys> | false;\n invalidationFilters?: InvalidateQueryFilters;\n invalidationOptions?: InvalidateOptions;\n};\n\nexport const useInvalidate = (): ((\n props: UseInvalidateProp,\n) => Promise<void>) => {\n const { resources } = useResourceParams();\n const queryClient = useQueryClient();\n const { keys } = useKeys();\n\n const invalidate = useCallback(\n async ({\n resource,\n dataProviderName,\n invalidates,\n id,\n invalidationFilters = { type: \"all\", refetchType: \"active\" },\n invalidationOptions = { cancelRefetch: false },\n }: UseInvalidateProp) => {\n if (invalidates === false) {\n return;\n }\n const dp = pickDataProvider(resource, dataProviderName, resources);\n\n const queryKey = keys()\n .data(dp)\n .resource(resource ?? \"\");\n\n await Promise.all(\n invalidates.map((key) => {\n switch (key) {\n case \"all\":\n return queryClient.invalidateQueries({\n queryKey: keys().data(dp).get(),\n ...invalidationFilters,\n ...invalidationOptions,\n });\n case \"list\":\n return queryClient.invalidateQueries({\n queryKey: queryKey.action(\"list\").get(),\n ...invalidationFilters,\n ...invalidationOptions,\n });\n case \"many\":\n return queryClient.invalidateQueries({\n queryKey: queryKey.action(\"many\").get(),\n ...invalidationFilters,\n ...invalidationOptions,\n });\n case \"resourceAll\":\n return queryClient.invalidateQueries({\n queryKey: queryKey.get(),\n ...invalidationFilters,\n ...invalidationOptions,\n });\n case \"detail\":\n return queryClient.invalidateQueries({\n queryKey: queryKey\n .action(\"one\")\n .id(id || \"\")\n .get(),\n ...invalidationFilters,\n ...invalidationOptions,\n });\n default:\n return;\n }\n }),\n );\n\n return;\n },\n [],\n );\n\n return invalidate;\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\n\nimport type { LiveModeProps } from \"../../../contexts/live/types\";\nimport type { IRefineContext } from \"../../../contexts/refine/types\";\n\nexport const useLiveMode = (\n liveMode: LiveModeProps[\"liveMode\"],\n): LiveModeProps[\"liveMode\"] => {\n const { liveMode: liveModeFromContext } =\n useContext<IRefineContext>(RefineContext);\n\n return liveMode ?? liveModeFromContext;\n};\n","import { useContext, useEffect } from \"react\";\n\nimport { LiveContext } from \"@contexts/live\";\n\nimport type {\n BaseKey,\n CrudFilter,\n CrudSort,\n MetaQuery,\n Pagination,\n} from \"../../../contexts/data/types\";\nimport type { LiveEvent } from \"../../../contexts/live/types\";\n\nexport type UseSubscriptionProps = {\n /**\n * Channel name to subscribe.\n */\n channel: string;\n /**\n * Callback that is run when new events from subscription arrive.\n */\n onLiveEvent: (event: LiveEvent) => void;\n /**\n * Type of events to subscribe. `\"*\"` means all events.\n * @type Array<\"deleted\" | \"updated\" | \"created\" | \"*\" | string>\n */\n types?: LiveEvent[\"type\"][];\n /**\n * Determines subscription should subscribe or not.\n * @type Array<\"deleted\" | \"updated\" | \"created\" | \"*\" | string>\n */\n enabled?: boolean;\n params?: {\n ids?: BaseKey[];\n id?: BaseKey;\n sorters?: CrudSort[];\n filters?: CrudFilter[];\n subscriptionType?: \"useList\" | \"useOne\" | \"useMany\";\n resource?: string;\n [key: string]: any;\n };\n meta?: MetaQuery & { dataProviderName?: string };\n};\n\nexport const useSubscription = ({\n params,\n channel,\n types = [\"*\"],\n enabled = true,\n onLiveEvent,\n meta,\n}: UseSubscriptionProps): void => {\n const { liveProvider } = useContext(LiveContext);\n\n useEffect(() => {\n let subscription: any;\n\n if (enabled) {\n subscription = liveProvider?.subscribe({\n channel,\n params,\n types,\n callback: onLiveEvent,\n meta: {\n ...meta,\n dataProviderName: meta?.dataProviderName ?? \"default\",\n },\n });\n }\n\n return () => {\n if (subscription) {\n liveProvider?.unsubscribe(subscription);\n }\n };\n }, [enabled]);\n};\n","import { useContext } from \"react\";\n\nimport { LiveContext } from \"@contexts/live\";\nimport type { LiveProvider } from \"../../../contexts/live/types\";\n\nexport const usePublish: () => NonNullable<LiveProvider>[\"publish\"] = () => {\n const { liveProvider } = useContext(LiveContext);\n\n return liveProvider?.publish;\n};\n","import { useContext } from \"react\";\n\nimport { UndoableQueueContext } from \"@contexts/undoableQueue\";\nimport type { IUndoableQueue } from \"../../../contexts/undoableQueue/types\";\n\nexport type UseCancelNotificationType = () => {\n notifications: IUndoableQueue[];\n notificationDispatch: React.Dispatch<any>;\n};\n\nexport const useCancelNotification: UseCancelNotificationType = () => {\n const { notifications, notificationDispatch } =\n useContext(UndoableQueueContext);\n\n return { notifications, notificationDispatch };\n};\n","import React, {\n createContext,\n useReducer,\n type PropsWithChildren,\n} from \"react\";\n\nimport isEqual from \"lodash/isEqual\";\n\nimport { UndoableQueue } from \"../../components\";\nimport {\n ActionTypes,\n type IUndoableQueue,\n type IUndoableQueueContext,\n} from \"./types\";\n\nexport const UndoableQueueContext = createContext<IUndoableQueueContext>({\n notifications: [],\n notificationDispatch: () => false,\n});\n\nconst initialState: IUndoableQueue[] = [];\n\nexport const undoableQueueReducer = (state: IUndoableQueue[], action: any) => {\n switch (action.type) {\n case ActionTypes.ADD: {\n const newState = state.filter((notificationItem: IUndoableQueue) => {\n return !(\n isEqual(notificationItem.id, action.payload.id) &&\n notificationItem.resource === action.payload.resource\n );\n });\n\n return [\n ...newState,\n {\n ...action.payload,\n isRunning: true,\n },\n ];\n }\n case ActionTypes.REMOVE:\n return state.filter(\n (notificationItem: IUndoableQueue) =>\n !(\n isEqual(notificationItem.id, action.payload.id) &&\n notificationItem.resource === action.payload.resource\n ),\n );\n case ActionTypes.DECREASE_NOTIFICATION_SECOND:\n return state.map((notificationItem: IUndoableQueue) => {\n if (\n isEqual(notificationItem.id, action.payload.id) &&\n notificationItem.resource === action.payload.resource\n ) {\n return {\n ...notificationItem,\n seconds: action.payload.seconds - 1000,\n };\n }\n return notificationItem;\n });\n default:\n return state;\n }\n};\n\nexport const UndoableQueueContextProvider: React.FC<PropsWithChildren> = ({\n children,\n}) => {\n const [notifications, notificationDispatch] = useReducer(\n undoableQueueReducer,\n initialState,\n );\n\n const notificationData = { notifications, notificationDispatch };\n\n return (\n <UndoableQueueContext.Provider value={notificationData}>\n {children}\n {typeof window !== \"undefined\"\n ? notifications.map((notification) => (\n <UndoableQueue\n key={`${notification.id}-${notification.resource}-queue`}\n notification={notification}\n />\n ))\n : null}\n </UndoableQueueContext.Provider>\n );\n};\n","import { useContext } from \"react\";\n\nimport { NotificationContext } from \"@contexts/notification\";\nimport type { INotificationContext } from \"../../../contexts/notification/types\";\n\nexport const useNotification = (): INotificationContext => {\n const { open, close } = useContext(NotificationContext);\n\n return { open, close };\n};\n","import React, { createContext, type PropsWithChildren } from \"react\";\n\nimport type { INotificationContext } from \"./types\";\n\nexport const NotificationContext = createContext<INotificationContext>({});\n\nexport const NotificationContextProvider: React.FC<\n PropsWithChildren<INotificationContext>\n> = ({ open, close, children }) => {\n return (\n <NotificationContext.Provider value={{ open, close }}>\n {children}\n </NotificationContext.Provider>\n );\n};\n","import { useCallback } from \"react\";\n\nimport { useNotification } from \"@hooks\";\n\nimport type { OpenNotificationParams } from \"../../../contexts/notification/types\";\n\nexport const useHandleNotification = (): typeof handleNotification => {\n const { open } = useNotification();\n\n const handleNotification = useCallback(\n (\n notification: OpenNotificationParams | false | undefined,\n fallbackNotification?: OpenNotificationParams,\n ) => {\n if (notification !== false) {\n if (notification) {\n open?.(notification);\n } else if (fallbackNotification) {\n open?.(fallbackNotification);\n }\n }\n },\n [],\n );\n\n return handleNotification;\n};\n","import { useCallback, useContext } from \"react\";\n\nimport { I18nContext } from \"@contexts/i18n\";\n\n/**\n * If you need to change the locale at runtime, refine provides the `useSetLocale` hook.\n * It returns the changeLocale method from `i18nProvider` under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/translate/useSetLocale} for more details.\n */\nexport const useSetLocale = () => {\n const { i18nProvider } = useContext(I18nContext);\n\n return useCallback((lang: string) => i18nProvider?.changeLocale(lang), []);\n};\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type { II18nContext } from \"./types\";\n\nexport const I18nContext = React.createContext<II18nContext>({});\n\nexport const I18nContextProvider: React.FC<PropsWithChildren<II18nContext>> = ({\n children,\n i18nProvider,\n}) => {\n return (\n <I18nContext.Provider\n value={{\n i18nProvider,\n }}\n >\n {children}\n </I18nContext.Provider>\n );\n};\n","import { useContext, useMemo } from \"react\";\n\nimport { I18nContext } from \"@contexts/i18n\";\n\n/**\n * If you need to translate the texts in your own components, refine provides the `useTranslate` hook.\n * It returns the translate method from `i18nProvider` under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/translate/useTranslate} for more details.\n */\nexport const useTranslate = () => {\n const { i18nProvider } = useContext(I18nContext);\n\n const fn = useMemo(() => {\n function translate(\n key: string,\n options?: any,\n defaultMessage?: string,\n ): string;\n function translate(key: string, defaultMessage?: string): string;\n\n function translate(\n key: string,\n options?: string | any,\n defaultMessage?: string,\n ) {\n return (\n i18nProvider?.translate(key, options, defaultMessage) ??\n defaultMessage ??\n (typeof options === \"string\" && typeof defaultMessage === \"undefined\"\n ? options\n : key)\n );\n }\n\n return translate;\n }, [i18nProvider]);\n\n return fn;\n};\n","import { useCallback, useContext } from \"react\";\n\nimport { I18nContext } from \"@contexts/i18n\";\n\nexport type UseGetLocaleType = () => () => string;\n\n/**\n * If you need to know the current locale, refine provides the `useGetLocale` hook.\n * It returns the `getLocale` method from `i18nProvider` under the hood.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/translate/useGetLocale} for more details.\n */\nexport const useGetLocale: UseGetLocaleType = () => {\n const { i18nProvider } = useContext(I18nContext);\n\n if (!i18nProvider) {\n throw new Error(\n \"useGetLocale cannot be called without i18n provider being defined.\",\n );\n }\n\n return useCallback(() => i18nProvider.getLocale(), []);\n};\n","import { useGetLocale } from \"./useGetLocale\";\nimport { useSetLocale } from \"./useSetLocale\";\nimport { useTranslate } from \"./useTranslate\";\n\n/**\n * It combines `useTranslate`, `useSetLocale` and `useGetLocale` hooks for a better developer experience.\n * It returns `i18nProvider` methods under the hood.\n * @returns `translate` method to translate the texts.\n * @returns `changeLocale` method to change the locale\n * @returns `getLocale` method to get the current locale.\n *\n * @see {@link https://refine.dev/docs/i18n/i18n-provider/} for more details.\n */\nexport const useTranslation = () => {\n const translate = useTranslate();\n const changeLocale = useSetLocale();\n const getLocale = useGetLocale();\n\n return {\n translate,\n changeLocale,\n getLocale,\n };\n};\n","import { useState } from \"react\";\n\nimport papaparse from \"papaparse\";\nimport warnOnce from \"warn-once\";\n\nimport {\n downloadInBrowser,\n pickDataProvider,\n useUserFriendlyName,\n} from \"@definitions\";\nimport { useDataProvider, useMeta, useResourceParams } from \"@hooks\";\n\nimport type {\n BaseRecord,\n CrudFilter,\n CrudSort,\n MetaQuery,\n} from \"../../contexts/data/types\";\nimport type { MapDataFn } from \"./types\";\n\ntype UseExportOptionsType<\n TData extends BaseRecord = BaseRecord,\n TVariables = any,\n> = {\n /**\n * Resource name for API data interactions\n * @default Resource name that it reads from route\n */\n resource?: string;\n /**\n * A mapping function that runs for every record. Mapped data will be included in the file contents\n */\n mapData?: MapDataFn<TData, TVariables>;\n /**\n * Sorts records\n */\n sorters?: CrudSort[];\n /**\n * Filters records\n */\n filters?: CrudFilter[];\n maxItemCount?: number;\n /**\n * Requests to fetch data are made as batches by page size. By default, it is 20. Used for `getList` method of `DataProvider`\n */\n pageSize?: number;\n /**\n * Used for exporting options\n * @type [UnparseConfig](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/papaparse)\n */\n unparseConfig?: papaparse.UnparseConfig;\n /**\n * Metadata query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n /**\n * Callback to handle error events of this hook\n */\n onError?: (error: any) => void;\n /**\n * Whether to generate download of the CSV in browser environments, defaults to true.\n */\n download?: boolean;\n /**\n * Custom filename for the export file\n */\n filename?: string;\n /**\n * Whether to use text file format instead of CSV\n * @default false\n */\n useTextFile?: boolean;\n /**\n * Whether to include BOM (Byte Order Mark) in the file\n * @default true\n */\n useBom?: boolean;\n /**\n * Title to be shown at the top of the exported file\n */\n title?: string;\n /**\n * Whether to show the title in the exported file\n * @default false\n */\n showTitle?: boolean;\n};\n\ntype UseExportReturnType = {\n isLoading: boolean;\n triggerExport: () => Promise<string | undefined>;\n};\n\n/**\n * `useExport` hook allows you to make your resources exportable.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/import-export/useExport} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TVariables - Values for params.\n *\n */\nexport const useExport = <\n TData extends BaseRecord = BaseRecord,\n TVariables = any,\n>({\n resource: resourceFromProps,\n sorters,\n filters,\n maxItemCount,\n pageSize = 20,\n mapData = (item) => item as any,\n unparseConfig,\n meta,\n dataProviderName,\n onError,\n download,\n filename: customFilename,\n useTextFile = false,\n useBom = true,\n title = \"My Generated Report\",\n showTitle = false,\n}: UseExportOptionsType<TData, TVariables> = {}): UseExportReturnType => {\n const [isLoading, setIsLoading] = useState(false);\n\n const dataProvider = useDataProvider();\n const getMeta = useMeta();\n const { resource, resources, identifier } = useResourceParams({\n resource: resourceFromProps,\n });\n const getFriendlyName = useUserFriendlyName();\n\n const defaultFilename = `${getFriendlyName(\n identifier,\n \"plural\",\n )}-${new Date().toLocaleString()}`;\n\n const filename = customFilename ?? defaultFilename;\n\n const { getList } = dataProvider(\n pickDataProvider(identifier, dataProviderName, resources),\n );\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const triggerExport = async () => {\n setIsLoading(true);\n\n let rawData: BaseRecord[] = [];\n\n let currentPage = 1;\n let preparingData = true;\n while (preparingData) {\n try {\n const { data, total } = await getList<TData>({\n resource: resource?.name ?? \"\",\n filters,\n sorters: sorters ?? [],\n pagination: {\n currentPage,\n pageSize,\n mode: \"server\",\n },\n meta: combinedMeta,\n });\n\n currentPage++;\n\n rawData.push(...data);\n\n if (maxItemCount && rawData.length >= maxItemCount) {\n rawData = rawData.slice(0, maxItemCount);\n preparingData = false;\n }\n\n if (total === rawData.length) {\n preparingData = false;\n }\n } catch (error) {\n setIsLoading(false);\n preparingData = false;\n\n onError?.(error);\n\n return;\n }\n }\n\n // Use provided unparseConfig or create default one\n const finalUnparseConfig: papaparse.UnparseConfig = {\n // Default settings for better compatibility\n quotes: true,\n header: true,\n ...unparseConfig,\n };\n\n let csv = papaparse.unparse(\n rawData.map(mapData as any),\n finalUnparseConfig,\n );\n if (showTitle) {\n csv = `${title}\\r\\n\\n${csv}`;\n }\n\n if (typeof window !== \"undefined\" && csv.length > 0 && (download ?? true)) {\n const fileExtension = useTextFile ? \".txt\" : \".csv\";\n const fileType = `text/${useTextFile ? \"plain\" : \"csv\"};charset=utf8;`;\n const downloadFilename = `${filename.replace(/ /g, \"_\")}${fileExtension}`;\n\n downloadInBrowser(\n downloadFilename,\n `${useBom ? \"\\ufeff\" : \"\"}${csv}`,\n fileType,\n );\n }\n\n setIsLoading(false);\n return csv;\n };\n\n return {\n isLoading,\n triggerExport,\n };\n};\n","import React from \"react\";\nimport warnOnce from \"warn-once\";\n\nimport {\n useMeta,\n useOne,\n useCreate,\n useUpdate,\n useResourceParams,\n useInvalidate,\n useMutationMode,\n useRefineOptions,\n useLoadingOvertime,\n useWarnAboutChange,\n useRedirectionAfterSubmission,\n} from \"@hooks\";\n\nimport {\n redirectPage,\n asyncDebounce,\n deferExecution,\n} from \"@definitions/helpers\";\n\nimport type { UpdateParams } from \"../data/useUpdate\";\nimport type { UseCreateParams } from \"../data/useCreate\";\nimport type { UseFormProps, UseFormReturnType } from \"./types\";\nimport type {\n BaseKey,\n BaseRecord,\n CreateResponse,\n HttpError,\n UpdateResponse,\n} from \"../../contexts/data/types\";\n\nexport type {\n ActionParams,\n UseFormProps,\n UseFormReturnType,\n AutoSaveIndicatorElements,\n AutoSaveProps,\n AutoSaveReturnType,\n FormAction,\n RedirectAction,\n FormWithSyncWithLocationParams,\n} from \"./types\";\n\n/**\n * This hook orchestrates Refine's data hooks to create, edit, and clone data. It also provides a set of features to make it easier for users to implement their real world needs and handle edge cases such as redirects, invalidation, auto-save and more.\n *\n * @see {@link https://refine.dev/docs/data/hooks/use-form} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/core/interface-references/#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/core/interface-references/#httperror `HttpError`}\n * @typeParam TVariables - Values for params. default `{}`\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/core/interface-references/#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n * @typeParam TResponse - Result data returned by the mutation function. Extends {@link https://refine.dev/docs/core/interface-references/#baserecord `BaseRecord`}. Defaults to `TData`\n * @typeParam TResponseError - Custom error object that extends {@link https://refine.dev/docs/core/interface-references/#httperror `HttpError`}. Defaults to `TError`\n *\n */\nexport const useForm = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n TData extends BaseRecord = TQueryFnData,\n TResponse extends BaseRecord = TData,\n TResponseError extends HttpError = TError,\n>(\n props: UseFormProps<\n TQueryFnData,\n TError,\n TVariables,\n TData,\n TResponse,\n TResponseError\n > = {},\n): UseFormReturnType<\n TQueryFnData,\n TError,\n TVariables,\n TData,\n TResponse,\n TResponseError\n> => {\n const getMeta = useMeta();\n const invalidate = useInvalidate();\n const { redirect: defaultRedirect } = useRefineOptions();\n const { mutationMode: defaultMutationMode } = useMutationMode();\n\n const { setWarnWhen } = useWarnAboutChange();\n const handleSubmitWithRedirect = useRedirectionAfterSubmission();\n\n const pickedMeta = props.meta;\n const mutationMode = props.mutationMode ?? defaultMutationMode;\n\n const {\n id,\n setId,\n resource,\n identifier,\n formAction: action,\n } = useResourceParams({\n resource: props.resource,\n id: props.id,\n action: props.action,\n });\n\n const [autosaved, setAutosaved] = React.useState(false);\n\n const isEdit = action === \"edit\";\n const isClone = action === \"clone\";\n const isCreate = action === \"create\";\n\n const combinedMeta = getMeta({\n resource,\n meta: pickedMeta,\n });\n\n const isIdRequired = (isEdit || isClone) && Boolean(props.resource);\n const isIdDefined = typeof props.id !== \"undefined\";\n const isQueryDisabled = props.queryOptions?.enabled === false;\n\n /**\n * When a custom resource is provided through props, `id` will not be inferred from the URL to avoid any potential faulty requests.\n * In this case, `id` is required to be passed through props.\n * If `id` is not handled, a warning will be thrown in development mode.\n */\n warnOnce(\n isIdRequired && !isIdDefined && !isQueryDisabled,\n idWarningMessage(action, identifier, id),\n );\n\n /**\n * Target action to redirect after form submission.\n */\n const redirectAction = redirectPage({\n redirectFromProps: props.redirect,\n action,\n redirectOptions: defaultRedirect,\n });\n\n /**\n * Redirection function to be used in internal redirects and to be provided to the user.\n */\n const redirect: UseFormReturnType[\"redirect\"] = (\n redirect = isEdit ? \"list\" : \"edit\",\n redirectId = id,\n routeParams = {},\n ) => {\n handleSubmitWithRedirect({\n redirect: redirect,\n resource,\n id: redirectId,\n meta: { ...pickedMeta, ...routeParams },\n });\n };\n\n const queryResult = useOne<TQueryFnData, TError, TData>({\n resource: identifier,\n id,\n queryOptions: {\n // Only enable the query if it's not a create action and the `id` is defined\n enabled: !isCreate && id !== undefined,\n ...props.queryOptions,\n },\n liveMode: props.liveMode,\n onLiveEvent: props.onLiveEvent,\n liveParams: props.liveParams,\n meta: { ...combinedMeta, ...props.queryMeta },\n dataProviderName: props.dataProviderName,\n overtimeOptions: { enabled: false },\n });\n\n const createMutation = useCreate<TResponse, TResponseError, TVariables>({\n mutationOptions: props.createMutationOptions,\n overtimeOptions: { enabled: false },\n });\n\n const updateMutation = useUpdate<TResponse, TResponseError, TVariables>({\n mutationOptions: props.updateMutationOptions,\n overtimeOptions: { enabled: false },\n });\n\n const mutationResult = isEdit ? updateMutation : createMutation;\n const isMutationLoading = mutationResult.mutation.isPending;\n const formLoading = isMutationLoading || queryResult.query.isFetching;\n\n const { elapsedTime } = useLoadingOvertime({\n ...props.overtimeOptions,\n isLoading: formLoading,\n });\n\n React.useEffect(() => {\n // After `autosaved` is set to `true`, it won't be set to `false` again.\n // Therefore, the `invalidate` function will be called only once at the end of the hooks lifecycle.\n return () => {\n if (\n props.autoSave?.invalidateOnUnmount &&\n autosaved &&\n identifier &&\n typeof id !== \"undefined\"\n ) {\n invalidate({\n id,\n invalidates: props.invalidates || [\"list\", \"many\", \"detail\"],\n dataProviderName: props.dataProviderName,\n resource: identifier,\n });\n }\n };\n }, [props.autoSave?.invalidateOnUnmount, autosaved]);\n\n const onFinish = async (\n values: TVariables,\n { isAutosave = false }: { isAutosave?: boolean } = {},\n ) => {\n const isPessimistic = mutationMode === \"pessimistic\";\n\n // Disable warning trigger when the form is being submitted\n setWarnWhen(false);\n\n // Redirect after a successful form submission\n const onSuccessRedirect = (id?: BaseKey) => redirect(redirectAction, id);\n\n const submissionPromise = new Promise<\n CreateResponse<TResponse> | UpdateResponse<TResponse> | void\n >((resolve, reject) => {\n // Reject the mutation if the resource is not defined\n if (!resource) return reject(missingResourceError);\n // Reject the mutation if the `id` is not defined in edit action\n // This line is commented out because the `id` might not be set for some cases and edit is done on a resource.\n // if (isEdit && !id) return reject(missingIdError);\n // Reject the mutation if the `id` is not defined in clone action\n if (isClone && !id) return reject(missingIdError);\n // Reject the mutation if there's no `values` passed\n if (!values) return reject(missingValuesError);\n // Auto Save is only allowed in edit action\n if (isAutosave && !isEdit) return reject(autosaveOnNonEditError);\n\n if (!isPessimistic && !isAutosave) {\n // If the mutation mode is not pessimistic, handle the redirect immediately in an async manner\n // `setWarnWhen` blocks the redirects until set to `false`\n // If redirect is done before the value is properly set, it will be blocked.\n // We're deferring the execution of the redirect to ensure that the value is set properly.\n deferExecution(() => onSuccessRedirect());\n // Resolve the promise immediately\n resolve();\n }\n\n const variables:\n | UpdateParams<TResponse, TResponseError, TVariables>\n | UseCreateParams<TResponse, TResponseError, TVariables> = {\n values,\n resource: identifier ?? resource.name,\n meta: { ...combinedMeta, ...props.mutationMeta },\n dataProviderName: props.dataProviderName,\n invalidates: isAutosave ? [] : props.invalidates,\n successNotification: isAutosave ? false : props.successNotification,\n errorNotification: isAutosave ? false : props.errorNotification,\n // Update specific variables\n ...(isEdit\n ? {\n id: id ?? \"\",\n mutationMode,\n undoableTimeout: props.undoableTimeout,\n optimisticUpdateMap: props.optimisticUpdateMap,\n }\n : {}),\n };\n\n const { mutateAsync } = isEdit ? updateMutation : createMutation;\n\n mutateAsync(variables as any, {\n // Call user-defined `onMutationSuccess` and `onMutationError` callbacks if provided\n // These callbacks will not have an effect on the submission promise\n onSuccess: props.onMutationSuccess\n ? (data, _, context) => {\n props.onMutationSuccess?.(data, values, context, isAutosave);\n }\n : undefined,\n onError: props.onMutationError\n ? (error: TResponseError, _, context) => {\n props.onMutationError?.(error, values, context, isAutosave);\n }\n : undefined,\n })\n // If the mutation mode is pessimistic, resolve the promise after the mutation is succeeded\n .then((data) => {\n if (isPessimistic && !isAutosave) {\n deferExecution(() => onSuccessRedirect(data?.data?.id));\n }\n if (isAutosave) {\n setAutosaved(true);\n }\n resolve(data);\n })\n // If the mutation mode is pessimistic, reject the promise after the mutation is failed\n .catch(reject);\n });\n\n return submissionPromise;\n };\n\n const onFinishAutoSave = asyncDebounce(\n (values: TVariables) => onFinish(values, { isAutosave: true }),\n props.autoSave?.debounce || 1000,\n \"Cancelled by debounce\",\n );\n\n const overtime = {\n elapsedTime,\n };\n\n const autoSaveProps = {\n status: updateMutation.mutation.status,\n data: updateMutation.mutation.data,\n error: updateMutation.mutation.error,\n };\n\n return {\n onFinish,\n onFinishAutoSave,\n formLoading,\n mutation: mutationResult.mutation,\n query: queryResult.query,\n autoSaveProps,\n id,\n setId,\n redirect,\n overtime,\n };\n};\n\nconst missingResourceError = new Error(\n \"[useForm]: `resource` is not defined or not matched but is required\",\n);\n\nconst missingIdError = new Error(\n \"[useForm]: `id` is not defined but is required in edit and clone actions\",\n);\n\nconst missingValuesError = new Error(\n \"[useForm]: `values` is not provided but is required\",\n);\n\nconst autosaveOnNonEditError = new Error(\n \"[useForm]: `autoSave` is only allowed in edit action\",\n);\n\nconst idWarningMessage = (action?: string, identifier?: string, id?: BaseKey) =>\n `[useForm]: action: \"${action}\", resource: \"${identifier}\", id: ${id}\n\nIf you don't use the \\`setId\\` method to set the \\`id\\`, you should pass the \\`id\\` prop to \\`useForm\\`. Otherwise, \\`useForm\\` will not be able to infer the \\`id\\` from the current URL with custom resource provided.\n\nSee https://refine.dev/docs/data/hooks/use-form/#id-`;\n","import { useCallback } from \"react\";\n\nimport { useNavigation } from \"@hooks\";\n\nimport type { BaseKey, MetaQuery } from \"../../contexts/data/types\";\nimport type { IResourceItem } from \"../../contexts/resource/types\";\nimport type { RedirectAction } from \"../form/types\";\n\nexport type UseRedirectionAfterSubmissionType = () => (options: {\n redirect: RedirectAction;\n resource?: IResourceItem;\n id?: BaseKey;\n meta?: MetaQuery;\n}) => void;\n\nexport const useRedirectionAfterSubmission: UseRedirectionAfterSubmissionType =\n () => {\n const { show, edit, list, create } = useNavigation();\n\n const handleSubmitWithRedirect = useCallback(\n ({\n redirect,\n resource,\n id,\n meta = {},\n }: {\n redirect: RedirectAction;\n resource?: IResourceItem;\n id?: BaseKey;\n meta?: MetaQuery;\n }) => {\n if (redirect && resource) {\n if (!!resource.show && redirect === \"show\" && id) {\n return show(resource, id, undefined, meta);\n }\n\n if (!!resource.edit && redirect === \"edit\" && id) {\n return edit(resource, id, undefined, meta);\n }\n\n if (!!resource.create && redirect === \"create\") {\n return create(resource, undefined, meta);\n }\n\n return list(resource, \"push\", meta);\n }\n return;\n },\n [],\n );\n\n return handleSubmitWithRedirect;\n };\n","import React, { useCallback, useContext } from \"react\";\n\nimport { RouterContext } from \"@contexts/router\";\nimport { useResourceParams } from \"@hooks/use-resource-params\";\n\nimport type { BaseKey } from \"../../../contexts/data/types\";\nimport type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type {\n Action,\n GoConfig as GoConfigBase,\n} from \"../../../contexts/router/types\";\nimport { useGetToPath } from \"../use-get-to-path\";\n\ntype ResourceWithoutId = {\n /**\n * The name or identifier of the resource.\n */\n resource: string;\n action: Extract<Action, \"create\" | \"list\">;\n id?: never;\n meta?: Record<string, unknown>;\n};\n\ntype ResourceWithId = {\n /**\n * The name or identifier of the resource.\n */\n resource: string;\n action: Extract<Action, \"edit\" | \"show\" | \"clone\">;\n id: BaseKey;\n meta?: Record<string, unknown>;\n};\n\nexport type Resource = ResourceWithoutId | ResourceWithId;\n\nexport type GoConfigWithResource = Omit<GoConfigBase, \"to\"> & {\n to?: GoConfigBase[\"to\"] | Resource;\n};\n\nexport const useGo = () => {\n const routerContext = useContext(RouterContext);\n const { select: resourceSelect } = useResourceParams();\n const getToPath = useGetToPath();\n\n const useGo = React.useMemo(\n () => routerContext?.go ?? (() => () => undefined),\n [routerContext?.go],\n );\n\n const goFromRouter = useGo();\n\n const go = useCallback(\n (config: GoConfigWithResource | GoConfigBase) => {\n if (typeof config.to !== \"object\") {\n return goFromRouter({ ...config, to: config.to });\n }\n\n // when config.to is an object, it means that we want to go to a resource.\n // so we need to find the path for the resource.\n const { resource } = resourceSelect(config.to.resource);\n handleResourceErrors(config.to, resource);\n const newTo = getToPath({\n resource,\n action: config.to.action,\n meta: {\n id: config.to.id,\n ...config.to.meta,\n },\n });\n\n return goFromRouter({\n ...config,\n to: newTo,\n });\n },\n [resourceSelect, goFromRouter],\n );\n\n return go;\n};\n\n/**\n * handle errors for resource\n * @internal\n */\nexport const handleResourceErrors = (to: Resource, resource: IResourceItem) => {\n if (!to?.action || !to?.resource) {\n throw new Error(`[useGo]: \"action\" or \"resource\" is required.`);\n }\n\n if ([\"edit\", \"show\", \"clone\"].includes(to?.action) && !to.id) {\n throw new Error(\n `[useGo]: [action: ${to.action}] requires an \"id\" for resource [resource: ${to.resource}]`,\n );\n }\n\n const actionUrl = resource[to.action];\n if (!actionUrl) {\n throw new Error(\n `[useGo]: [action: ${to.action}] is not defined for [resource: ${to.resource}]`,\n );\n }\n};\n","import React, { createContext, type PropsWithChildren } from \"react\";\nimport type { RouterProvider } from \"./types\";\n\nconst defaultRouterProvider = {};\n\nexport const RouterContext = createContext<RouterProvider>(\n defaultRouterProvider,\n);\n\nexport const RouterContextProvider: React.FC<\n PropsWithChildren<{ router?: RouterProvider }>\n> = ({ children, router }) => {\n return (\n <RouterContext.Provider value={router ?? defaultRouterProvider}>\n {children}\n </RouterContext.Provider>\n );\n};\n","import React, { useContext } from \"react\";\n\nimport { ResourceContext } from \"@contexts/resource\";\nimport { useId } from \"./use-id\";\nimport { useAction } from \"./use-action\";\nimport type { BaseKey } from \"../../contexts/data/types\";\nimport type { IResourceItem } from \"../../contexts/resource/types\";\nimport type { Action } from \"../../contexts/router/types\";\nimport type { FormAction } from \"../form/types\";\nimport { type SelectReturnType, useResource } from \"./use-resource\";\n\ntype Props = {\n id?: BaseKey;\n resource?: string;\n action?: Action;\n};\n\ntype ResourceParams = {\n id?: BaseKey;\n setId: React.Dispatch<React.SetStateAction<BaseKey | undefined>>;\n resource?: IResourceItem;\n resources: IResourceItem[];\n action?: Action;\n identifier?: string;\n formAction: FormAction;\n select: <T extends boolean = true>(\n resourceName: string,\n force?: T,\n ) => SelectReturnType<T>;\n};\n\n/**\n * Interactions in Refine has 3 main parameters: resource, action and id.\n *\n * This hook is used to manage these parameters based on below conditions and outputs the final parameters.\n *\n * `resource`: The resource to be used. (either the identifier or the name of the resource)\n * - If a `resource` is provided, it will be used (even if it's not defined in the <Refine/> component)\n * - If a `resource` is not provided, it will be inferred from the route.\n * `id`: The `id` of the record to be used.\n * - If an `id` is provided, it will be used.\n * - If an `id` is not provided, it will either be inferred from the route or will be `undefined`.\n * -- If a custom resource is provided and it's different from the inferred resource, the id will be undefined.\n * -- If a custom resource is provided and it's same as the inferred resource, the id will be inferred from the route.\n * -- If a custom resource is not provided, the id will be inferred from the route.\n * `action`: The action to be used.\n * - If an `action` is provided, it will be used.\n * - If an `action` is not provided, it will be inferred from the route.\n * `formAction`: The action to be used in the form.\n * - `formAction` can only be \"edit\", \"clone\" or \"create\".\n * - If action is \"edit\" or \"clone\", `formAction` will be the same as action.\n * - Same as `id`, if passed resource is different from inferred resource, `formAction` will fallback to \"create\" and ignore the action from the route.\n */\nexport function useResourceParams(props?: Props): ResourceParams {\n const { resources } = useContext(ResourceContext);\n\n const {\n select,\n identifier: inferredIdentifier,\n resource: inferredResource,\n } = useResource();\n const resourceToCheck = props?.resource ?? inferredIdentifier;\n const { identifier = undefined, resource = undefined } = resourceToCheck\n ? select(resourceToCheck, true)\n : {};\n\n const isSameResource = inferredIdentifier === identifier;\n const inferredId = useId();\n const action = useAction(props?.action);\n\n const defaultId = React.useMemo(() => {\n if (!isSameResource) return props?.id;\n\n return props?.id ?? inferredId;\n }, [isSameResource, props?.id, inferredId]);\n\n const [id, setId] = React.useState<BaseKey | undefined>(defaultId);\n\n React.useMemo(() => setId(defaultId), [defaultId]);\n\n const formAction = React.useMemo(() => {\n if (!isSameResource && !props?.action) {\n return \"create\";\n }\n\n if (action === \"edit\" || action === \"clone\") {\n return action;\n }\n\n return \"create\";\n }, [action, isSameResource, props?.action]);\n\n return {\n id,\n setId,\n resource: resource || inferredResource,\n resources,\n action,\n identifier,\n formAction,\n select,\n };\n}\n","import React from \"react\";\n\nimport { useDeepMemo } from \"@hooks/deepMemo\";\n\nimport type { IResourceContext, IResourceItem, ResourceProps } from \"./types\";\n\nexport const ResourceContext = React.createContext<IResourceContext>({\n resources: [],\n});\n\nexport const ResourceContextProvider: React.FC<\n React.PropsWithChildren<{ resources: ResourceProps[] }>\n> = ({ resources: providedResources, children }) => {\n const resources: IResourceItem[] = useDeepMemo(() => {\n return providedResources ?? [];\n }, [providedResources]);\n\n return (\n <ResourceContext.Provider value={{ resources }}>\n {children}\n </ResourceContext.Provider>\n );\n};\n","import React, { useMemo } from \"react\";\nimport { useMemoized } from \"@hooks/memoized\";\n\n/**\n * Hook that memoizes the given dependency array and checks the consecutive calls with deep equality and returns the same value as the first call if dependencies are not changed.\n * @internal\n */\nexport const useDeepMemo = <T,>(\n fn: () => T,\n dependencies: React.DependencyList,\n): T => {\n const memoizedDependencies = useMemoized(dependencies);\n\n const value = useMemo(fn, memoizedDependencies);\n\n return value;\n};\n","import { useRef } from \"react\";\nimport isEqual from \"lodash/isEqual\";\n\n/**\n * Hook that memoizes the given value with deep equality.\n * @internal\n */\nexport const useMemoized = <T = unknown>(value: T): T => {\n const ref = useRef(value);\n\n if (!isEqual(ref.current, value)) {\n ref.current = value;\n }\n\n return ref.current;\n};\n","import React from \"react\";\nimport { useParse } from \"../use-parse\";\n\nexport const useParsed = <\n TParams extends Record<string, any> = Record<string, any>,\n>() => {\n const parse = useParse();\n\n const parsed = React.useMemo(() => parse<TParams>(), [parse]);\n\n return parsed;\n};\n","import { RouterContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\nimport type {\n ParseFunction,\n ParseResponse,\n} from \"../../../contexts/router/types\";\n\ntype UseParseType = () => <\n TParams extends Record<string, any> = Record<string, any>,\n>() => ParseResponse<TParams>;\n\nexport const useParse: UseParseType = () => {\n const routerContext = useContext(RouterContext);\n\n const useParse = React.useMemo(\n () =>\n routerContext?.parse ??\n (() =>\n (() => {\n return {};\n }) as ParseFunction),\n [routerContext?.parse],\n );\n\n const parse = useParse();\n\n return parse as ReturnType<UseParseType>;\n};\n","import { useParsed } from \"../../router/use-parsed\";\nimport type { BaseKey } from \"../../../contexts/data/types\";\n\n/**\n * Returns the id from the router.\n *\n * Additionally, if an id is provided as a parameter, it will be used instead of the inferred id.\n *\n * @internal usage only\n */\nexport const useId = (id?: BaseKey) => {\n const parsed = useParsed();\n\n return id ?? parsed.id;\n};\n","import { useParsed } from \"../../router/use-parsed\";\nimport type { Action } from \"../../../contexts/router/types\";\n\n/**\n * Returns the action from the router.\n *\n * Additionally, if an action is provided as a parameter, it will be used instead of the inferred action.\n *\n * @internal usage only\n */\nexport const useAction = (action?: Action) => {\n const parsed = useParsed();\n\n return action ?? parsed.action;\n};\n","import { useContext } from \"react\";\n\nimport { ResourceContext } from \"@contexts/resource\";\n\nimport type { IResourceItem } from \"../../../contexts/resource/types\";\nimport { pickResource } from \"../../../definitions/helpers/pick-resource\";\nimport { useParsed } from \"../../router/use-parsed\";\n\n/**\n * Matches the resource by identifier.\n * If not provided, the resource from the route will be returned.\n * If your resource does not explicitly define an identifier, the resource name will be used.\n */\nexport type UseResourceParam = string | undefined;\n\nexport type SelectReturnType<T extends boolean> = T extends true\n ? { resource: IResourceItem; identifier: string }\n : { resource: IResourceItem; identifier: string } | undefined;\n\nexport type UseResourceReturnType = {\n resources: IResourceItem[];\n resource?: IResourceItem;\n select: <T extends boolean = true>(\n resourceName: string,\n force?: T,\n ) => SelectReturnType<T>;\n identifier?: string;\n};\n\ntype UseResourceReturnTypeWithResource = UseResourceReturnType & {\n resource: IResourceItem;\n identifier: string;\n};\n\n/**\n * @internal\n */\nexport function useResource(): UseResourceReturnType;\n/**\n * @internal\n */\nexport function useResource<TIdentifier = UseResourceParam>(\n identifier: TIdentifier,\n): TIdentifier extends NonNullable<UseResourceParam>\n ? UseResourceReturnTypeWithResource\n : UseResourceReturnType;\n/**\n *\n * @internal\n *\n * `useResource` is used to get `resources` that are defined as property of the `<Refine>` component.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/resource/useResource} for more details.\n *\n */\nexport function useResource(args?: UseResourceParam): UseResourceReturnType {\n const { resources } = useContext(ResourceContext);\n\n const params = useParsed();\n\n const select = <T extends boolean = true>(\n resourceName: string,\n force = true,\n ): SelectReturnType<T> => {\n const pickedResource = pickResource(resourceName, resources);\n\n if (pickedResource) {\n return {\n resource: pickedResource,\n identifier: pickedResource.identifier ?? pickedResource.name,\n } as SelectReturnType<T>;\n }\n\n if (force) {\n const resource: IResourceItem = {\n name: resourceName,\n identifier: resourceName,\n };\n\n const identifier = resource.identifier ?? resource.name;\n\n return {\n resource,\n identifier,\n } as SelectReturnType<T>;\n }\n\n return undefined as SelectReturnType<T>;\n };\n\n let resource: IResourceItem | undefined = undefined;\n // we try to pick the resource from props first\n const identifier = args;\n if (identifier) {\n const pickedFromProps = pickResource(identifier, resources);\n if (pickedFromProps) {\n resource = pickedFromProps;\n } else {\n resource = {\n name: identifier,\n };\n }\n } else if (params?.resource) {\n resource = params.resource;\n }\n\n return {\n resources,\n resource,\n select,\n identifier: resource?.identifier ?? resource?.name,\n };\n}\n","import React from \"react\";\n\nimport type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport { getActionRoutesFromResource } from \"../../../definitions/helpers/router\";\nimport { composeRoute } from \"../../../definitions/helpers/router/compose-route\";\nimport { useResourceParams } from \"../../use-resource-params\";\nimport { useParsed } from \"../use-parsed\";\n\ntype UseToPathParams = {\n resource?: IResourceItem;\n action: Action;\n meta?: Record<string, unknown>;\n};\n\ntype GetToPathFn = (params: UseToPathParams) => string | undefined;\n\n/**\n * Returns a function to get the route for a given action and resource.\n * If resource is not provided, it will use the resource from the route.\n * If the resource is not found, it will return undefined.\n * If the action is not found, it will return undefined.\n * `meta` can be provided to compose the routes with parameters. (Can be used for nested routes.)\n */\nexport const useGetToPath = (): GetToPathFn => {\n const { resource: resourceFromRoute, resources } = useResourceParams();\n const parsed = useParsed();\n\n const fn = React.useCallback(\n ({ resource, action, meta }: UseToPathParams): string | undefined => {\n const selectedResource = resource || resourceFromRoute;\n\n if (!selectedResource) {\n return undefined;\n }\n\n const actionRoutes = getActionRoutesFromResource(\n selectedResource,\n resources,\n );\n\n const actionRoute = actionRoutes.find(\n (item) => item.action === action,\n )?.route;\n\n if (!actionRoute) {\n return undefined;\n }\n\n const composed = composeRoute(\n actionRoute,\n selectedResource?.meta,\n parsed,\n meta,\n );\n\n return composed;\n },\n [resources, resourceFromRoute, parsed],\n );\n\n return fn;\n};\n","import { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { getActionRoutesFromResource } from \"@definitions/helpers/router\";\nimport { composeRoute } from \"@definitions/helpers/router/compose-route\";\nimport { useResourceParams } from \"@hooks\";\nimport { useGo } from \"@hooks/router/use-go\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\n\nimport type { BaseKey, MetaQuery } from \"../../contexts/data/types\";\nimport type { IResourceItem } from \"../../contexts/resource/types\";\n\nexport type HistoryType = \"push\" | \"replace\";\n\n/**\n * `refine` uses {@link https://reactrouter.com/en/main/hooks/use-navigate#usenavigate `React Router`} and comes with all redirects out of the box.\n * It allows you to manage your routing operations in refine.\n * Using this hook, you can manage all the routing operations of your application very easily.\n *\n * @internal This is an internal hook of refine. Do not use it directly.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/navigation/useNavigation} for more details.\n */\nexport const useNavigation = () => {\n const { resources } = useResourceParams();\n const parsed = useParsed();\n const go = useGo();\n\n const handleUrl = (url: string, type: HistoryType = \"push\") => {\n go({ to: url, type });\n };\n\n const createUrl = (\n resource: string | IResourceItem,\n meta: MetaQuery = {},\n ) => {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const createActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"create\")?.route;\n\n if (!createActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(createActionRoute, resourceItem?.meta, parsed, meta),\n type: \"path\",\n query: meta.query,\n }) as string;\n };\n\n const editUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const editActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"edit\")?.route;\n\n if (!editActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(editActionRoute, resourceItem?.meta, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n query: meta.query,\n }) as string;\n };\n\n const cloneUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const cloneActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"clone\")?.route;\n\n if (!cloneActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(cloneActionRoute, resourceItem?.meta, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n query: meta.query,\n }) as string;\n };\n\n const showUrl = (\n resource: string | IResourceItem,\n id: BaseKey,\n meta: MetaQuery = {},\n ) => {\n const encodedId = encodeURIComponent(id);\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const showActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"show\")?.route;\n\n if (!showActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(showActionRoute, resourceItem?.meta, parsed, {\n ...meta,\n id: encodedId,\n }),\n type: \"path\",\n query: meta.query,\n }) as string;\n };\n\n const listUrl = (resource: string | IResourceItem, meta: MetaQuery = {}) => {\n const resourceItem =\n typeof resource === \"string\"\n ? pickResource(resource, resources) ?? { name: resource }\n : resource;\n\n const listActionRoute = getActionRoutesFromResource(\n resourceItem,\n resources,\n ).find((r) => r.action === \"list\")?.route;\n\n if (!listActionRoute) {\n return \"\";\n }\n\n return go({\n to: composeRoute(listActionRoute, resourceItem?.meta, parsed, meta),\n type: \"path\",\n query: meta.query,\n }) as string;\n };\n\n const create = (\n resource: string | IResourceItem,\n type: HistoryType = \"push\",\n meta: MetaQuery = {},\n ) => {\n handleUrl(createUrl(resource, meta), type);\n };\n\n const edit = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaQuery = {},\n ) => {\n handleUrl(editUrl(resource, id, meta), type);\n };\n\n const clone = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaQuery = {},\n ) => {\n handleUrl(cloneUrl(resource, id, meta), type);\n };\n\n const show = (\n resource: string | IResourceItem,\n id: BaseKey,\n type: HistoryType = \"push\",\n meta: MetaQuery = {},\n ) => {\n handleUrl(showUrl(resource, id, meta), type);\n };\n\n const list = (\n resource: string | IResourceItem,\n type: HistoryType = \"push\",\n meta: MetaQuery = {},\n ) => {\n handleUrl(listUrl(resource, meta), type);\n };\n\n return {\n create,\n createUrl,\n edit,\n editUrl,\n clone,\n cloneUrl,\n show,\n showUrl,\n list,\n listUrl,\n };\n};\n","import warnOnce from \"warn-once\";\nimport { useMeta, useOne, useResourceParams } from \"@hooks\";\n\nimport type { UseShowProps, UseShowReturnType } from \"./types\";\nimport type { BaseKey, BaseRecord, HttpError } from \"../../contexts/data/types\";\n\nexport type {\n UseShowProps,\n UseShowReturnType,\n} from \"./types\";\n\n/**\n * `useShow` hook allows you to fetch the desired record.\n * It uses `getOne` method as query function from the dataProvider that is\n * passed to {@link https://refine.dev/docs/core/refine-component `<Refine>`}.\n *\n * @see {@link https://refine.dev/docs/data/hooks/use-show} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/core/interface-references/#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/core/interface-references/#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/core/interface-references/#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\nexport const useShow = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n resource: resourceFromProp,\n id,\n meta,\n queryOptions,\n overtimeOptions,\n ...useOneProps\n}: UseShowProps<TQueryFnData, TError, TData> = {}): UseShowReturnType<\n TData,\n TError\n> => {\n const {\n resource,\n identifier,\n id: showId,\n setId: setShowId,\n } = useResourceParams({\n id,\n resource: resourceFromProp,\n });\n\n const getMeta = useMeta();\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n warnOnce(\n Boolean(resourceFromProp) && !showId,\n idWarningMessage(identifier, showId),\n );\n\n const queryResult = useOne<TQueryFnData, TError, TData>({\n resource: identifier,\n id: showId ?? \"\",\n queryOptions: {\n enabled: showId !== undefined,\n ...queryOptions,\n },\n meta: combinedMeta,\n overtimeOptions,\n ...useOneProps,\n });\n\n return {\n query: queryResult.query,\n result: queryResult.result,\n showId,\n setShowId,\n overtime: queryResult.overtime,\n };\n};\n\nconst idWarningMessage = (identifier?: string, id?: BaseKey) =>\n `[useShow]: resource: \"${identifier}\", id: ${id} \\n\\nIf you don't use the \\`setShowId\\` method to set the \\`showId\\`, you should pass the \\`id\\` prop to \\`useShow\\`. Otherwise, \\`useShow\\` will not be able to infer the \\`id\\` from the current URL. \\n\\nSee https://refine.dev/docs/data/hooks/use-show/#resource`;\n","import { useEffect, useState } from \"react\";\n\nimport chunk from \"lodash/chunk\";\nimport papaparse from \"papaparse\";\n\nimport { importCSVMapper, sequentialPromises } from \"@definitions\";\nimport { useCreate, useCreateMany, useMeta, useResourceParams } from \"@hooks\";\n\nimport type {\n BaseRecord,\n HttpError,\n MetaQuery,\n} from \"../../contexts/data/types\";\nimport type { UseCreateReturnType } from \"../../hooks/data/useCreate\";\nimport type { UseCreateManyReturnType } from \"../../hooks/data/useCreateMany\";\nimport type { MapDataFn } from \"../export/types\";\n\nexport type ImportSuccessResult<TVariables, TData> = {\n request: TVariables[];\n type: \"success\";\n response: TData[];\n};\n\nexport type ImportErrorResult<TVariables> = {\n request: TVariables[];\n type: \"error\";\n response: HttpError[];\n};\n\nexport type OnFinishParams<TVariables, TData> = {\n succeeded: ImportSuccessResult<TVariables, TData>[];\n errored: ImportErrorResult<TVariables>[];\n};\n\nexport type OnProgressParams = {\n totalAmount: number;\n processedAmount: number;\n};\n\nexport type ImportOptions<\n TItem,\n TVariables = any,\n TData extends BaseRecord = BaseRecord,\n> = {\n /**\n * Resource name for API data interactions.\n * @default Resource name that it reads from route\n */\n resource?: string;\n /**\n * A mapping function that runs for every record. Mapped data will be included in the file contents.\n */\n mapData?: MapDataFn<TItem, TVariables>;\n /**\n * Custom Papa Parse options.\n * @type [`ParseConfig`](https://www.papaparse.com/docs)\n */\n paparseOptions?: papaparse.ParseConfig;\n /**\n * Requests batch size. If it is 1, all records are sent one by one. By default, it is [`Number.MAX_SAFE_INTEGER`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER) to send all records in one batch. If it is more than 1, `createMany` should be implemented on DataProvider.\n */\n batchSize?: number;\n /**\n * Called with errors and successful responses when all requests are sent.\n */\n onFinish?: (results: OnFinishParams<TVariables, TData>) => void;\n /**\n * Metadata query for `dataProvider`\n */\n meta?: MetaQuery;\n /**\n * Metadata query for `dataProvider`\n /**\n * A callback function that returns a current state of uploading process.\n *\n * Ex: `percentage = onProgressParams.processedAmount / onProgressParams.totalAmount * 100`\n */\n onProgress?: (onProgressParams: OnProgressParams) => void;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n};\n\nexport type CreatedValuesType<TVariables, TData> =\n | ImportSuccessResult<TVariables, TData>\n | ImportErrorResult<TVariables>;\n\nexport type HandleChangeType<TVariables, TData> = (onChangeParams: {\n file: Partial<File>;\n}) => Promise<CreatedValuesType<TVariables, TData>[]>;\n\nexport type UseImportInputPropsType = {\n type: \"file\";\n accept: string;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\nexport type UseImportReturnType<\n TData extends BaseRecord = BaseRecord,\n TVariables = {},\n TError extends HttpError = HttpError,\n> = {\n inputProps: UseImportInputPropsType;\n mutationResult:\n | UseCreateReturnType<TData, TError, TVariables>\n | UseCreateManyReturnType<TData, TError, TVariables>;\n isLoading: boolean;\n handleChange: HandleChangeType<TVariables, TData>;\n};\n\n/**\n * `useImport` hook allows you to handle your csv import logic easily.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/import-export/useImport} for more details.\n *\n * @typeParam TItem - Interface of parsed csv data\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences/#httperror `HttpError`}\n * @typeParam TVariables - Values for mutation function\n *\n */\nexport const useImport = <\n TItem = any,\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = any,\n>({\n resource: resourceFromProps,\n mapData = (item) => item as unknown as TVariables,\n paparseOptions,\n batchSize = Number.MAX_SAFE_INTEGER,\n onFinish,\n meta,\n onProgress,\n dataProviderName,\n}: ImportOptions<TItem, TVariables, TData> = {}): UseImportReturnType<\n TData,\n TVariables,\n TError\n> => {\n const [processedAmount, setProcessedAmount] = useState<number>(0);\n const [totalAmount, setTotalAmount] = useState<number>(0);\n const [isLoading, setIsLoading] = useState(false);\n\n const { resource, identifier } = useResourceParams({\n resource: resourceFromProps,\n });\n\n const getMeta = useMeta();\n\n const createMany = useCreateMany<TData, TError, TVariables>();\n const create = useCreate<TData, TError, TVariables>();\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n let mutationResult:\n | UseCreateReturnType<TData, TError, TVariables>\n | UseCreateManyReturnType<TData, TError, TVariables>;\n\n if (batchSize === 1) {\n mutationResult = create;\n } else {\n mutationResult = createMany;\n }\n\n const handleCleanup = () => {\n setTotalAmount(0);\n setProcessedAmount(0);\n setIsLoading(false);\n };\n\n const handleFinish = (\n createdValues: CreatedValuesType<TVariables, TData>[],\n ) => {\n const result = {\n succeeded: createdValues.filter(\n (item) => item.type === \"success\",\n ) as unknown as ImportSuccessResult<TVariables, TData>[],\n errored: createdValues.filter(\n (item) => item.type === \"error\",\n ) as unknown as ImportErrorResult<TVariables>[],\n };\n\n onFinish?.(result);\n setIsLoading(false);\n };\n\n useEffect(() => {\n onProgress?.({ totalAmount, processedAmount });\n }, [totalAmount, processedAmount]);\n\n const handleChange: HandleChangeType<TVariables, TData> = ({ file }) => {\n handleCleanup();\n return new Promise<CreatedValuesType<TVariables, TData>[]>((resolve) => {\n setIsLoading(true);\n papaparse.parse(file as any, {\n complete: async ({ data }: { data: unknown[][] }) => {\n const values = importCSVMapper(data, mapData);\n\n setTotalAmount(values.length);\n\n if (batchSize === 1) {\n // Create Processor Functions\n const valueFns = values.map((value) => {\n const fn = async () => {\n const response = await create.mutateAsync({\n resource: identifier ?? \"\",\n values: value,\n successNotification: false,\n errorNotification: false,\n dataProviderName,\n meta: combinedMeta,\n });\n\n return { response, value };\n };\n return fn;\n });\n // Sequentially run processor functions and process resolves/rejects\n const createdValues = await sequentialPromises(\n valueFns,\n ({ response, value }) => {\n setProcessedAmount((currentAmount) => {\n return currentAmount + 1;\n });\n\n return {\n response: [response.data],\n type: \"success\",\n request: [value],\n } as ImportSuccessResult<TVariables, TData>;\n },\n (error: HttpError, index) => {\n return {\n response: [error],\n type: \"error\",\n request: [values[index]],\n } as ImportErrorResult<TVariables>;\n },\n );\n // Resolve with created values\n resolve(createdValues);\n } else {\n // Create Chunks\n const chunks = chunk(values, batchSize);\n // Create Chunk Processor Functions\n const chunkedFns = chunks.map((chunkedValues) => {\n const fn = async () => {\n const response = await createMany.mutateAsync({\n resource: identifier ?? \"\",\n values: chunkedValues,\n successNotification: false,\n errorNotification: false,\n dataProviderName,\n meta: combinedMeta,\n });\n\n return {\n response,\n value: chunkedValues,\n currentBatchLength: chunkedValues.length,\n };\n };\n\n return fn;\n });\n // Sequentially run chunked functions and process resolves/rejects\n const createdValues = await sequentialPromises(\n chunkedFns,\n ({ response, currentBatchLength, value }) => {\n setProcessedAmount((currentAmount) => {\n return currentAmount + currentBatchLength;\n });\n\n return {\n response: response.data,\n type: \"success\",\n request: value,\n } as ImportSuccessResult<TVariables, TData>;\n },\n (error: HttpError, index) => {\n return {\n response: [error],\n type: \"error\",\n request: chunks[index],\n } as ImportErrorResult<TVariables>;\n },\n );\n // resolve with all created values\n resolve(createdValues);\n }\n },\n\n ...paparseOptions,\n });\n }).then((createdValues) => {\n handleFinish(createdValues);\n return createdValues;\n });\n };\n\n return {\n inputProps: {\n type: \"file\",\n accept: \".csv\",\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files && event.target.files.length > 0) {\n handleChange({ file: event.target.files[0] });\n }\n },\n },\n mutationResult,\n isLoading,\n handleChange,\n };\n};\n","import { useCallback, useState } from \"react\";\n\nexport type useModalReturnType = {\n visible: boolean;\n show: () => void;\n close: () => void;\n};\n\nexport type useModalProps = {\n /**\n * Initial state of the modal\n */\n defaultVisible?: boolean;\n};\n\nexport const useModal = ({\n defaultVisible = false,\n}: useModalProps = {}): useModalReturnType => {\n const [visible, setVisible] = useState(defaultVisible);\n\n const show = useCallback(() => setVisible(true), [visible]);\n const close = useCallback(() => setVisible(false), [visible]);\n\n return {\n visible,\n show,\n close,\n };\n};\n","import { RouterContext } from \"@contexts/router\";\nimport React, { useContext } from \"react\";\n\nexport const useBack = () => {\n const routerContext = useContext(RouterContext);\n\n const useBack = React.useMemo(\n () => routerContext?.back ?? (() => () => undefined),\n [routerContext?.back],\n );\n\n const back = useBack();\n\n return back;\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport { useGetToPath } from \"../use-get-to-path\";\n\ntype UseToPathParams = {\n resource?: IResourceItem;\n action: Action;\n meta?: Record<string, unknown>;\n};\n\n/**\n * Returns the route for a given action and resource.\n * If resource is not provided, it will use the resource from the route.\n * If the resource is not found, it will return undefined.\n * If the action is not found, it will return undefined.\n * `meta` can be provided to compose the routes with parameters. (Can be used for nested routes.)\n */\nexport const useToPath = ({\n resource,\n action,\n meta,\n}: UseToPathParams): string | undefined => {\n const getToPath = useGetToPath();\n\n return getToPath({ resource, action, meta });\n};\n","import React, { type Ref, forwardRef, useContext } from \"react\";\nimport { useGo } from \"@hooks/router\";\nimport { RouterContext } from \"@contexts/router\";\nimport type { GoConfigWithResource } from \"../../hooks/router/use-go\";\nimport warnOnce from \"warn-once\";\n\ntype LinkPropsWithGo = {\n go: Omit<GoConfigWithResource, \"type\">;\n};\n\ntype LinkPropsWithTo = {\n to: string;\n};\n\nexport type LinkProps<TProps = {}> = React.PropsWithChildren<\n (LinkPropsWithGo | LinkPropsWithTo) & TProps\n>;\n\n/**\n * @param to The path to navigate to.\n * @param go The useGo.go params to navigate to. If `to` provided, this will be ignored.\n * @returns routerProvider.Link if it is provided, otherwise an anchor tag.\n */\nconst LinkComponent = <TProps = {}>(\n props: LinkProps<TProps>,\n ref: Ref<Element>,\n) => {\n const routerContext = useContext(RouterContext);\n const LinkFromContext = routerContext?.Link;\n\n const goFunction = useGo();\n\n let resolvedTo = \"\";\n if (\"go\" in props) {\n if (!routerContext?.go) {\n warnOnce(\n true,\n \"[Link]: `routerProvider` is not found. To use `go`, Please make sure that you have provided the `routerProvider` for `<Refine />` https://refine.dev/docs/routing/router-provider/ \\n\",\n );\n }\n resolvedTo = goFunction({ ...props.go, type: \"path\" }) as string;\n }\n if (\"to\" in props) {\n resolvedTo = props.to;\n }\n\n if (LinkFromContext) {\n return (\n <LinkFromContext\n ref={ref}\n {...props}\n to={resolvedTo}\n // This is a workaround to avoid passing `go` to the Link component.\n go={undefined}\n />\n );\n }\n return (\n <a\n ref={ref}\n href={resolvedTo}\n {...props}\n // This is a workaround to avoid passing `go` and `to` to the anchor tag.\n to={undefined}\n go={undefined}\n />\n );\n};\n\nexport const Link = forwardRef(LinkComponent) as <T = {}>(\n props: LinkProps<T> & { ref?: Ref<Element> },\n) => ReturnType<typeof LinkComponent>;\n","import { Link } from \"../../../components/link\";\n\nexport const useLink = () => {\n return Link;\n};\n","import { useContext } from \"react\";\n\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseQueryOptions,\n type UseQueryResult,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { sanitizeResource } from \"@definitions/helpers/sanitize-resource\";\nimport { useKeys } from \"@hooks/useKeys\";\nimport type {\n CanParams,\n CanReturnType,\n} from \"../../../contexts/accessControl/types\";\n\nexport type UseCanProps = CanParams & {\n /**\n * TansSack Query's [useQuery](https://tanstack.com/query/latest/docs/framework/react/reference/useQuery) options\n */\n // Make queryKey and queryFn optional\n queryOptions?: Omit<UseQueryOptions<CanReturnType>, \"queryKey\"> & {\n queryKey?: UseQueryOptions<CanReturnType>[\"queryKey\"];\n };\n};\n\n/**\n * `useCan` uses the `can` as the query function for `react-query`'s {@link https://tanstack.com/query/v5/docs/framework/react/guides/queries `useQuery`}. It takes the parameters that `can` takes. It can also be configured with `queryOptions` for `useQuery`. Returns the result of `useQuery`.\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/accessControl/useCan} for more details.\n *\n * @typeParam CanParams {@link https://refine.dev/docs/core/interfaceReferences#canparams}\n * @typeParam CanReturnType {@link https://refine.dev/docs/core/interfaceReferences#canreturntype}\n *\n */\nexport const useCan = ({\n action,\n resource,\n params,\n queryOptions: hookQueryOptions,\n}: UseCanProps): UseQueryResult<CanReturnType> => {\n const { can, options: globalOptions } = useContext(AccessControlContext);\n const { keys } = useKeys();\n\n const { queryOptions: globalQueryOptions } = globalOptions || {};\n\n const mergedQueryOptions = {\n ...globalQueryOptions,\n ...hookQueryOptions,\n };\n\n /**\n * Since `react-query` stringifies the query keys, it will throw an error for a circular dependency if we include `React.ReactNode` elements inside the keys.\n * The feature in #2220(https://github.com/refinedev/refine/issues/2220) includes such change and to fix this, we need to remove `icon` property in the `resource`\n */\n const { resource: _resource, ...paramsRest } = params ?? {};\n\n const sanitizedResource = sanitizeResource(_resource);\n\n const queryResponse = useQuery<CanReturnType>({\n queryKey: keys()\n .access()\n .resource(resource)\n .action(action)\n .params({\n params: { ...paramsRest, resource: sanitizedResource },\n enabled: mergedQueryOptions?.enabled,\n })\n .get(),\n // Enabled check for `can` is enough to be sure that it's defined in the query function but TS is not smart enough to know that.\n queryFn: () =>\n can?.({\n action,\n resource,\n params: { ...paramsRest, resource: sanitizedResource },\n }) ?? Promise.resolve({ can: true }),\n enabled: typeof can !== \"undefined\",\n ...mergedQueryOptions,\n meta: {\n ...mergedQueryOptions?.meta,\n ...getXRay(\"useCan\", resource, [\n \"useButtonCanAccess\",\n \"useNavigationButton\",\n ]),\n },\n retry: false,\n });\n\n return typeof can === \"undefined\"\n ? ({ data: { can: true } } as typeof queryResponse)\n : queryResponse;\n};\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type {\n IAccessControlContext,\n IAccessControlContextReturnType,\n} from \"./types\";\n\nexport const AccessControlContext =\n React.createContext<IAccessControlContextReturnType>({\n options: {\n buttons: { enableAccessControl: true, hideIfUnauthorized: false },\n },\n });\n\nexport const AccessControlContextProvider: React.FC<\n PropsWithChildren<IAccessControlContext>\n> = ({ can, children, options }) => {\n return (\n <AccessControlContext.Provider\n value={{\n can,\n options: options\n ? {\n ...options,\n buttons: {\n enableAccessControl: true,\n hideIfUnauthorized: false,\n ...options.buttons,\n },\n }\n : {\n buttons: {\n enableAccessControl: true,\n hideIfUnauthorized: false,\n },\n queryOptions: undefined,\n },\n }}\n >\n {children}\n </AccessControlContext.Provider>\n );\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\n\n/**\n * Remove all properties that are non-serializable from a resource object.\n */\nexport const sanitizeResource = (\n resource?: Partial<IResourceItem> &\n Required<Pick<IResourceItem, \"name\">> & { children?: unknown } & Record<\n string,\n any\n >,\n):\n | (Partial<IResourceItem> & Required<Pick<IResourceItem, \"name\">>)\n | undefined => {\n if (!resource) {\n return undefined;\n }\n\n const {\n list,\n edit,\n create,\n show,\n clone,\n children,\n meta,\n icon,\n ...restResource\n } = resource;\n\n const { icon: _metaIcon, ...restMeta } = meta ?? {};\n\n return {\n ...restResource,\n ...(meta ? { meta: restMeta } : {}),\n };\n};\n","import React from \"react\";\n\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { sanitizeResource } from \"@definitions/helpers/sanitize-resource\";\n\nimport type { IAccessControlContext } from \"../../contexts/accessControl/types\";\n\nexport const useCanWithoutCache = (): IAccessControlContext => {\n const { can: canFromContext } = React.useContext(AccessControlContext);\n\n const can = React.useMemo(() => {\n if (!canFromContext) {\n return undefined;\n }\n\n const canWithSanitizedResource: NonNullable<typeof canFromContext> =\n async ({ params, ...rest }) => {\n const sanitizedResource = params?.resource\n ? sanitizeResource(params.resource)\n : undefined;\n\n return canFromContext({\n ...rest,\n ...(params\n ? {\n params: {\n ...params,\n resource: sanitizedResource,\n },\n }\n : {}),\n });\n };\n\n return canWithSanitizedResource;\n }, [canFromContext]);\n\n return { can };\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport type {\n QueryObserverResult,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\nimport debounce from \"lodash/debounce\";\nimport get from \"lodash/get\";\nimport uniqBy from \"lodash/uniqBy\";\n\nimport { useList, useMany, useMeta } from \"@hooks\";\nimport type { UseManyReturnType } from \"../data/useMany\";\n\nimport type {\n BaseKey,\n BaseOption,\n BaseRecord,\n CrudFilter,\n CrudSort,\n GetListResponse,\n GetManyResponse,\n HttpError,\n MetaQuery,\n Pagination,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport type { BaseListProps } from \"../data/useList\";\nimport { useResourceParams } from \"../use-resource-params\";\nimport {\n type UseLoadingOvertimeOptionsProps,\n type UseLoadingOvertimeReturnType,\n useLoadingOvertime,\n} from \"../useLoadingOvertime\";\nimport type { MakeOptional } from \"../../definitions/types\";\n\nexport type SelectedOptionsOrder = \"in-place\" | \"selected-first\";\n\nexport type UseSelectProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n */\n resource: string;\n /**\n * Set the option's label value\n * @default `\"title\"`\n */\n optionLabel?:\n | (keyof TData extends string ? keyof TData : never)\n | ((item: TData) => string);\n /**\n * Set the option's value\n * @default `\"id\"`\n */\n optionValue?:\n | (keyof TData extends string ? keyof TData : never)\n | ((item: TData) => string);\n /**\n * Field name to search for.\n * @description If provided `optionLabel` is a string, uses `optionLabel`'s value.\n * @default `\"title\"`\n * @example\n * // when optionLabel is string.\n * useSelect({ optionLabel: \"name\" })\n * // uses `name` field.\n * @example\n * // when optionLabel is function.\n * useSelect({ optionLabel: (field) => field.description })\n * // uses `title`, since `optionLabel` is a function.\n */\n searchField?: keyof TData extends string ? keyof TData : never;\n /**\n * Allow us to sort the options\n */\n sorters?: CrudSort[];\n /**\n * Resource name for API data interactions\n */\n filters?: CrudFilter[];\n /**\n * Adds extra `options`\n */\n defaultValue?: BaseKey | BaseKey[];\n /**\n * Allow us to sort the selection options\n * @default `in-place`\n */\n selectedOptionsOrder?: SelectedOptionsOrder;\n /**\n * The number of milliseconds to delay\n * @default `300`\n */\n debounce?: number;\n /**\n * react-query [useQuery](https://react-query.tanstack.com/reference/useQuery) options\n */\n queryOptions?: MakeOptional<\n UseQueryOptions<\n GetListResponse<TQueryFnData>,\n TError,\n GetListResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n >;\n /**\n * Pagination option from [`useList()`](/docs/api-reference/core/hooks/data/useList/)\n * @type { currentPage?: number; pageSize?: number;}\n * @default `undefined`\n */\n pagination?: Prettify<\n Omit<Pagination, \"mode\"> & {\n /**\n * Whether to use server side pagination or not.\n * @default \"off\"\n */\n mode?: Pagination[\"mode\"];\n }\n >;\n /**\n * react-query [useQuery](https://react-query.tanstack.com/reference/useQuery) options\n */\n defaultValueQueryOptions?: MakeOptional<\n UseQueryOptions<\n GetManyResponse<TQueryFnData>,\n TError,\n GetManyResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n >;\n /**\n * If defined, this callback allows us to override all filters for every search request.\n * @default `undefined`\n */\n onSearch?: (value: string) => CrudFilter[];\n /**\n * Additional meta data to pass to the `useMany` from the data provider\n */\n meta?: MetaQuery;\n /**\n * Additional meta data to pass to the `useMany` from the data provider\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n * @default `default`\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n> &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps;\n\nexport type UseSelectReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TOption extends BaseOption = BaseOption,\n> = {\n query: QueryObserverResult<GetListResponse<TData>, TError>;\n defaultValueQuery: UseManyReturnType<TData, TError>;\n onSearch: (value: string) => void;\n options: TOption[];\n} & UseLoadingOvertimeReturnType;\n\n/**\n * `useSelect` hook is used to fetch data from the dataProvider and return the options for the select box.\n *\n * It uses `getList` method as query function from the dataProvider that is\n * passed to {@link https://refine.dev/docs/api-reference/core/components/refine-config/ `<Refine>`}.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/useSelect} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nexport const useSelect = <\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n TOption extends BaseOption = BaseOption,\n>(\n props: UseSelectProps<TQueryFnData, TError, TData>,\n): UseSelectReturnType<TData, TError, TOption> => {\n const [search, setSearch] = useState<CrudFilter[]>([]);\n const [options, setOptions] = useState<TOption[]>([]);\n const [selectedOptions, setSelectedOptions] = useState<TOption[]>([]);\n\n const {\n resource: resourceFromProps,\n sorters,\n filters = [],\n optionLabel = \"title\",\n optionValue = \"id\",\n searchField = typeof optionLabel === \"string\" ? optionLabel : \"title\",\n debounce: debounceValue = 300,\n successNotification,\n errorNotification,\n defaultValueQueryOptions: defaultValueQueryOptionsFromProps,\n queryOptions,\n pagination,\n liveMode,\n defaultValue = [],\n selectedOptionsOrder = \"in-place\",\n onLiveEvent,\n onSearch: onSearchFromProp,\n liveParams,\n meta,\n dataProviderName,\n overtimeOptions,\n } = props;\n\n const getOptionLabel = useCallback(\n (item: TData) => {\n if (typeof optionLabel === \"string\") {\n return get(item, optionLabel);\n }\n\n return optionLabel(item);\n },\n [optionLabel],\n );\n\n const getOptionValue = useCallback(\n (item: TData) => {\n if (typeof optionValue === \"string\") {\n return get(item, optionValue);\n }\n\n return optionValue(item);\n },\n [optionValue],\n );\n\n const { resource, identifier } = useResourceParams({\n resource: resourceFromProps,\n });\n\n const getMeta = useMeta();\n\n const combinedMeta = getMeta({\n resource,\n meta: meta,\n });\n\n const defaultValues = Array.isArray(defaultValue)\n ? defaultValue\n : [defaultValue];\n\n const defaultValueQueryOptions =\n defaultValueQueryOptionsFromProps ?? (queryOptions as any);\n\n const defaultValueQueryOnSuccess = useCallback(\n (data: GetManyResponse<TData>) => {\n setSelectedOptions(\n data.data.map(\n (item) =>\n ({\n label: getOptionLabel(item),\n value: getOptionValue(item),\n }) as TOption,\n ),\n );\n },\n [optionLabel, optionValue],\n );\n\n const defaultQueryOnSuccess = useCallback(\n (data: GetListResponse<TData>) => {\n setOptions(\n data.data.map(\n (item) =>\n ({\n label: getOptionLabel(item),\n value: getOptionValue(item),\n }) as TOption,\n ),\n );\n },\n [optionLabel, optionValue],\n );\n\n const defaultValueQueryResult = useMany<TQueryFnData, TError, TData>({\n resource: identifier ?? resource?.name ?? \"\",\n ids: defaultValues,\n queryOptions: {\n ...defaultValueQueryOptions,\n enabled:\n defaultValues.length > 0 && (defaultValueQueryOptions?.enabled ?? true),\n },\n overtimeOptions: { enabled: false },\n meta: combinedMeta,\n liveMode: \"off\",\n dataProviderName,\n });\n\n const queryResult = useList<TQueryFnData, TError, TData>({\n resource: identifier,\n sorters,\n filters: filters.concat(search),\n pagination: {\n currentPage: pagination?.currentPage,\n pageSize: pagination?.pageSize ?? 10,\n mode: pagination?.mode,\n },\n queryOptions,\n overtimeOptions: { enabled: false },\n successNotification,\n errorNotification,\n meta: combinedMeta,\n liveMode,\n liveParams,\n onLiveEvent,\n dataProviderName,\n });\n\n const { elapsedTime } = useLoadingOvertime({\n ...overtimeOptions,\n isLoading:\n queryResult.query.isFetching || defaultValueQueryResult.query.isFetching,\n });\n\n const combinedOptions = useMemo(\n () =>\n uniqBy(\n selectedOptionsOrder === \"in-place\"\n ? [...options, ...selectedOptions]\n : [...selectedOptions, ...options],\n \"value\",\n ),\n [options, selectedOptions],\n );\n\n /**\n * To avoid any changes in the `onSearch` callback,\n * We're storing `onSearchFromProp` in a ref and accessing it in the `onSearch` callback.\n */\n const onSearchFromPropRef = useRef(onSearchFromProp);\n\n const onSearch = useMemo(() => {\n return debounce((value: string) => {\n if (onSearchFromPropRef.current) {\n setSearch(onSearchFromPropRef.current(value));\n return;\n }\n\n if (!value) {\n setSearch([]);\n return;\n }\n\n setSearch([\n {\n field: searchField,\n operator: \"contains\",\n value,\n },\n ]);\n }, debounceValue);\n }, [searchField, debounceValue]);\n\n useEffect(() => {\n onSearchFromPropRef.current = onSearchFromProp;\n }, [onSearchFromProp]);\n\n // default value query onSuccess\n useEffect(() => {\n const data = defaultValueQueryResult.query.data;\n if (data && defaultValueQueryResult.query.isSuccess) {\n defaultValueQueryOnSuccess(data);\n }\n }, [\n defaultValueQueryResult.query.data,\n defaultValueQueryResult.query.isSuccess,\n ]);\n\n // query onSuccess\n useEffect(() => {\n const data = queryResult.query.data;\n if (data && queryResult.query.isSuccess) {\n defaultQueryOnSuccess(data);\n }\n }, [queryResult.result.data, queryResult.query.isSuccess]);\n\n return {\n query: queryResult.query,\n defaultValueQuery: defaultValueQueryResult,\n options: combinedOptions,\n onSearch,\n overtime: { elapsedTime },\n };\n};\n","import React, { useState, useEffect, useCallback } from \"react\";\n\nimport type {\n QueryObserverResult,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\nimport differenceWith from \"lodash/differenceWith\";\nimport isEqual from \"lodash/isEqual\";\nimport warnOnce from \"warn-once\";\n\nimport {\n parseTableParams,\n setInitialFilters,\n setInitialSorters,\n unionFilters,\n unionSorters,\n} from \"@definitions/table\";\nimport {\n useGo,\n useList,\n useLiveMode,\n useMeta,\n useParsed,\n useResourceParams,\n useSyncWithLocation,\n} from \"@hooks\";\n\nimport type {\n BaseRecord,\n CrudFilter,\n CrudSort,\n GetListResponse,\n HttpError,\n MetaQuery,\n Pagination,\n Prettify,\n} from \"../../contexts/data/types\";\nimport type { LiveModeProps } from \"../../contexts/live/types\";\nimport type { SuccessErrorNotification } from \"../../contexts/notification/types\";\nimport type { BaseListProps } from \"../data/useList\";\nimport type { MakeOptional } from \"../../definitions/types/index\";\nimport type {\n UseLoadingOvertimeOptionsProps,\n UseLoadingOvertimeReturnType,\n} from \"../useLoadingOvertime\";\n\ntype SetFilterBehavior = \"merge\" | \"replace\";\n\nexport type useTableProps<TQueryFnData, TError, TData> = {\n /**\n * Resource name for API data interactions\n * @default Resource name that it reads from route\n */\n resource?: string;\n /**\n * Configuration for pagination\n */\n pagination?: Pagination;\n /**\n * Sort configs\n */\n sorters?: {\n /**\n * Initial sorter state\n */\n initial?: CrudSort[];\n /**\n * Default and unchangeable sorter state\n * @default `[]`\n */\n permanent?: CrudSort[];\n /**\n * Whether to use server side sorting or not.\n * @default \"server\"\n */\n mode?: \"server\" | \"off\";\n };\n /**\n * Filter configs\n */\n filters?: {\n /**\n * Initial filter state\n */\n initial?: CrudFilter[];\n /**\n * Default and unchangeable filter state\n * @default `[]`\n */\n permanent?: CrudFilter[];\n /**\n * Default behavior of the `setFilters` function\n * @default `\"merge\"`\n */\n defaultBehavior?: SetFilterBehavior;\n /**\n * Whether to use server side filter or not.\n * @default \"server\"\n */\n mode?: \"server\" | \"off\";\n };\n /**\n * Sortings, filters, page index and records shown per page are tracked by browser history\n * @default Value set in [Refine](/docs/api-reference/core/components/refine-config/#syncwithlocation). If a custom resource is given, it will be `false`\n */\n syncWithLocation?: boolean;\n /**\n * react-query's [useQuery](https://tanstack.com/query/v5/docs/framework/react/reference/useQuery) options\n */\n queryOptions?: MakeOptional<\n UseQueryOptions<\n GetListResponse<TQueryFnData>,\n TError,\n GetListResponse<TData>\n >,\n \"queryKey\" | \"queryFn\"\n >;\n /**\n * Metadata query for dataProvider\n */\n meta?: MetaQuery;\n /**\n * If there is more than one `dataProvider`, you should use the `dataProviderName` that you will use.\n */\n dataProviderName?: string;\n} & SuccessErrorNotification<\n GetListResponse<TData>,\n TError,\n Prettify<BaseListProps>\n> &\n LiveModeProps &\n UseLoadingOvertimeOptionsProps;\n\ntype ReactSetState<T> = React.Dispatch<React.SetStateAction<T>>;\n\ntype SyncWithLocationParams = {\n pagination: { currentPage?: number; pageSize?: number };\n sorters: CrudSort[];\n filters: CrudFilter[];\n};\n\nexport type useTableReturnType<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n> = {\n tableQuery: QueryObserverResult<GetListResponse<TData>, TError>;\n sorters: CrudSort[];\n setSorters: (sorter: CrudSort[]) => void;\n filters: CrudFilter[];\n setFilters: ((filters: CrudFilter[], behavior?: SetFilterBehavior) => void) &\n ((setter: (prevFilters: CrudFilter[]) => CrudFilter[]) => void);\n createLinkForSyncWithLocation: (params: SyncWithLocationParams) => string;\n currentPage: number;\n setCurrentPage: ReactSetState<useTableReturnType[\"currentPage\"]>;\n pageSize: number;\n setPageSize: ReactSetState<useTableReturnType[\"pageSize\"]>;\n pageCount: number;\n result: {\n data: TData[];\n total: number | undefined;\n };\n} & UseLoadingOvertimeReturnType;\n\n/**\n * By using useTable, you are able to get properties that are compatible with\n * Ant Design {@link https://ant.design/components/table/ `<Table>`} component.\n * All features such as sorting, filtering and pagination comes as out of box.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/useTable} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#baserecord `BaseRecord`}. Defaults to `TQueryFnData`\n *\n */\n\nconst defaultPermanentFilter: CrudFilter[] = [];\nconst defaultPermanentSorter: CrudSort[] = [];\nconst EMPTY_ARRAY = Object.freeze([]) as [];\n\nexport function useTable<\n TQueryFnData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TData extends BaseRecord = TQueryFnData,\n>({\n pagination,\n filters: filtersFromProp,\n sorters: sortersFromProp,\n syncWithLocation: syncWithLocationProp,\n resource: resourceFromProp,\n successNotification,\n errorNotification,\n queryOptions,\n liveMode: liveModeFromProp,\n onLiveEvent,\n liveParams,\n meta,\n dataProviderName,\n overtimeOptions,\n}: useTableProps<TQueryFnData, TError, TData> = {}): useTableReturnType<\n TData,\n TError\n> {\n const { syncWithLocation: syncWithLocationContext } = useSyncWithLocation();\n\n const syncWithLocation = syncWithLocationProp ?? syncWithLocationContext;\n\n const liveMode = useLiveMode(liveModeFromProp);\n\n const getMeta = useMeta();\n const parsedParams = useParsed();\n\n const isServerSideFilteringEnabled =\n (filtersFromProp?.mode || \"server\") === \"server\";\n const isServerSideSortingEnabled =\n (sortersFromProp?.mode || \"server\") === \"server\";\n const isPaginationEnabled = pagination?.mode !== \"off\";\n const prefferedCurrentPage = pagination?.currentPage;\n const prefferedPageSize = pagination?.pageSize;\n const preferredMeta = meta;\n\n // Parse table params from URL if available\n const { parsedCurrentPage, parsedPageSize, parsedSorter, parsedFilters } =\n parseTableParams(parsedParams.params?.search ?? \"?\");\n\n const preferredInitialFilters = filtersFromProp?.initial;\n const preferredPermanentFilters =\n filtersFromProp?.permanent ?? defaultPermanentFilter;\n\n const preferredInitialSorters = sortersFromProp?.initial;\n const preferredPermanentSorters =\n sortersFromProp?.permanent ?? defaultPermanentSorter;\n\n const prefferedFilterBehavior = filtersFromProp?.defaultBehavior ?? \"merge\";\n\n let defaultCurrentPage: number;\n let defaultPageSize: number;\n let defaultSorter: CrudSort[] | undefined;\n let defaultFilter: CrudFilter[] | undefined;\n\n if (syncWithLocation) {\n defaultCurrentPage =\n parsedParams?.params?.currentPage ||\n parsedCurrentPage ||\n prefferedCurrentPage ||\n 1;\n defaultPageSize =\n parsedParams?.params?.pageSize ||\n parsedPageSize ||\n prefferedPageSize ||\n 10;\n defaultSorter =\n parsedParams?.params?.sorters ||\n (parsedSorter.length ? parsedSorter : preferredInitialSorters);\n defaultFilter =\n parsedParams?.params?.filters ||\n (parsedFilters.length ? parsedFilters : preferredInitialFilters);\n } else {\n defaultCurrentPage = prefferedCurrentPage || 1;\n defaultPageSize = prefferedPageSize || 10;\n defaultSorter = preferredInitialSorters;\n defaultFilter = preferredInitialFilters;\n }\n\n const go = useGo();\n\n const { resource, identifier } = useResourceParams({\n resource: resourceFromProp,\n });\n\n const combinedMeta = getMeta({\n resource,\n meta: preferredMeta,\n });\n\n React.useEffect(() => {\n warnOnce(\n typeof identifier === \"undefined\",\n \"useTable: `resource` is not defined.\",\n );\n }, [identifier]);\n\n const [sorters, setSorters] = useState<CrudSort[]>(\n setInitialSorters(preferredPermanentSorters, defaultSorter ?? []),\n );\n const [filters, setFilters] = useState<CrudFilter[]>(\n setInitialFilters(preferredPermanentFilters, defaultFilter ?? []),\n );\n const [currentPage, setCurrentPage] = useState<number>(defaultCurrentPage);\n const [pageSize, setPageSize] = useState<number>(defaultPageSize);\n\n const getCurrentQueryParams = (): object => {\n // We get QueryString parameters that are uncontrolled by refine.\n const { sorters, filters, pageSize, current, ...rest } =\n parsedParams?.params ?? {};\n\n return rest;\n };\n\n const createLinkForSyncWithLocation = ({\n pagination: { currentPage, pageSize },\n sorters,\n filters,\n }: SyncWithLocationParams) => {\n return (\n go({\n type: \"path\",\n options: {\n keepHash: true,\n keepQuery: true,\n },\n query: {\n ...(isPaginationEnabled ? { currentPage, pageSize } : {}),\n sorters,\n filters,\n ...getCurrentQueryParams(),\n },\n }) ?? \"\"\n );\n };\n\n useEffect(() => {\n if (parsedParams?.params?.search === \"\") {\n setCurrentPage(defaultCurrentPage);\n setPageSize(defaultPageSize);\n setSorters(\n setInitialSorters(preferredPermanentSorters, defaultSorter ?? []),\n );\n setFilters(\n setInitialFilters(preferredPermanentFilters, defaultFilter ?? []),\n );\n }\n }, [parsedParams?.params?.search]);\n\n useEffect(() => {\n if (syncWithLocation) {\n go({\n type: \"replace\",\n options: {\n keepQuery: true,\n },\n query: {\n ...(isPaginationEnabled ? { pageSize, currentPage } : {}),\n sorters: differenceWith(sorters, preferredPermanentSorters, isEqual),\n filters: differenceWith(filters, preferredPermanentFilters, isEqual),\n },\n });\n }\n }, [syncWithLocation, currentPage, pageSize, sorters, filters]);\n\n const queryResult = useList<TQueryFnData, TError, TData>({\n resource: identifier,\n pagination: { currentPage: currentPage, pageSize, mode: pagination?.mode },\n filters: isServerSideFilteringEnabled\n ? unionFilters(preferredPermanentFilters, filters)\n : undefined,\n sorters: isServerSideSortingEnabled\n ? unionSorters(preferredPermanentSorters, sorters)\n : undefined,\n queryOptions,\n overtimeOptions,\n successNotification,\n errorNotification,\n meta: combinedMeta,\n liveMode,\n liveParams,\n onLiveEvent,\n dataProviderName,\n });\n\n const setFiltersAsMerge = useCallback(\n (newFilters: CrudFilter[]) => {\n setFilters((prevFilters) =>\n unionFilters(preferredPermanentFilters, newFilters, prevFilters),\n );\n },\n [preferredPermanentFilters],\n );\n\n const setFiltersAsReplace = useCallback(\n (newFilters: CrudFilter[]) => {\n setFilters(unionFilters(preferredPermanentFilters, newFilters));\n },\n [preferredPermanentFilters],\n );\n\n const setFiltersWithSetter = useCallback(\n (setter: (prevFilters: CrudFilter[]) => CrudFilter[]) => {\n setFilters((prev) =>\n unionFilters(preferredPermanentFilters, setter(prev)),\n );\n },\n [preferredPermanentFilters],\n );\n\n const setFiltersFn: useTableReturnType<TQueryFnData>[\"setFilters\"] =\n useCallback(\n (\n setterOrFilters,\n behavior: SetFilterBehavior = prefferedFilterBehavior,\n ) => {\n if (typeof setterOrFilters === \"function\") {\n setFiltersWithSetter(setterOrFilters);\n } else {\n if (behavior === \"replace\") {\n setFiltersAsReplace(setterOrFilters);\n } else {\n setFiltersAsMerge(setterOrFilters);\n }\n }\n },\n [setFiltersWithSetter, setFiltersAsReplace, setFiltersAsMerge],\n );\n\n const setSortWithUnion = useCallback(\n (newSorter: CrudSort[]) => {\n setSorters(() => unionSorters(preferredPermanentSorters, newSorter));\n },\n [preferredPermanentSorters],\n );\n\n return {\n tableQuery: queryResult.query,\n sorters,\n setSorters: setSortWithUnion,\n filters,\n setFilters: setFiltersFn,\n currentPage,\n setCurrentPage,\n pageSize,\n setPageSize,\n pageCount: pageSize\n ? Math.ceil((queryResult.result?.total ?? 0) / pageSize)\n : 1,\n createLinkForSyncWithLocation,\n overtime: queryResult.overtime,\n result: {\n data: queryResult.result?.data || EMPTY_ARRAY,\n total: queryResult.result?.total,\n },\n };\n}\n","import { useContext } from \"react\";\n\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseMutationOptions,\n type UseMutationResult,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { ResourceContext } from \"@contexts/resource\";\nimport { hasPermission } from \"@definitions/helpers\";\nimport { pickResource } from \"@definitions/helpers/pick-resource\";\nimport { useGetIdentity } from \"@hooks/auth\";\nimport { useKeys } from \"@hooks/useKeys\";\n\nimport type { LogParams } from \"../../../contexts/auditLog/types\";\nimport type { BaseKey } from \"../../../contexts/data/types\";\n\ntype LogRenameData =\n | {\n resource?: string;\n }\n | undefined;\n\nexport type UseLogReturnType<TLogData, TLogRenameData> = {\n log: UseMutationResult<TLogData, Error, LogParams>;\n rename: UseMutationResult<\n TLogRenameData,\n Error,\n {\n id: BaseKey;\n name: string;\n }\n >;\n};\n\nexport type UseLogMutationProps<\n TLogData,\n TLogRenameData extends LogRenameData = LogRenameData,\n> = {\n logMutationOptions?: Omit<\n UseMutationOptions<TLogData, Error, LogParams, unknown>,\n \"mutationFn\"\n >;\n renameMutationOptions?: Omit<\n UseMutationOptions<\n TLogRenameData,\n Error,\n { id: BaseKey; name: string },\n unknown\n >,\n \"mutationFn\" | \"onSuccess\"\n >;\n};\n\n/**\n * useLog is used to `create` a new and `rename` the existing audit log.\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/audit-log/useLog} for more details.\n */\n\nexport const useLog = <\n TLogData,\n TLogRenameData extends LogRenameData = LogRenameData,\n>({\n logMutationOptions,\n renameMutationOptions,\n}: UseLogMutationProps<TLogData, TLogRenameData> = {}): UseLogReturnType<\n TLogData,\n TLogRenameData\n> => {\n const queryClient = useQueryClient();\n const auditLogContext = useContext(AuditLogContext);\n const { keys } = useKeys();\n\n const { resources } = useContext(ResourceContext);\n\n const {\n data: identityData,\n refetch,\n isLoading,\n } = useGetIdentity({\n queryOptions: {\n enabled: !!auditLogContext?.create,\n },\n });\n\n const log = useMutation<TLogData, Error, LogParams, unknown>({\n mutationFn: async (params: LogParams) => {\n const resource = pickResource(params.resource, resources);\n const logPermissions = resource?.meta?.audit;\n\n if (logPermissions) {\n if (!hasPermission(logPermissions, params.action)) {\n return;\n }\n }\n\n let authorData;\n if (isLoading && !!auditLogContext?.create) {\n authorData = await refetch();\n }\n\n return await auditLogContext.create?.({\n ...params,\n author: identityData ?? authorData?.data,\n });\n },\n mutationKey: keys().audit().action(\"log\").get(),\n ...logMutationOptions,\n meta: {\n ...logMutationOptions?.meta,\n ...getXRay(\"useLog\"),\n },\n });\n\n const rename = useMutation<\n TLogRenameData,\n Error,\n { id: BaseKey; name: string },\n unknown\n >({\n mutationFn: async (params: { id: BaseKey; name: string }) => {\n return await auditLogContext.update?.(params);\n },\n onSuccess: (data: TLogRenameData) => {\n if (data?.resource) {\n queryClient.invalidateQueries({\n queryKey: keys()\n .audit()\n .resource(data?.resource ?? \"\")\n .action(\"list\")\n .get(),\n });\n }\n },\n mutationKey: keys().audit().action(\"rename\").get(),\n ...renameMutationOptions,\n meta: {\n ...renameMutationOptions?.meta,\n ...getXRay(\"useLog\"),\n },\n });\n\n return { log, rename };\n};\n","import React, { type PropsWithChildren } from \"react\";\n\nimport type { IAuditLogContext } from \"./types\";\n\nexport const AuditLogContext = React.createContext<IAuditLogContext>({});\n\nexport const AuditLogContextProvider: React.FC<\n PropsWithChildren<IAuditLogContext>\n> = ({ create, get, update, children }) => {\n return (\n <AuditLogContext.Provider value={{ create, get, update }}>\n {children}\n </AuditLogContext.Provider>\n );\n};\n","import { useContext } from \"react\";\n\nimport { getXRay } from \"@refinedev/devtools-internal\";\nimport {\n type UseQueryOptions,\n type UseQueryResult,\n useQuery,\n} from \"@tanstack/react-query\";\n\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { useKeys } from \"@hooks/useKeys\";\n\nimport type { HttpError } from \"../../../contexts/data/types\";\nimport type { MakeOptional } from \"../../../definitions/types\";\n\nexport type UseLogProps<TQueryFnData, TError, TData> = {\n resource: string;\n action?: string;\n meta?: Record<number | string, any>;\n author?: Record<number | string, any>;\n queryOptions?: MakeOptional<\n UseQueryOptions<TQueryFnData, TError, TData>,\n \"queryKey\" | \"queryFn\"\n >;\n};\n\n/**\n * useLogList is used to get and filter audit logs.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/audit-log/useLogList} for more details.\n *\n * @typeParam TQueryFnData - Result data returned by the query function.\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-reference/core/interfaceReferences#httperror `HttpError`}\n * @typeParam TData - Result data returned by the `select` function. Defaults to `TQueryFnData`\n *\n */\nexport const useLogList = <\n TQueryFnData = any,\n TError extends HttpError = HttpError,\n TData = TQueryFnData,\n>({\n resource,\n action,\n meta,\n author,\n queryOptions,\n}: UseLogProps<TQueryFnData, TError, TData>): UseQueryResult<TData, TError> => {\n const { get } = useContext(AuditLogContext);\n const { keys } = useKeys();\n\n const queryResponse = useQuery<TQueryFnData, TError, TData>({\n queryKey: keys()\n .audit()\n .resource(resource)\n .action(\"list\")\n .params(meta)\n .get(),\n queryFn: () =>\n get?.({\n resource,\n action,\n author,\n meta,\n }) ?? Promise.resolve([]),\n enabled: typeof get !== \"undefined\",\n ...queryOptions,\n retry: false,\n meta: {\n ...queryOptions?.meta,\n ...getXRay(\"useLogList\", resource),\n },\n });\n\n return queryResponse;\n};\n","import React, { useContext } from \"react\";\n\nimport warnOnce from \"warn-once\";\n\nimport { I18nContext } from \"@contexts/i18n\";\nimport { getActionRoutesFromResource } from \"@definitions/helpers/router\";\nimport { composeRoute } from \"@definitions/helpers/router/compose-route\";\nimport { useRefineContext, useResourceParams, useTranslate } from \"@hooks\";\nimport { useParsed } from \"@hooks/router/use-parsed\";\n\nimport type { IResourceItem } from \"../../contexts/resource/types\";\nimport { pickResource } from \"../../definitions/helpers/pick-resource/index\";\n\nexport type BreadcrumbsType = {\n label: string;\n href?: string;\n icon?: React.ReactNode;\n};\n\ntype UseBreadcrumbReturnType = {\n breadcrumbs: BreadcrumbsType[];\n};\n\ntype UseBreadcrumbProps = {\n /**\n * Additional params to be used in the route generation process.\n */\n meta?: Record<string, string | number>;\n};\n\nexport const useBreadcrumb = ({\n meta: metaFromProps = {},\n}: UseBreadcrumbProps = {}): UseBreadcrumbReturnType => {\n const { i18nProvider } = useContext(I18nContext);\n const parsed = useParsed();\n const translate = useTranslate();\n const { action, resource, resources } = useResourceParams();\n const {\n options: { textTransformers },\n } = useRefineContext();\n\n const breadcrumbs: BreadcrumbsType[] = [];\n\n if (!resource?.name) {\n return { breadcrumbs };\n }\n\n const addBreadcrumb = (parentName: string | IResourceItem) => {\n const parentResource =\n typeof parentName === \"string\"\n ? pickResource(parentName, resources) ?? {\n name: parentName,\n }\n : parentName;\n\n if (parentResource) {\n const grandParentName = parentResource?.meta?.parent;\n if (grandParentName) {\n addBreadcrumb(grandParentName);\n }\n const listActionOfResource = getActionRoutesFromResource(\n parentResource,\n resources,\n ).find((r) => r.action === \"list\");\n\n const hrefRaw = listActionOfResource?.resource?.list\n ? listActionOfResource?.route\n : undefined;\n\n const href = hrefRaw\n ? composeRoute(hrefRaw, parentResource?.meta, parsed, metaFromProps)\n : undefined;\n\n breadcrumbs.push({\n label:\n parentResource.meta?.label ??\n translate(\n `${parentResource.name}.${parentResource.name}`,\n textTransformers.humanize(parentResource.name),\n ),\n href: href,\n icon: parentResource.meta?.icon,\n });\n }\n };\n\n addBreadcrumb(resource);\n\n if (action && action !== \"list\") {\n const key = `actions.${action}`;\n const actionLabel = translate(key);\n if (typeof i18nProvider !== \"undefined\" && actionLabel === key) {\n warnOnce(\n true,\n `[useBreadcrumb]: Breadcrumb missing translate key for the \"${action}\" action. Please add \"actions.${action}\" key to your translation file.\\nFor more information, see https://refine.dev/docs/api-reference/core/hooks/useBreadcrumb/#i18n-support`,\n );\n breadcrumbs.push({\n label: translate(\n `buttons.${action}`,\n textTransformers.humanize(action),\n ),\n });\n } else {\n breadcrumbs.push({\n label: translate(key, textTransformers.humanize(action)),\n });\n }\n }\n\n return {\n breadcrumbs,\n };\n};\n","import React from \"react\";\n\nimport { useUserFriendlyName } from \"@definitions\";\nimport { getParentResource } from \"@definitions/helpers/router\";\n\nimport { useParsed, useResourceParams, useTranslate } from \"..\";\nimport { createResourceKey } from \"../../definitions/helpers/menu/create-resource-key\";\nimport {\n type FlatTreeItem,\n createTree,\n} from \"../../definitions/helpers/menu/create-tree\";\nimport { useGetToPath } from \"../router/use-get-to-path/index\";\n\ntype UseMenuReturnType = {\n defaultOpenKeys: string[];\n selectedKey: string;\n menuItems: TreeMenuItem[];\n};\n\nexport type UseMenuProps = {\n meta?: Record<string, any>;\n hideOnMissingParameter?: boolean;\n};\n\nexport type TreeMenuItem = Omit<\n FlatTreeItem,\n \"label\" | \"route\" | \"children\"\n> & {\n route?: string;\n icon?: React.ReactNode;\n label?: string;\n children: TreeMenuItem[];\n};\n\nconst getCleanPath = (pathname: string) => {\n return pathname\n .split(\"?\")[0]\n .split(\"#\")[0]\n .replace(/(.+)(\\/$)/, \"$1\");\n};\n\n/**\n * `useMenu` is used to get menu items of the default sidebar.\n * These items include a link to dashboard page (if it exists) and links to the user defined resources\n * (passed as children to {@link https://refine.dev/docs/core/components/refine-config `<Refine>`}).\n * This hook can also be used to build custom menus, which is also used by default sidebar to show menu items.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/hooks/ui/useMenu} for more details.\n */\nexport const useMenu = (\n { meta, hideOnMissingParameter = true }: UseMenuProps = {\n hideOnMissingParameter: true,\n },\n): UseMenuReturnType => {\n const translate = useTranslate();\n\n const getToPath = useGetToPath();\n const { resource, resources } = useResourceParams();\n const { pathname } = useParsed();\n const getFriendlyName = useUserFriendlyName();\n\n const cleanPathname = pathname ? getCleanPath(pathname) : undefined;\n\n const cleanRoute = `/${(cleanPathname ?? \"\").replace(/^\\//, \"\")}`;\n\n const selectedKey = resource\n ? createResourceKey(resource, resources)\n : cleanRoute ?? \"\";\n\n const defaultOpenKeys = React.useMemo(() => {\n if (!resource) return [];\n let parent = getParentResource(resource, resources);\n const keys = [createResourceKey(resource, resources)];\n while (parent) {\n keys.push(createResourceKey(parent, resources));\n parent = getParentResource(parent, resources);\n }\n return keys;\n }, []);\n\n const prepareItem = React.useCallback(\n (item: FlatTreeItem): TreeMenuItem | undefined => {\n if (item?.meta?.hide) {\n return undefined;\n }\n if (!item?.list && item.children.length === 0) return undefined;\n\n const composed = item.list\n ? getToPath({\n resource: item,\n action: \"list\",\n meta,\n })\n : undefined;\n\n if (\n hideOnMissingParameter &&\n composed &&\n composed.match(/(\\/|^):(.+?)(\\/|$){1}/)\n )\n return undefined;\n\n return {\n ...item,\n route: composed,\n icon: item.meta?.icon,\n label:\n item?.meta?.label ??\n translate(\n `${item.name}.${item.name}`,\n getFriendlyName(item.name, \"plural\"),\n ),\n };\n },\n [meta, getToPath, translate, hideOnMissingParameter],\n );\n\n const treeItems = React.useMemo(() => {\n const treeMenuItems = createTree(resources);\n\n // add paths to items and their nodes recursively\n const prepare = (items: TreeMenuItem[]): TreeMenuItem[] => {\n return items.flatMap((item) => {\n const preparedNodes = prepare(item.children);\n const newItem = prepareItem({\n ...item,\n children: preparedNodes,\n });\n\n if (!newItem) return [];\n\n return [newItem];\n });\n };\n\n return prepare(treeMenuItems);\n }, [resources, prepareItem]);\n\n return {\n defaultOpenKeys,\n selectedKey,\n menuItems: treeItems,\n };\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport {\n getParentResource,\n removeLeadingTrailingSlashes,\n} from \"../../helpers/router\";\n\nexport const createResourceKey = (\n resource: IResourceItem,\n resources: IResourceItem[],\n) => {\n const parents: IResourceItem[] = [];\n\n let currentParentResource = getParentResource(resource, resources);\n while (currentParentResource) {\n parents.push(currentParentResource);\n currentParentResource = getParentResource(currentParentResource, resources);\n }\n parents.reverse();\n\n const key = [...parents, resource]\n .map((r) => removeLeadingTrailingSlashes(r.identifier ?? r.name))\n .join(\"/\");\n\n return `/${key.replace(/^\\//, \"\")}`;\n};\n","import type { IResourceItem } from \"../../../contexts/resource/types\";\nimport { getParentResource } from \"../router\";\nimport { createResourceKey } from \"./create-resource-key\";\n\nexport type Tree = {\n item: IResourceItem;\n children: { [key: string]: Tree };\n};\n\nexport type FlatTreeItem = IResourceItem & {\n key: string;\n children: FlatTreeItem[];\n};\n\nexport const createTree = (resources: IResourceItem[]): FlatTreeItem[] => {\n const root: Tree = {\n item: {\n name: \"__root__\",\n },\n children: {},\n };\n\n resources.forEach((resource) => {\n const parents: IResourceItem[] = [];\n\n let currentParent = getParentResource(resource, resources);\n while (currentParent) {\n parents.push(currentParent);\n currentParent = getParentResource(currentParent, resources);\n }\n parents.reverse();\n\n let currentTree = root;\n\n parents.forEach((parent) => {\n const key = parent.identifier ?? parent.name;\n\n if (!currentTree.children[key]) {\n currentTree.children[key] = {\n item: parent,\n children: {},\n };\n }\n currentTree = currentTree.children[key];\n });\n\n const key = resource.identifier ?? resource.name;\n\n if (!currentTree.children[key]) {\n currentTree.children[key] = {\n item: resource,\n children: {},\n };\n }\n });\n\n const flatten = (tree: Tree): FlatTreeItem[] => {\n const items: FlatTreeItem[] = [];\n\n Object.keys(tree.children).forEach((key) => {\n const itemKey = createResourceKey(tree.children[key].item, resources);\n const item: FlatTreeItem = {\n ...tree.children[key].item,\n key: itemKey,\n children: flatten(tree.children[key]),\n };\n items.push(item);\n });\n\n return items;\n };\n\n return flatten(root);\n};\n","import React, {\n type ReactNode,\n createContext,\n useContext,\n useMemo,\n} from \"react\";\n\ntype MetaContextValue = Record<string, any>;\n\nexport const MetaContext = createContext<MetaContextValue>({});\n\n/**\n * Is used to provide meta data to the children components.\n * @internal\n */\nexport const MetaContextProvider = ({\n children,\n value,\n}: { children: ReactNode; value: MetaContextValue }) => {\n const currentValue = useMetaContext();\n\n const metaContext = useMemo(() => {\n return {\n ...currentValue,\n ...value,\n };\n }, [currentValue, value]);\n\n return (\n <MetaContext.Provider value={metaContext}>{children}</MetaContext.Provider>\n );\n};\n\n/**\n * @internal\n * @returns The MetaContext value.\n */\nexport const useMetaContext = () => {\n const context = useContext(MetaContext);\n if (!context) {\n throw new Error(\"useMetaContext must be used within a MetaContextProvider\");\n }\n\n return useContext(MetaContext);\n};\n","import { useMetaContext } from \"@contexts/metaContext\";\nimport { sanitizeResource } from \"@definitions/helpers/sanitize-resource\";\nimport { useParsed } from \"@hooks/router\";\n\nimport type { MetaQuery } from \"../../contexts/data/types\";\nimport type { IResourceItem } from \"../../contexts/resource/types\";\n\n/**\n * Hook that returns a function to get meta.\n * The meta is a combination of the resource meta, hook meta, query params and metaContext value.\n * @internal\n */\nexport const useMeta = () => {\n const { params } = useParsed();\n\n const metaContext = useMetaContext();\n\n const getMetaFn = ({\n resource,\n meta: metaFromProp,\n }: {\n resource?: IResourceItem;\n meta?: MetaQuery;\n } = {}) => {\n const { meta } = sanitizeResource(resource) ?? { meta: {} };\n\n // this fields came from the query params and should be removed from the meta because they are not part of the meta.\n const {\n filters: _filters,\n sorters: _sorters,\n currentPage: _currentPage,\n pageSize: _pageSize,\n ...additionalParams\n } = params ?? {};\n\n const result: Record<string, unknown> = {\n ...meta,\n ...additionalParams,\n ...metaFromProp,\n };\n\n // when MultiTenancyProvider from \"@refinedev-ee/multi-tenancy\" is provided, we need to add tenantId to the meta\n if (metaContext?.tenantId) {\n result[\"tenantId\"] = metaContext.tenantId;\n }\n\n return result;\n };\n\n return getMetaFn;\n};\n","import { RefineContext } from \"@contexts/refine\";\nimport React from \"react\";\n\nexport const useRefineOptions = () => {\n const { options } = React.useContext(RefineContext);\n\n return options;\n};\n","import { useRefineOptions } from \"../../use-refine-options\";\nimport { useTranslate } from \"../../i18n\";\n\nexport type ActionableButtonProps = {\n type: \"save\" | \"export\" | \"import\";\n};\n\nexport type ActionableButtonValues = {\n label: string;\n};\n\nexport function useActionableButton({\n type,\n}: ActionableButtonProps): ActionableButtonValues {\n const translate = useTranslate();\n const {\n textTransformers: { humanize },\n } = useRefineOptions();\n\n const key = `buttons.${type}`;\n const fallback = humanize(type);\n\n const label = translate(key, fallback);\n\n return { label };\n}\n","import React from \"react\";\n\nimport { useUserFriendlyName } from \"../../../definitions/helpers/useUserFriendlyName\";\nimport { useResourceParams } from \"../../use-resource-params\";\nimport { useRefineOptions } from \"../../use-refine-options\";\nimport { useButtonCanAccess } from \"../button-can-access\";\nimport { useNavigation } from \"../../navigation\";\nimport { useTranslate } from \"../../i18n\";\nimport { useLink } from \"../../router\";\n\nimport type { BaseKey } from \"../../../contexts/data/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport type { CanReturnType } from \"../../../contexts/accessControl/types\";\n\nexport type NavigationButtonProps = {\n action: Action;\n id?: BaseKey;\n resource?: string;\n meta?: Record<string, unknown>;\n accessControl?: {\n enabled?: boolean;\n hideIfUnauthorized?: boolean;\n };\n};\n\nexport type NavigationButtonValues = {\n to: string;\n label: string;\n disabled: boolean;\n title: string;\n hidden: boolean;\n canAccess: CanReturnType | undefined;\n LinkComponent: React.ComponentType<\n React.PropsWithChildren<{\n [prop: string]: any;\n to: string;\n }>\n >;\n};\n\nexport function useNavigationButton(\n props: NavigationButtonProps,\n): NavigationButtonValues {\n const navigation = useNavigation();\n const Link = useLink();\n const translate = useTranslate();\n const getUserFriendlyName = useUserFriendlyName();\n const {\n textTransformers: { humanize },\n } = useRefineOptions();\n\n const { id, resource, identifier } = useResourceParams({\n resource: props.resource,\n id: props.action === \"create\" ? undefined : props.id,\n });\n\n const { canAccess, title, hidden, disabled } = useButtonCanAccess({\n action: props.action,\n accessControl: props.accessControl,\n meta: props.meta,\n id,\n resource,\n });\n\n const LinkComponent = Link;\n\n const to = React.useMemo(() => {\n if (!resource) return \"\";\n switch (props.action) {\n case \"create\":\n case \"list\":\n return navigation[`${props.action}Url`](resource, props.meta);\n default:\n if (!id) return \"\";\n return navigation[`${props.action}Url`](resource, id, props.meta);\n }\n }, [resource, id, props.meta, navigation[`${props.action}Url`]]);\n\n const label =\n props.action === \"list\"\n ? translate(\n `${identifier ?? props.resource}.titles.list`,\n getUserFriendlyName(\n resource?.meta?.label ?? identifier ?? props.resource,\n \"plural\",\n ),\n )\n : translate(`buttons.${props.action}`, humanize(props.action));\n\n return {\n to,\n label,\n title,\n disabled,\n hidden,\n canAccess,\n LinkComponent,\n };\n}\n","import React from \"react\";\n\nimport { AccessControlContext } from \"../../../contexts/accessControl\";\nimport { useCan } from \"../../accessControl\";\nimport { useTranslate } from \"../../i18n\";\n\nimport type { CanReturnType } from \"../../../contexts/accessControl/types\";\nimport type { IResourceItem } from \"../../../contexts/resource/types\";\nimport type { Action } from \"../../../contexts/router/types\";\nimport type { BaseKey } from \"../../../contexts/data/types\";\n\ntype ButtonCanAccessProps = {\n action: Action | \"delete\";\n resource?: IResourceItem;\n id?: BaseKey;\n accessControl?: {\n enabled?: boolean;\n hideIfUnauthorized?: boolean;\n };\n meta?: Record<string, unknown>;\n};\n\ntype ButtonCanAccessValues = {\n title: string;\n hidden: boolean;\n disabled: boolean;\n canAccess: CanReturnType | undefined;\n};\n\nexport const useButtonCanAccess = (\n props: ButtonCanAccessProps,\n): ButtonCanAccessValues => {\n const translate = useTranslate();\n const accessControlContext = React.useContext(AccessControlContext);\n\n const accessControlEnabled =\n props.accessControl?.enabled ??\n accessControlContext.options.buttons.enableAccessControl;\n\n const hideIfUnauthorized =\n props.accessControl?.hideIfUnauthorized ??\n accessControlContext.options.buttons.hideIfUnauthorized;\n\n const { data: canAccess } = useCan({\n resource: props.resource?.name,\n action: props.action === \"clone\" ? \"create\" : props.action,\n params: { meta: props.meta, id: props.id, resource: props.resource },\n queryOptions: {\n enabled: accessControlEnabled,\n },\n });\n\n const title = React.useMemo(() => {\n if (canAccess?.can) return \"\";\n if (canAccess?.reason) return canAccess.reason;\n\n return translate(\n \"buttons.notAccessTitle\",\n \"You don't have permission to access\",\n );\n }, [canAccess?.can, canAccess?.reason, translate]);\n\n const hidden = accessControlEnabled && hideIfUnauthorized && !canAccess?.can;\n\n const disabled = canAccess?.can === false;\n\n return {\n title,\n hidden,\n disabled,\n canAccess,\n };\n};\n","import { useTranslate } from \"../../i18n\";\nimport { useDelete } from \"../../data/useDelete\";\nimport { useButtonCanAccess } from \"../button-can-access\";\nimport { useResourceParams } from \"../../use-resource-params\";\nimport { useMutationMode, useWarnAboutChange } from \"../../refine\";\n\nimport type { BaseKey, DeleteOneResponse } from \"../../../contexts/data/types\";\nimport type { CanReturnType } from \"../../../contexts/accessControl/types\";\nimport type { DeleteParams } from \"../../data/useDelete\";\n\nexport type DeleteButtonProps = {\n resource?: string;\n id?: BaseKey;\n dataProviderName?: string;\n meta?: Record<string, unknown>;\n accessControl?: {\n enabled?: boolean;\n hideIfUnauthorized?: boolean;\n };\n onSuccess?: (value: DeleteOneResponse) => void;\n} & Pick<\n DeleteParams<any, any, any>,\n \"mutationMode\" | \"successNotification\" | \"errorNotification\" | \"invalidates\"\n>;\n\nexport type DeleteButtonValues = {\n label: string;\n title: string;\n hidden: boolean;\n loading: boolean;\n disabled: boolean;\n canAccess: CanReturnType | undefined;\n confirmOkLabel: string;\n cancelLabel: string;\n confirmTitle: string;\n onConfirm: () => void;\n};\n\nexport function useDeleteButton(props: DeleteButtonProps): DeleteButtonValues {\n const translate = useTranslate();\n const {\n mutation: { mutate, isPending, variables },\n } = useDelete();\n const { setWarnWhen } = useWarnAboutChange();\n const { mutationMode } = useMutationMode(props.mutationMode);\n\n const { id, resource, identifier } = useResourceParams({\n resource: props.resource,\n id: props.id,\n });\n\n const { title, disabled, hidden, canAccess } = useButtonCanAccess({\n action: \"delete\",\n accessControl: props.accessControl,\n id,\n resource,\n });\n\n const label = translate(\"buttons.delete\", \"Delete\");\n\n const confirmOkLabel = translate(\"buttons.delete\", \"Delete\");\n\n const confirmTitle = translate(\"buttons.confirm\", \"Are you sure?\");\n\n const cancelLabel = translate(\"buttons.cancel\", \"Cancel\");\n\n const loading = id === variables?.id && isPending;\n\n const onConfirm = () => {\n if (id && identifier) {\n setWarnWhen(false);\n mutate(\n {\n id,\n resource: identifier,\n mutationMode,\n successNotification: props.successNotification,\n errorNotification: props.errorNotification,\n meta: props.meta,\n dataProviderName: props.dataProviderName,\n invalidates: props.invalidates,\n },\n {\n onSuccess: props.onSuccess,\n },\n );\n }\n };\n\n return {\n label,\n title,\n hidden,\n disabled,\n canAccess,\n loading,\n confirmOkLabel,\n cancelLabel,\n confirmTitle,\n onConfirm,\n };\n}\n","import { useQueryClient } from \"@tanstack/react-query\";\n\nimport { useTranslate } from \"../../i18n\";\nimport { useInvalidate } from \"../../invalidate\";\nimport { useResourceParams } from \"../../use-resource-params\";\nimport { useKeys } from \"../../useKeys\";\nimport { pickDataProvider } from \"../../../definitions\";\n\nimport type { BaseKey } from \"../../../contexts/data/types\";\n\nexport type RefreshButtonProps = {\n resource?: string;\n id?: BaseKey;\n dataProviderName?: string;\n meta?: Record<string, unknown>;\n};\n\nexport type RefreshButtonValues = {\n onClick: () => void;\n label: string;\n loading: boolean;\n};\n\nexport function useRefreshButton(\n props: RefreshButtonProps,\n): RefreshButtonValues {\n const translate = useTranslate();\n const { keys } = useKeys();\n\n const queryClient = useQueryClient();\n const invalidates = useInvalidate();\n\n const { identifier, id, resources } = useResourceParams({\n resource: props.resource,\n id: props.id,\n });\n\n const loading = !!queryClient.isFetching({\n queryKey: keys()\n .data(pickDataProvider(identifier, props.dataProviderName, resources))\n .resource(identifier)\n .action(\"one\")\n .get(),\n });\n\n const onClick = () => {\n invalidates({\n id,\n invalidates: [\"detail\"],\n dataProviderName: props.dataProviderName,\n resource: identifier,\n });\n };\n\n const label = translate(\"buttons.refresh\", \"Refresh\");\n\n return {\n onClick,\n label,\n loading,\n };\n}\n","import { useActionableButton } from \"./actionable-button\";\nimport { useNavigationButton } from \"./navigation-button\";\n\nimport type { NavigationButtonProps } from \"./navigation-button\";\nimport type { Prettify } from \"../../contexts/data/types\";\n\nexport { useDeleteButton } from \"./delete-button\";\n\nexport { useRefreshButton } from \"./refresh-button\";\n\nexport const useShowButton = (\n props: Prettify<Omit<NavigationButtonProps, \"action\">>,\n) => useNavigationButton({ ...props, action: \"show\" });\n\nexport const useEditButton = (\n props: Prettify<Omit<NavigationButtonProps, \"action\">>,\n) => useNavigationButton({ ...props, action: \"edit\" });\n\nexport const useCloneButton = (\n props: Prettify<Omit<NavigationButtonProps, \"action\">>,\n) => useNavigationButton({ ...props, action: \"clone\" });\n\nexport const useCreateButton = (\n props: Prettify<Omit<NavigationButtonProps, \"action\" | \"id\">>,\n) => useNavigationButton({ ...props, action: \"create\" });\n\nexport const useListButton = (\n props: Prettify<Omit<NavigationButtonProps, \"action\" | \"id\">>,\n) => useNavigationButton({ ...props, action: \"list\" });\n\nexport const useSaveButton = () => useActionableButton({ type: \"save\" });\n\nexport const useExportButton = () => useActionableButton({ type: \"export\" });\n\nexport const useImportButton = () => useActionableButton({ type: \"import\" });\n","import React, {\n type DetailedHTMLProps,\n type HTMLAttributes,\n type FormHTMLAttributes,\n} from \"react\";\n\nimport {\n ForgotPasswordPage,\n LoginPage,\n RegisterPage,\n UpdatePasswordPage,\n} from \"./components\";\n\nimport type { AuthPageProps } from \"./types\";\n\nexport type DivPropsType = DetailedHTMLProps<\n HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\nexport type FormPropsType = DetailedHTMLProps<\n FormHTMLAttributes<HTMLFormElement>,\n HTMLFormElement\n>;\n\nexport type AuthProps = AuthPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\n/**\n * **refine** has a default auth page form which is served on `/login` route when the `authProvider` configuration is provided.\n * @param title is not implemented yet.\n * @see {@link https://refine.dev/docs/api-reference/core/components/auth-page/} for more details.\n */\nexport const AuthPage: React.FC<AuthProps> = (props) => {\n const { type } = props;\n const renderView = () => {\n switch (type) {\n case \"register\":\n return <RegisterPage {...props} />;\n case \"forgotPassword\":\n return <ForgotPasswordPage {...props} />;\n case \"updatePassword\":\n return <UpdatePasswordPage {...props} />;\n default:\n return <LoginPage {...props} />;\n }\n };\n\n return <>{renderView()}</>;\n};\n","import React, { useState } from \"react\";\n\nimport { useLink, useLogin, useTranslate } from \"@hooks\";\n\nimport type { DivPropsType, FormPropsType } from \"../..\";\nimport type { LoginFormTypes, LoginPageProps } from \"../../types\";\n\ntype LoginProps = LoginPageProps<DivPropsType, DivPropsType, FormPropsType>;\n\nexport const LoginPage: React.FC<LoginProps> = ({\n providers,\n registerLink,\n forgotPasswordLink,\n rememberMe,\n contentProps,\n wrapperProps,\n renderContent,\n formProps,\n title = undefined,\n hideForm,\n mutationVariables,\n}) => {\n const Link = useLink();\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [remember, setRemember] = useState(false);\n\n const translate = useTranslate();\n\n const { mutate: login } = useLogin<LoginFormTypes>();\n\n const renderLink = (link: string, text?: string) => {\n return <Link to={link}>{text}</Link>;\n };\n\n const renderProviders = () => {\n if (providers) {\n return providers.map((provider) => (\n <div\n key={provider.name}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: \"1rem\",\n }}\n >\n <button\n onClick={() =>\n login({\n ...mutationVariables,\n providerName: provider.name,\n })\n }\n style={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n {provider?.icon}\n {provider.label ?? <label>{provider.label}</label>}\n </button>\n </div>\n ));\n }\n return null;\n };\n\n const content = (\n <div {...contentProps}>\n <h1 style={{ textAlign: \"center\" }}>\n {translate(\"pages.login.title\", \"Sign in to your account\")}\n </h1>\n {renderProviders()}\n {!hideForm && (\n <>\n <hr />\n <form\n onSubmit={(e) => {\n e.preventDefault();\n login({ ...mutationVariables, email, password, remember });\n }}\n {...formProps}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 25,\n }}\n >\n <label htmlFor=\"email-input\">\n {translate(\"pages.login.fields.email\", \"Email\")}\n </label>\n <input\n id=\"email-input\"\n name=\"email\"\n type=\"text\"\n size={20}\n autoCorrect=\"off\"\n spellCheck={false}\n autoCapitalize=\"off\"\n required\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n <label htmlFor=\"password-input\">\n {translate(\"pages.login.fields.password\", \"Password\")}\n </label>\n <input\n id=\"password-input\"\n type=\"password\"\n name=\"password\"\n required\n size={20}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n />\n {rememberMe ?? (\n <>\n <label htmlFor=\"remember-me-input\">\n {translate(\"pages.login.buttons.rememberMe\", \"Remember me\")}\n <input\n id=\"remember-me-input\"\n name=\"remember\"\n type=\"checkbox\"\n size={20}\n checked={remember}\n value={remember.toString()}\n onChange={() => {\n setRemember(!remember);\n }}\n />\n </label>\n </>\n )}\n <br />\n {forgotPasswordLink ??\n renderLink(\n \"/forgot-password\",\n translate(\n \"pages.login.buttons.forgotPassword\",\n \"Forgot password?\",\n ),\n )}\n <input\n type=\"submit\"\n value={translate(\"pages.login.signin\", \"Sign in\")}\n />\n {registerLink ?? (\n <span>\n {translate(\n \"pages.login.buttons.noAccount\",\n \"Don’t have an account?\",\n )}{\" \"}\n {renderLink(\n \"/register\",\n translate(\"pages.login.register\", \"Sign up\"),\n )}\n </span>\n )}\n </div>\n </form>\n </>\n )}\n {registerLink !== false && hideForm && (\n <div style={{ textAlign: \"center\" }}>\n {translate(\"pages.login.buttons.noAccount\", \"Don’t have an account?\")}{\" \"}\n {renderLink(\n \"/register\",\n translate(\"pages.login.register\", \"Sign up\"),\n )}\n </div>\n )}\n </div>\n );\n\n return (\n <div {...wrapperProps}>\n {renderContent ? renderContent(content, title) : content}\n </div>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { useLink, useRegister, useTranslate } from \"@hooks\";\n\nimport type { DivPropsType, FormPropsType } from \"../..\";\nimport type { RegisterPageProps } from \"../../types\";\n\ntype RegisterProps = RegisterPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\nexport const RegisterPage: React.FC<RegisterProps> = ({\n providers,\n loginLink,\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title = undefined,\n hideForm,\n mutationVariables,\n}) => {\n const Link = useLink();\n\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n const translate = useTranslate();\n\n const { mutate: register, isPending } = useRegister();\n\n const renderLink = (link: string, text?: string) => {\n return <Link to={link}>{text}</Link>;\n };\n\n const renderProviders = () => {\n if (providers) {\n return providers.map((provider) => (\n <div\n key={provider.name}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: \"1rem\",\n }}\n >\n <button\n onClick={() =>\n register({\n ...mutationVariables,\n providerName: provider.name,\n })\n }\n style={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n {provider?.icon}\n {provider.label ?? <label>{provider.label}</label>}\n </button>\n </div>\n ));\n }\n return null;\n };\n\n const content = (\n <div {...contentProps}>\n <h1 style={{ textAlign: \"center\" }}>\n {translate(\"pages.register.title\", \"Sign up for your account\")}\n </h1>\n {renderProviders()}\n {!hideForm && (\n <>\n <hr />\n <form\n onSubmit={(e) => {\n e.preventDefault();\n register({ ...mutationVariables, email, password });\n }}\n {...formProps}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 25,\n }}\n >\n <label htmlFor=\"email-input\">\n {translate(\"pages.register.fields.email\", \"Email\")}\n </label>\n <input\n id=\"email-input\"\n name=\"email\"\n type=\"email\"\n size={20}\n autoCorrect=\"off\"\n spellCheck={false}\n autoCapitalize=\"off\"\n required\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n <label htmlFor=\"password-input\">\n {translate(\"pages.register.fields.password\", \"Password\")}\n </label>\n <input\n id=\"password-input\"\n name=\"password\"\n type=\"password\"\n required\n size={20}\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n />\n <input\n type=\"submit\"\n value={translate(\"pages.register.buttons.submit\", \"Sign up\")}\n disabled={isPending}\n />\n {loginLink ?? (\n <>\n <span>\n {translate(\n \"pages.login.buttons.haveAccount\",\n \"Have an account?\",\n )}{\" \"}\n {renderLink(\n \"/login\",\n translate(\"pages.login.signin\", \"Sign in\"),\n )}\n </span>\n </>\n )}\n </div>\n </form>\n </>\n )}\n {loginLink !== false && hideForm && (\n <div style={{ textAlign: \"center\" }}>\n {translate(\"pages.login.buttons.haveAccount\", \"Have an account?\")}{\" \"}\n {renderLink(\"/login\", translate(\"pages.login.signin\", \"Sign in\"))}\n </div>\n )}\n </div>\n );\n\n return (\n <div {...wrapperProps}>\n {renderContent ? renderContent(content, title) : content}\n </div>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { useForgotPassword, useLink, useTranslate } from \"@hooks\";\n\nimport type { DivPropsType, FormPropsType } from \"../..\";\nimport type {\n ForgotPasswordFormTypes,\n ForgotPasswordPageProps,\n} from \"../../types\";\n\ntype ForgotPasswordProps = ForgotPasswordPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\nexport const ForgotPasswordPage: React.FC<ForgotPasswordProps> = ({\n loginLink,\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title = undefined,\n mutationVariables,\n}) => {\n const translate = useTranslate();\n const Link = useLink();\n\n const [email, setEmail] = useState(\"\");\n\n const { mutate: forgotPassword, isPending } =\n useForgotPassword<ForgotPasswordFormTypes>();\n\n const renderLink = (link: string, text?: string) => {\n return <Link to={link}>{text}</Link>;\n };\n\n const content = (\n <div {...contentProps}>\n <h1 style={{ textAlign: \"center\" }}>\n {translate(\"pages.forgotPassword.title\", \"Forgot your password?\")}\n </h1>\n <hr />\n <form\n onSubmit={(e) => {\n e.preventDefault();\n forgotPassword({ ...mutationVariables, email });\n }}\n {...formProps}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 25,\n }}\n >\n <label htmlFor=\"email-input\">\n {translate(\"pages.forgotPassword.fields.email\", \"Email\")}\n </label>\n <input\n id=\"email-input\"\n name=\"email\"\n type=\"mail\"\n autoCorrect=\"off\"\n spellCheck={false}\n autoCapitalize=\"off\"\n required\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n <input\n type=\"submit\"\n disabled={isPending}\n value={translate(\n \"pages.forgotPassword.buttons.submit\",\n \"Send reset instructions\",\n )}\n />\n <br />\n {loginLink ?? (\n <span>\n {translate(\n \"pages.register.buttons.haveAccount\",\n \"Have an account? \",\n )}{\" \"}\n {renderLink(\"/login\", translate(\"pages.login.signin\", \"Sign in\"))}\n </span>\n )}\n </div>\n </form>\n </div>\n );\n\n return (\n <div {...wrapperProps}>\n {renderContent ? renderContent(content, title) : content}\n </div>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { useActiveAuthProvider } from \"@definitions/helpers\";\nimport { useTranslate, useUpdatePassword } from \"@hooks\";\n\nimport type { DivPropsType, FormPropsType } from \"../..\";\nimport type {\n UpdatePasswordFormTypes,\n UpdatePasswordPageProps,\n} from \"../../types\";\n\ntype UpdatePasswordProps = UpdatePasswordPageProps<\n DivPropsType,\n DivPropsType,\n FormPropsType\n>;\n\nexport const UpdatePasswordPage: React.FC<UpdatePasswordProps> = ({\n wrapperProps,\n contentProps,\n renderContent,\n formProps,\n title = undefined,\n mutationVariables,\n}) => {\n const translate = useTranslate();\n\n const authProvider = useActiveAuthProvider();\n const { mutate: updatePassword, isPending } =\n useUpdatePassword<UpdatePasswordFormTypes>();\n\n const [newPassword, setNewPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n\n const content = (\n <div {...contentProps}>\n <h1 style={{ textAlign: \"center\" }}>\n {translate(\"pages.updatePassword.title\", \"Update Password\")}\n </h1>\n <hr />\n <form\n onSubmit={(e) => {\n e.preventDefault();\n updatePassword({\n ...mutationVariables,\n password: newPassword,\n confirmPassword,\n });\n }}\n {...formProps}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n padding: 25,\n }}\n >\n <label htmlFor=\"password-input\">\n {translate(\"pages.updatePassword.fields.password\", \"New Password\")}\n </label>\n <input\n id=\"password-input\"\n name=\"password\"\n type=\"password\"\n required\n size={20}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n />\n <label htmlFor=\"confirm-password-input\">\n {translate(\n \"pages.updatePassword.fields.confirmPassword\",\n \"Confirm New Password\",\n )}\n </label>\n <input\n id=\"confirm-password-input\"\n name=\"confirmPassword\"\n type=\"password\"\n required\n size={20}\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n />\n <input\n type=\"submit\"\n disabled={isPending}\n value={translate(\"pages.updatePassword.buttons.submit\", \"Update\")}\n />\n </div>\n </form>\n </div>\n );\n\n return (\n <div {...wrapperProps}>\n {renderContent ? renderContent(content, title) : content}\n </div>\n );\n};\n","import React from \"react\";\nimport { ConfigSuccessPage } from \"../config-success\";\nimport { useRefineContext } from \"@hooks/refine\";\nimport { ConfigErrorPage } from \"../config-error\";\n\nexport const WelcomePage = () => {\n const { __initialized } = useRefineContext();\n\n return (\n <>\n <ConfigSuccessPage />\n {!__initialized && <ConfigErrorPage />}\n </>\n );\n};\n","import React, { useState } from \"react\";\n\nimport { useMediaQuery } from \"@definitions/helpers\";\n\ntype CardInfo = {\n title: string;\n description: string;\n link: string;\n iconUrl: string;\n};\n\nconst cards: CardInfo[] = [\n {\n title: \"Documentation\",\n description:\n \"Learn about the technical details of using Refine in your projects.\",\n link: \"https://refine.dev/docs\",\n iconUrl:\n \"https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/book.svg\",\n },\n {\n title: \"Tutorial\",\n description:\n \"Learn how to use Refine by building a fully-functioning CRUD app, from scratch to full launch.\",\n link: \"https://refine.dev/tutorial\",\n iconUrl:\n \"https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/hat.svg\",\n },\n {\n title: \"Templates\",\n description:\n \"Explore a range of pre-built templates, perfect everything from admin panels to dashboards and CRMs.\",\n link: \"https://refine.dev/templates\",\n iconUrl:\n \"https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/application.svg\",\n },\n {\n title: \"Community\",\n description: \"Join our Discord community and keep up with the latest news.\",\n link: \"https://discord.gg/refine\",\n iconUrl:\n \"https://refine.ams3.cdn.digitaloceanspaces.com/welcome-page/discord.svg\",\n },\n];\n\n/**\n * It is a page that welcomes you after the configuration is completed.\n */\nexport const ConfigSuccessPage: React.FC = () => {\n const isTablet = useMediaQuery(\"(max-width: 1010px)\");\n const isMobile = useMediaQuery(\"(max-width: 650px)\");\n\n const getGridTemplateColumns = () => {\n if (isMobile) {\n return \"1, 280px\";\n }\n if (isTablet) {\n return \"2, 280px\";\n }\n return \"4, 1fr\";\n };\n\n const getHeaderFontSize = () => {\n if (isMobile) {\n return \"32px\";\n }\n if (isTablet) {\n return \"40px\";\n }\n return \"48px\";\n };\n\n const getSubHeaderFontSize = () => {\n if (isMobile) {\n return \"16px\";\n }\n if (isTablet) {\n return \"20px\";\n }\n return \"24px\";\n };\n\n return (\n <div\n style={{\n position: \"fixed\",\n zIndex: 10,\n inset: 0,\n overflow: \"auto\",\n width: \"100dvw\",\n height: \"100dvh\",\n }}\n >\n <div\n style={{\n overflow: \"hidden\",\n position: \"relative\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n background: isMobile\n ? \"url(https://refine.ams3.cdn.digitaloceanspaces.com/website/static/assets/landing-noise.webp), radial-gradient(88.89% 50% at 50% 100%, rgba(38, 217, 127, 0.10) 0%, rgba(38, 217, 127, 0.00) 100%), radial-gradient(88.89% 50% at 50% 0%, rgba(71, 235, 235, 0.15) 0%, rgba(71, 235, 235, 0.00) 100%), #1D1E30\"\n : isTablet\n ? \"url(https://refine.ams3.cdn.digitaloceanspaces.com/website/static/assets/landing-noise.webp), radial-gradient(66.67% 50% at 50% 100%, rgba(38, 217, 127, 0.10) 0%, rgba(38, 217, 127, 0.00) 100%), radial-gradient(66.67% 50% at 50% 0%, rgba(71, 235, 235, 0.15) 0%, rgba(71, 235, 235, 0.00) 100%), #1D1E30\"\n : \"url(https://refine.ams3.cdn.digitaloceanspaces.com/website/static/assets/landing-noise.webp), radial-gradient(35.56% 50% at 50% 100%, rgba(38, 217, 127, 0.12) 0%, rgba(38, 217, 127, 0) 100%), radial-gradient(35.56% 50% at 50% 0%, rgba(71, 235, 235, 0.18) 0%, rgba(71, 235, 235, 0) 100%), #1D1E30\",\n minHeight: \"100%\",\n minWidth: \"100%\",\n fontFamily: \"Arial\",\n color: \"#FFFFFF\",\n }}\n >\n <div\n style={{\n zIndex: 2,\n position: \"absolute\",\n width: isMobile ? \"400px\" : \"800px\",\n height: \"552px\",\n opacity: \"0.5\",\n background:\n \"url(https://refine.ams3.cdn.digitaloceanspaces.com/assets/welcome-page-hexagon.png)\",\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"contain\",\n top: \"0\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n }}\n />\n <div style={{ height: isMobile ? \"40px\" : \"80px\" }} />\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\n <div\n style={{\n backgroundRepeat: \"no-repeat\",\n backgroundSize: isMobile ? \"112px 58px\" : \"224px 116px\",\n backgroundImage:\n \"url(https://refine.ams3.cdn.digitaloceanspaces.com/assets/refine-logo.svg)\",\n width: isMobile ? 112 : 224,\n height: isMobile ? 58 : 116,\n }}\n />\n </div>\n <div\n style={{\n height: isMobile ? \"120px\" : isTablet ? \"200px\" : \"30vh\",\n minHeight: isMobile ? \"120px\" : isTablet ? \"200px\" : \"200px\",\n }}\n />\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n textAlign: \"center\",\n }}\n >\n <h1\n style={{\n fontSize: getHeaderFontSize(),\n fontWeight: 700,\n margin: \"0px\",\n }}\n >\n Welcome Aboard!\n </h1>\n <h4\n style={{\n fontSize: getSubHeaderFontSize(),\n fontWeight: 400,\n margin: \"0px\",\n }}\n >\n Your configuration is completed.\n </h4>\n </div>\n <div style={{ height: \"64px\" }} />\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${getGridTemplateColumns()})`,\n justifyContent: \"center\",\n gap: \"48px\",\n paddingRight: \"16px\",\n paddingLeft: \"16px\",\n paddingBottom: \"32px\",\n maxWidth: \"976px\",\n margin: \"auto\",\n }}\n >\n {cards.map((card) => (\n <Card key={`welcome-page-${card.title}`} card={card} />\n ))}\n </div>\n </div>\n </div>\n );\n};\n\ntype CardProps = {\n card: CardInfo;\n};\n\nconst Card: React.FC<CardProps> = ({ card }) => {\n const { title, description, iconUrl, link } = card;\n\n const [isHover, setIsHover] = useState(false);\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <a\n onPointerEnter={() => setIsHover(true)}\n onPointerLeave={() => setIsHover(false)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n color: \"#fff\",\n textDecoration: \"none\",\n }}\n href={link}\n >\n <div\n style={{\n width: \"16px\",\n height: \"16px\",\n backgroundPosition: \"center\",\n backgroundSize: \"contain\",\n backgroundRepeat: \"no-repeat\",\n backgroundImage: `url(${iconUrl})`,\n }}\n />\n <span\n style={{\n fontSize: \"16px\",\n fontWeight: 700,\n marginLeft: \"13px\",\n marginRight: \"14px\",\n }}\n >\n {title}\n </span>\n <svg\n style={{\n transition:\n \"transform 0.5s ease-in-out, opacity 0.2s ease-in-out\",\n ...(isHover && {\n transform: \"translateX(4px)\",\n opacity: 1,\n }),\n }}\n width=\"12\"\n height=\"8\"\n fill=\"none\"\n opacity=\"0.5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.293.293a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1 0 1.414l-3 3a1 1 0 0 1-1.414-1.414L8.586 5H1a1 1 0 0 1 0-2h7.586L7.293 1.707a1 1 0 0 1 0-1.414Z\"\n fill=\"#fff\"\n />\n </svg>\n </a>\n </div>\n <span\n style={{\n fontSize: \"12px\",\n opacity: 0.5,\n lineHeight: \"16px\",\n }}\n >\n {description}\n </span>\n </div>\n );\n};\n","import React from \"react\";\n\nexport const ConfigErrorPage = () => {\n return (\n <div\n style={{\n position: \"fixed\",\n zIndex: 11,\n inset: 0,\n overflow: \"auto\",\n width: \"100dvw\",\n height: \"100dvh\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n padding: \"24px\",\n background: \"#14141FBF\",\n backdropFilter: \"blur(3px)\",\n }}\n >\n <div\n style={{\n maxWidth: \"640px\",\n width: \"100%\",\n background: \"#1D1E30\",\n borderRadius: \"16px\",\n border: \"1px solid #303450\",\n boxShadow: \"0px 0px 120px -24px #000000\",\n }}\n >\n <div\n style={{\n padding: \"16px 20px\",\n borderBottom: \"1px solid #303450\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n position: \"relative\",\n }}\n >\n <ErrorGradient\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n }}\n />\n <div\n style={{\n lineHeight: \"24px\",\n fontSize: \"16px\",\n color: \"#FFFFFF\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"16px\",\n }}\n >\n <ErrorIcon />\n <span\n style={{\n fontWeight: 400,\n }}\n >\n Configuration Error\n </span>\n </div>\n </div>\n <div\n style={{\n padding: \"20px\",\n color: \"#A3ADC2\",\n lineHeight: \"20px\",\n fontSize: \"14px\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"20px\",\n }}\n >\n <p\n style={{\n margin: 0,\n padding: 0,\n lineHeight: \"28px\",\n fontSize: \"16px\",\n }}\n >\n <code\n style={{\n display: \"inline-block\",\n background: \"#30345080\",\n padding: \"0 4px\",\n lineHeight: \"24px\",\n fontSize: \"16px\",\n borderRadius: \"4px\",\n color: \"#FFFFFF\",\n }}\n >\n {\"<Refine />\"}\n </code>{\" \"}\n is not initialized. Please make sure you have it mounted in your\n app and placed your components inside it.\n </p>\n <div>\n <ExampleImplementation />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nconst ExampleImplementation = () => {\n return (\n <pre\n style={{\n display: \"block\",\n overflowX: \"auto\",\n borderRadius: \"8px\",\n fontSize: \"14px\",\n lineHeight: \"24px\",\n backgroundColor: \"#14141F\",\n color: \"#E5ECF2\",\n padding: \"16px\",\n margin: \"0\",\n maxHeight: \"400px\",\n overflow: \"auto\",\n }}\n >\n <span style={{ color: \"#FF7B72\" }}>import</span> {\"{\"} Refine, WelcomePage{\" \"}\n {\"}\"} <span style={{ color: \"#FF7B72\" }}>from</span>{\" \"}\n <span style={{ color: \"#A5D6FF\" }}>{'\"@refinedev/core\"'}</span>;{\"\\n\"}\n {\"\\n\"}\n <span style={{ color: \"#FF7B72\" }}>export</span>{\" \"}\n <span style={{ color: \"#FF7B72\" }}>default</span>{\" \"}\n <span>\n <span style={{ color: \"#FF7B72\" }}>function</span>{\" \"}\n <span style={{ color: \"#FFA657\" }}>App</span>\n (\n <span style={{ color: \"rgb(222, 147, 95)\" }} />){\" \"}\n </span>\n {\"{\"}\n {\"\\n\"}\n {\" \"}\n <span style={{ color: \"#FF7B72\" }}>return</span> ({\"\\n\"}\n {\" \"}\n <span>\n <span style={{ color: \"#79C0FF\" }}>\n &lt;\n <span style={{ color: \"#79C0FF\" }}>Refine</span>\n {\"\\n\"}\n {\" \"}\n <span style={{ color: \"#E5ECF2\", opacity: 0.6 }}>\n {\"// \"}\n <span>...</span>\n </span>\n {\"\\n\"}\n {\" \"}&gt;\n </span>\n {\"\\n\"}\n {\" \"}\n <span style={{ opacity: 0.6 }}>\n {\"{\"}\n {\"/* ... */\"}\n {\"}\"}\n </span>\n {\"\\n\"}\n {\" \"}\n <span style={{ color: \"#79C0FF\" }}>\n &lt;\n <span style={{ color: \"#79C0FF\" }}>WelcomePage</span> /&gt;\n </span>\n {\"\\n\"}\n {\" \"}\n <span style={{ opacity: 0.6 }}>\n {\"{\"}\n {\"/* ... */\"}\n {\"}\"}\n </span>\n {\"\\n\"}\n {\" \"}\n <span style={{ color: \"#79C0FF\" }}>\n &lt;/\n <span style={{ color: \"#79C0FF\" }}>Refine</span>\n &gt;\n </span>\n </span>\n {\"\\n\"}\n {\" \"});{\"\\n\"}\n {\"}\"}\n </pre>\n );\n};\n\nconst ErrorGradient = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={204}\n height={56}\n viewBox=\"0 0 204 56\"\n fill=\"none\"\n {...props}\n >\n <path fill=\"url(#welcome-page-error-gradient-a)\" d=\"M12 0H0v12L12 0Z\" />\n <path\n fill=\"url(#welcome-page-error-gradient-b)\"\n d=\"M28 0h-8L0 20v8L28 0Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-c)\"\n d=\"M36 0h8L0 44v-8L36 0Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-d)\"\n d=\"M60 0h-8L0 52v4h4L60 0Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-e)\"\n d=\"M68 0h8L20 56h-8L68 0Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-f)\"\n d=\"M92 0h-8L28 56h8L92 0Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-g)\"\n d=\"M100 0h8L52 56h-8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-h)\"\n d=\"M124 0h-8L60 56h8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-i)\"\n d=\"M140 0h-8L76 56h8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-j)\"\n d=\"M132 0h8L84 56h-8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-k)\"\n d=\"M156 0h-8L92 56h8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-l)\"\n d=\"M164 0h8l-56 56h-8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-m)\"\n d=\"M188 0h-8l-56 56h8l56-56Z\"\n />\n <path\n fill=\"url(#welcome-page-error-gradient-n)\"\n d=\"M204 0h-8l-56 56h8l56-56Z\"\n />\n <defs>\n <radialGradient\n id=\"welcome-page-error-gradient-a\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-b\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-c\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-d\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-e\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-f\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-g\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-h\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-i\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-j\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-k\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-l\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-m\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n <radialGradient\n id=\"welcome-page-error-gradient-n\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"scale(124)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FF4C4D\" stopOpacity={0.1} />\n <stop offset={1} stopColor=\"#FF4C4D\" stopOpacity={0} />\n </radialGradient>\n </defs>\n </svg>\n);\n\nconst ErrorIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={16}\n height={16}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n {...props}\n >\n <path\n fill=\"#FF4C4D\"\n fillRule=\"evenodd\"\n d=\"M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16Z\"\n clipRule=\"evenodd\"\n />\n <path\n fill=\"#fff\"\n fillRule=\"evenodd\"\n d=\"M7 8a1 1 0 1 0 2 0V5a1 1 0 1 0-2 0v3Zm0 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n","import React from \"react\";\n\nimport { useQuerySubscription } from \"@refinedev/devtools-internal\";\nimport {\n keepPreviousData,\n QueryClient,\n QueryClientProvider,\n} from \"@tanstack/react-query\";\n\nimport { RouteChangeHandler } from \"@components\";\nimport { Telemetry } from \"@components/telemetry\";\nimport { handleRefineOptions } from \"@definitions\";\nimport { useDeepMemo } from \"@hooks/deepMemo\";\n\nimport { AccessControlContextProvider } from \"../../../contexts/accessControl\";\nimport { AuditLogContextProvider } from \"../../../contexts/auditLog\";\nimport { AuthProviderContextProvider } from \"../../../contexts/auth\";\nimport { DataContextProvider } from \"../../../contexts/data\";\nimport { I18nContextProvider } from \"../../../contexts/i18n\";\nimport { LiveContextProvider } from \"../../../contexts/live\";\nimport { NotificationContextProvider } from \"../../../contexts/notification\";\nimport { RefineContextProvider } from \"../../../contexts/refine\";\nimport { ResourceContextProvider } from \"../../../contexts/resource\";\nimport { RouterContextProvider } from \"../../../contexts/router\";\nimport { UndoableQueueContextProvider } from \"../../../contexts/undoableQueue\";\nimport { UnsavedWarnContextProvider } from \"../../../contexts/unsavedWarn\";\n\nimport type { RefineProps } from \"../../../contexts/refine/types\";\nimport { useRouterMisuseWarning } from \"../../../hooks/router/use-router-misuse-warning/index\";\n\n/**\n * {@link https://refine.dev/docs/api-reference/core/components/refine-config `<Refine> component`} is the entry point of a refine app.\n * It is where the highest level of configuration of the app occurs.\n * Only a dataProvider is required to bootstrap the app. After adding a dataProvider, resources can be added as property.\n *\n * @see {@link https://refine.dev/docs/api-reference/core/components/refine-config} for more details.\n */\nexport const Refine: React.FC<RefineProps> = ({\n authProvider,\n dataProvider,\n routerProvider,\n notificationProvider,\n accessControlProvider,\n auditLogProvider,\n resources,\n children,\n liveProvider,\n i18nProvider,\n onLiveEvent,\n options,\n}) => {\n const {\n optionsWithDefaults,\n disableTelemetryWithDefault,\n reactQueryWithDefaults,\n } = handleRefineOptions({\n options,\n });\n\n const queryClient = useDeepMemo(() => {\n if (reactQueryWithDefaults.clientConfig instanceof QueryClient) {\n return reactQueryWithDefaults.clientConfig;\n }\n\n return new QueryClient({\n ...reactQueryWithDefaults.clientConfig,\n defaultOptions: {\n ...reactQueryWithDefaults.clientConfig.defaultOptions,\n queries: {\n refetchOnWindowFocus: false,\n placeholderData: keepPreviousData,\n ...reactQueryWithDefaults.clientConfig.defaultOptions?.queries,\n },\n },\n });\n }, [reactQueryWithDefaults.clientConfig]);\n\n useQuerySubscription(queryClient);\n\n const useNotificationProviderValues = React.useMemo(() => {\n return typeof notificationProvider === \"function\"\n ? notificationProvider\n : () => notificationProvider;\n }, [notificationProvider]);\n\n const notificationProviderContextValues = useNotificationProviderValues();\n\n /**\n * Warn our users if they are using the old way of routing in the wrong prop.\n */\n useRouterMisuseWarning(routerProvider);\n /** */\n\n return (\n <QueryClientProvider client={queryClient}>\n <NotificationContextProvider {...notificationProviderContextValues}>\n <AuthProviderContextProvider\n {...(authProvider ?? {})}\n isProvided={Boolean(authProvider)}\n >\n <DataContextProvider dataProvider={dataProvider}>\n <LiveContextProvider liveProvider={liveProvider}>\n <RouterContextProvider router={routerProvider}>\n <ResourceContextProvider resources={resources ?? []}>\n <I18nContextProvider i18nProvider={i18nProvider}>\n <AccessControlContextProvider\n {...(accessControlProvider ?? {})}\n >\n <AuditLogContextProvider {...(auditLogProvider ?? {})}>\n <UndoableQueueContextProvider>\n <RefineContextProvider\n mutationMode={optionsWithDefaults.mutationMode}\n warnWhenUnsavedChanges={\n optionsWithDefaults.warnWhenUnsavedChanges\n }\n syncWithLocation={\n optionsWithDefaults.syncWithLocation\n }\n undoableTimeout={\n optionsWithDefaults.undoableTimeout\n }\n liveMode={optionsWithDefaults.liveMode}\n onLiveEvent={onLiveEvent}\n options={optionsWithDefaults}\n >\n <UnsavedWarnContextProvider>\n <React.Fragment>\n {children}\n {!disableTelemetryWithDefault && <Telemetry />}\n <RouteChangeHandler />\n </React.Fragment>\n </UnsavedWarnContextProvider>\n </RefineContextProvider>\n </UndoableQueueContextProvider>\n </AuditLogContextProvider>\n </AccessControlContextProvider>\n </I18nContextProvider>\n </ResourceContextProvider>\n </RouterContextProvider>\n </LiveContextProvider>\n </DataContextProvider>\n </AuthProviderContextProvider>\n </NotificationContextProvider>\n </QueryClientProvider>\n );\n};\n","import React from \"react\";\n\nimport { useTelemetryData } from \"@hooks/useTelemetryData\";\n\nimport type { ITelemetryData } from \"./types\";\n\nconst encode = (payload: ITelemetryData): string | undefined => {\n try {\n const stringifiedPayload = JSON.stringify(payload || {});\n\n if (typeof btoa !== \"undefined\") {\n return btoa(stringifiedPayload);\n }\n\n return Buffer.from(stringifiedPayload).toString(\"base64\");\n } catch (err) {\n return undefined;\n }\n};\n\nconst throughImage = (src: string) => {\n const img = new Image();\n\n img.src = src;\n};\n\nconst throughFetch = (src: string) => {\n fetch(src);\n};\n\nconst transport = (src: string) => {\n if (typeof Image !== \"undefined\") {\n throughImage(src);\n } else if (typeof fetch !== \"undefined\") {\n throughFetch(src);\n }\n};\n\nexport const Telemetry: React.FC<{}> = () => {\n const payload = useTelemetryData();\n const sent = React.useRef(false);\n\n React.useEffect(() => {\n if (sent.current) {\n return;\n }\n const encoded = encode(payload);\n\n if (!encoded) {\n return;\n }\n\n transport(`https://telemetry.refine.dev/telemetry?payload=${encoded}`);\n sent.current = true;\n }, []);\n\n return null;\n};\n","import { useContext } from \"react\";\n\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { DataContext } from \"@contexts/data\";\nimport { I18nContext } from \"@contexts/i18n\";\nimport { LiveContext } from \"@contexts/live\";\nimport { NotificationContext } from \"@contexts/notification\";\nimport { RouterContext } from \"@contexts/router\";\nimport { useResourceParams } from \"@hooks/use-resource-params\";\n\nimport { useIsExistAuthentication, useRefineContext } from \"..\";\nimport type { ITelemetryData } from \"../../components/telemetry/types\";\n\n// It reads and updates from package.json during build. ref: tsup.config.ts\nconst REFINE_VERSION = \"5.0.3\";\n\nexport const useTelemetryData = (): ITelemetryData => {\n const auth = useIsExistAuthentication();\n const auditLogContext = useContext(AuditLogContext);\n const { liveProvider } = useContext(LiveContext);\n const routerContext = useContext(RouterContext);\n const dataContext = useContext(DataContext);\n const { i18nProvider } = useContext(I18nContext);\n const notificationContext = useContext(NotificationContext);\n const accessControlContext = useContext(AccessControlContext);\n const { resources } = useResourceParams();\n const refineOptions = useRefineContext();\n\n const auditLog =\n !!auditLogContext.create ||\n !!auditLogContext.get ||\n !!auditLogContext.update;\n\n const live =\n !!liveProvider?.publish ||\n !!liveProvider?.subscribe ||\n !!liveProvider?.unsubscribe;\n\n const router =\n !!routerContext.Link ||\n !!routerContext.go ||\n !!routerContext.back ||\n !!routerContext.parse;\n\n const data = !!dataContext;\n\n const i18n =\n !!i18nProvider?.changeLocale ||\n !!i18nProvider?.getLocale ||\n !!i18nProvider?.translate;\n\n const notification =\n !!notificationContext.close || !!notificationContext.open;\n\n const accessControl = !!accessControlContext.can;\n\n const projectId = refineOptions?.options?.projectId;\n\n return {\n providers: {\n auth,\n auditLog,\n live,\n router,\n data,\n i18n,\n notification,\n accessControl,\n },\n version: REFINE_VERSION,\n resourceCount: resources.length,\n projectId,\n };\n};\n","import type { RouterProvider } from \"../../../contexts/router/types\";\n\nexport const checkRouterPropMisuse = (value: RouterProvider) => {\n // check if `routerProvider` prop is passed with legacy properties.\n // If yes, console.warn the user to use `legacyRuterProvider` prop instead.\n const bindings = [\"go\", \"parse\", \"back\", \"Link\"];\n\n // check if `value` contains properties other than `bindings`\n const otherProps = Object.keys(value).filter(\n (key) => !bindings.includes(key),\n );\n\n const hasOtherProps = otherProps.length > 0;\n\n if (hasOtherProps) {\n console.warn(\n `Unsupported properties are found in \\`routerProvider\\` prop. You provided \\`${otherProps.join(\n \", \",\n )}\\`. Supported properties are \\`${bindings.join(\n \", \",\n )}\\`. You may wanted to use \\`legacyRouterProvider\\` prop instead.`,\n );\n\n return true;\n }\n\n return false;\n};\n","import { checkRouterPropMisuse } from \"@definitions/helpers/check-router-prop-misuse\";\nimport React from \"react\";\nimport type { RouterProvider } from \"../../../contexts/router/types\";\n\nexport const useRouterMisuseWarning = (value?: RouterProvider) => {\n const warned = React.useRef(false);\n\n React.useEffect(() => {\n if (warned.current === false) {\n if (value) {\n const warn = checkRouterPropMisuse(value);\n if (warn) {\n warned.current = true;\n }\n }\n }\n }, [value]);\n};\n","import React, { useEffect, useState } from \"react\";\n\nimport { useCancelNotification, useNotification, useTranslate } from \"@hooks\";\n\nimport { userFriendlySecond } from \"@definitions/helpers\";\nimport {\n ActionTypes,\n type IUndoableQueue,\n} from \"../../contexts/undoableQueue/types\";\n\nexport const UndoableQueue: React.FC<{\n notification: IUndoableQueue;\n}> = ({ notification }) => {\n const translate = useTranslate();\n\n const { notificationDispatch } = useCancelNotification();\n const { open } = useNotification();\n\n const [timeoutId, setTimeoutId] = useState<number | undefined>();\n\n const cancelNotification = () => {\n if (notification.isRunning === true) {\n if (notification.seconds === 0) {\n notification.doMutation();\n }\n if (!notification.isSilent) {\n open?.({\n key: `${notification.id}-${notification.resource}-notification`,\n type: \"progress\",\n message: translate(\n \"notifications.undoable\",\n {\n seconds: userFriendlySecond(notification.seconds),\n },\n `You have ${userFriendlySecond(\n notification.seconds,\n )} seconds to undo`,\n ),\n cancelMutation: notification.cancelMutation,\n undoableTimeout: userFriendlySecond(notification.seconds),\n });\n }\n\n if (notification.seconds > 0) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n const newTimeoutId = setTimeout(() => {\n notificationDispatch({\n type: ActionTypes.DECREASE_NOTIFICATION_SECOND,\n payload: {\n id: notification.id,\n seconds: notification.seconds,\n resource: notification.resource,\n },\n });\n }, 1000) as unknown as number;\n\n setTimeoutId(newTimeoutId);\n }\n }\n };\n\n useEffect(() => {\n cancelNotification();\n }, [notification]);\n\n return null;\n};\n","import React from \"react\";\nimport { useActiveAuthProvider } from \"@definitions/index\";\nimport { useGo, useIsAuthenticated, useParsed } from \"@hooks\";\nimport type { GoConfig } from \"../../contexts/router/types\";\n\nexport type AuthCheckParams = any;\n\nexport type AuthenticatedProps = {\n /**\n * Unique key to identify the component.\n * This is required if you have multiple `Authenticated` components at the same level.\n * @required\n */\n key: React.Key;\n /**\n * Whether to redirect user if not logged in or not.\n * If not set, user will be redirected to `redirectTo` property of the `check` function's response.\n * If set to a string, user will be redirected to that string.\n *\n * This property only works if `fallback` is **not set**.\n */\n redirectOnFail?: string | true;\n /**\n * Whether to append current path to search params of the redirect url at `to` property.\n *\n * By default, `to` parameter is used by successful invocations of the `useLogin` hook.\n * If `to` present, it will be used as the redirect url after successful login.\n */\n appendCurrentPathToQuery?: boolean;\n /**\n * Content to show if user is not logged in.\n */\n fallback?: React.ReactNode;\n /**\n * Content to show while checking whether user is logged in or not.\n */\n loading?: React.ReactNode;\n /**\n * Content to show if user is logged in.\n */\n children?: React.ReactNode;\n /**\n * optional params to be passed to the Auth Provider's check method via the useIsAuthenticated hook.\n */\n params?: AuthCheckParams;\n};\n\n/**\n * `<Authenticated>` is the component form of {@link https://refine.dev/docs/api-reference/core/hooks/auth/useAuthenticated `useAuthenticated`}. It internally uses `useAuthenticated` to provide it's functionality.\n *\n * @requires {@link https://react.dev/learn/rendering-lists#why-does-react-need-keys `key`} prop if you have multiple components at the same level.\n * In React, components don't automatically unmount and remount with prop changes, which is generally good for performance. However, for specific cases this can cause issues like unwanted content rendering (`fallback` or `children`). To solve this, assigning unique `key` values to each instance of component is necessary, forcing React to unmount and remount the component, rather than just updating its props.\n * @example\n *```tsx\n * <Authenticated key=\"dashboard\">\n * <h1>Dashboard Page</h1>\n * </Authenticated>\n *```\n *\n * @see {@link https://refine.dev/docs/core/components/auth/authenticated `<Authenticated>`} component for more details.\n */\nexport function Authenticated({\n redirectOnFail = true,\n appendCurrentPathToQuery = true,\n children,\n fallback: fallbackContent,\n loading: loadingContent,\n params,\n}: AuthenticatedProps): React.JSX.Element | null {\n const activeAuthProvider = useActiveAuthProvider();\n const hasAuthProvider = Boolean(activeAuthProvider?.isProvided);\n const parsed = useParsed();\n const go = useGo();\n\n const {\n isFetching,\n data: {\n authenticated: isAuthenticatedStatus,\n redirectTo: authenticatedRedirect,\n } = {},\n } = useIsAuthenticated({\n params,\n });\n\n const isAuthenticated = hasAuthProvider ? isAuthenticatedStatus : true;\n // when there is no auth provider\n if (!hasAuthProvider) {\n return <>{children ?? null}</>;\n }\n\n // when checking authentication status\n if (isFetching) {\n return <>{loadingContent ?? null}</>;\n }\n\n // when user is authenticated return children\n if (isAuthenticated) {\n return <>{children ?? null}</>;\n }\n // when user is not authenticated redirect or render fallbackContent\n\n // render fallbackContent if it is exist\n if (typeof fallbackContent !== \"undefined\") {\n return <>{fallbackContent ?? null}</>;\n }\n // if there is no fallbackContent, redirect page\n\n // Redirect url to use. use redirectOnFail if it is set.\n // Otherwise use redirectTo property of the check function's response.\n const appliedRedirect =\n typeof redirectOnFail === \"string\"\n ? redirectOnFail\n : (authenticatedRedirect as string | undefined);\n\n // Current pathname to append to the redirect url.\n // User will be redirected to this url after successful mutation. (like login)\n const pathname = `${parsed.pathname}`.replace(/(\\?.*|#.*)$/, \"\");\n\n // Redirect if appliedRedirect is set, otherwise return null.\n if (appliedRedirect) {\n const queryToValue: string | undefined = parsed.params?.to\n ? parsed.params.to\n : go({\n to: pathname,\n options: { keepQuery: true },\n type: \"path\",\n });\n\n return (\n <Redirect\n config={{\n to: appliedRedirect,\n query:\n appendCurrentPathToQuery && (queryToValue ?? \"\").length > 1\n ? {\n to: queryToValue,\n }\n : undefined,\n type: \"replace\",\n }}\n />\n );\n }\n\n return null;\n}\n\nconst Redirect = ({ config }: { config: GoConfig }) => {\n const go = useGo();\n\n React.useEffect(() => {\n go(config);\n }, [go, config]);\n\n return null;\n};\n","import { useEffect, useContext } from \"react\";\nimport { useActiveAuthProvider } from \"@definitions/index\";\nimport { RouterContext } from \"../../contexts/router\";\n\nexport const RouteChangeHandler: React.FC = () => {\n const routerContext = useContext(RouterContext);\n const authProvider = useActiveAuthProvider();\n const parse = routerContext.parse?.();\n const pathname = parse?.()?.pathname || \"\";\n\n useEffect(() => {\n authProvider?.check?.().catch(() => false);\n }, [pathname]);\n\n return null;\n};\n","import React, { useEffect } from \"react\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\n\nimport { useCan, useResourceParams } from \"@hooks\";\n\nimport type { CanReturnType } from \"../../contexts/accessControl/types\";\nimport type { BaseKey } from \"../../contexts/data/types\";\nimport type { IResourceItem } from \"../../contexts/resource/types\";\n\ntype ITreeResource = IResourceItem & {\n key?: string;\n children: ITreeResource[];\n};\n\ntype CanParams = {\n resource?: IResourceItem & { children?: ITreeResource[] };\n id?: BaseKey;\n [key: string]: any;\n};\n\ntype OnUnauthorizedProps = {\n resource?: string;\n reason?: string;\n action: string;\n params: CanParams;\n};\n\ntype CanAccessBaseProps = {\n /**\n * Resource name for API data interactions\n */\n resource?: string;\n /**\n * Intended action on resource\n */\n action: string;\n /**\n * Parameters associated with the resource\n * @type { resource?: [IResourceItem](https://refine.dev/docs/api-reference/core/interfaceReferences/#canparams), id?: [BaseKey](https://refine.dev/docs/api-reference/core/interfaceReferences/#basekey), [key: string]: any }\n */\n params?: CanParams;\n /**\n * Content to show if access control returns `false`\n */\n fallback?: React.ReactNode;\n /**\n * Callback function to be called if access control returns `can: false`\n */\n onUnauthorized?: (props: OnUnauthorizedProps) => void;\n children: React.ReactNode;\n queryOptions?: Omit<\n UseQueryOptions<CanReturnType>,\n \"queryKey\" | \"queryFn\"\n > & {\n queryKey?: UseQueryOptions<CanReturnType>[\"queryKey\"];\n queryFn?: UseQueryOptions<CanReturnType>[\"queryFn\"];\n };\n};\n\ntype CanAccessWithoutParamsProps = {\n [key in Exclude<\n keyof CanAccessBaseProps,\n \"fallback\" | \"children\"\n >]?: undefined;\n} & {\n [key in \"fallback\" | \"children\"]?: CanAccessBaseProps[key];\n};\n\nexport type CanAccessProps = CanAccessBaseProps | CanAccessWithoutParamsProps;\n\nexport const CanAccess: React.FC<CanAccessProps> = ({\n resource: resourceFromProp,\n action: actionFromProp,\n params: paramsFromProp,\n fallback,\n onUnauthorized,\n children,\n queryOptions: componentQueryOptions,\n ...rest\n}) => {\n const {\n id,\n resource,\n action: fallbackAction = \"\",\n } = useResourceParams({\n resource: resourceFromProp,\n id: paramsFromProp?.id,\n });\n\n const action = actionFromProp ?? fallbackAction;\n\n const params = paramsFromProp ?? {\n id,\n resource,\n };\n\n const { data } = useCan({\n resource: resource?.name,\n action,\n params,\n queryOptions: componentQueryOptions,\n });\n\n useEffect(() => {\n if (onUnauthorized && data?.can === false) {\n onUnauthorized({\n resource: resource?.name,\n action,\n reason: data?.reason,\n params,\n });\n }\n }, [data?.can]);\n\n if (data?.can) {\n if (React.isValidElement(children)) {\n const Children = React.cloneElement(children, rest);\n return Children;\n }\n\n return <>{children}</>;\n }\n\n if (data?.can === false) {\n return <>{fallback ?? null}</>;\n }\n\n return null;\n};\n","import React, { type CSSProperties, type SVGProps, useEffect } from \"react\";\nimport { CSSRules } from \"./styles\";\n\nconst text =\n \"If you find Refine useful, you can contribute to its growth by giving it a star on GitHub\";\n\ntype Props = {\n containerStyle?: CSSProperties;\n};\n\nexport const GitHubBanner = ({ containerStyle }: Props) => {\n useEffect(() => {\n const styleTag = document.createElement(\"style\");\n document.head.appendChild(styleTag);\n CSSRules.forEach((rule) =>\n styleTag.sheet?.insertRule(rule, styleTag.sheet.cssRules.length),\n );\n }, []);\n\n return (\n <div\n className=\"banner bg-top-announcement\"\n style={{\n width: \"100%\",\n height: \"48px\",\n }}\n >\n <div\n style={{\n position: \"relative\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n paddingLeft: \"200px\",\n width: \"100%\",\n maxWidth: \"100vw\",\n height: \"100%\",\n borderBottom: \"1px solid #47ebeb26\",\n ...containerStyle,\n }}\n >\n <div\n className=\"top-announcement-mask\"\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n borderBottom: \"1px solid #47ebeb26\",\n }}\n >\n <div\n style={{\n position: \"relative\",\n width: \"960px\",\n height: \"100%\",\n display: \"flex\",\n justifyContent: \"space-between\",\n margin: \"0 auto\",\n }}\n >\n <div\n style={{\n width: \"calc(50% - 300px)\",\n height: \"100%\",\n position: \"relative\",\n }}\n >\n <GlowSmall\n style={{\n animationDelay: \"1.5s\",\n position: \"absolute\",\n top: \"2px\",\n right: \"220px\",\n }}\n id={\"1\"}\n />\n <GlowSmall\n style={{\n animationDelay: \"1s\",\n position: \"absolute\",\n top: \"8px\",\n right: \"100px\",\n transform: \"rotate(180deg)\",\n }}\n id={\"2\"}\n />\n <GlowBig\n style={{\n position: \"absolute\",\n right: \"10px\",\n }}\n id={\"3\"}\n />\n </div>\n\n <div\n style={{\n width: \"calc(50% - 300px)\",\n height: \"100%\",\n position: \"relative\",\n }}\n >\n <GlowSmall\n style={{\n animationDelay: \"2s\",\n position: \"absolute\",\n top: \"6px\",\n right: \"180px\",\n transform: \"rotate(180deg)\",\n }}\n id={\"4\"}\n />\n <GlowSmall\n style={{\n animationDelay: \"0.5s\",\n transitionDelay: \"1.3s\",\n position: \"absolute\",\n top: \"2px\",\n right: \"40px\",\n }}\n id={\"5\"}\n />\n <GlowBig\n style={{\n position: \"absolute\",\n right: \"-70px\",\n }}\n id={\"6\"}\n />\n </div>\n </div>\n </div>\n <Text text={text} />\n </div>\n </div>\n );\n};\n\nconst Text = ({ text }: { text: string }) => {\n return (\n <a\n className=\"gh-link\"\n href=\"https://s.refine.dev/github-support\"\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{\n position: \"absolute\",\n height: \"100%\",\n padding: \"0 60px\",\n display: \"flex\",\n flexWrap: \"nowrap\",\n whiteSpace: \"nowrap\",\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundImage:\n \"linear-gradient(90deg, rgba(31, 63, 72, 0.00) 0%, #1F3F48 10%, #1F3F48 90%, rgba(31, 63, 72, 0.00) 100%)\",\n }}\n >\n <div\n style={{\n color: \"#fff\",\n display: \"flex\",\n flexDirection: \"row\",\n gap: \"8px\",\n }}\n >\n <span\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n ⭐️\n </span>\n <span\n className=\"text\"\n style={{\n fontSize: \"16px\",\n lineHeight: \"24px\",\n }}\n >\n {text}\n </span>\n <span\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n ⭐️\n </span>\n </div>\n </a>\n );\n};\n\nconst GlowSmall = ({ style, ...props }: SVGProps<SVGSVGElement>) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={80}\n height={40}\n fill=\"none\"\n style={{\n opacity: 1,\n animation: \"top-announcement-glow 1s ease-in-out infinite alternate\",\n ...style,\n }}\n >\n <circle cx={40} r={40} fill={`url(#${props.id}-a)`} fillOpacity={0.5} />\n <defs>\n <radialGradient\n id={`${props.id}-a`}\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"matrix(0 40 -40 0 40 0)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#47EBEB\" />\n <stop offset={1} stopColor=\"#47EBEB\" stopOpacity={0} />\n </radialGradient>\n </defs>\n </svg>\n );\n};\n\nconst GlowBig = ({ style, ...props }: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={120}\n height={48}\n fill=\"none\"\n {...props}\n style={{\n opacity: 1,\n animation: \"top-announcement-glow 1s ease-in-out infinite alternate\",\n ...style,\n }}\n >\n <circle\n cx={60}\n cy={24}\n r={60}\n fill={`url(#${props.id}-a)`}\n fillOpacity={0.5}\n />\n <defs>\n <radialGradient\n id={`${props.id}-a`}\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"matrix(0 60 -60 0 60 24)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#47EBEB\" />\n <stop offset={1} stopColor=\"#47EBEB\" stopOpacity={0} />\n </radialGradient>\n </defs>\n </svg>\n);\n","export const CSSRules = [\n `\n .bg-top-announcement {\n border-bottom: 1px solid rgba(71, 235, 235, 0.15);\n background: radial-gradient(\n 218.19% 111.8% at 0% 0%,\n rgba(71, 235, 235, 0.1) 0%,\n rgba(71, 235, 235, 0.2) 100%\n ),\n #14141f;\n }\n `,\n `\n .top-announcement-mask {\n mask-image: url(https://refine.ams3.cdn.digitaloceanspaces.com/website/static/assets/hexagon.svg);\n -webkit-mask-image: url(https://refine.ams3.cdn.digitaloceanspaces.com/website/static/assets/hexagon.svg);\n mask-repeat: repeat;\n -webkit-mask-repeat: repeat;\n background: rgba(71, 235, 235, 0.25);\n }\n `,\n `\n .banner {\n display: flex;\n @media (max-width: 1000px) {\n display: none;\n }\n }`,\n `\n .gh-link, .gh-link:hover, .gh-link:active, .gh-link:visited, .gh-link:focus {\n text-decoration: none;\n z-index: 9;\n }\n `,\n `\n @keyframes top-announcement-glow {\n 0% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n }\n }\n `,\n];\n","import React from \"react\";\n\nimport { useTranslate } from \"@hooks/i18n\";\n\nimport type { BaseRecord, HttpError } from \"../../contexts/data/types\";\nimport type { AutoSaveIndicatorElements } from \"../../hooks/form/types\";\nimport type { UseUpdateReturnType } from \"../../hooks/data/useUpdate\";\n\nexport type AutoSaveIndicatorProps<\n TData extends BaseRecord = BaseRecord,\n TError extends HttpError = HttpError,\n TVariables = {},\n> = {\n /**\n * The data returned by the update request.\n */\n data?: UseUpdateReturnType<TData, TError, TVariables>[\"mutation\"][\"data\"];\n /**\n * The error returned by the update request.\n */\n error?: UseUpdateReturnType<TData, TError, TVariables>[\"mutation\"][\"error\"];\n /**\n * The status of the update request.\n */\n status: UseUpdateReturnType<TData, TError, TVariables>[\"mutation\"][\"status\"];\n\n /**\n * The elements to display for each status.\n */\n elements?: AutoSaveIndicatorElements;\n};\n\nexport const AutoSaveIndicator: React.FC<AutoSaveIndicatorProps> = ({\n status,\n elements: {\n success = (\n <Message translationKey=\"autoSave.success\" defaultMessage=\"saved\" />\n ),\n error = (\n <Message\n translationKey=\"autoSave.error\"\n defaultMessage=\"auto save failure\"\n />\n ),\n loading = (\n <Message translationKey=\"autoSave.loading\" defaultMessage=\"saving...\" />\n ),\n idle = (\n <Message\n translationKey=\"autoSave.idle\"\n defaultMessage=\"waiting for changes\"\n />\n ),\n } = {},\n}) => {\n switch (status) {\n case \"success\":\n return <>{success}</>;\n case \"error\":\n return <>{error}</>;\n case \"pending\":\n return <>{loading}</>;\n case \"idle\":\n return <>{idle}</>;\n default:\n return <>{idle}</>;\n }\n};\n\nconst Message = ({\n translationKey,\n defaultMessage,\n}: {\n translationKey: string;\n defaultMessage: string;\n}) => {\n const translate = useTranslate();\n\n return <span>{translate(translationKey, defaultMessage)}</span>;\n};\n"],"mappings":"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","names":["src_exports","__export","AccessControlContext","ActionTypes","AuthPage","Authenticated","AutoSaveIndicator","CanAccess","ErrorComponent","GitHubBanner","I18nContext","KeyBuilder","Link","MetaContextProvider","Refine","ResourceContext","RouteChangeHandler","UndoableQueue","WelcomePage","file2Base64","flattenObjectKeys","generateDefaultDocumentTitle","getDefaultFilter","getDefaultSortOrder","getNextPageParam","getPreviousPageParam","handleUseParams","importCSVMapper","keys","matchResourceFromRoute","parseTableParams","parseTableParamsFromQuery","pickDataProvider","propertyPathToArray","setInitialFilters","setInitialSorters","stringifyTableParams","unionFilters","unionSorters","useActiveAuthProvider","useApiUrl","useBack","useBreadcrumb","useCan","useCanWithoutCache","useCancelNotification","useCloneButton","useCreate","useCreateButton","useCreateMany","useCustom","useCustomMutation","useDataProvider","useDelete","useDeleteButton","useDeleteMany","useEditButton","useExport","useExportButton","useForgotPassword","useForm","useGetIdentity","useGetLocale","useGetToPath","useGo","useHandleNotification","useImport","useImportButton","useInfiniteList","useInvalidate","useInvalidateAuthStore","useIsAuthenticated","useIsExistAuthentication","useKeys","useLink","useList","useListButton","useLiveMode","useLoadingOvertime","useLog","useLogList","useLogin","useLogout","useMany","useMenu","useMeta","useMetaContext","useModal","useMutationMode","useNavigation","useNotification","useOnError","useOne","useParse","useParsed","usePermissions","usePublish","useRedirectionAfterSubmission","useRefineContext","useRefineOptions","useRefreshButton","useRegister","useResourceParams","useResourceSubscription","useSaveButton","useSelect","useSetLocale","useShow","useShowButton","useSubscription","useSyncWithLocation","useTable","useToPath","useTranslate","useTranslation","useUpdate","useUpdateMany","useUpdatePassword","useUserFriendlyName","useWarnAboutChange","__toCommonJS","import_react","import_devtools_internal","import_react_query","import_react","AuthProviderContext","React","AuthProviderContextProvider","__name","children","isProvided","authProvider","handleLogin","params","_a","error","handleRegister","handleLogout","handleCheck","result","handleForgotPassword","handleUpdatePassword","useAuthProviderContext","import_differenceWith","import_unionWith","import_qs","import_warn_once","parseTableParams","__name","url","currentPage","pageSize","sorters","sorter","filters","qs","parseTableParamsFromQuery","params","stringifyTableParams","options","pagination","rest","finalSorters","compareFilters","left","right","compareSorters","unionFilters","permanentFilter","newFilters","prevFilters","f","warnOnce","unionWith","crudFilter","unionSorters","permanentSorter","newSorters","crudSorter","setInitialFilters","defaultFilter","differenceWith","setInitialSorters","defaultSorter","getDefaultSortOrder","columnName","sortItem","item","getDefaultFilter","operatorType","filter","operator","field","userFriendlySecond","__name","miliseconds","import_fromPairs","import_zip","importCSVMapper","__name","data","mapData","item","headers","body","entry","fromPairs","zip","index","array","handleUseParams","__name","params","hasPermission","__name","permissions","action","i","humanizeString","__name","text","import_react","import_pluralize","defaultTitle","React","defaultRefineOptions","humanizeString","pluralize","RefineContext","RefineContextProvider","__name","mutationMode","warnWhenUnsavedChanges","syncWithLocation","undoableTimeout","children","liveMode","onLiveEvent","options","handleRefineOptions","__name","options","disableTelemetry","liveMode","mutationMode","reactQueryClientConfig","reactQueryDevtoolConfig","syncWithLocation","undoableTimeout","warnWhenUnsavedChanges","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","optionsWithDefaults","defaultRefineOptions","disableTelemetryWithDefault","reactQueryWithDefaults","redirectPage","__name","redirectFromProps","action","redirectOptions","sequentialPromises","__name","promises","onEachResolve","onEachReject","results","index","promise","result","error","pickResource","__name","identifier","resources","resource","r","pickDataProvider","__name","resourceName","dataProviderName","resources","resource","pickResource","meta","handleMultiple","__name","promises","res","getNextPageParam","__name","lastPage","pagination","cursor","current","pageSize","totalPages","getPreviousPageParam","isParameter","__name","segment","splitToSegments","__name","path","segment","isSegmentCountsSame","__name","route","resourceRoute","routeSegments","splitToSegments","resourceRouteSegments","removeLeadingTrailingSlashes","__name","route","checkBySegments","__name","route","resourceRoute","stdRoute","removeLeadingTrailingSlashes","stdResourceRoute","isSegmentCountsSame","routeSegments","splitToSegments","segment","index","isParameter","getActionRoutesFromResource","__name","resource","resources","actions","action","route","pickMatchedRoute","__name","routes","_a","sanitizedRoutes","route","splitToSegments","removeLeadingTrailingSlashes","segmentsCount","eligibleRoutes","i","nonParametrizedRoutes","isParameter","matchResourceFromRoute","__name","route","resources","allFound","resource","getActionRoutesFromResource","actionRoute","checkBySegments","mostEligible","pickMatchedRoute","getParentResource","__name","resource","resources","_a","parentName","pickRouteParams","__name","route","splitToSegments","removeLeadingTrailingSlashes","s","isParameter","prepareRouteParams","__name","routeParams","meta","acc","key","value","composeRoute","__name","designatedRoute","resourceMeta","parsed","meta","routeParams","pickRouteParams","preparedRouteParams","prepareRouteParams","match","key","fromParams","useActiveAuthProvider","__name","authProvider","useAuthProviderContext","handlePaginationParams","__name","pagination","mode","currentPage","pageSize","import_react","useMediaQuery","__name","query","matches","setMatches","media","listener","safeTranslate","__name","translate","key","defaultMessage","options","translated","fallback","import_react","useMutationMode","__name","preferredMutationMode","preferredUndoableTimeout","mutationMode","undoableTimeout","RefineContext","import_react","import_react","UnsavedWarnContext","React","UnsavedWarnContextProvider","__name","children","warnWhen","setWarnWhen","useWarnAboutChange","__name","warnWhenUnsavedChanges","RefineContext","warnWhen","setWarnWhen","UnsavedWarnContext","import_react","useSyncWithLocation","__name","syncWithLocation","RefineContext","import_react","useRefineContext","__name","mutationMode","syncWithLocation","undoableTimeout","warnWhenUnsavedChanges","liveMode","onLiveEvent","options","__initialized","RefineContext","useUserFriendlyName","__name","textTransformers","useRefineContext","name","type","humanizeName","generateDefaultDocumentTitle","translate","resource","action","id","resourceName","getUserFriendlyName","_a","getFriendlyName","useUserFriendlyName","actionPrefixMatcher","identifier","resourceNameFallback","resourceNameWithFallback","defaultTitle","safeTranslate","suffix","autoGeneratedTitle","__name","BaseKeyBuilder","segments","__name","ParamsKeyBuilder","paramsValue","DataIdRequiringKeyBuilder","idValue","DataIdsRequiringKeyBuilder","idsValue","el","DataResourceKeyBuilder","actionType","DataKeyBuilder","resourceName","mutationName","AuthKeyBuilder","AccessResourceKeyBuilder","AccessKeyBuilder","AuditActionKeyBuilder","AuditKeyBuilder","KeyBuilder","name","keys","isNested","__name","obj","isArray","flattenObjectKeys","prefix","acc","key","currentPrefix","item","index","propertyPathToArray","__name","propertyPath","item","downloadInBrowser","__name","filename","content","type","blob","link","blobUrl","deferExecution","__name","fn","import_debounce","asyncDebounce","__name","func","wait","cancelReason","callbacks","cancelPrevious","cb","_a","debouncedFunc","debounce","args","resolve","reject","runner","prepareQueryContext","__name","context","queryContext","file2Base64","__name","file","resolve","reject","reader","resultHandler","error","useKeys","__name","keys","usePermissions","options","params","getPermissions","useAuthProviderContext","keys","useKeys","__name","import_devtools_internal","import_react_query","useGetIdentity","queryOptions","getIdentity","useAuthProviderContext","keys","useKeys","__name","import_devtools_internal","import_react_query","import_react_query","useInvalidateAuthStore","__name","queryClient","keys","useKeys","action","useLogout","mutationOptions","invalidateAuthStore","useInvalidateAuthStore","go","useGo","open","close","useNotification","logoutFromContext","useAuthProviderContext","keys","useKeys","data","variables","success","error","redirectTo","successNotification","redirectPath","redirect","buildSuccessNotification","buildNotification","__name","import_devtools_internal","import_react_query","useLogin","mutationOptions","_a","invalidateAuthStore","useInvalidateAuthStore","go","useGo","parsed","useParsed","close","open","useNotification","loginFromContext","useAuthProviderContext","keys","useKeys","to","success","redirectTo","error","successNotification","buildSuccessNotification","buildNotification","__name","import_devtools_internal","import_react_query","useRegister","mutationOptions","invalidateAuthStore","useInvalidateAuthStore","go","useGo","close","open","useNotification","registerFromContext","useAuthProviderContext","keys","useKeys","success","redirectTo","error","successNotification","buildSuccessNotification","buildNotification","__name","import_devtools_internal","import_react_query","useForgotPassword","mutationOptions","go","useGo","open","close","useNotification","forgotPasswordFromContext","useAuthProviderContext","keys","useKeys","success","redirectTo","error","successNotification","buildSuccessNotification","buildNotification","__name","import_devtools_internal","import_react_query","useUpdatePassword","mutationOptions","go","useGo","updatePasswordFromContext","useAuthProviderContext","close","open","useNotification","keys","useKeys","params","useParsed","variables","success","redirectTo","error","successNotification","buildSuccessNotification","buildNotification","__name","import_devtools_internal","import_react_query","useIsAuthenticated","queryOptions","params","check","useAuthProviderContext","keys","useKeys","__name","import_devtools_internal","import_react_query","useOnError","go","useGo","onErrorFromContext","useAuthProviderContext","keys","useKeys","logout","useLogout","shouldLogout","redirectTo","__name","useIsExistAuthentication","__name","isProvided","useAuthProviderContext","import_react","import_devtools_internal","import_react_query","import_react","useLoadingOvertime","__name","enabledProp","isLoading","intervalProp","onIntervalProp","elapsedTime","setElapsedTime","options","useRefineContext","overtime","interval","onInterval","enabled","intervalFn","prevElapsedTime","EMPTY_ARRAY","useList","__name","resourceFromProp","filters","pagination","sorters","queryOptions","successNotification","errorNotification","meta","liveMode","onLiveEvent","liveParams","dataProviderName","overtimeOptions","_a","_b","_c","resources","resource","identifier","useResourceParams","dataProvider","useDataProvider","translate","useTranslate","checkError","useOnError","handleNotification","useHandleNotification","getMeta","useMeta","keys","useKeys","pickedDataProvider","pickDataProvider","preferredMeta","prefferedFilters","prefferedSorters","prefferedPagination","handlePaginationParams","isServerPagination","combinedMeta","notificationValues","isEnabled","getList","useResourceSubscription","queryResponse","context","prepareQueryContext","rawData","data","currentPage","mode","pageSize","notificationConfig","elapsedTime","useLoadingOvertime","import_react","import_devtools_internal","import_react_query","useOne","__name","resourceFromProp","id","queryOptions","successNotification","errorNotification","meta","liveMode","onLiveEvent","liveParams","dataProviderName","overtimeOptions","_a","_b","resources","resource","identifier","useResourceParams","dataProvider","useDataProvider","translate","useTranslate","checkError","useOnError","handleNotification","useHandleNotification","getMeta","useMeta","keys","useKeys","preferredMeta","pickedDataProvider","pickDataProvider","getOne","combinedMeta","isEnabled","useResourceSubscription","queryResponse","context","prepareQueryContext","notificationConfig","elapsedTime","useLoadingOvertime","import_react","import_devtools_internal","import_react_query","import_warn_once","EMPTY_ARRAY","useMany","__name","resourceFromProp","ids","queryOptions","successNotification","errorNotification","meta","liveMode","onLiveEvent","liveParams","dataProviderName","overtimeOptions","_a","_b","resources","resource","identifier","useResourceParams","dataProvider","useDataProvider","translate","useTranslate","checkError","useOnError","handleNotification","useHandleNotification","getMeta","useMeta","keys","useKeys","preferredMeta","pickedDataProvider","pickDataProvider","isEnabled","getMany","getOne","combinedMeta","hasIds","hasResource","manuallyEnabled","warnOnce","idsWarningMessage","resourceWarningMessage","useResourceSubscription","queryResponse","context","prepareQueryContext","handleMultiple","id","notificationConfig","elapsedTime","useLoadingOvertime","import_devtools_internal","import_react_query","ActionTypes","useUpdate","__name","idFromProps","resourceFromProps","valuesFromProps","dataProviderNameFromProps","successNotificationFromProps","errorNotificationFromProps","metaFromProps","mutationModeFromProps","undoableTimeoutFromProps","onCancelFromProps","optimisticUpdateMapFromProps","invalidatesFromProps","mutationOptions","overtimeOptions","resources","select","useResourceParams","queryClient","dataProvider","useDataProvider","mutationModeContext","undoableTimeoutContext","useMutationMode","checkError","useOnError","translate","useTranslate","publish","usePublish","log","useLog","notificationDispatch","useCancelNotification","handleNotification","useHandleNotification","invalidateStore","useInvalidate","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutationResult","id","values","resourceName","mutationMode","undoableTimeout","onCancel","meta","dataProviderName","missingIdError","missingValuesError","missingResourceError","resource","identifier","combinedMeta","mutationModePropOrContext","undoableTimeoutPropOrContext","pickDataProvider","resolve","reject","doMutation","result","err","cancelMutation","optimisticUpdateMap","_","__","preferredMeta","resourceKeys","previousQueries","previous","data","record","_a","error","variables","context","invalidates","_b","successNotification","dataProviderNameFromProp","resourceSingular","notificationConfig","previousData","queryData","acc","item","_fields","_operation","_variables","rest","errorNotification","query","mutate","mutateAsync","elapsedTime","useLoadingOvertime","options","import_devtools_internal","import_react_query","useCreate","__name","resourceFromProps","valuesFromProps","dataProviderNameFromProps","successNotificationFromProps","errorNotificationFromProps","invalidatesFromProps","metaFromProps","mutationOptions","overtimeOptions","checkError","useOnError","dataProvider","useDataProvider","invalidateStore","useInvalidate","resources","select","useResourceParams","translate","useTranslate","publish","usePublish","log","useLog","handleNotification","useHandleNotification","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutationResult","resourceName","values","meta","dataProviderName","missingValuesError","missingResourceError","resource","identifier","combinedMeta","pickDataProvider","data","variables","context","_a","_b","_c","successNotificationFromProp","dataProviderNameFromProp","invalidates","resourceSingular","notificationConfig","_fields","_operation","_variables","rest","err","errorNotificationFromProp","mutate","mutateAsync","mutation","elapsedTime","useLoadingOvertime","options","import_devtools_internal","import_react_query","useDelete","__name","mutationOptions","overtimeOptions","checkError","useOnError","dataProvider","useDataProvider","resources","select","useResourceParams","queryClient","mutationModeContext","undoableTimeoutContext","useMutationMode","notificationDispatch","useCancelNotification","translate","useTranslate","publish","usePublish","log","useLog","handleNotification","useHandleNotification","invalidateStore","useInvalidate","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutation","id","mutationMode","undoableTimeout","resourceName","onCancel","meta","dataProviderName","values","resource","identifier","combinedMeta","mutationModePropOrContext","undoableTimeoutPropOrContext","pickDataProvider","resolve","reject","doMutation","result","err","cancelMutation","_","__","preferredMeta","resourceKeys","previousQueries","previous","record","_a","data","_data","_error","invalidates","successNotification","dataProviderNameFromProp","context","resourceSingular","notificationConfig","_fields","_operation","_variables","rest","errorNotification","query","elapsedTime","useLoadingOvertime","import_devtools_internal","import_react_query","useCreateMany","__name","resourceFromProps","valuesFromProps","dataProviderNameFromProps","successNotificationFromProps","errorNotificationFromProps","metaFromProps","invalidatesFromProps","mutationOptions","overtimeOptions","dataProvider","useDataProvider","resources","select","useResourceParams","translate","useTranslate","publish","usePublish","handleNotification","useHandleNotification","invalidateStore","useInvalidate","log","useLog","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutationResult","resourceName","values","meta","dataProviderName","missingValuesError","missingResourceError","resource","identifier","combinedMeta","selectedDataProvider","pickDataProvider","handleMultiple","val","response","variables","context","_a","successNotification","dataProviderNameFromProp","invalidates","resourcePlural","notificationConfig","ids","item","_fields","_operation","_variables","rest","err","errorNotification","mutate","mutateAsync","elapsedTime","useLoadingOvertime","options","import_devtools_internal","import_react_query","useUpdateMany","__name","idsFromProps","resourceFromProps","valuesFromProps","dataProviderNameFromProps","successNotificationFromProps","errorNotificationFromProps","metaFromProps","mutationModeFromProps","undoableTimeoutFromProps","onCancelFromProps","optimisticUpdateMapFromProps","invalidatesFromProps","mutationOptions","overtimeOptions","resources","select","useResourceParams","queryClient","dataProvider","useDataProvider","translate","useTranslate","mutationModeContext","undoableTimeoutContext","useMutationMode","checkError","useOnError","notificationDispatch","useCancelNotification","publish","usePublish","handleNotification","useHandleNotification","invalidateStore","useInvalidate","log","useLog","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutationResult","ids","values","resourceName","onCancel","mutationMode","undoableTimeout","meta","dataProviderName","missingIdError","missingValuesError","missingResourceError","resource","identifier","combinedMeta","mutationModePropOrContext","undoableTimeoutPropOrContext","selectedDataProvider","pickDataProvider","mutationFn","handleMultiple","id","resolve","reject","doMutation","result","err","cancelMutation","optimisticUpdateMap","_","__","preferredMeta","queryKey","resourceKeys","previousQueries","previous","data","record","error","variables","context","_a","invalidates","dataProviderNameFromProp","successNotification","resourceSingular","notificationConfig","previousData","queryData","acc","item","_fields","_operation","_variables","rest","errorNotification","query","mutate","mutateAsync","mutation","elapsedTime","useLoadingOvertime","options","import_devtools_internal","import_react_query","useDeleteMany","__name","mutationOptions","overtimeOptions","checkError","useOnError","mutationModeContext","undoableTimeoutContext","useMutationMode","dataProvider","useDataProvider","notificationDispatch","useCancelNotification","translate","useTranslate","publish","usePublish","handleNotification","useHandleNotification","invalidateStore","useInvalidate","log","useLog","resources","select","useResourceParams","queryClient","getMeta","useMeta","textTransformers","useRefineContext","keys","useKeys","mutation","resourceName","ids","mutationMode","undoableTimeout","onCancel","meta","dataProviderName","values","resource","identifier","combinedMeta","mutationModePropOrContext","undoableTimeoutPropOrContext","selectedDataProvider","pickDataProvider","mutationFn","handleMultiple","id","resolve","reject","doMutation","result","err","cancelMutation","_","__","preferredMeta","resourceKeys","previousQueries","previous","item","data","record","_data","_error","invalidates","dataProviderNameFromProp","successNotification","notificationConfig","_fields","_operation","_variables","rest","errorNotification","context","query","resourceSingular","elapsedTime","useLoadingOvertime","useApiUrl","__name","dataProviderName","_a","dataProvider","useDataProvider","resource","useResourceParams","getApiUrl","import_react","import_devtools_internal","import_react_query","EMPTY_OBJECT","useCustom","__name","url","method","config","queryOptions","successNotification","errorNotification","meta","dataProviderName","overtimeOptions","_a","_b","dataProvider","useDataProvider","translate","useTranslate","checkError","useOnError","handleNotification","useHandleNotification","getMeta","useMeta","keys","useKeys","preferredMeta","custom","combinedMeta","queryResponse","context","prepareQueryContext","notificationConfig","elapsedTime","useLoadingOvertime","import_devtools_internal","import_react_query","useCustomMutation","__name","mutationOptions","overtimeOptions","checkError","useOnError","handleNotification","useHandleNotification","dataProvider","useDataProvider","translate","useTranslate","getMeta","useMeta","keys","useKeys","mutationResult","url","method","values","meta","dataProviderName","config","combinedMeta","custom","data","variables","context","_a","successNotificationFromProp","notificationConfig","err","errorNotificationFromProp","elapsedTime","useLoadingOvertime","import_react","import_react","defaultDataProvider","DataContext","React","DataContextProvider","__name","children","dataProvider","providerValue","useDataProvider","__name","context","DataContext","dataProviderName","dataProvider","import_react","import_devtools_internal","import_react_query","useInfiniteList","__name","resourceFromProp","filters","pagination","sorters","queryOptions","successNotification","errorNotification","meta","liveMode","onLiveEvent","liveParams","dataProviderName","overtimeOptions","onSuccess","onError","_a","_b","resources","resource","identifier","useResourceParams","dataProvider","useDataProvider","translate","useTranslate","checkError","useOnError","handleNotification","useHandleNotification","getMeta","useMeta","keys","useKeys","pickedDataProvider","pickDataProvider","preferredMeta","prefferedFilters","prefferedSorters","prefferedPagination","handlePaginationParams","isServerPagination","notificationValues","isEnabled","combinedMeta","getList","useResourceSubscription","queryResponse","context","paginationProperties","prepareQueryContext","data","total","rest","lastPage","getNextPageParam","getPreviousPageParam","notificationConfig","elapsedTime","useLoadingOvertime","import_react","import_react","LiveContext","React","LiveContextProvider","__name","liveProvider","children","import_react","import_react_query","useInvalidate","__name","resources","useResourceParams","queryClient","keys","useKeys","resource","dataProviderName","invalidates","id","invalidationFilters","invalidationOptions","dp","pickDataProvider","queryKey","key","useResourceSubscription","__name","resourceFromProp","params","channel","types","enabled","liveModeFromProp","onLiveEvent","meta","_a","resource","identifier","useResourceParams","liveProvider","LiveContext","liveModeFromContext","onLiveEventContextCallback","RefineContext","liveMode","invalidate","useInvalidate","dataProviderName","subscription","callback","event","import_react","useLiveMode","__name","liveMode","liveModeFromContext","RefineContext","import_react","useSubscription","__name","params","channel","types","enabled","onLiveEvent","meta","liveProvider","LiveContext","subscription","import_react","usePublish","__name","liveProvider","LiveContext","import_react","import_react","import_isEqual","UndoableQueueContext","initialState","undoableQueueReducer","__name","state","action","notificationItem","isEqual","UndoableQueueContextProvider","children","notifications","notificationDispatch","notificationData","React","notification","UndoableQueue","useCancelNotification","__name","notifications","notificationDispatch","UndoableQueueContext","import_react","import_react","NotificationContext","NotificationContextProvider","__name","open","close","children","React","useNotification","__name","open","close","NotificationContext","import_react","useHandleNotification","__name","open","useNotification","notification","fallbackNotification","import_react","import_react","I18nContext","React","I18nContextProvider","__name","children","i18nProvider","useSetLocale","__name","i18nProvider","I18nContext","lang","import_react","useTranslate","__name","i18nProvider","I18nContext","translate","key","options","defaultMessage","import_react","useGetLocale","__name","i18nProvider","I18nContext","useTranslation","__name","translate","useTranslate","changeLocale","useSetLocale","getLocale","useGetLocale","import_react","import_papaparse","useExport","__name","resourceFromProps","sorters","filters","maxItemCount","pageSize","mapData","item","unparseConfig","meta","dataProviderName","onError","download","customFilename","useTextFile","useBom","title","showTitle","isLoading","setIsLoading","dataProvider","useDataProvider","getMeta","useMeta","resource","resources","identifier","useResourceParams","defaultFilename","useUserFriendlyName","filename","getList","pickDataProvider","combinedMeta","rawData","currentPage","preparingData","data","total","error","finalUnparseConfig","csv","papaparse","fileExtension","fileType","downloadFilename","downloadInBrowser","import_react","import_warn_once","useForm","__name","props","_a","_b","_c","getMeta","useMeta","invalidate","useInvalidate","defaultRedirect","useRefineOptions","defaultMutationMode","useMutationMode","setWarnWhen","useWarnAboutChange","handleSubmitWithRedirect","useRedirectionAfterSubmission","pickedMeta","mutationMode","id","setId","resource","identifier","action","useResourceParams","autosaved","setAutosaved","React","isEdit","isClone","isCreate","combinedMeta","isIdRequired","isIdDefined","isQueryDisabled","warnOnce","idWarningMessage","redirectAction","redirectPage","redirect","redirectId","routeParams","queryResult","useOne","createMutation","useCreate","updateMutation","useUpdate","mutationResult","formLoading","elapsedTime","useLoadingOvertime","onFinish","values","isAutosave","isPessimistic","onSuccessRedirect","resolve","reject","missingResourceError","missingIdError","missingValuesError","autosaveOnNonEditError","deferExecution","variables","mutateAsync","data","_","context","error","onFinishAutoSave","asyncDebounce","overtime","autoSaveProps","import_react","useRedirectionAfterSubmission","__name","show","edit","list","create","useNavigation","redirect","resource","id","meta","import_react","import_react","defaultRouterProvider","RouterContext","RouterContextProvider","__name","children","router","React","import_react","import_react","import_react","import_react","import_isEqual","useMemoized","__name","value","ref","isEqual","useDeepMemo","__name","fn","dependencies","memoizedDependencies","useMemoized","ResourceContext","React","ResourceContextProvider","__name","providedResources","children","resources","useDeepMemo","import_react","import_react","useParse","__name","routerContext","RouterContext","React","useParsed","__name","parse","useParse","React","useId","__name","id","parsed","useParsed","useAction","__name","action","parsed","useParsed","import_react","useResource","args","resources","ResourceContext","params","useParsed","select","__name","resourceName","force","pickedResource","pickResource","resource","identifier","pickedFromProps","useResourceParams","props","resources","ResourceContext","select","inferredIdentifier","inferredResource","useResource","resourceToCheck","identifier","resource","isSameResource","inferredId","useId","action","useAction","defaultId","React","id","setId","formAction","__name","import_react","useGetToPath","__name","resourceFromRoute","resources","useResourceParams","parsed","useParsed","React","resource","action","meta","_a","selectedResource","actionRoute","getActionRoutesFromResource","item","composeRoute","useGo","__name","routerContext","RouterContext","resourceSelect","useResourceParams","getToPath","useGetToPath","goFromRouter","React","config","resource","handleResourceErrors","newTo","to","useNavigation","__name","resources","useResourceParams","parsed","useParsed","go","useGo","handleUrl","url","type","createUrl","resource","meta","_a","resourceItem","pickResource","createActionRoute","getActionRoutesFromResource","r","composeRoute","editUrl","id","encodedId","editActionRoute","cloneUrl","cloneActionRoute","showUrl","showActionRoute","listUrl","listActionRoute","import_warn_once","useShow","__name","resourceFromProp","id","meta","queryOptions","overtimeOptions","useOneProps","resource","identifier","showId","setShowId","useResourceParams","combinedMeta","useMeta","warnOnce","idWarningMessage","queryResult","useOne","import_react","import_chunk","import_papaparse","useImport","__name","resourceFromProps","mapData","item","paparseOptions","batchSize","onFinish","meta","onProgress","dataProviderName","processedAmount","setProcessedAmount","totalAmount","setTotalAmount","isLoading","setIsLoading","resource","identifier","useResourceParams","getMeta","useMeta","createMany","useCreateMany","create","useCreate","combinedMeta","mutationResult","handleCleanup","handleFinish","createdValues","result","handleChange","file","resolve","papaparse","data","values","importCSVMapper","valueFns","value","sequentialPromises","response","currentAmount","error","index","chunks","chunk","chunkedFns","chunkedValues","currentBatchLength","event","import_react","useModal","__name","defaultVisible","visible","setVisible","show","close","import_react","useBack","__name","routerContext","RouterContext","React","useToPath","__name","resource","action","meta","useGetToPath","import_react","import_warn_once","LinkComponent","__name","props","ref","routerContext","RouterContext","LinkFromContext","goFunction","useGo","resolvedTo","warnOnce","React","Link","useLink","__name","Link","import_react","import_devtools_internal","import_react_query","import_react","AccessControlContext","React","AccessControlContextProvider","__name","can","children","options","sanitizeResource","__name","resource","list","edit","create","show","clone","children","meta","icon","restResource","_metaIcon","restMeta","useCan","__name","action","resource","params","hookQueryOptions","can","globalOptions","AccessControlContext","keys","useKeys","globalQueryOptions","mergedQueryOptions","_resource","paramsRest","sanitizedResource","sanitizeResource","queryResponse","import_react","useCanWithoutCache","__name","canFromContext","React","AccessControlContext","params","rest","sanitizedResource","sanitizeResource","import_react","import_debounce","import_get","import_uniqBy","useSelect","__name","props","search","setSearch","options","setOptions","selectedOptions","setSelectedOptions","resourceFromProps","sorters","filters","optionLabel","optionValue","searchField","debounceValue","successNotification","errorNotification","defaultValueQueryOptionsFromProps","queryOptions","pagination","liveMode","defaultValue","selectedOptionsOrder","onLiveEvent","onSearchFromProp","liveParams","meta","dataProviderName","overtimeOptions","getOptionLabel","item","get","getOptionValue","resource","identifier","useResourceParams","combinedMeta","useMeta","defaultValues","defaultValueQueryOptions","defaultValueQueryOnSuccess","data","defaultQueryOnSuccess","defaultValueQueryResult","useMany","queryResult","useList","elapsedTime","useLoadingOvertime","combinedOptions","uniqBy","onSearchFromPropRef","onSearch","debounce","value","import_react","import_differenceWith","import_isEqual","import_warn_once","defaultPermanentFilter","defaultPermanentSorter","EMPTY_ARRAY","useTable","pagination","filtersFromProp","sortersFromProp","syncWithLocationProp","resourceFromProp","successNotification","errorNotification","queryOptions","liveModeFromProp","onLiveEvent","liveParams","meta","dataProviderName","overtimeOptions","_a","_b","_c","_d","_e","_f","_g","_h","_i","syncWithLocationContext","useSyncWithLocation","syncWithLocation","liveMode","useLiveMode","getMeta","useMeta","parsedParams","useParsed","isServerSideFilteringEnabled","isServerSideSortingEnabled","isPaginationEnabled","prefferedCurrentPage","prefferedPageSize","preferredMeta","parsedCurrentPage","parsedPageSize","parsedSorter","parsedFilters","parseTableParams","preferredInitialFilters","preferredPermanentFilters","preferredInitialSorters","preferredPermanentSorters","prefferedFilterBehavior","defaultCurrentPage","defaultPageSize","defaultSorter","defaultFilter","go","useGo","resource","identifier","useResourceParams","combinedMeta","React","warnOnce","sorters","setSorters","setInitialSorters","filters","setFilters","setInitialFilters","currentPage","setCurrentPage","pageSize","setPageSize","getCurrentQueryParams","__name","current","rest","createLinkForSyncWithLocation","differenceWith","isEqual","queryResult","useList","unionFilters","unionSorters","setFiltersAsMerge","newFilters","prevFilters","setFiltersAsReplace","setFiltersWithSetter","setter","prev","setFiltersFn","setterOrFilters","behavior","setSortWithUnion","newSorter","import_react","import_devtools_internal","import_react_query","import_react","AuditLogContext","React","AuditLogContextProvider","__name","create","get","update","children","useLog","__name","logMutationOptions","renameMutationOptions","queryClient","auditLogContext","AuditLogContext","keys","useKeys","resources","ResourceContext","identityData","refetch","isLoading","useGetIdentity","log","params","_a","_b","resource","pickResource","logPermissions","hasPermission","authorData","rename","data","import_react","import_devtools_internal","import_react_query","useLogList","__name","resource","action","meta","author","queryOptions","get","AuditLogContext","keys","useKeys","import_react","import_warn_once","useBreadcrumb","__name","metaFromProps","i18nProvider","I18nContext","parsed","useParsed","translate","useTranslate","action","resource","resources","useResourceParams","textTransformers","useRefineContext","breadcrumbs","addBreadcrumb","parentName","_a","_b","_c","_d","parentResource","pickResource","grandParentName","listActionOfResource","getActionRoutesFromResource","r","hrefRaw","href","composeRoute","key","actionLabel","warnOnce","import_react","createResourceKey","__name","resource","resources","parents","currentParentResource","getParentResource","r","removeLeadingTrailingSlashes","createTree","__name","resources","root","resource","parents","currentParent","getParentResource","currentTree","parent","key","flatten","tree","items","itemKey","createResourceKey","item","getCleanPath","__name","pathname","useMenu","meta","hideOnMissingParameter","translate","useTranslate","getToPath","useGetToPath","resource","resources","useResourceParams","useParsed","getFriendlyName","useUserFriendlyName","cleanRoute","selectedKey","createResourceKey","defaultOpenKeys","React","parent","getParentResource","keys","prepareItem","item","_a","_b","_c","composed","treeItems","treeMenuItems","createTree","prepare","items","preparedNodes","newItem","import_react","MetaContext","MetaContextProvider","__name","children","value","currentValue","useMetaContext","metaContext","React","useMeta","__name","params","useParsed","metaContext","useMetaContext","resource","metaFromProp","meta","sanitizeResource","_filters","_sorters","_currentPage","_pageSize","additionalParams","result","import_react","useRefineOptions","__name","options","React","RefineContext","useActionableButton","type","translate","useTranslate","humanize","useRefineOptions","key","fallback","__name","import_react","import_react","useButtonCanAccess","__name","props","_a","_b","_c","translate","useTranslate","accessControlContext","React","AccessControlContext","accessControlEnabled","hideIfUnauthorized","canAccess","useCan","title","hidden","disabled","useNavigationButton","props","_a","navigation","useNavigation","Link","useLink","translate","useTranslate","getUserFriendlyName","useUserFriendlyName","humanize","useRefineOptions","id","resource","identifier","useResourceParams","canAccess","title","hidden","disabled","useButtonCanAccess","LinkComponent","to","React","label","__name","useDeleteButton","props","translate","useTranslate","mutate","isPending","variables","useDelete","setWarnWhen","useWarnAboutChange","mutationMode","useMutationMode","id","resource","identifier","useResourceParams","title","disabled","hidden","canAccess","useButtonCanAccess","label","confirmOkLabel","confirmTitle","cancelLabel","loading","__name","import_react_query","useRefreshButton","props","translate","useTranslate","keys","useKeys","queryClient","invalidates","useInvalidate","identifier","id","resources","useResourceParams","loading","pickDataProvider","onClick","__name","label","useShowButton","__name","props","useNavigationButton","useEditButton","useCloneButton","useCreateButton","useListButton","useSaveButton","useActionableButton","useExportButton","useImportButton","ErrorComponent","__name","errorMessage","setErrorMessage","translate","useTranslate","go","useGo","action","resource","useResourceParams","React","import_react","import_react","LoginPage","__name","providers","registerLink","forgotPasswordLink","rememberMe","contentProps","wrapperProps","renderContent","formProps","title","hideForm","mutationVariables","Link","useLink","email","setEmail","password","setPassword","remember","setRemember","translate","useTranslate","login","useLogin","renderLink","link","text","React","renderProviders","provider","content","e","import_react","RegisterPage","__name","providers","loginLink","wrapperProps","contentProps","renderContent","formProps","title","hideForm","mutationVariables","Link","useLink","email","setEmail","password","setPassword","translate","useTranslate","register","isPending","useRegister","renderLink","link","text","React","renderProviders","provider","content","e","import_react","ForgotPasswordPage","__name","loginLink","wrapperProps","contentProps","renderContent","formProps","title","mutationVariables","translate","useTranslate","Link","useLink","email","setEmail","forgotPassword","isPending","useForgotPassword","renderLink","link","text","React","content","e","import_react","UpdatePasswordPage","__name","wrapperProps","contentProps","renderContent","formProps","title","mutationVariables","translate","useTranslate","authProvider","useActiveAuthProvider","updatePassword","isPending","useUpdatePassword","newPassword","setNewPassword","confirmPassword","setConfirmPassword","content","React","e","AuthPage","__name","props","type","React","RegisterPage","ForgotPasswordPage","UpdatePasswordPage","LoginPage","import_react","import_react","cards","ConfigSuccessPage","__name","isTablet","useMediaQuery","isMobile","getGridTemplateColumns","getHeaderFontSize","getSubHeaderFontSize","React","card","Card","title","description","iconUrl","link","isHover","setIsHover","import_react","ConfigErrorPage","__name","React","ErrorGradient","ErrorIcon","ExampleImplementation","props","WelcomePage","__name","__initialized","useRefineContext","React","ConfigSuccessPage","ConfigErrorPage","import_react","import_devtools_internal","import_react_query","import_react","import_react","REFINE_VERSION","useTelemetryData","__name","_a","auth","useIsExistAuthentication","auditLogContext","AuditLogContext","liveProvider","LiveContext","routerContext","RouterContext","dataContext","DataContext","i18nProvider","I18nContext","notificationContext","NotificationContext","accessControlContext","AccessControlContext","resources","useResourceParams","refineOptions","useRefineContext","auditLog","live","router","data","i18n","notification","accessControl","projectId","encode","__name","payload","stringifiedPayload","throughImage","src","img","throughFetch","transport","Telemetry","useTelemetryData","sent","React","encoded","checkRouterPropMisuse","__name","value","bindings","otherProps","key","import_react","useRouterMisuseWarning","__name","value","warned","React","checkRouterPropMisuse","Refine","__name","authProvider","dataProvider","routerProvider","notificationProvider","accessControlProvider","auditLogProvider","resources","children","liveProvider","i18nProvider","onLiveEvent","options","optionsWithDefaults","disableTelemetryWithDefault","reactQueryWithDefaults","handleRefineOptions","queryClient","useDeepMemo","_a","notificationProviderContextValues","React","useRouterMisuseWarning","NotificationContextProvider","AuthProviderContextProvider","DataContextProvider","LiveContextProvider","RouterContextProvider","ResourceContextProvider","I18nContextProvider","AccessControlContextProvider","AuditLogContextProvider","UndoableQueueContextProvider","RefineContextProvider","UnsavedWarnContextProvider","Telemetry","RouteChangeHandler","import_react","UndoableQueue","__name","notification","translate","useTranslate","notificationDispatch","useCancelNotification","open","useNotification","timeoutId","setTimeoutId","cancelNotification","userFriendlySecond","newTimeoutId","import_react","Authenticated","redirectOnFail","appendCurrentPathToQuery","children","fallbackContent","loadingContent","params","_a","activeAuthProvider","useActiveAuthProvider","hasAuthProvider","parsed","useParsed","go","useGo","isFetching","isAuthenticatedStatus","authenticatedRedirect","useIsAuthenticated","isAuthenticated","React","appliedRedirect","pathname","queryToValue","Redirect","__name","config","import_react","RouteChangeHandler","__name","_a","_b","routerContext","RouterContext","authProvider","useActiveAuthProvider","parse","pathname","import_react","CanAccess","__name","resourceFromProp","actionFromProp","paramsFromProp","fallback","onUnauthorized","children","componentQueryOptions","rest","id","resource","fallbackAction","useResourceParams","action","params","data","useCan","React","import_react","CSSRules","text","GitHubBanner","__name","containerStyle","styleTag","CSSRules","rule","_a","React","GlowSmall","GlowBig","Text","style","props","import_react","AutoSaveIndicator","__name","status","success","React","Message","error","loading","idle","translationKey","defaultMessage","translate","useTranslate"]}