{"version":3,"sources":["jsdelivr-header.js","/npm/@pankod/refine-core@3.103.0/src/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/pages/error/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/auth/usePermissions/index.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/auth/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/auth/useGetIdentity/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/auth/useLogout/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/auth/useLogin/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/auth/useRegister/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/auth/useForgotPassword/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/auth/useUpdatePassword/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/auth/useAuthenticated/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/auth/useCheckError/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/auth/useIsExistAuthentication.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useList.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/userFriendlySeconds/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/importCSVMapper/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/userFriendlyResourceName/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/table/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/upload/file2Base64/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/handleUseParams/index.tsx","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/queryKeys/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/hasPermission/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/routeGenerator/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/treeView/createTreeView/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/humanizeString/index.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/refine/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/layoutWrapper/defaultLayout/index.tsx","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/handleRefineOptions/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/redirectPage/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/sequentialPromises/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/pickDataProvider/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/handleMultiple/index.ts","/npm/@pankod/refine-core@3.103.0/src/definitions/helpers/useInfinitePagination/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useOne.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useMany.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useUpdate.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/undoableQueue/undoableQueueContext.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useCreate.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useDelete.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useCreateMany.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useUpdateMany.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useDeleteMany.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useApiUrl.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useCustom.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useCustomMutation.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useDataProvider.tsx","/npm/@pankod/refine-core@3.103.0/src/contexts/data/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/data/useInfiniteList.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/live/useResourceSubscription/index.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/live/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/live/useLiveMode/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/live/useSubscription/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/live/usePublish/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/resource/useResource/index.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/resource/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/resource/useResourceWithRoute/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/notification/useCancelNotification/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/notification/useNotification/index.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/notification/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/notification/useHandleNotification/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/translate/useSetLocale.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/translation/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/translate/useTranslate.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/translate/useGetLocale.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/refine/useMutationMode.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/refine/useWarnAboutChange/index.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/unsavedWarn/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/refine/useSyncWithLocation.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/refine/useTitle.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/refine/useRefineContext.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/export/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/form/useForm.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/redirection/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/navigation/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/show/useShow.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/import/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/modal/useModal/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/router/useRouterContext.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/router/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/accessControl/useCan/index.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/accessControl/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/accessControl/useCanWithoutCache.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/useSelect/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/useTable/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/auditLog/useLog/index.ts","/npm/@pankod/refine-core@3.103.0/src/contexts/auditLog/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/auditLog/useLogList/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/invalidate/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/breadcrumb/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/menu/useMenu.tsx","/npm/@pankod/refine-core@3.103.0/src/components/pages/login/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/pages/auth/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/pages/auth/components/login/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/pages/auth/components/register/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/pages/auth/components/forgotPassword/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/pages/auth/components/updatePassword/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/pages/ready/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/containers/refine/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/telemetry/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/useTelemetryData/index.ts","/npm/@pankod/refine-core@3.103.0/src/hooks/deepMemo/index.tsx","/npm/@pankod/refine-core@3.103.0/src/hooks/memoized/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/undoableQueue/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/layoutWrapper/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/authenticated/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/routeChangeHandler/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/canAccess/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/gh-banner/index.tsx","/npm/@pankod/refine-core@3.103.0/src/components/gh-banner/styles.ts"],"names":[],"mappings":"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","file":"/npm/@pankod/refine-core@3.103.0/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@pankod/refine-core@3.103.0/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","export * from \"@tanstack/react-query\";\n\nexport * from \"./components\";\nexport * from \"./hooks\";\n\nexport {\n    Action,\n    ActionWithPage,\n    AccessControlProvider,\n    AuditLogProvider,\n    AuthProvider,\n    BaseKey,\n    BaseRecord,\n    CanParams,\n    CanReturnType,\n    ConditionalFilter,\n    CreateManyResponse,\n    CreateResponse,\n    CrudFilter,\n    CrudFilters,\n    CrudOperators,\n    CrudSort,\n    CrudSorting,\n    CustomResponse,\n    DeleteManyResponse,\n    DeleteOneResponse,\n    FormAction,\n    GetListResponse,\n    GetManyResponse,\n    GetOneResponse,\n    HttpError,\n    LayoutProps,\n    LiveEvent,\n    LiveModeProps,\n    LogicalFilter,\n    LogParams,\n    MapDataFn,\n    MetaDataQuery,\n    MutationMode,\n    NotificationProvider,\n    OpenNotificationParams,\n    Option,\n    Pagination,\n    PromptProps,\n    RedirectionTypes,\n    RedirectAction,\n    ResourceErrorRouterParams,\n    ResourceProps,\n    ResourceRouterParams,\n    RouteAction,\n    SortOrder,\n    SuccessErrorNotification,\n    TitleProps,\n    TranslationProvider,\n    UpdateManyResponse,\n    UpdateResponse,\n    I18nProvider,\n    IAccessControlContext,\n    IAuthContext,\n    IDataContextProvider as DataProvider,\n    ILiveContext as LiveProvider,\n    ILog,\n    ILogData,\n    ILoginForm,\n    INotificationContext,\n    IResourceComponents,\n    IResourceComponentsProps,\n    IResourceContext as ResourceProvider,\n    ITranslationContext,\n    IResourceItem,\n    IRouterProvider,\n    ITreeMenu,\n    IQueryKeys,\n} from \"./interfaces\";\n\n// all auth types\nexport * from \"./interfaces/auth\";\n\nexport {\n    getDefaultFilter,\n    getDefaultSortOrder,\n    parseTableParams,\n    parseTableParamsFromQuery,\n    setInitialFilters,\n    setInitialSorters,\n    stringifyTableParams,\n    unionFilters,\n    unionSorters,\n} from \"./definitions/table\";\nexport {\n    createTreeView,\n    handleUseParams,\n    importCSVMapper,\n    routeGenerator,\n    userFriendlyResourceName,\n    getNextPageParam,\n    getPreviousPageParam,\n} from \"./definitions/helpers\";\nexport { file2Base64 } from \"./definitions/upload\";\n","import React, { useEffect, useState } from \"react\";\n\nimport {\n    useNavigation,\n    useTranslate,\n    useResourceWithRoute,\n    useRouterContext,\n} from \"@hooks\";\nimport { ResourceErrorRouterParams, ActionWithPage } from \"../../../interfaces\";\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/api-references/components/refine-config#catchall} for more details.\n */\nexport const ErrorComponent: React.FC = () => {\n    const [errorMessage, setErrorMessage] = useState<string>();\n    const { push } = useNavigation();\n    const translate = useTranslate();\n    const actionTypes: ActionWithPage[] = [\"edit\", \"create\", \"show\"];\n\n    const { useParams } = useRouterContext();\n\n    const params = useParams<ResourceErrorRouterParams>();\n    const resource = useResourceWithRoute();\n\n    useEffect(() => {\n        if (params.resource) {\n            const resourceFromRoute = resource(params.resource);\n            if (\n                params.action &&\n                actionTypes.includes(params.action) &&\n                !resourceFromRoute[params.action]\n            ) {\n                setErrorMessage(\n                    translate(\n                        \"pages.error.info\",\n                        {\n                            action: params.action,\n                            resource: params.resource,\n                        },\n                        `You may have forgotten to add the \"${params.action}\" component to \"${params.resource}\" resource.`,\n                    ),\n                );\n            }\n        }\n    }, [params]);\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 onClick={() => push(\"/\")}>\n                {translate(\"pages.error.backHome\", undefined, \"Back Home\")}\n            </button>\n        </>\n    );\n};\n","import { useContext } from \"react\";\n\nimport { AuthContext } from \"@contexts/auth\";\nimport { IAuthContext } from \"../../../interfaces\";\nimport {\n    useQuery,\n    UseQueryResult,\n    UseQueryOptions,\n} from \"@tanstack/react-query\";\n\n/**\n * `usePermissions` calls the `getPermissions` method from the {@link https://refine.dev/docs/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/core/hooks/auth/usePermissions} for more details.\n *\n * @typeParam TData - Result data of the query\n *\n */\nexport const usePermissions = <TData = any>(\n    options?: UseQueryOptions<TData>,\n): UseQueryResult<TData, unknown> => {\n    const { getPermissions } = useContext<IAuthContext>(AuthContext);\n\n    const queryResponse = useQuery<TData>(\n        [\"usePermissions\"],\n        // Enabled check for `getPermissions` is enough to be sure that it's defined in the query function but TS is not smart enough to know that.\n        getPermissions ?? (() => Promise.resolve(undefined)),\n        {\n            enabled: !!getPermissions,\n            ...options,\n        },\n    );\n\n    return queryResponse;\n};\n","import React from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\n\nimport { useNavigation } from \"@hooks\";\nimport { IAuthContext } from \"../../interfaces\";\n\nexport const AuthContext = React.createContext<IAuthContext>({});\n\nexport const AuthContextProvider: React.FC<\n    IAuthContext & {\n        children?: React.ReactNode;\n    }\n> = ({ children, isProvided, ...authOperations }) => {\n    const { replace } = useNavigation();\n    const queryClient = useQueryClient();\n\n    const invalidateAuthStore = () => {\n        queryClient.invalidateQueries([\"useAuthenticated\"]);\n        queryClient.invalidateQueries([\"getUserIdentity\"]);\n        queryClient.invalidateQueries([\"usePermissions\"]);\n    };\n\n    const loginFunc = async (params: any) => {\n        try {\n            const result = await authOperations.login?.(params);\n\n            invalidateAuthStore();\n            return Promise.resolve(result);\n        } catch (error) {\n            return Promise.reject(error);\n        }\n    };\n\n    const registerFunc = async (params: any) => {\n        try {\n            const result = await authOperations.register?.(params);\n\n            invalidateAuthStore();\n            return Promise.resolve(result);\n        } catch (error) {\n            return Promise.reject(error);\n        }\n    };\n\n    const logoutFunc = async (params: any) => {\n        try {\n            const redirectPath = await authOperations.logout?.(params);\n\n            invalidateAuthStore();\n\n            return Promise.resolve(redirectPath);\n        } catch (error) {\n            return Promise.reject(error);\n        }\n    };\n\n    const checkAuthFunc = async (params: any) => {\n        try {\n            await authOperations.checkAuth?.(params);\n            return Promise.resolve();\n        } catch (error) {\n            if ((error as { redirectPath?: string })?.redirectPath) {\n                replace((error as { redirectPath: string }).redirectPath);\n            }\n\n            return Promise.reject(error);\n        }\n    };\n\n    return (\n        <AuthContext.Provider\n            value={{\n                ...authOperations,\n                login: loginFunc,\n                logout: logoutFunc,\n                checkAuth: checkAuthFunc,\n                register: registerFunc,\n                isProvided,\n            }}\n        >\n            {children}\n        </AuthContext.Provider>\n    );\n};\n","import React from \"react\";\nimport {\n    useQuery,\n    UseQueryResult,\n    UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nimport { AuthContext } from \"@contexts/auth\";\nimport { IAuthContext } from \"../../../interfaces\";\n\nexport type UseGetIdentityProps<TData> = {\n    queryOptions?: UseQueryOptions<TData>;\n};\n\n/**\n * `useGetIdentity` calls the `getUserIdentity` method from the {@link https://refine.dev/docs/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/core/hooks/auth/useGetIdentity} for more details.\n *\n * @typeParam TData - Result data of the query\n *\n */\nexport const useGetIdentity = <TData = any>({\n    queryOptions,\n}: UseGetIdentityProps<TData> = {}): UseQueryResult<TData, unknown> => {\n    const { getUserIdentity } = React.useContext<IAuthContext>(AuthContext);\n\n    const queryResponse = useQuery<TData>(\n        [\"getUserIdentity\"],\n        // Enabled check for `getUserIdentity` is enough to be sure that it's defined in the query function but TS is not smart enough to know that.\n        getUserIdentity ?? (() => Promise.resolve({})),\n        {\n            enabled: !!getUserIdentity,\n            retry: false,\n            ...queryOptions,\n        },\n    );\n\n    return queryResponse;\n};\n","import React from \"react\";\nimport {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n} from \"@tanstack/react-query\";\n\nimport { AuthContext } from \"@contexts/auth\";\nimport { IAuthContext, TLogoutData } from \"../../../interfaces\";\nimport { useNavigation, useNotification } from \"@hooks\";\n\ntype Variables = {\n    redirectPath?: string | false;\n};\n\nexport type UseLogoutProps<TVariables> = {\n    mutationOptions?: Omit<\n        UseMutationOptions<\n            TLogoutData,\n            Error,\n            (TVariables & Variables) | void,\n            unknown\n        >,\n        \"mutationFn\" | \"onError\" | \"onSuccess\"\n    >;\n};\n\n/**\n * `useLogout` calls the `logout` method from the {@link https://refine.dev/docs/api-references/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/core/hooks/auth/useLogout} for more details.\n *\n */\nexport const useLogout = <TVariables = {}>({\n    mutationOptions,\n}: UseLogoutProps<TVariables> = {}): UseMutationResult<\n    TLogoutData,\n    Error,\n    (TVariables & Variables) | void,\n    unknown\n> => {\n    const { push } = useNavigation();\n    const { logout: logoutFromContext } =\n        React.useContext<IAuthContext>(AuthContext);\n    const { open } = useNotification();\n\n    const queryResponse = useMutation<\n        TLogoutData,\n        Error,\n        (TVariables & Variables) | void,\n        unknown\n    >([\"useLogout\"], logoutFromContext, {\n        onSuccess: (data, variables) => {\n            const redirectPath = variables?.redirectPath ?? data;\n\n            if (redirectPath === false) {\n                return;\n            }\n\n            if (redirectPath) {\n                push(redirectPath);\n                return;\n            }\n\n            push(\"/login\");\n        },\n        onError: (error: Error) => {\n            open?.({\n                key: \"useLogout-error\",\n                type: \"error\",\n                message: error?.name || \"Logout Error\",\n                description:\n                    error?.message || \"Something went wrong during logout\",\n            });\n        },\n        ...mutationOptions,\n    });\n\n    return queryResponse;\n};\n","import React from \"react\";\nimport {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n} from \"@tanstack/react-query\";\nimport qs from \"qs\";\n\nimport { useNavigation, useRouterContext, useNotification } from \"@hooks\";\nimport { AuthContext } from \"@contexts/auth\";\n\nimport { IAuthContext, TLoginData } from \"../../../interfaces\";\n\nexport type UseLoginProps<TVariables> = {\n    mutationOptions?: Omit<\n        UseMutationOptions<TLoginData, Error, TVariables, unknown>,\n        \"mutationFn\" | \"onError\" | \"onSuccess\"\n    >;\n};\n\n/**\n * `useLogin` calls `login` method from {@link https://refine.dev/docs/api-references/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/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 const useLogin = <TVariables = {}>({\n    mutationOptions,\n}: UseLoginProps<TVariables> = {}): UseMutationResult<\n    TLoginData,\n    Error,\n    TVariables,\n    unknown\n> => {\n    const { replace } = useNavigation();\n    const { login: loginFromContext } =\n        React.useContext<IAuthContext>(AuthContext);\n\n    const { useLocation } = useRouterContext();\n    const { search } = useLocation();\n    const { close, open } = useNotification();\n\n    const { to } = qs.parse(search, {\n        ignoreQueryPrefix: true,\n    });\n\n    const queryResponse = useMutation<TLoginData, Error, TVariables, unknown>(\n        [\"useLogin\"],\n        loginFromContext,\n        {\n            onSuccess: (redirectPathFromAuth) => {\n                if (to) {\n                    return replace(to as string);\n                }\n\n                if (redirectPathFromAuth !== false) {\n                    if (typeof redirectPathFromAuth === \"string\") {\n                        replace(redirectPathFromAuth);\n                    } else {\n                        replace(\"/\");\n                    }\n                }\n                close?.(\"login-error\");\n            },\n            onError: (error: any) => {\n                open?.({\n                    message: error?.name || \"Login Error\",\n                    description: error?.message || \"Invalid credentials\",\n                    key: \"login-error\",\n                    type: \"error\",\n                });\n            },\n            ...mutationOptions,\n        },\n    );\n\n    return queryResponse;\n};\n","import React from \"react\";\nimport {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n} from \"@tanstack/react-query\";\n\nimport { AuthContext } from \"@contexts/auth\";\nimport { useNavigation, useNotification } from \"@hooks\";\n\nimport { IAuthContext, TRegisterData } from \"../../../interfaces\";\n\nexport type UseRegisterProps<TVariables> = {\n    mutationOptions?: Omit<\n        UseMutationOptions<TRegisterData, Error, TVariables, unknown>,\n        \"mutationFn\" | \"onError\" | \"onSuccess\"\n    >;\n};\n\n/**\n * `useRegister` calls `register` method from {@link https://refine.dev/docs/api-references/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/core/hooks/auth/useRegister} for more details.\n *\n * @typeParam TData - Result data of the query\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport const useRegister = <TVariables = {}>({\n    mutationOptions,\n}: UseRegisterProps<TVariables> = {}): UseMutationResult<\n    TRegisterData,\n    Error,\n    TVariables,\n    unknown\n> => {\n    const { replace } = useNavigation();\n    const { register: registerFromContext } =\n        React.useContext<IAuthContext>(AuthContext);\n\n    const { close, open } = useNotification();\n\n    const queryResponse = useMutation<\n        TRegisterData,\n        Error,\n        TVariables,\n        unknown\n    >([\"useRegister\"], registerFromContext, {\n        onSuccess: (redirectPathFromAuth) => {\n            if (redirectPathFromAuth !== false) {\n                if (redirectPathFromAuth) {\n                    replace(redirectPathFromAuth);\n                } else {\n                    replace(\"/\");\n                }\n            }\n            close?.(\"register-error\");\n        },\n        onError: (error: any) => {\n            open?.({\n                message: error?.name || \"Register Error\",\n                description: error?.message || \"Error while registering\",\n                key: \"register-error\",\n                type: \"error\",\n            });\n        },\n        ...mutationOptions,\n    });\n\n    return queryResponse;\n};\n","import React from \"react\";\nimport {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n} from \"@tanstack/react-query\";\n\nimport { AuthContext } from \"@contexts/auth\";\nimport { useNavigation, useNotification } from \"@hooks\";\n\nimport { IAuthContext, TForgotPasswordData } from \"../../../interfaces\";\n\nexport type UseForgotPasswordProps<TVariables> = {\n    mutationOptions?: Omit<\n        UseMutationOptions<TForgotPasswordData, Error, TVariables, unknown>,\n        \"mutationFn\" | \"onError\" | \"onSuccess\"\n    >;\n};\n\n/**\n * `useForgotPassword` calls `forgotPassword` method from {@link https://refine.dev/docs/api-references/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/core/hooks/auth/useForgotPassword} for more details.\n *\n * @typeParam TData - Result data of the query\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport const useForgotPassword = <TVariables = {}>({\n    mutationOptions,\n}: UseForgotPasswordProps<TVariables> = {}): UseMutationResult<\n    TForgotPasswordData,\n    Error,\n    TVariables,\n    unknown\n> => {\n    const { replace } = useNavigation();\n    const { forgotPassword: forgotPasswordFromContext } =\n        React.useContext<IAuthContext>(AuthContext);\n\n    const { close, open } = useNotification();\n\n    const queryResponse = useMutation<\n        TForgotPasswordData,\n        Error,\n        TVariables,\n        unknown\n    >([\"useForgotPassword\"], forgotPasswordFromContext, {\n        onSuccess: (redirectPathFromAuth) => {\n            if (redirectPathFromAuth !== false) {\n                if (redirectPathFromAuth) {\n                    replace(redirectPathFromAuth);\n                }\n            }\n            close?.(\"forgot-password-error\");\n        },\n        onError: (error: any) => {\n            open?.({\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        ...mutationOptions,\n    });\n\n    return queryResponse;\n};\n","import React from \"react\";\nimport {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n} from \"@tanstack/react-query\";\nimport qs from \"qs\";\n\nimport { AuthContext } from \"@contexts/auth\";\nimport { useNavigation, useNotification, useRouterContext } from \"@hooks\";\nimport {\n    IAuthContext,\n    TUpdatePasswordData,\n    UpdatePasswordFormTypes,\n} from \"../../../interfaces\";\n\nexport type UseUpdatePasswordProps<TVariables extends UpdatePasswordFormTypes> =\n    {\n        mutationOptions?: Omit<\n            UseMutationOptions<TUpdatePasswordData, Error, TVariables, unknown>,\n            \"mutationFn\" | \"onError\" | \"onSuccess\"\n        >;\n    };\n\n/**\n * `useUpdatePassword` calls `updatePassword` method from {@link https://refine.dev/docs/api-references/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/core/hooks/auth/useUpdatePassword} for more details.\n *\n * @typeParam TData - Result data of the query\n * @typeParam TVariables - Values for mutation function. default `{}`\n *\n */\nexport const useUpdatePassword = <\n    TVariables extends UpdatePasswordFormTypes = {},\n>({\n    mutationOptions,\n}: UseUpdatePasswordProps<TVariables> = {}): UseMutationResult<\n    TUpdatePasswordData,\n    Error,\n    TVariables,\n    unknown\n> => {\n    const { replace } = useNavigation();\n    const { updatePassword: updatePasswordFromContext } =\n        React.useContext<IAuthContext>(AuthContext);\n\n    const { close, open } = useNotification();\n    const { useLocation } = useRouterContext();\n\n    const { search } = useLocation();\n\n    const queryStrings = qs.parse(search, {\n        ignoreQueryPrefix: true,\n    });\n\n    const queryResponse = useMutation<\n        TUpdatePasswordData,\n        Error,\n        TVariables,\n        unknown\n    >(\n        [\"useUpdatePassword\"],\n        async (variables) => {\n            return updatePasswordFromContext?.({\n                ...queryStrings,\n                ...variables,\n            });\n        },\n        {\n            onSuccess: (redirectPathFromAuth) => {\n                if (redirectPathFromAuth !== false) {\n                    if (redirectPathFromAuth) {\n                        replace(redirectPathFromAuth);\n                    }\n                }\n                close?.(\"update-password-error\");\n            },\n            onError: (error: any) => {\n                open?.({\n                    message: error?.name || \"Update Password Error\",\n                    description:\n                        error?.message || \"Error while updating password\",\n                    key: \"update-password-error\",\n                    type: \"error\",\n                });\n            },\n            ...mutationOptions,\n        },\n    );\n\n    return queryResponse;\n};\n","import { useContext } from \"react\";\nimport { useQuery, UseQueryResult } from \"@tanstack/react-query\";\n\nimport { AuthContext } from \"@contexts/auth\";\nimport { IAuthContext } from \"../../../interfaces\";\n\n/**\n *  `useAuthenticated` calls the `checkAuth` method from the {@link https://refine.dev/docs/core/providers/auth-provider `authProvider`} under the hood.\n *\n * @see {@link https://refine.dev/docs/core/hooks/auth/useAuthenticated} for more details.\n *\n */\nexport const useAuthenticated = (\n    params?: any,\n): UseQueryResult<any, unknown> => {\n    const { checkAuth } = useContext<IAuthContext>(AuthContext);\n\n    const queryResponse = useQuery(\n        [\"useAuthenticated\", params],\n        async () => (await checkAuth?.(params)) ?? {},\n        {\n            retry: false,\n        },\n    );\n\n    return queryResponse;\n};\n","import React from \"react\";\nimport { useMutation, UseMutationResult } from \"@tanstack/react-query\";\n\nimport { AuthContext } from \"@contexts/auth\";\nimport { IAuthContext } from \"../../../interfaces\";\nimport { useLogout } from \"@hooks\";\n\n/**\n * `useCheckError` 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/core/hooks/auth/useCheckError} for more details.\n *\n */\nexport const useCheckError = (): UseMutationResult<\n    void,\n    string | undefined,\n    any,\n    unknown\n> => {\n    const { checkError: checkErrorFromContext } =\n        React.useContext<IAuthContext>(AuthContext);\n\n    const { mutate: logout } = useLogout();\n\n    const queryResponse = useMutation(\n        [\"useCheckError\"],\n        checkErrorFromContext,\n        {\n            onError: (redirectPath?: string) => {\n                logout({ redirectPath });\n            },\n        },\n    );\n\n    return queryResponse;\n};\n","import { useContext } from \"react\";\nimport { AuthContext } from \"@contexts/auth\";\nimport { IAuthContext } from \"../../interfaces\";\n\n/**\n * A hook that the UI uses\n * @internal\n */\nexport const useIsExistAuthentication = (): boolean => {\n    const { isProvided } = useContext<IAuthContext>(AuthContext);\n\n    return isProvided || false;\n};\n","import {\n    QueryObserverResult,\n    useQuery,\n    UseQueryOptions,\n} from \"@tanstack/react-query\";\nimport {\n    GetListResponse,\n    CrudFilters,\n    Pagination,\n    BaseRecord,\n    HttpError,\n    CrudSorting,\n    MetaDataQuery,\n    SuccessErrorNotification,\n    LiveModeProps,\n} from \"../../interfaces\";\nimport {\n    useResource,\n    useCheckError,\n    useHandleNotification,\n    useResourceSubscription,\n    useTranslate,\n    useDataProvider,\n} from \"@hooks\";\nimport { queryKeys, pickDataProvider } from \"@definitions/helpers\";\n\nexport interface UseListConfig {\n    pagination?: Pagination;\n    hasPagination?: boolean;\n    sort?: CrudSorting;\n    filters?: CrudFilters;\n}\n\nexport type UseListProps<TData, TError> = {\n    /**\n     * Resource name for API data interactions\n     */\n    resource: string;\n    /**\n     * Configuration for pagination, sorting and filtering\n     * @type [`UseListConfig`](/docs/api-reference/core/hooks/data/useList/#config-parameters)\n     */\n    config?: UseListConfig;\n    /**\n     * react-query's [useQuery](https://tanstack.com/query/v4/docs/reference/useQuery) options,\n     */\n    queryOptions?: UseQueryOptions<GetListResponse<TData>, TError>;\n    /**\n     *  Metadata query for `dataProvider`\n     */\n    metaData?: MetaDataQuery;\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    LiveModeProps;\n\n/**\n * `useList` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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/core/hooks/data/useList} 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 *\n */\nexport const useList = <\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n>({\n    resource,\n    config,\n    queryOptions,\n    successNotification,\n    errorNotification,\n    metaData,\n    liveMode,\n    onLiveEvent,\n    liveParams,\n    dataProviderName,\n}: UseListProps<TData, TError>): QueryObserverResult<\n    GetListResponse<TData>,\n    TError\n> => {\n    const { resources } = useResource();\n    const dataProvider = useDataProvider();\n    const queryKey = queryKeys(\n        resource,\n        pickDataProvider(resource, dataProviderName, resources),\n        metaData,\n    );\n    const { getList } = dataProvider(\n        pickDataProvider(resource, dataProviderName, resources),\n    );\n\n    const translate = useTranslate();\n    const { mutate: checkError } = useCheckError();\n    const handleNotification = useHandleNotification();\n\n    const isEnabled =\n        queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n    useResourceSubscription({\n        resource,\n        types: [\"*\"],\n        params: {\n            metaData,\n            pagination: config?.pagination,\n            hasPagination: config?.hasPagination,\n            sort: config?.sort,\n            filters: config?.filters,\n            subscriptionType: \"useList\",\n            ...liveParams,\n        },\n        channel: `resources/${resource}`,\n        enabled: isEnabled,\n        liveMode,\n        onLiveEvent,\n    });\n\n    const queryResponse = useQuery<GetListResponse<TData>, TError>(\n        queryKey.list(config),\n        ({ queryKey, pageParam, signal }) => {\n            const { hasPagination, ...restConfig } = config || {};\n            return getList<TData>({\n                resource,\n                ...restConfig,\n                hasPagination,\n                metaData: {\n                    ...metaData,\n                    queryContext: {\n                        queryKey,\n                        pageParam,\n                        signal,\n                    },\n                },\n            });\n        },\n        {\n            ...queryOptions,\n            onSuccess: (data) => {\n                queryOptions?.onSuccess?.(data);\n\n                const notificationConfig =\n                    typeof successNotification === \"function\"\n                        ? successNotification(\n                              data,\n                              { metaData, config },\n                              resource,\n                          )\n                        : successNotification;\n\n                handleNotification(notificationConfig);\n            },\n            onError: (err: TError) => {\n                checkError(err);\n                queryOptions?.onError?.(err);\n\n                const notificationConfig =\n                    typeof errorNotification === \"function\"\n                        ? errorNotification(err, { metaData, config }, resource)\n                        : errorNotification;\n\n                handleNotification(notificationConfig, {\n                    key: `${resource}-useList-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        },\n    );\n\n    return queryResponse;\n};\n","export const userFriendlySecond = (miliseconds: number): number => {\n    return miliseconds / 1000; //convert to seconds\n};\n","import zip from \"lodash/zip\";\nimport fromPairs from \"lodash/fromPairs\";\nimport { MapDataFn } from \"../../../interfaces\";\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","import pluralize from \"pluralize\";\nimport { humanizeString } from \"@definitions\";\n\n/**\n * A method that the internal uses\n * @internal\n */\nexport const userFriendlyResourceName = (\n    resource = \"\",\n    type: \"singular\" | \"plural\",\n): string => {\n    const humanizeResource = humanizeString(resource);\n    if (type === \"singular\") {\n        return pluralize.singular(humanizeResource);\n    }\n    return pluralize.plural(humanizeResource);\n};\n","import qs, { IStringifyOptions } from \"qs\";\nimport unionWith from \"lodash/unionWith\";\nimport differenceWith from \"lodash/differenceWith\";\nimport warnOnce from \"warn-once\";\n\nimport {\n    CrudFilters,\n    CrudSorting,\n    CrudFilter,\n    CrudSort,\n    CrudOperators,\n    SortOrder,\n} from \"../../interfaces\";\n\nexport const parseTableParams = (url: string) => {\n    const { current, pageSize, sorter, filters } = qs.parse(\n        url.substring(1), // remove first ? character\n    );\n\n    return {\n        parsedCurrent: current && Number(current),\n        parsedPageSize: pageSize && Number(pageSize),\n        parsedSorter: (sorter as CrudSorting) ?? [],\n        parsedFilters: (filters as CrudFilters) ?? [],\n    };\n};\n\nexport const parseTableParamsFromQuery = (params: any) => {\n    const url = qs.stringify(params);\n    return parseTableParams(`/${url}`);\n};\n\nexport const stringifyTableParams = (params: {\n    pagination?: { current?: number; pageSize?: number };\n    sorter: CrudSorting;\n    filters: CrudFilters;\n    [key: string]: any;\n}): string => {\n    const options: IStringifyOptions = {\n        skipNulls: true,\n        arrayFormat: \"indices\",\n        encode: false,\n    };\n    const { pagination, sorter, filters, ...rest } = params;\n\n    const queryString = qs.stringify(\n        { ...rest, ...(pagination ? pagination : {}), sorter, filters },\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: CrudFilters,\n    newFilters: CrudFilters,\n    prevFilters: CrudFilters = [],\n): CrudFilters => {\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\" &&\n                    crudFilter.value.length !== 0)) &&\n            (crudFilter.operator !== \"and\" ||\n                (crudFilter.operator === \"and\" &&\n                    crudFilter.value.length !== 0)),\n    );\n};\n\nexport const unionSorters = (\n    permanentSorter: CrudSorting,\n    newSorters: CrudSorting,\n): CrudSorting =>\n    unionWith(permanentSorter, newSorters, compareSorters).filter(\n        (crudSorter) =>\n            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: CrudFilters,\n    defaultFilter: CrudFilters,\n): CrudFilters => [\n    ...differenceWith(defaultFilter, permanentFilter, compareFilters),\n    ...permanentFilter,\n];\n\nexport const setInitialSorters = (\n    permanentSorter: CrudSorting,\n    defaultSorter: CrudSorting,\n): CrudSorting => [\n    ...differenceWith(defaultSorter, permanentSorter, compareSorters),\n    ...permanentSorter,\n];\n\nexport const getDefaultSortOrder = (\n    columnName: string,\n    sorter?: CrudSorting,\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?: CrudFilters,\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 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","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","import { IQueryKeys } from \"src/interfaces\";\nimport { QueryKey } from \"@tanstack/react-query\";\n\nimport { MetaDataQuery } from \"src/interfaces\";\n\nexport const queryKeys = (\n    resource?: string,\n    dataProviderName?: string,\n    metaData?: MetaDataQuery | undefined,\n): IQueryKeys => {\n    const providerName = dataProviderName || \"default\";\n    const keys: IQueryKeys = {\n        all: [providerName],\n        resourceAll: [providerName, resource || \"\"],\n        list: (config) => [\n            ...keys.resourceAll,\n            \"list\",\n            { ...config, ...metaData } as QueryKey,\n        ],\n        many: (ids) =>\n            [\n                ...keys.resourceAll,\n                \"getMany\",\n                (ids && ids.map(String)) as QueryKey,\n                { ...metaData } as QueryKey,\n            ].filter((item) => item !== undefined),\n        detail: (id) => [\n            ...keys.resourceAll,\n            \"detail\",\n            id?.toString(),\n            { ...metaData } as QueryKey,\n        ],\n        logList: (meta) =>\n            [\"logList\", resource, meta as any, metaData as QueryKey].filter(\n                (item) => item !== undefined,\n            ),\n    };\n    return keys;\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","import { ResourceProps } from \"src/interfaces\";\n\nconst getParentOf = (item: ResourceProps) => {\n    return (resourceItem: ResourceProps) =>\n        item.parentName ? resourceItem.name === item.parentName : false;\n};\n\nexport const routeGenerator = (\n    item: ResourceProps,\n    resourcesFromProps: ResourceProps[],\n): string | undefined => {\n    let route;\n\n    const resourceRoute = item.options?.route ?? item.name;\n\n    if (item.parentName) {\n        const parent = resourcesFromProps.find(getParentOf(item));\n\n        if (parent?.parentName) {\n            const routePrefix = routeGenerator(parent, resourcesFromProps);\n\n            route = `${routePrefix}/${resourceRoute}`;\n        } else if (item.parentName) {\n            const parentPrefix =\n                parent?.options?.route ?? parent?.name ?? item.parentName;\n            route = `${parentPrefix}/${resourceRoute}`;\n        }\n    } else {\n        route = resourceRoute;\n    }\n    return route;\n};\n","import { IResourceItem, ITreeMenu, IMenuItem } from \"src/interfaces\";\n\nexport const createTreeView = (\n    resources: IResourceItem[] | IMenuItem[],\n): ITreeMenu[] | ITreeMenu[] => {\n    const tree = [];\n    const resourcesRouteObject: { [key: string]: any } = {};\n    const resourcesNameObject: { [key: string]: any } = {};\n    let parent: IResourceItem | IMenuItem;\n    let child: ITreeMenu;\n\n    for (let i = 0; i < resources.length; i++) {\n        parent = resources[i];\n\n        const route = parent.route ?? parent.options?.route ?? \"\";\n\n        resourcesRouteObject[route] = parent;\n        resourcesRouteObject[route][\"children\"] = [];\n\n        resourcesNameObject[parent.name] = parent;\n        resourcesNameObject[parent.name][\"children\"] = [];\n    }\n\n    for (const name in resourcesRouteObject) {\n        if (resourcesRouteObject.hasOwnProperty(name)) {\n            child = resourcesRouteObject[name];\n\n            if (child.parentName && resourcesNameObject[child.parentName]) {\n                resourcesNameObject[child.parentName][\"children\"].push(child);\n            } else {\n                tree.push(child);\n            }\n        }\n    }\n\n    return tree;\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 {\n    IRefineContextOptions,\n    IRefineContext,\n    IRefineContextProvider,\n} from \"./IRefineContext\";\nimport { DefaultLayout } from \"@components/layoutWrapper/defaultLayout\";\n\nimport { LoginPage as DefaultLoginPage } from \"@components/pages\";\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};\n\nexport const RefineContext = React.createContext<IRefineContext>({\n    hasDashboard: false,\n    mutationMode: \"pessimistic\",\n    warnWhenUnsavedChanges: false,\n    syncWithLocation: false,\n    undoableTimeout: 5000,\n    Title: undefined,\n    Sider: undefined,\n    Header: undefined,\n    Footer: undefined,\n    Layout: DefaultLayout,\n    OffLayoutArea: undefined,\n    liveMode: \"off\",\n    onLiveEvent: undefined,\n    options: defaultRefineOptions,\n});\n\nexport const RefineContextProvider: React.FC<IRefineContextProvider> = ({\n    hasDashboard,\n    mutationMode,\n    warnWhenUnsavedChanges,\n    syncWithLocation,\n    undoableTimeout,\n    children,\n    DashboardPage,\n    Title,\n    Layout = DefaultLayout,\n    Header,\n    Sider,\n    Footer,\n    OffLayoutArea,\n    LoginPage = DefaultLoginPage,\n    catchAll,\n    liveMode = \"off\",\n    onLiveEvent,\n    options,\n}) => {\n    return (\n        <RefineContext.Provider\n            value={{\n                hasDashboard,\n                mutationMode,\n                warnWhenUnsavedChanges,\n                syncWithLocation,\n                Title,\n                undoableTimeout,\n                Layout,\n                Header,\n                Sider,\n                Footer,\n                OffLayoutArea,\n                DashboardPage,\n                LoginPage,\n                catchAll,\n                liveMode,\n                onLiveEvent,\n                options,\n            }}\n        >\n            {children}\n        </RefineContext.Provider>\n    );\n};\n","import React from \"react\";\n\nimport { LayoutProps } from \"../../../interfaces\";\n\nexport const DefaultLayout: React.FC<LayoutProps> = ({ children }) => {\n    return <div>{children}</div>;\n};\n","import { QueryClient, QueryClientConfig } from \"@tanstack/react-query\";\nimport { ReactQueryDevtools } from \"@tanstack/react-query-devtools\";\n\nimport { defaultRefineOptions } from \"@contexts/refine\";\nimport {\n    IRefineContextOptions,\n    IRefineOptions,\n    LiveModeProps,\n    MutationMode,\n} from \"src/interfaces\";\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?:\n        | React.ComponentProps<typeof ReactQueryDevtools>\n        | false;\n};\n\ntype HandleRefineOptionsReturnValues = {\n    optionsWithDefaults: IRefineContextOptions;\n    disableTelemetryWithDefault: boolean;\n    reactQueryWithDefaults: {\n        clientConfig: QueryClientConfig | InstanceType<typeof QueryClient>;\n        devtoolConfig: false | React.ComponentProps<typeof ReactQueryDevtools>;\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:\n            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 ??\n                defaultRefineOptions.redirect.afterEdit,\n        },\n    };\n\n    const disableTelemetryWithDefault =\n        options?.disableTelemetry ?? disableTelemetry ?? false;\n\n    const reactQueryWithDefaults = {\n        clientConfig:\n            options?.reactQuery?.clientConfig ?? reactQueryClientConfig ?? {},\n        devtoolConfig:\n            options?.reactQuery?.devtoolConfig ?? reactQueryDevtoolConfig ?? {},\n    };\n\n    return {\n        optionsWithDefaults,\n        disableTelemetryWithDefault,\n        reactQueryWithDefaults,\n    };\n};\n","import {\n    FormAction,\n    IRefineContextOptions,\n    RedirectAction,\n} from \"src/interfaces\";\n\ntype RedirectPageProps = {\n    redirectFromProps?: RedirectAction;\n    action: FormAction;\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    }\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 { IResourceItem } from \"@contexts/resource\";\n\nexport const pickDataProvider = (\n    resourceName?: string,\n    dataProviderName?: string,\n    resources?: IResourceItem[],\n) => {\n    if (dataProviderName) {\n        return dataProviderName;\n    }\n\n    const resource = resources?.find((item) => item.name === resourceName);\n\n    if (resource?.options?.dataProviderName) {\n        return resource.options.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 { GetListResponse } from \"../../../interfaces\";\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?.current || 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?.current || 1;\n\n    return current === 1 ? undefined : current - 1;\n};\n","import {\n    QueryObserverResult,\n    useQuery,\n    UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nimport {\n    GetOneResponse,\n    HttpError,\n    BaseRecord,\n    BaseKey,\n    MetaDataQuery,\n    LiveModeProps,\n    SuccessErrorNotification,\n} from \"../../interfaces\";\nimport {\n    useResource,\n    useCheckError,\n    useTranslate,\n    useResourceSubscription,\n    useHandleNotification,\n    useDataProvider,\n} from \"@hooks\";\nimport { queryKeys, pickDataProvider } from \"@definitions\";\n\nexport type UseOneProps<TData, TError> = {\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/v4/docs/reference/useQuery) options\n     */\n    queryOptions?: UseQueryOptions<GetOneResponse<TData>, TError>;\n    /**\n     * Metadata query for `dataProvider`,\n     */\n    metaData?: MetaDataQuery;\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    LiveModeProps;\n\n/**\n * `useOne` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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/core/hooks/data/useOne} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/interfaceReferences#httperror `HttpError`}\n *\n */\nexport const useOne = <\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n>({\n    resource,\n    id,\n    queryOptions,\n    successNotification,\n    errorNotification,\n    metaData,\n    liveMode,\n    onLiveEvent,\n    liveParams,\n    dataProviderName,\n}: UseOneProps<TData, TError>): QueryObserverResult<GetOneResponse<TData>> => {\n    const { resources } = useResource();\n    const dataProvider = useDataProvider();\n    const queryKey = queryKeys(\n        resource,\n        pickDataProvider(resource, dataProviderName, resources),\n        metaData,\n    );\n\n    const { getOne } = dataProvider(\n        pickDataProvider(resource, dataProviderName, resources),\n    );\n    const translate = useTranslate();\n    const { mutate: checkError } = useCheckError();\n    const handleNotification = useHandleNotification();\n\n    useResourceSubscription({\n        resource,\n        types: [\"*\"],\n        channel: `resources/${resource}`,\n        params: {\n            ids: id ? [id] : [],\n            id: id,\n            metaData,\n            subscriptionType: \"useOne\",\n            ...liveParams,\n        },\n        enabled: queryOptions?.enabled,\n        liveMode,\n        onLiveEvent,\n    });\n\n    const queryResponse = useQuery<GetOneResponse<TData>, TError>(\n        queryKey.detail(id),\n        ({ queryKey, pageParam, signal }) =>\n            getOne<TData>({\n                resource,\n                id,\n                metaData: {\n                    ...metaData,\n                    queryContext: {\n                        queryKey,\n                        pageParam,\n                        signal,\n                    },\n                },\n            }),\n        {\n            ...queryOptions,\n            onSuccess: (data) => {\n                queryOptions?.onSuccess?.(data);\n\n                const notificationConfig =\n                    typeof successNotification === \"function\"\n                        ? successNotification(data, { id, metaData }, resource)\n                        : successNotification;\n\n                handleNotification(notificationConfig);\n            },\n            onError: (err: TError) => {\n                checkError(err);\n                queryOptions?.onError?.(err);\n\n                const notificationConfig =\n                    typeof errorNotification === \"function\"\n                        ? errorNotification(err, { id, metaData }, resource)\n                        : errorNotification;\n\n                handleNotification(notificationConfig, {\n                    key: `${id}-${resource}-getOne-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        },\n    );\n\n    return queryResponse;\n};\n","import {\n    QueryObserverResult,\n    useQuery,\n    UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nimport {\n    BaseRecord,\n    BaseKey,\n    GetManyResponse,\n    HttpError,\n    MetaDataQuery,\n    LiveModeProps,\n    SuccessErrorNotification,\n} from \"../../interfaces\";\nimport {\n    useResource,\n    useTranslate,\n    useCheckError,\n    useResourceSubscription,\n    useHandleNotification,\n    useDataProvider,\n} from \"@hooks\";\nimport {\n    queryKeys,\n    pickDataProvider,\n    handleMultiple,\n} from \"@definitions/helpers\";\n\nexport type UseManyProps<TData, TError> = {\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/v4/docs/reference/useQuery) options\n     */\n    queryOptions?: UseQueryOptions<GetManyResponse<TData>, TError>;\n    /**\n     * Metadata query for `dataProvider`,\n     */\n    metaData?: MetaDataQuery;\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    LiveModeProps;\n\n/**\n * `useMany` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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/core/hooks/data/useMany} 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 *\n */\nexport const useMany = <\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n>({\n    resource,\n    ids,\n    queryOptions,\n    successNotification,\n    errorNotification,\n    metaData,\n    liveMode,\n    onLiveEvent,\n    liveParams,\n    dataProviderName,\n}: UseManyProps<TData, TError>): QueryObserverResult<\n    GetManyResponse<TData>\n> => {\n    const { resources } = useResource();\n    const dataProvider = useDataProvider();\n    const queryKey = queryKeys(\n        resource,\n        pickDataProvider(resource, dataProviderName, resources),\n        metaData,\n    );\n\n    const { getMany, getOne } = dataProvider(\n        pickDataProvider(resource, dataProviderName, resources),\n    );\n\n    const translate = useTranslate();\n    const { mutate: checkError } = useCheckError();\n    const handleNotification = useHandleNotification();\n\n    const isEnabled =\n        queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n    useResourceSubscription({\n        resource,\n        types: [\"*\"],\n        params: {\n            ids: ids ?? [],\n            metaData,\n            subscriptionType: \"useMany\",\n            ...liveParams,\n        },\n        channel: `resources/${resource}`,\n        enabled: isEnabled,\n        liveMode,\n        onLiveEvent,\n    });\n\n    const queryResponse = useQuery<GetManyResponse<TData>, TError>(\n        queryKey.many(ids),\n        ({ queryKey, pageParam, signal }) => {\n            if (getMany) {\n                return getMany({\n                    resource,\n                    ids,\n                    metaData: {\n                        ...metaData,\n                        queryContext: {\n                            queryKey,\n                            pageParam,\n                            signal,\n                        },\n                    },\n                });\n            } else {\n                return handleMultiple(\n                    ids.map((id) =>\n                        getOne<TData>({\n                            resource,\n                            id,\n                            metaData: {\n                                ...metaData,\n                                queryContext: {\n                                    queryKey,\n                                    pageParam,\n                                    signal,\n                                },\n                            },\n                        }),\n                    ),\n                );\n            }\n        },\n        {\n            ...queryOptions,\n            onSuccess: (data) => {\n                queryOptions?.onSuccess?.(data);\n\n                const notificationConfig =\n                    typeof successNotification === \"function\"\n                        ? successNotification(data, ids, resource)\n                        : successNotification;\n\n                handleNotification(notificationConfig);\n            },\n            onError: (err: TError) => {\n                checkError(err);\n                queryOptions?.onError?.(err);\n\n                const notificationConfig =\n                    typeof errorNotification === \"function\"\n                        ? errorNotification(err, ids, resource)\n                        : errorNotification;\n\n                handleNotification(notificationConfig, {\n                    key: `${ids[0]}-${resource}-getMany-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        },\n    );\n\n    return queryResponse;\n};\n","import {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n    useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { ActionTypes } from \"@contexts/undoableQueue\";\nimport {\n    BaseRecord,\n    BaseKey,\n    UpdateResponse,\n    MutationMode,\n    PrevContext as UpdateContext,\n    HttpError,\n    SuccessErrorNotification,\n    MetaDataQuery,\n    PreviousQuery,\n    GetListResponse,\n    IQueryKeys,\n} from \"../../interfaces\";\nimport pluralize from \"pluralize\";\nimport {\n    useResource,\n    useMutationMode,\n    useCancelNotification,\n    useTranslate,\n    useCheckError,\n    usePublish,\n    useHandleNotification,\n    useDataProvider,\n    useLog,\n    useInvalidate,\n} from \"@hooks\";\nimport { queryKeys, pickDataProvider } from \"@definitions/helpers\";\n\nexport type UpdateParams<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](/advanced-tutorials/mutation-mode.md)\n     */\n    mutationMode?: MutationMode;\n    /**\n     * Duration to wait before executing the mutation when `mutationMode = \"undoable\"`\n     */\n    undoableTimeout?: number;\n    /**\n     * Callback that runs when undo button is clicked on `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    metaData?: MetaDataQuery;\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} & SuccessErrorNotification;\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<TVariables>,\n    UpdateContext<TData>\n>;\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<TVariables>,\n            UpdateContext<TData>\n        >,\n        \"mutationFn\" | \"onError\" | \"onSuccess\" | \"onSettled\" | \"onMutate\"\n    >;\n};\n\n/**\n * `useUpdate` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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-references/hooks/data/useUpdate} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/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    mutationOptions,\n}: UseUpdateProps<TData, TError, TVariables> = {}): UseUpdateReturnType<\n    TData,\n    TError,\n    TVariables\n> => {\n    const { resources } = useResource();\n    const queryClient = useQueryClient();\n    const dataProvider = useDataProvider();\n\n    const {\n        mutationMode: mutationModeContext,\n        undoableTimeout: undoableTimeoutContext,\n    } = useMutationMode();\n    const translate = useTranslate();\n    const { mutate: checkError } = useCheckError();\n    const publish = usePublish();\n    const { log } = useLog();\n    const { notificationDispatch } = useCancelNotification();\n    const handleNotification = useHandleNotification();\n    const invalidateStore = useInvalidate();\n\n    const mutation = useMutation<\n        UpdateResponse<TData>,\n        TError,\n        UpdateParams<TVariables>,\n        UpdateContext<TData>\n    >(\n        ({\n            id,\n            values,\n            resource,\n            mutationMode,\n            undoableTimeout,\n            onCancel,\n            metaData,\n            dataProviderName,\n        }) => {\n            const mutationModePropOrContext =\n                mutationMode ?? mutationModeContext;\n\n            const undoableTimeoutPropOrContext =\n                undoableTimeout ?? undoableTimeoutContext;\n\n            if (!(mutationModePropOrContext === \"undoable\")) {\n                return dataProvider(\n                    pickDataProvider(resource, dataProviderName, resources),\n                ).update<TData, TVariables>({\n                    resource,\n                    id,\n                    variables: values,\n                    metaData,\n                });\n            }\n            const updatePromise = new Promise<UpdateResponse<TData>>(\n                (resolve, reject) => {\n                    const doMutation = () => {\n                        dataProvider(\n                            pickDataProvider(\n                                resource,\n                                dataProviderName,\n                                resources,\n                            ),\n                        )\n                            .update<TData, TVariables>({\n                                resource,\n                                id,\n                                variables: values,\n                                metaData,\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: resource,\n                            cancelMutation: cancelMutation,\n                            doMutation: doMutation,\n                            seconds: undoableTimeoutPropOrContext,\n                            isSilent: !!onCancel,\n                        },\n                    });\n                },\n            );\n            return updatePromise;\n        },\n        {\n            onMutate: async ({\n                resource,\n                id,\n                mutationMode,\n                values,\n                dataProviderName,\n            }) => {\n                const queryKey = queryKeys(\n                    resource,\n                    pickDataProvider(resource, dataProviderName, resources),\n                );\n\n                const previousQueries: PreviousQuery<TData>[] =\n                    queryClient.getQueriesData(queryKey.resourceAll);\n\n                const mutationModePropOrContext =\n                    mutationMode ?? mutationModeContext;\n\n                await queryClient.cancelQueries(\n                    queryKey.resourceAll,\n                    undefined,\n                    {\n                        silent: true,\n                    },\n                );\n\n                if (!(mutationModePropOrContext === \"pessimistic\")) {\n                    // Set the previous queries to the new ones:\n                    queryClient.setQueriesData(\n                        queryKey.list(),\n                        (previous?: GetListResponse<TData> | null) => {\n                            if (!previous) {\n                                return null;\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                    queryClient.setQueriesData(\n                        queryKey.many(),\n                        (previous?: GetListResponse<TData> | null) => {\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                    queryClient.setQueriesData(\n                        queryKey.detail(id),\n                        (previous?: GetListResponse<TData> | null) => {\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                return {\n                    previousQueries,\n                    queryKey,\n                };\n            },\n            onSettled: (\n                _data,\n                _error,\n                {\n                    id,\n                    resource,\n                    dataProviderName,\n                    invalidates = [\"list\", \"many\", \"detail\"],\n                },\n            ) => {\n                invalidateStore({\n                    resource,\n                    dataProviderName: pickDataProvider(\n                        resource,\n                        dataProviderName,\n                        resources,\n                    ),\n                    invalidates,\n                    id,\n                });\n\n                notificationDispatch({\n                    type: ActionTypes.REMOVE,\n                    payload: { id, resource },\n                });\n            },\n            onSuccess: (\n                data,\n                {\n                    id,\n                    resource,\n                    successNotification,\n                    dataProviderName,\n                    values,\n                    metaData,\n                },\n                context,\n            ) => {\n                const resourceSingular = pluralize.singular(resource);\n\n                const notificationConfig =\n                    typeof successNotification === \"function\"\n                        ? successNotification(data, { id, values }, resource)\n                        : successNotification;\n\n                handleNotification(notificationConfig, {\n                    key: `${id}-${resource}-notification`,\n                    description: translate(\n                        \"notifications.success\",\n                        \"Successful\",\n                    ),\n                    message: translate(\n                        \"notifications.editSuccess\",\n                        {\n                            resource: translate(\n                                `${resource}.${resource}`,\n                                resourceSingular,\n                            ),\n                        },\n                        `Successfully updated ${resourceSingular}`,\n                    ),\n                    type: \"success\",\n                });\n\n                publish?.({\n                    channel: `resources/${resource}`,\n                    type: \"updated\",\n                    payload: {\n                        ids: data.data?.id ? [data.data.id] : undefined,\n                    },\n                    date: new Date(),\n                });\n\n                let previousData: any;\n                if (context) {\n                    const queryData = queryClient.getQueryData<\n                        UpdateResponse<TData>\n                    >(context.queryKey.detail(id));\n\n                    previousData = Object.keys(values).reduce<any>(\n                        (acc, item) => {\n                            acc[item] = queryData?.data?.[item];\n                            return acc;\n                        },\n                        {},\n                    );\n                }\n\n                const { fields, operation, variables, ...rest } =\n                    metaData || {};\n\n                log?.mutate({\n                    action: \"update\",\n                    resource,\n                    data: values,\n                    previousData,\n                    meta: {\n                        id,\n                        dataProviderName: pickDataProvider(\n                            resource,\n                            dataProviderName,\n                            resources,\n                        ),\n                        ...rest,\n                    },\n                });\n            },\n            onError: (\n                err: TError,\n                { id, resource, errorNotification, values },\n                context,\n            ) => {\n                // set back the queries to the context:\n\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 = pluralize.singular(resource);\n\n                    const notificationConfig =\n                        typeof errorNotification === \"function\"\n                            ? errorNotification(err, { id, values }, resource)\n                            : errorNotification;\n\n                    handleNotification(notificationConfig, {\n                        key: `${id}-${resource}-notification`,\n                        message: translate(\n                            \"notifications.editError\",\n                            {\n                                resource: translate(\n                                    `${resource}.${resource}`,\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,\n        },\n    );\n\n    return mutation;\n};\n","import React, { ReactNode, useReducer } from \"react\";\nimport isEqual from \"lodash/isEqual\";\n\nimport { UndoableQueue } from \"@components\";\n\nimport { IUndoableQueue, IUndoableQueueContext } from \"../../interfaces\";\nimport { ActionTypes } from \"./actionTypes\";\n\nexport const UndoableQueueContext = React.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(\n                (notificationItem: IUndoableQueue) => {\n                    return !(\n                        isEqual(notificationItem.id, action.payload.id) &&\n                        notificationItem.resource == action.payload.resource\n                    );\n                },\n            );\n\n            return [\n                ...newState,\n                {\n                    ...action.payload,\n                    isRunning: true,\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<{\n    children: ReactNode;\n}> = ({ children }) => {\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        </UndoableQueueContext.Provider>\n    );\n};\n","import {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n} from \"@tanstack/react-query\";\nimport pluralize from \"pluralize\";\nimport { pickDataProvider } from \"@definitions/helpers\";\n\nimport {\n    CreateResponse,\n    BaseRecord,\n    HttpError,\n    SuccessErrorNotification,\n    MetaDataQuery,\n    IQueryKeys,\n} from \"../../interfaces\";\nimport {\n    useResource,\n    useTranslate,\n    useCheckError,\n    usePublish,\n    useHandleNotification,\n    useDataProvider,\n    useLog,\n    useInvalidate,\n} from \"@hooks\";\n\ntype useCreateParams<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     *  Metadata query for `dataProvider`\n     */\n    metaData?: MetaDataQuery;\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;\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<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<TVariables>,\n            unknown\n        >,\n        \"mutationFn\" | \"onError\" | \"onSuccess\"\n    >;\n};\n\n/**\n * `useCreate` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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-references/hooks/data/useCreate} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/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    mutationOptions,\n}: UseCreateProps<TData, TError, TVariables> = {}): UseCreateReturnType<\n    TData,\n    TError,\n    TVariables\n> => {\n    const { mutate: checkError } = useCheckError();\n    const dataProvider = useDataProvider();\n    const invalidateStore = useInvalidate();\n\n    const { resources } = useResource();\n\n    const translate = useTranslate();\n    const publish = usePublish();\n    const { log } = useLog();\n    const handleNotification = useHandleNotification();\n\n    const mutation = useMutation<\n        CreateResponse<TData>,\n        TError,\n        useCreateParams<TVariables>,\n        unknown\n    >(\n        ({\n            resource,\n            values,\n            metaData,\n            dataProviderName,\n        }: useCreateParams<TVariables>) => {\n            return dataProvider(\n                pickDataProvider(resource, dataProviderName, resources),\n            ).create<TData, TVariables>({\n                resource,\n                variables: values,\n                metaData,\n            });\n        },\n        {\n            onSuccess: (\n                data,\n                {\n                    resource,\n                    successNotification: successNotificationFromProp,\n                    dataProviderName,\n                    invalidates = [\"list\", \"many\"],\n                    values,\n                    metaData,\n                },\n            ) => {\n                const resourceSingular = pluralize.singular(resource);\n\n                const notificationConfig =\n                    typeof successNotificationFromProp === \"function\"\n                        ? successNotificationFromProp(data, values, resource)\n                        : successNotificationFromProp;\n\n                handleNotification(notificationConfig, {\n                    key: `create-${resource}-notification`,\n                    message: translate(\n                        \"notifications.createSuccess\",\n                        {\n                            resource: translate(\n                                `${resource}.${resource}`,\n                                resourceSingular,\n                            ),\n                        },\n                        `Successfully created ${resourceSingular}`,\n                    ),\n                    description: translate(\"notifications.success\", \"Success\"),\n                    type: \"success\",\n                });\n\n                invalidateStore({\n                    resource,\n                    dataProviderName: pickDataProvider(\n                        resource,\n                        dataProviderName,\n                        resources,\n                    ),\n                    invalidates,\n                });\n\n                publish?.({\n                    channel: `resources/${resource}`,\n                    type: \"created\",\n                    payload: {\n                        ids: data?.data?.id ? [data.data.id] : undefined,\n                    },\n                    date: new Date(),\n                });\n\n                const { fields, operation, variables, ...rest } =\n                    metaData || {};\n\n                log?.mutate({\n                    action: \"create\",\n                    resource,\n                    data: values,\n                    meta: {\n                        dataProviderName: pickDataProvider(\n                            resource,\n                            dataProviderName,\n                            resources,\n                        ),\n                        id: data?.data?.id ?? undefined,\n                        ...rest,\n                    },\n                });\n            },\n            onError: (\n                err: TError,\n                {\n                    resource,\n                    errorNotification: errorNotificationFromProp,\n                    values,\n                },\n            ) => {\n                checkError(err);\n                const resourceSingular = pluralize.singular(resource);\n\n                const notificationConfig =\n                    typeof errorNotificationFromProp === \"function\"\n                        ? errorNotificationFromProp(err, values, resource)\n                        : errorNotificationFromProp;\n\n                handleNotification(notificationConfig, {\n                    key: `create-${resource}-notification`,\n                    description: err.message,\n                    message: translate(\n                        \"notifications.createError\",\n                        {\n                            resource: translate(\n                                `${resource}.${resource}`,\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,\n        },\n    );\n\n    return mutation;\n};\n","import {\n    useQueryClient,\n    useMutation,\n    UseMutationResult,\n    UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport pluralize from \"pluralize\";\n\nimport {\n    useResource,\n    useMutationMode,\n    useCancelNotification,\n    useTranslate,\n    useCheckError,\n    usePublish,\n    useHandleNotification,\n    useDataProvider,\n    useLog,\n    useInvalidate,\n} from \"@hooks\";\nimport { ActionTypes } from \"@contexts/undoableQueue\";\nimport {\n    DeleteOneResponse,\n    MutationMode,\n    PrevContext as DeleteContext,\n    BaseRecord,\n    BaseKey,\n    HttpError,\n    GetListResponse,\n    SuccessErrorNotification,\n    MetaDataQuery,\n    PreviousQuery,\n    IQueryKeys,\n} from \"../../interfaces\";\nimport { queryKeys, pickDataProvider } from \"@definitions/helpers\";\n\nexport type DeleteParams<TVariables> = {\n    id: BaseKey;\n    resource: string;\n    mutationMode?: MutationMode;\n    undoableTimeout?: number;\n    onCancel?: (cancelMutation: () => void) => void;\n    metaData?: MetaDataQuery;\n    dataProviderName?: string;\n    invalidates?: Array<keyof IQueryKeys>;\n    values?: TVariables;\n} & SuccessErrorNotification;\n\nexport type UseDeleteReturnType<\n    TData extends BaseRecord = BaseRecord,\n    TError = HttpError,\n    TVariables = {},\n> = UseMutationResult<\n    DeleteOneResponse<TData>,\n    TError,\n    DeleteParams<TVariables>,\n    DeleteContext<TData>\n>;\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<TVariables>,\n            DeleteContext<TData>\n        >,\n        \"mutationFn\" | \"onError\" | \"onSuccess\" | \"onSettled\" | \"onMutate\"\n    >;\n};\n\n/**\n * `useDelete` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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-references/hooks/data/useDelete} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/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}: UseDeleteProps<TData, TError, TVariables> = {}): UseDeleteReturnType<\n    TData,\n    TError,\n    TVariables\n> => {\n    const { mutate: checkError } = useCheckError();\n    const dataProvider = useDataProvider();\n\n    const { resources } = useResource();\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\n    const mutation = useMutation<\n        DeleteOneResponse<TData>,\n        TError,\n        DeleteParams<TVariables>,\n        DeleteContext<TData>\n    >(\n        ({\n            id,\n            mutationMode,\n            undoableTimeout,\n            resource,\n            onCancel,\n            metaData,\n            dataProviderName,\n            values,\n        }) => {\n            const mutationModePropOrContext =\n                mutationMode ?? mutationModeContext;\n\n            const undoableTimeoutPropOrContext =\n                undoableTimeout ?? undoableTimeoutContext;\n\n            if (!(mutationModePropOrContext === \"undoable\")) {\n                return dataProvider(\n                    pickDataProvider(resource, dataProviderName, resources),\n                ).deleteOne<TData, TVariables>({\n                    resource,\n                    id,\n                    metaData,\n                    variables: values,\n                });\n            }\n\n            const deletePromise = new Promise<DeleteOneResponse<TData>>(\n                (resolve, reject) => {\n                    const doMutation = () => {\n                        dataProvider(\n                            pickDataProvider(\n                                resource,\n                                dataProviderName,\n                                resources,\n                            ),\n                        )\n                            .deleteOne<TData, TVariables>({\n                                resource,\n                                id,\n                                metaData,\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: resource,\n                            cancelMutation: cancelMutation,\n                            doMutation: doMutation,\n                            seconds: undoableTimeoutPropOrContext,\n                            isSilent: !!onCancel,\n                        },\n                    });\n                },\n            );\n            return deletePromise;\n        },\n        {\n            onMutate: async ({\n                id,\n                resource,\n                mutationMode,\n                dataProviderName,\n            }) => {\n                const queryKey = queryKeys(\n                    resource,\n                    pickDataProvider(resource, dataProviderName, resources),\n                );\n\n                const mutationModePropOrContext =\n                    mutationMode ?? mutationModeContext;\n\n                await queryClient.cancelQueries(\n                    queryKey.resourceAll,\n                    undefined,\n                    {\n                        silent: true,\n                    },\n                );\n\n                const previousQueries: PreviousQuery<TData>[] =\n                    queryClient.getQueriesData(queryKey.resourceAll);\n\n                if (!(mutationModePropOrContext === \"pessimistic\")) {\n                    // Set the previous queries to the new ones:\n                    queryClient.setQueriesData(\n                        queryKey.list(),\n                        (previous?: GetListResponse<TData> | null) => {\n                            if (!previous) {\n                                return null;\n                            }\n                            const data = previous.data.filter(\n                                (record: TData) =>\n                                    record.id?.toString() !== id.toString(),\n                            );\n\n                            return {\n                                data,\n                                total: previous.total - 1,\n                            };\n                        },\n                    );\n\n                    queryClient.setQueriesData(\n                        queryKey.many(),\n                        (previous?: GetListResponse<TData> | null) => {\n                            if (!previous) {\n                                return null;\n                            }\n                            const data = previous.data.filter(\n                                (record: TData) => {\n                                    return (\n                                        record.id?.toString() !== id?.toString()\n                                    );\n                                },\n                            );\n\n                            return {\n                                ...previous,\n                                data,\n                            };\n                        },\n                    );\n                }\n\n                return {\n                    previousQueries,\n                    queryKey,\n                };\n            },\n            onSettled: (\n                _data,\n                _error,\n                {\n                    id,\n                    resource,\n                    dataProviderName,\n                    invalidates = [\"list\", \"many\"],\n                },\n            ) => {\n                // invalidate the cache for the list and many queries:\n                invalidateStore({\n                    resource,\n                    dataProviderName: pickDataProvider(\n                        resource,\n                        dataProviderName,\n                        resources,\n                    ),\n                    invalidates,\n                });\n\n                notificationDispatch({\n                    type: ActionTypes.REMOVE,\n                    payload: { id, resource },\n                });\n            },\n            onSuccess: (\n                _data,\n                {\n                    id,\n                    resource,\n                    successNotification,\n                    dataProviderName,\n                    metaData,\n                },\n                context,\n            ) => {\n                const resourceSingular = pluralize.singular(resource ?? \"\");\n\n                // Remove the queries from the cache:\n                queryClient.removeQueries(context?.queryKey.detail(id));\n\n                const notificationConfig =\n                    typeof successNotification === \"function\"\n                        ? successNotification(_data, id, resource)\n                        : successNotification;\n\n                handleNotification(notificationConfig, {\n                    key: `${id}-${resource}-notification`,\n                    description: translate(\"notifications.success\", \"Success\"),\n                    message: translate(\n                        \"notifications.deleteSuccess\",\n                        {\n                            resource: translate(\n                                `${resource}.${resource}`,\n                                resourceSingular,\n                            ),\n                        },\n                        `Successfully deleted a ${resourceSingular}`,\n                    ),\n                    type: \"success\",\n                });\n\n                publish?.({\n                    channel: `resources/${resource}`,\n                    type: \"deleted\",\n                    payload: {\n                        ids: id ? [id] : [],\n                    },\n                    date: new Date(),\n                });\n\n                const { fields, operation, variables, ...rest } =\n                    metaData || {};\n\n                log?.mutate({\n                    action: \"delete\",\n                    resource,\n                    meta: {\n                        id,\n                        dataProviderName: pickDataProvider(\n                            resource,\n                            dataProviderName,\n                            resources,\n                        ),\n                        ...rest,\n                    },\n                });\n\n                // Remove the queries from the cache:\n                queryClient.removeQueries(context?.queryKey.detail(id));\n            },\n            onError: (\n                err: TError,\n                { id, resource, errorNotification },\n                context,\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 = pluralize.singular(resource ?? \"\");\n\n                    const notificationConfig =\n                        typeof errorNotification === \"function\"\n                            ? errorNotification(err, id, resource)\n                            : errorNotification;\n\n                    handleNotification(notificationConfig, {\n                        key: `${id}-${resource}-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            ...mutationOptions,\n        },\n    );\n\n    return mutation;\n};\n","import {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n} from \"@tanstack/react-query\";\nimport pluralize from \"pluralize\";\n\nimport {\n    BaseRecord,\n    CreateManyResponse,\n    HttpError,\n    SuccessErrorNotification,\n    MetaDataQuery,\n    IQueryKeys,\n} from \"../../interfaces\";\nimport {\n    useResource,\n    useTranslate,\n    usePublish,\n    useHandleNotification,\n    useDataProvider,\n    useInvalidate,\n} from \"@hooks\";\nimport { handleMultiple, pickDataProvider } from \"@definitions\";\n\ntype useCreateManyParams<TVariables> = {\n    resource: string;\n    values: TVariables[];\n    metaData?: MetaDataQuery;\n    dataProviderName?: string;\n    invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification;\n\nexport type UseCreateManyReturnType<\n    TData extends BaseRecord = BaseRecord,\n    TError = HttpError,\n    TVariables = {},\n> = UseMutationResult<\n    CreateManyResponse<TData>,\n    TError,\n    useCreateManyParams<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<TVariables>\n        >,\n        \"mutationFn\" | \"onError\" | \"onSuccess\"\n    >;\n};\n\n/**\n * `useCreateMany` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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/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    mutationOptions,\n}: UseCreateManyProps<TData, TError, TVariables> = {}): UseCreateManyReturnType<\n    TData,\n    TError,\n    TVariables\n> => {\n    const dataProvider = useDataProvider();\n\n    const { resources } = useResource();\n    const translate = useTranslate();\n    const publish = usePublish();\n    const handleNotification = useHandleNotification();\n    const invalidateStore = useInvalidate();\n\n    const mutation = useMutation<\n        CreateManyResponse<TData>,\n        TError,\n        useCreateManyParams<TVariables>\n    >(\n        ({\n            resource,\n            values,\n            metaData,\n            dataProviderName,\n        }: useCreateManyParams<TVariables>) => {\n            const selectedDataProvider = dataProvider(\n                pickDataProvider(resource, dataProviderName, resources),\n            );\n\n            if (selectedDataProvider.createMany) {\n                return selectedDataProvider.createMany<TData, TVariables>({\n                    resource,\n                    variables: values,\n                    metaData,\n                });\n            } else {\n                return handleMultiple(\n                    values.map((val) =>\n                        selectedDataProvider.create<TData, TVariables>({\n                            resource,\n                            variables: val,\n                            metaData,\n                        }),\n                    ),\n                );\n            }\n        },\n        {\n            onSuccess: (\n                response,\n                {\n                    resource,\n                    successNotification,\n                    dataProviderName,\n                    invalidates = [\"list\", \"many\"],\n                    values,\n                },\n            ) => {\n                const resourcePlural = pluralize.plural(resource);\n\n                const notificationConfig =\n                    typeof successNotification === \"function\"\n                        ? successNotification(response, values, resource)\n                        : successNotification;\n\n                handleNotification(notificationConfig, {\n                    key: `createMany-${resource}-notification`,\n                    message: translate(\n                        \"notifications.createSuccess\",\n                        {\n                            resource: translate(\n                                `${resource}.${resource}`,\n                                resource,\n                            ),\n                        },\n                        `Successfully created ${resourcePlural}`,\n                    ),\n                    description: translate(\"notifications.success\", \"Success\"),\n                    type: \"success\",\n                });\n\n                invalidateStore({\n                    resource,\n                    dataProviderName: pickDataProvider(\n                        resource,\n                        dataProviderName,\n                        resources,\n                    ),\n                    invalidates,\n                });\n\n                const ids = response?.data\n                    .filter((item) => item?.id !== undefined)\n                    .map((item) => item.id!);\n\n                publish?.({\n                    channel: `resources/${resource}`,\n                    type: \"created\",\n                    payload: {\n                        ids,\n                    },\n                    date: new Date(),\n                });\n            },\n            onError: (err: TError, { resource, errorNotification, values }) => {\n                const notificationConfig =\n                    typeof errorNotification === \"function\"\n                        ? errorNotification(err, values, resource)\n                        : errorNotification;\n\n                handleNotification(notificationConfig, {\n                    key: `createMany-${resource}-notification`,\n                    description: err.message,\n                    message: translate(\n                        \"notifications.createError\",\n                        {\n                            resource: translate(\n                                `${resource}.${resource}`,\n                                resource,\n                            ),\n                            statusCode: err.statusCode,\n                        },\n                        `There was an error creating ${resource} (status code: ${err.statusCode}`,\n                    ),\n                    type: \"error\",\n                });\n            },\n            ...mutationOptions,\n        },\n    );\n\n    return mutation;\n};\n","import {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n    useQueryClient,\n} from \"@tanstack/react-query\";\nimport pluralize from \"pluralize\";\n\nimport {\n    useResource,\n    useCancelNotification,\n    useCheckError,\n    useMutationMode,\n    useTranslate,\n    usePublish,\n    useHandleNotification,\n    useDataProvider,\n    useInvalidate,\n} from \"@hooks\";\nimport { ActionTypes } from \"@contexts/undoableQueue\";\nimport {\n    BaseRecord,\n    BaseKey,\n    UpdateManyResponse,\n    HttpError,\n    MutationMode,\n    QueryResponse,\n    PrevContext as UpdateContext,\n    SuccessErrorNotification,\n    MetaDataQuery,\n    GetListResponse,\n    IQueryKeys,\n} from \"../../interfaces\";\nimport {\n    queryKeys,\n    pickDataProvider,\n    handleMultiple,\n} from \"@definitions/helpers\";\n\ntype UpdateManyParams<TVariables> = {\n    ids: BaseKey[];\n    resource: string;\n    mutationMode?: MutationMode;\n    undoableTimeout?: number;\n    onCancel?: (cancelMutation: () => void) => void;\n    values: TVariables;\n    metaData?: MetaDataQuery;\n    dataProviderName?: string;\n    invalidates?: Array<keyof IQueryKeys>;\n} & SuccessErrorNotification;\n\ntype UseUpdateManyReturnType<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n    TVariables = {},\n> = UseMutationResult<\n    UpdateManyResponse<TData>,\n    TError,\n    UpdateManyParams<TVariables>,\n    UpdateContext<TData>\n>;\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<TVariables>,\n            UpdateContext<TData>\n        >,\n        \"mutationFn\" | \"onError\" | \"onSuccess\" | \"onSettled\" | \"onMutate\"\n    >;\n};\n\n/**\n * `useUpdateMany` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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/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    mutationOptions,\n}: UseUpdateManyProps<TData, TError, TVariables> = {}): UseUpdateManyReturnType<\n    TData,\n    TError,\n    TVariables\n> => {\n    const { resources } = useResource();\n    const queryClient = useQueryClient();\n    const dataProvider = useDataProvider();\n    const translate = useTranslate();\n\n    const {\n        mutationMode: mutationModeContext,\n        undoableTimeout: undoableTimeoutContext,\n    } = useMutationMode();\n    const { mutate: checkError } = useCheckError();\n    const { notificationDispatch } = useCancelNotification();\n    const publish = usePublish();\n    const handleNotification = useHandleNotification();\n    const invalidateStore = useInvalidate();\n\n    const mutation = useMutation<\n        UpdateManyResponse<TData>,\n        TError,\n        UpdateManyParams<TVariables>,\n        UpdateContext<TData>\n    >(\n        ({\n            ids,\n            values,\n            resource,\n            onCancel,\n            mutationMode,\n            undoableTimeout,\n            metaData,\n            dataProviderName,\n        }: UpdateManyParams<TVariables>) => {\n            const mutationModePropOrContext =\n                mutationMode ?? mutationModeContext;\n\n            const undoableTimeoutPropOrContext =\n                undoableTimeout ?? undoableTimeoutContext;\n\n            const selectedDataProvider = dataProvider(\n                pickDataProvider(resource, dataProviderName, resources),\n            );\n\n            const mutationFn = () => {\n                if (selectedDataProvider.updateMany) {\n                    return selectedDataProvider.updateMany<TData, TVariables>({\n                        resource,\n                        ids,\n                        variables: values,\n                        metaData,\n                    });\n                } else {\n                    return handleMultiple(\n                        ids.map((id) =>\n                            selectedDataProvider.update<TData, TVariables>({\n                                resource,\n                                id,\n                                variables: values,\n                                metaData,\n                            }),\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: resource,\n                            cancelMutation: cancelMutation,\n                            doMutation: doMutation,\n                            seconds: undoableTimeoutPropOrContext,\n                            isSilent: !!onCancel,\n                        },\n                    });\n                },\n            );\n            return updatePromise;\n        },\n\n        {\n            onMutate: async ({\n                resource,\n                ids,\n                values,\n                mutationMode,\n                dataProviderName,\n                metaData,\n            }) => {\n                const queryKey = queryKeys(\n                    resource,\n                    pickDataProvider(resource, dataProviderName, resources),\n                    metaData,\n                );\n\n                const mutationModePropOrContext =\n                    mutationMode ?? mutationModeContext;\n\n                await queryClient.cancelQueries(\n                    queryKey.resourceAll,\n                    undefined,\n                    {\n                        silent: true,\n                    },\n                );\n\n                const previousQueries = queryClient.getQueriesData<\n                    QueryResponse<TData>\n                >(queryKey.resourceAll);\n\n                if (!(mutationModePropOrContext === \"pessimistic\")) {\n                    // Set the previous queries to the new ones:\n                    queryClient.setQueriesData(\n                        queryKey.list(),\n                        (previous?: GetListResponse<TData> | null) => {\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                    queryClient.setQueriesData(\n                        queryKey.many(),\n                        (previous?: GetListResponse<TData> | null) => {\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                    for (const id of ids) {\n                        queryClient.setQueriesData(\n                            queryKey.detail(id),\n                            (previous?: GetListResponse<TData> | null) => {\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                return {\n                    previousQueries,\n                    queryKey,\n                };\n            },\n            onSettled: (_data, _error, { ids, resource, dataProviderName }) => {\n                // invalidate the cache for the list and many queries:\n                invalidateStore({\n                    resource,\n                    invalidates: [\"list\", \"many\"],\n                    dataProviderName: pickDataProvider(\n                        resource,\n                        dataProviderName,\n                        resources,\n                    ),\n                });\n\n                ids.forEach((id) =>\n                    invalidateStore({\n                        resource,\n                        invalidates: [\"detail\"],\n                        dataProviderName: pickDataProvider(\n                            resource,\n                            dataProviderName,\n                            resources,\n                        ),\n                        id,\n                    }),\n                );\n\n                notificationDispatch({\n                    type: ActionTypes.REMOVE,\n                    payload: { id: ids, resource },\n                });\n            },\n            onSuccess: (\n                data,\n                { ids, resource, successNotification, values },\n            ) => {\n                const resourceSingular = pluralize.singular(resource);\n\n                const notificationConfig =\n                    typeof successNotification === \"function\"\n                        ? successNotification(data, { ids, values }, resource)\n                        : successNotification;\n\n                handleNotification(notificationConfig, {\n                    key: `${ids}-${resource}-notification`,\n                    description: translate(\n                        \"notifications.success\",\n                        \"Successful\",\n                    ),\n                    message: translate(\n                        \"notifications.editSuccess\",\n                        {\n                            resource: translate(\n                                `${resource}.${resource}`,\n                                resource,\n                            ),\n                        },\n                        `Successfully updated ${resourceSingular}`,\n                    ),\n                    type: \"success\",\n                });\n\n                publish?.({\n                    channel: `resources/${resource}`,\n                    type: \"updated\",\n                    payload: {\n                        ids: ids.map(String),\n                    },\n                    date: new Date(),\n                });\n            },\n            onError: (\n                err: TError,\n                { ids, resource, errorNotification, values },\n                context,\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 = pluralize.singular(resource);\n\n                    const notificationConfig =\n                        typeof errorNotification === \"function\"\n                            ? errorNotification(err, { ids, values }, resource)\n                            : errorNotification;\n\n                    handleNotification(notificationConfig, {\n                        key: `${ids}-${resource}-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,\n        },\n    );\n\n    return mutation;\n};\n","import {\n    useQueryClient,\n    useMutation,\n    UseMutationResult,\n    UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport pluralize from \"pluralize\";\n\nimport {\n    DeleteManyResponse,\n    HttpError,\n    BaseRecord,\n    BaseKey,\n    MutationMode,\n    PreviousQuery,\n    GetListResponse,\n    PrevContext as DeleteContext,\n    SuccessErrorNotification,\n    MetaDataQuery,\n    IQueryKeys,\n} from \"../../interfaces\";\nimport {\n    useResource,\n    useTranslate,\n    useMutationMode,\n    useCancelNotification,\n    useCheckError,\n    usePublish,\n    useHandleNotification,\n    useDataProvider,\n    useInvalidate,\n} from \"@hooks\";\nimport { ActionTypes } from \"@contexts/undoableQueue\";\nimport { queryKeys, pickDataProvider, handleMultiple } from \"@definitions\";\n\nexport type DeleteManyParams<TVariables> = {\n    ids: BaseKey[];\n    resource: string;\n    mutationMode?: MutationMode;\n    undoableTimeout?: number;\n    onCancel?: (cancelMutation: () => void) => void;\n    metaData?: MetaDataQuery;\n    dataProviderName?: string;\n    invalidates?: Array<keyof IQueryKeys>;\n    values?: TVariables;\n} & SuccessErrorNotification;\n\nexport type UseDeleteManyReturnType<\n    TData extends BaseRecord = BaseRecord,\n    TError = HttpError,\n    TVariables = {},\n> = UseMutationResult<\n    DeleteManyResponse<TData>,\n    TError,\n    DeleteManyParams<TVariables>,\n    unknown\n>;\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<TVariables>,\n            DeleteContext<TData>\n        >,\n        \"mutationFn\" | \"onError\" | \"onSuccess\" | \"onSettled\" | \"onMutate\"\n    >;\n};\n\n/**\n * `useDeleteMany` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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/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}: UseDeleteManyProps<TData, TError, TVariables> = {}): UseDeleteManyReturnType<\n    TData,\n    TError,\n    TVariables\n> => {\n    const { mutate: checkError } = useCheckError();\n\n    const {\n        mutationMode: mutationModeContext,\n        undoableTimeout: undoableTimeoutContext,\n    } = useMutationMode();\n    const dataProvider = useDataProvider();\n\n    const { notificationDispatch } = useCancelNotification();\n    const translate = useTranslate();\n    const publish = usePublish();\n    const handleNotification = useHandleNotification();\n    const invalidateStore = useInvalidate();\n\n    const { resources } = useResource();\n    const queryClient = useQueryClient();\n\n    const mutation = useMutation<\n        DeleteManyResponse<TData>,\n        TError,\n        DeleteManyParams<TVariables>,\n        DeleteContext<TData>\n    >(\n        ({\n            resource,\n            ids,\n            mutationMode,\n            undoableTimeout,\n            onCancel,\n            metaData,\n            dataProviderName,\n            values,\n        }: DeleteManyParams<TVariables>) => {\n            const mutationModePropOrContext =\n                mutationMode ?? mutationModeContext;\n\n            const undoableTimeoutPropOrContext =\n                undoableTimeout ?? undoableTimeoutContext;\n\n            const selectedDataProvider = dataProvider(\n                pickDataProvider(resource, dataProviderName, resources),\n            );\n\n            const mutationFn = () => {\n                if (selectedDataProvider.deleteMany) {\n                    return selectedDataProvider.deleteMany<TData, TVariables>({\n                        resource,\n                        ids,\n                        metaData,\n                        variables: values,\n                    });\n                } else {\n                    return handleMultiple(\n                        ids.map((id) =>\n                            selectedDataProvider.deleteOne<TData, TVariables>({\n                                resource,\n                                id,\n                                metaData,\n                                variables: values,\n                            }),\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: resource,\n                            cancelMutation: cancelMutation,\n                            doMutation: doMutation,\n                            seconds: undoableTimeoutPropOrContext,\n                            isSilent: !!onCancel,\n                        },\n                    });\n                },\n            );\n            return updatePromise;\n        },\n        {\n            onMutate: async ({\n                ids,\n                resource,\n                mutationMode,\n                dataProviderName,\n            }) => {\n                const queryKey = queryKeys(\n                    resource,\n                    pickDataProvider(resource, dataProviderName, resources),\n                );\n\n                const mutationModePropOrContext =\n                    mutationMode ?? mutationModeContext;\n\n                await queryClient.cancelQueries(\n                    queryKey.resourceAll,\n                    undefined,\n                    {\n                        silent: true,\n                    },\n                );\n\n                const previousQueries: PreviousQuery<TData>[] =\n                    queryClient.getQueriesData(queryKey.resourceAll);\n\n                if (!(mutationModePropOrContext === \"pessimistic\")) {\n                    // Set the previous queries to the new ones:\n                    queryClient.setQueriesData(\n                        queryKey.list(),\n                        (previous?: GetListResponse<TData> | null) => {\n                            if (!previous) {\n                                return null;\n                            }\n\n                            const data = previous.data.filter(\n                                (item) =>\n                                    item.id &&\n                                    !ids\n                                        .map(String)\n                                        .includes(item.id.toString()),\n                            );\n\n                            return {\n                                data,\n                                total: previous.total - 1,\n                            };\n                        },\n                    );\n\n                    queryClient.setQueriesData(\n                        queryKey.many(),\n                        (previous?: GetListResponse<TData> | null) => {\n                            if (!previous) {\n                                return null;\n                            }\n\n                            const data = previous.data.filter(\n                                (record: TData) => {\n                                    if (record.id) {\n                                        return !ids\n                                            .map(String)\n                                            .includes(record.id.toString());\n                                    }\n                                    return false;\n                                },\n                            );\n\n                            return {\n                                ...previous,\n                                data,\n                            };\n                        },\n                    );\n\n                    for (const id of ids) {\n                        queryClient.setQueriesData(\n                            queryKey.detail(id),\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                    queryKey,\n                };\n            },\n            // Always refetch after error or success:\n            onSettled: (\n                _data,\n                _error,\n                {\n                    resource,\n                    ids,\n                    dataProviderName,\n                    invalidates = [\"list\", \"many\"],\n                },\n            ) => {\n                // invalidate the cache for the list and many queries:\n                invalidateStore({\n                    resource,\n                    dataProviderName: pickDataProvider(\n                        resource,\n                        dataProviderName,\n                        resources,\n                    ),\n                    invalidates,\n                });\n\n                notificationDispatch({\n                    type: ActionTypes.REMOVE,\n                    payload: { id: ids, resource },\n                });\n            },\n            onSuccess: (\n                _data,\n                { ids, resource, successNotification },\n                context,\n            ) => {\n                // Remove the queries from the cache:\n                ids.forEach((id) =>\n                    queryClient.removeQueries(context?.queryKey.detail(id)),\n                );\n\n                const notificationConfig =\n                    typeof successNotification === \"function\"\n                        ? successNotification(_data, ids, resource)\n                        : successNotification;\n\n                handleNotification(notificationConfig, {\n                    key: `${ids}-${resource}-notification`,\n                    description: translate(\"notifications.success\", \"Success\"),\n                    message: translate(\n                        \"notifications.deleteSuccess\",\n                        {\n                            resource: translate(\n                                `${resource}.${resource}`,\n                                resource,\n                            ),\n                        },\n                        `Successfully deleted ${resource}`,\n                    ),\n                    type: \"success\",\n                });\n\n                publish?.({\n                    channel: `resources/${resource}`,\n                    type: \"deleted\",\n                    payload: { ids },\n                    date: new Date(),\n                });\n\n                // Remove the queries from the cache:\n                ids.forEach((id) =>\n                    queryClient.removeQueries(context?.queryKey.detail(id)),\n                );\n            },\n            onError: (err, { ids, resource, errorNotification }, context) => {\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 = pluralize.singular(resource);\n\n                    const notificationConfig =\n                        typeof errorNotification === \"function\"\n                            ? errorNotification(err, ids, resource)\n                            : errorNotification;\n\n                    handleNotification(notificationConfig, {\n                        key: `${ids}-${resource}-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            ...mutationOptions,\n        },\n    );\n\n    return mutation;\n};\n","import { useDataProvider } from \"@hooks\";\n\nexport const useApiUrl = (dataProviderName?: string): string => {\n    const dataProvider = useDataProvider();\n\n    const { getApiUrl } = dataProvider(dataProviderName);\n\n    return getApiUrl();\n};\n","import {\n    QueryObserverResult,\n    useQuery,\n    UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nimport {\n    CustomResponse,\n    CrudSorting,\n    CrudFilters,\n    BaseRecord,\n    HttpError,\n    MetaDataQuery,\n    SuccessErrorNotification,\n} from \"../../interfaces\";\nimport {\n    useTranslate,\n    useCheckError,\n    useHandleNotification,\n    useDataProvider,\n} from \"@hooks\";\n\ninterface UseCustomConfig<TQuery, TPayload> {\n    sort?: CrudSorting;\n    filters?: CrudFilters;\n    query?: TQuery;\n    payload?: TPayload;\n    headers?: {};\n}\n\nexport type UseCustomProps<TData, TError, TQuery, TPayload> = {\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 sort using this field\n     */\n    config?: UseCustomConfig<TQuery, TPayload>;\n    /**\n     * react-query's [useQuery](https://tanstack.com/query/v4/docs/reference/useQuery) options\"\n     */\n    queryOptions?: UseQueryOptions<CustomResponse<TData>, TError>;\n    /**\n     * Metadata query for `dataProvider`\n     */\n    metaData?: MetaDataQuery;\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\n/**\n * `useCustom` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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/core/hooks/data/useCustom} 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 TQuery - Values for query params\n * @typeParam TPayload - Values for params\n *\n */\nexport const useCustom = <\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n    TQuery = unknown,\n    TPayload = unknown,\n>({\n    url,\n    method,\n    config,\n    queryOptions,\n    successNotification,\n    errorNotification,\n    metaData,\n    dataProviderName,\n}: UseCustomProps<TData, TError, TQuery, TPayload>): QueryObserverResult<\n    CustomResponse<TData>,\n    TError\n> => {\n    const dataProvider = useDataProvider();\n\n    const { custom } = dataProvider(dataProviderName);\n    const { mutate: checkError } = useCheckError();\n    const translate = useTranslate();\n    const handleNotification = useHandleNotification();\n\n    if (custom) {\n        const queryResponse = useQuery<CustomResponse<TData>, TError>(\n            [\n                dataProviderName,\n                \"custom\",\n                method,\n                url,\n                { ...config, ...metaData },\n            ],\n            ({ queryKey, pageParam, signal }) =>\n                custom<TData>({\n                    url,\n                    method,\n                    ...config,\n                    metaData: {\n                        ...metaData,\n                        queryContext: {\n                            queryKey,\n                            pageParam,\n                            signal,\n                        },\n                    },\n                }),\n            {\n                ...queryOptions,\n                onSuccess: (data) => {\n                    queryOptions?.onSuccess?.(data);\n\n                    const notificationConfig =\n                        typeof successNotification === \"function\"\n                            ? successNotification(data, {\n                                  ...config,\n                                  ...metaData,\n                              })\n                            : successNotification;\n\n                    handleNotification(notificationConfig);\n                },\n                onError: (err: TError) => {\n                    checkError(err);\n                    queryOptions?.onError?.(err);\n\n                    const notificationConfig =\n                        typeof errorNotification === \"function\"\n                            ? errorNotification(err, { ...config, ...metaData })\n                            : errorNotification;\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            },\n        );\n        return queryResponse;\n    } else {\n        throw Error(\"Not implemented custom on data provider.\");\n    }\n};\n","import {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n} from \"@tanstack/react-query\";\n\nimport {\n    useCheckError,\n    useDataProvider,\n    useHandleNotification,\n    useTranslate,\n} from \"@hooks\";\nimport {\n    CreateResponse,\n    BaseRecord,\n    HttpError,\n    SuccessErrorNotification,\n    MetaDataQuery,\n} from \"../../interfaces\";\n\ninterface UseCustomMutationConfig {\n    headers?: {};\n}\n\ntype useCustomMutationParams<TVariables> = {\n    url: string;\n    method: \"post\" | \"put\" | \"patch\" | \"delete\";\n    values: TVariables;\n    metaData?: MetaDataQuery;\n    dataProviderName?: string;\n    config?: UseCustomMutationConfig;\n} & SuccessErrorNotification;\n\nexport type UseCustomMutationReturnType<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n    TVariables = {},\n> = UseMutationResult<\n    CreateResponse<TData>,\n    TError,\n    useCustomMutationParams<TVariables>,\n    unknown\n>;\n\nexport type UseCustomMutationProps<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n    TVariables = {},\n> = {\n    mutationOptions?: Omit<\n        UseMutationOptions<\n            CreateResponse<TData>,\n            TError,\n            useCustomMutationParams<TVariables>,\n            unknown\n        >,\n        \"mutationFn\" | \"onError\" | \"onSuccess\"\n    >;\n};\n\n/**\n * `useCustomMutation` is a modified version of `react-query`'s {@link https://react-query.tanstack.com/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-references/hooks/data/useCustomMutation} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/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}: UseCustomMutationProps<\n    TData,\n    TError,\n    TVariables\n> = {}): UseCustomMutationReturnType<TData, TError, TVariables> => {\n    const { mutate: checkError } = useCheckError();\n    const handleNotification = useHandleNotification();\n    const dataProvider = useDataProvider();\n    const translate = useTranslate();\n\n    const mutation = useMutation<\n        CreateResponse<TData>,\n        TError,\n        useCustomMutationParams<TVariables>,\n        unknown\n    >(\n        ({\n            url,\n            method,\n            values,\n            metaData,\n            dataProviderName,\n            config,\n        }: useCustomMutationParams<TVariables>) => {\n            const { custom } = dataProvider(dataProviderName);\n\n            if (custom) {\n                return custom<TData>({\n                    url,\n                    method,\n                    payload: values,\n                    metaData,\n                    headers: { ...config?.headers },\n                });\n            }\n\n            throw Error(\"Not implemented custom on data provider.\");\n        },\n        {\n            onSuccess: (\n                data,\n                {\n                    successNotification: successNotificationFromProp,\n                    config,\n                    metaData,\n                },\n            ) => {\n                const notificationConfig =\n                    typeof successNotificationFromProp === \"function\"\n                        ? successNotificationFromProp(data, {\n                              ...config,\n                              ...metaData,\n                          })\n                        : successNotificationFromProp;\n\n                handleNotification(notificationConfig);\n            },\n            onError: (\n                err: TError,\n                {\n                    errorNotification: errorNotificationFromProp,\n                    method,\n                    config,\n                    metaData,\n                },\n            ) => {\n                checkError(err);\n\n                const notificationConfig =\n                    typeof errorNotificationFromProp === \"function\"\n                        ? errorNotificationFromProp(err, {\n                              ...config,\n                              ...metaData,\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,\n        },\n    );\n\n    return mutation;\n};\n","import { useCallback, useContext } from \"react\";\n\nimport { DataContext } from \"@contexts/data\";\nimport {\n    IDataContextProvider,\n    IDataMultipleContextProvider,\n} from \"../../interfaces\";\n\nexport const useDataProvider = (): ((\n    /**\n     * The name of the `data provider` you want to access\n     */\n    dataProviderName?: string,\n) => IDataContextProvider) => {\n    const context = useContext<IDataMultipleContextProvider>(DataContext);\n\n    const handleDataProvider = useCallback(\n        (dataProviderName?: string) => {\n            if (dataProviderName) {\n                const dataProvider = context[dataProviderName];\n                if (!dataProvider) {\n                    throw new Error(\n                        `\"${dataProviderName}\" Data provider not found`,\n                    );\n                }\n                return context[dataProviderName];\n            }\n            if (context.default) {\n                return context.default;\n            } else\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 from \"react\";\nimport { ReactNode } from \"react\";\n\nimport {\n    IDataContextProvider,\n    IDataMultipleContextProvider,\n} from \"../../interfaces\";\n\nexport const defaultDataProvider = () => {\n    return {\n        default: {\n            create: () => Promise.resolve({ data: { id: 1 } }),\n            createMany: () => Promise.resolve({ data: [] }),\n            deleteOne: () => Promise.resolve({ data: { id: 1 } }),\n            deleteMany: () => Promise.resolve({ data: [] }),\n            getList: () => Promise.resolve({ data: [], total: 0 }),\n            getMany: () => Promise.resolve({ data: [] }),\n            getOne: () => Promise.resolve({ data: { id: 1 } }),\n            update: () => Promise.resolve({ data: { id: 1 } }),\n            updateMany: () => Promise.resolve({ data: [] }),\n            custom: () => Promise.resolve({ data: {} }),\n            getApiUrl: () => \"\",\n        },\n    };\n};\n\nexport const DataContext = React.createContext<IDataMultipleContextProvider>(\n    defaultDataProvider() as IDataMultipleContextProvider,\n);\n\nexport const DataContextProvider: React.FC<\n    | IDataMultipleContextProvider\n    | (IDataContextProvider & {\n          children: ReactNode;\n      })\n> = ({ children, ...rest }) => {\n    let dataProviders;\n    if (!rest.getList || !rest.getOne) {\n        dataProviders = rest as IDataMultipleContextProvider;\n    } else {\n        dataProviders = {\n            default: rest,\n        } as IDataMultipleContextProvider;\n    }\n    return (\n        <DataContext.Provider value={dataProviders}>\n            {children}\n        </DataContext.Provider>\n    );\n};\n","import {\n    useInfiniteQuery,\n    UseInfiniteQueryOptions,\n    InfiniteQueryObserverResult,\n} from \"@tanstack/react-query\";\nimport {\n    CrudFilters,\n    Pagination,\n    BaseRecord,\n    HttpError,\n    CrudSorting,\n    MetaDataQuery,\n    SuccessErrorNotification,\n    LiveModeProps,\n    GetListResponse,\n} from \"../../interfaces\";\nimport {\n    useResource,\n    useCheckError,\n    useHandleNotification,\n    useResourceSubscription,\n    useTranslate,\n    useDataProvider,\n} from \"@hooks\";\nimport {\n    queryKeys,\n    pickDataProvider,\n    getNextPageParam,\n    getPreviousPageParam,\n} from \"@definitions/helpers\";\n\nexport interface UseInfiniteListConfig {\n    pagination?: Pagination;\n    hasPagination?: boolean;\n    sort?: CrudSorting;\n    filters?: CrudFilters;\n}\n\nexport type UseInfiniteListProps<TData, TError> = {\n    /**\n     * Resource name for API data interactions\n     */\n    resource: string;\n    /**\n     * Configuration for pagination, sorting and filtering\n     * @type [`useInfiniteListConfig`](/docs/api-reference/core/hooks/data/useInfiniteList/#config-parameters)\n     */\n    config?: UseInfiniteListConfig;\n    /**\n     * react-query's [useInfiniteQuery](https://tanstack.com/query/v4/docs/react/reference/useInfiniteQuery) options,\n     */\n    queryOptions?: UseInfiniteQueryOptions<GetListResponse<TData>, TError>;\n    /**\n     *  Metadata query for `dataProvider`\n     */\n    metaData?: MetaDataQuery;\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    LiveModeProps;\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/core/hooks/data/useInfiniteList} 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 *\n */\nexport const useInfiniteList = <\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n>({\n    resource,\n    config,\n    queryOptions,\n    successNotification,\n    errorNotification,\n    metaData,\n    liveMode,\n    onLiveEvent,\n    liveParams,\n    dataProviderName,\n}: UseInfiniteListProps<TData, TError>): InfiniteQueryObserverResult<\n    GetListResponse<TData>,\n    TError\n> => {\n    const { resources } = useResource();\n    const dataProvider = useDataProvider();\n    const queryKey = queryKeys(\n        resource,\n        pickDataProvider(resource, dataProviderName, resources),\n        metaData,\n    );\n    const { getList } = dataProvider(\n        pickDataProvider(resource, dataProviderName, resources),\n    );\n\n    const translate = useTranslate();\n    const { mutate: checkError } = useCheckError();\n    const handleNotification = useHandleNotification();\n\n    const isEnabled =\n        queryOptions?.enabled === undefined || queryOptions?.enabled === true;\n\n    useResourceSubscription({\n        resource,\n        types: [\"*\"],\n        params: {\n            metaData,\n            pagination: config?.pagination,\n            hasPagination: config?.hasPagination,\n            sort: config?.sort,\n            filters: config?.filters,\n            subscriptionType: \"useList\",\n            ...liveParams,\n        },\n        channel: `resources/${resource}`,\n        enabled: isEnabled,\n        liveMode,\n        onLiveEvent,\n    });\n\n    const queryResponse = useInfiniteQuery<GetListResponse<TData>, TError>(\n        queryKey.list(config),\n        ({ queryKey, pageParam, signal }) => {\n            const { hasPagination, ...restConfig } = config || {};\n            const pagination = {\n                ...config?.pagination,\n                current: pageParam,\n            };\n\n            return getList<TData>({\n                resource,\n                ...restConfig,\n                pagination,\n                hasPagination,\n                metaData: {\n                    ...metaData,\n                    queryContext: {\n                        queryKey,\n                        pageParam,\n                        signal,\n                    },\n                },\n            }).then(({ data, total, ...rest }) => {\n                return {\n                    data,\n                    total,\n                    pagination,\n                    ...rest,\n                };\n            });\n        },\n        {\n            getNextPageParam: (lastPage) => getNextPageParam(lastPage),\n            getPreviousPageParam: (lastPage) => getPreviousPageParam(lastPage),\n            ...queryOptions,\n            onSuccess: (data) => {\n                queryOptions?.onSuccess?.(data);\n\n                const notificationConfig =\n                    typeof successNotification === \"function\"\n                        ? successNotification(\n                              data,\n                              { metaData, config },\n                              resource,\n                          )\n                        : successNotification;\n\n                handleNotification(notificationConfig);\n            },\n            onError: (err: TError) => {\n                checkError(err);\n                queryOptions?.onError?.(err);\n\n                const notificationConfig =\n                    typeof errorNotification === \"function\"\n                        ? errorNotification(err, { metaData, config }, resource)\n                        : errorNotification;\n\n                handleNotification(notificationConfig, {\n                    key: `${resource}-useInfiniteList-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        },\n    );\n\n    return queryResponse;\n};\n","import { useContext, useEffect } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n    BaseKey,\n    CrudFilters,\n    CrudSorting,\n    ILiveContext,\n    IRefineContext,\n    LiveEvent,\n    LiveModeProps,\n    MetaDataQuery,\n    Pagination,\n} from \"../../../interfaces\";\nimport { LiveContext } from \"@contexts/live\";\nimport { RefineContext } from \"@contexts/refine\";\nimport { queryKeys } from \"@definitions\";\n\nexport type UseResourceSubscriptionProps = {\n    channel: string;\n    params?: {\n        ids?: BaseKey[];\n        id?: BaseKey;\n        metaData?: MetaDataQuery;\n        pagination?: Pagination;\n        hasPagination?: boolean;\n        sort?: CrudSorting;\n        filters?: CrudFilters;\n        subscriptionType: \"useList\" | \"useOne\" | \"useMany\";\n        [key: string]: any;\n    };\n    types: LiveEvent[\"type\"][];\n    resource: string;\n    enabled?: boolean;\n} & LiveModeProps;\n\nexport type PublishType = {\n    (event: LiveEvent): void;\n};\n\nexport const useResourceSubscription = ({\n    resource,\n    params,\n    channel,\n    types,\n    enabled = true,\n    liveMode: liveModeFromProp,\n    onLiveEvent,\n}: UseResourceSubscriptionProps): void => {\n    const queryClient = useQueryClient();\n    const queryKey = queryKeys(resource);\n\n    const liveDataContext = useContext<ILiveContext>(LiveContext);\n    const {\n        liveMode: liveModeFromContext,\n        onLiveEvent: onLiveEventContextCallback,\n    } = useContext<IRefineContext>(RefineContext);\n\n    const liveMode = liveModeFromProp ?? liveModeFromContext;\n\n    useEffect(() => {\n        let subscription: any;\n\n        if (liveMode && liveMode !== \"off\" && enabled) {\n            subscription = liveDataContext?.subscribe({\n                channel,\n                params: {\n                    resource,\n                    ...params,\n                },\n                types,\n                callback: (event) => {\n                    if (liveMode === \"auto\") {\n                        queryClient.invalidateQueries(queryKey.resourceAll);\n                    }\n\n                    onLiveEvent?.(event);\n                    onLiveEventContextCallback?.(event);\n                },\n            });\n        }\n\n        return () => {\n            if (subscription) {\n                liveDataContext?.unsubscribe(subscription);\n            }\n        };\n    }, [enabled]);\n};\n","import React from \"react\";\n\nimport { ILiveContext, ILiveContextProvider } from \"./ILiveContext\";\n\nexport const LiveContext = React.createContext<ILiveContext>(undefined);\n\nexport const LiveContextProvider: React.FC<ILiveContextProvider> = ({\n    liveProvider,\n    children,\n}) => {\n    return (\n        <LiveContext.Provider value={liveProvider}>\n            {children}\n        </LiveContext.Provider>\n    );\n};\n","import { useContext } from \"react\";\nimport { LiveModeProps, IRefineContext } from \"../../../interfaces\";\nimport { RefineContext } from \"@contexts/refine\";\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\";\nimport {\n    BaseKey,\n    CrudFilters,\n    CrudSorting,\n    ILiveContext,\n    LiveEvent,\n    MetaDataQuery,\n    Pagination,\n} from \"../../../interfaces\";\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        metaData?: MetaDataQuery;\n        pagination?: Pagination;\n        hasPagination?: boolean;\n        sort?: CrudSorting;\n        filters?: CrudFilters;\n        subscriptionType?: \"useList\" | \"useOne\" | \"useMany\";\n        resource?: string;\n        [key: string]: any;\n    };\n};\n\nexport const useSubscription = ({\n    params,\n    channel,\n    types = [\"*\"],\n    enabled = true,\n    onLiveEvent,\n}: UseSubscriptionProps): void => {\n    const liveDataContext = useContext<ILiveContext>(LiveContext);\n\n    useEffect(() => {\n        let subscription: any;\n\n        if (enabled) {\n            subscription = liveDataContext?.subscribe({\n                channel,\n                params,\n                types,\n                callback: onLiveEvent,\n            });\n        }\n\n        return () => {\n            if (subscription) {\n                liveDataContext?.unsubscribe(subscription);\n            }\n        };\n    }, [enabled]);\n};\n","import { useContext } from \"react\";\n\nimport { LiveContext } from \"@contexts/live\";\nimport { ILiveContext } from \"../../../interfaces\";\n\nexport const usePublish: () => NonNullable<ILiveContext>[\"publish\"] = () => {\n    const liveContext = useContext<ILiveContext>(LiveContext);\n\n    return liveContext?.publish;\n};\n","import { useContext } from \"react\";\n\nimport { ResourceContext } from \"@contexts/resource\";\nimport {\n    BaseKey,\n    IResourceItem,\n    ResourceRouterParams,\n    RouteAction,\n} from \"../../../interfaces\";\nimport { useRouterContext, useResourceWithRoute } from \"@hooks\";\n\nexport type UseResourcePropsType = {\n    /**\n     * Determines which resource to use for redirection\n     * @deprecated resourceName deprecated. Use resourceNameOrRouteName instead # https://github.com/refinedev/refine/issues/1618\n     */\n    resourceName?: string;\n    /**\n     * Determines which resource to use for redirection\n     * @default Resource name that it reads from route\n     */\n    resourceNameOrRouteName?: string;\n    /**\n     * Adds id to the end of the URL\n     * @deprecated resourceName deprecated. Use resourceNameOrRouteName instead # https://github.com/refinedev/refine/issues/1618\n     */\n    recordItemId?: BaseKey;\n};\n\ntype UseResourceReturnType = {\n    resources: IResourceItem[];\n    resource: IResourceItem;\n    resourceName: string;\n    id?: BaseKey;\n    action: RouteAction;\n};\n\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/core/hooks/resource/useResource} for more details.\n */\nexport const useResource = ({\n    resourceName: propResourceName,\n    resourceNameOrRouteName,\n    recordItemId,\n}: UseResourcePropsType = {}): UseResourceReturnType => {\n    const { resources } = useContext(ResourceContext);\n\n    const resourceWithRoute = useResourceWithRoute();\n\n    const { useParams } = useRouterContext();\n\n    const params = useParams<ResourceRouterParams>();\n\n    const resource = resourceWithRoute(\n        resourceNameOrRouteName ?? params.resource,\n    );\n\n    const resourceName = propResourceName ?? resource.name;\n\n    const id = recordItemId ?? params.id;\n\n    return { resources, resource, resourceName, id, action: params.action };\n};\n","import React, { ReactNode } from \"react\";\n\nimport { IResourceContext } from \"./IResourceContext\";\n\nexport {\n    IResourceItem,\n    IResourceComponents,\n    IResourceComponentsProps,\n    IResourceContext,\n} from \"./IResourceContext\";\n\nexport const ResourceContext = React.createContext<IResourceContext>({\n    resources: [],\n});\n\nexport const ResourceContextProvider: React.FC<\n    IResourceContext & { children: ReactNode }\n> = ({ resources, children }) => {\n    return (\n        <ResourceContext.Provider value={{ resources }}>\n            {children}\n        </ResourceContext.Provider>\n    );\n};\n","import { useContext, useCallback } from \"react\";\nimport { ResourceContext } from \"@contexts/resource\";\nimport { IResourceItem } from \"../../../interfaces\";\n\nexport type UseResourceWithRouteReturnType = (route: string) => IResourceItem;\n\nexport const useResourceWithRoute = (): UseResourceWithRouteReturnType => {\n    const { resources } = useContext(ResourceContext);\n\n    const resourceWithRoute = useCallback(\n        (route: string) => {\n            const resource = resources.find((p) => p.route === route);\n\n            if (!resource) {\n                const resourceWithName = resources.find(\n                    (p) => p.name === route,\n                );\n                return (\n                    resourceWithName ??\n                    ({ name: route, route: route } as IResourceItem)\n                );\n            }\n            return resource;\n        },\n        [resources],\n    );\n\n    return resourceWithRoute;\n};\n","import { useContext } from \"react\";\n\nimport { UndoableQueueContext } from \"@contexts/undoableQueue\";\nimport { IUndoableQueue, IUndoableQueueContext } from \"../../../interfaces\";\n\nexport type UseCancelNotificationType = () => {\n    notifications: IUndoableQueue[];\n    notificationDispatch: React.Dispatch<any>;\n};\n\nexport const useCancelNotification: UseCancelNotificationType = () => {\n    const { notifications, notificationDispatch } =\n        useContext<IUndoableQueueContext>(UndoableQueueContext);\n\n    return { notifications, notificationDispatch };\n};\n","import { useContext } from \"react\";\n\nimport { NotificationContext } from \"@contexts/notification\";\nimport { INotificationContext } from \"../../../interfaces\";\n\nexport const useNotification = (): INotificationContext => {\n    const { open, close } = useContext(NotificationContext);\n\n    return { open, close };\n};\n","import React, { createContext } from \"react\";\n\nimport { INotificationContext } from \"./INotificationContext\";\n\n/** @deprecated default value for notification context has no use and is an empty object.  */\nexport const defaultNotificationProvider: INotificationContext = {};\n\nexport const NotificationContext = createContext<INotificationContext>({});\n\nexport const NotificationContextProvider: React.FC<\n    INotificationContext & {\n        children?: React.ReactNode;\n    }\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 { OpenNotificationParams } from \"../../../interfaces\";\nimport { useNotification } from \"@hooks\";\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\";\nimport { TranslationContext } from \"@contexts/translation\";\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/core/hooks/translate/useSetLocale} for more details.\n */\nexport const useSetLocale = () => {\n    const { i18nProvider } = useContext(TranslationContext);\n\n    return useCallback((lang: string) => i18nProvider?.changeLocale(lang), []);\n};\n","import React from \"react\";\n\nimport { ITranslationContext } from \"../../interfaces\";\n\n/** @deprecated default value for translation context has no use and is an empty object.  */\nexport const defaultProvider: ITranslationContext = {};\n\nexport const TranslationContext = React.createContext<ITranslationContext>({});\n\nexport const TranslationContextProvider: React.FC<\n    ITranslationContext & {\n        children?: React.ReactNode;\n    }\n> = ({ children, i18nProvider }) => {\n    return (\n        <TranslationContext.Provider\n            value={{\n                i18nProvider: i18nProvider,\n            }}\n        >\n            {children}\n        </TranslationContext.Provider>\n    );\n};\n","import { useContext, useMemo } from \"react\";\nimport { TranslationContext } from \"@contexts/translation\";\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/core/hooks/translate/useTranslate} for more details.\n */\nexport const useTranslate = () => {\n    const { i18nProvider } = useContext(TranslationContext);\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\" &&\n                typeof defaultMessage === \"undefined\"\n                    ? options\n                    : key)\n            );\n        }\n\n        return translate;\n    }, [i18nProvider]);\n\n    return fn;\n};\n","import { useContext, useCallback } from \"react\";\nimport { TranslationContext } from \"@contexts/translation\";\n\nexport type UseGetLocaleType = () => () => string | undefined;\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/core/hooks/translate/useGetLocale} for more details.\n */\nexport const useGetLocale: UseGetLocaleType = () => {\n    const { i18nProvider } = useContext(TranslationContext);\n\n    return useCallback(() => i18nProvider?.getLocale(), []);\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\nimport { IRefineContextOptions } from \"../../interfaces\";\n\ntype UseMutationModeType = () => {\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    const { mutationMode, undoableTimeout } = useContext(RefineContext);\n\n    return { mutationMode, undoableTimeout };\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\nimport { UnsavedWarnContext } from \"@contexts/unsavedWarn\";\nimport {\n    IRefineContextOptions,\n    IUnsavedWarnContext,\n} from \"../../../interfaces\";\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-references/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, { ReactNode, useState } from \"react\";\n\nimport { IUnsavedWarnContext } from \"./IUnsavedWarnContext\";\n\nexport const UnsavedWarnContext = React.createContext<IUnsavedWarnContext>({});\n\nexport const UnsavedWarnContextProvider: React.FC<{ children: ReactNode }> = ({\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 { IRefineContextOptions } from \"../../interfaces\";\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-references/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\";\nimport { RefineContext } from \"@contexts/refine\";\nimport { TitleProps } from \"../../interfaces\";\n\n/**\n * `useTitle` returns a component that calls the `<Title>` passed to the `<Refine>`.\n * In this way, it becomes easier for us to access this component in various parts of the application.\n *\n * @see {@link https://refine.dev/docs/core/hooks/refine/useTitle} for more details.\n */\nexport const useTitle: () => React.FC<TitleProps> | undefined = () => {\n    const { Title } = useContext(RefineContext);\n\n    return Title;\n};\n","import { useContext } from \"react\";\n\nimport { RefineContext } from \"@contexts/refine\";\n\nexport const useRefineContext = () => {\n    const {\n        Footer,\n        Header,\n        Layout,\n        OffLayoutArea,\n        Sider,\n        Title,\n        hasDashboard,\n        mutationMode,\n        syncWithLocation,\n        undoableTimeout,\n        warnWhenUnsavedChanges,\n        DashboardPage,\n        LoginPage,\n        catchAll,\n        options,\n    } = useContext(RefineContext);\n\n    return {\n        Footer,\n        Header,\n        Layout,\n        OffLayoutArea,\n        Sider,\n        Title,\n        hasDashboard,\n        mutationMode,\n        syncWithLocation,\n        undoableTimeout,\n        warnWhenUnsavedChanges,\n        DashboardPage,\n        LoginPage,\n        catchAll,\n        options,\n    };\n};\n","import { useState } from \"react\";\nimport {\n    useResource,\n    useResourceWithRoute,\n    useRouterContext,\n    useDataProvider,\n} from \"@hooks\";\nimport {\n    ResourceRouterParams,\n    BaseRecord,\n    MapDataFn,\n    CrudSorting,\n    CrudFilters,\n    MetaDataQuery,\n} from \"../../interfaces\";\nimport { userFriendlyResourceName, pickDataProvider } from \"@definitions\";\nimport { ExportToCsv, Options } from \"export-to-csv-fix-source-map\";\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    resourceName?: 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    sorter?: CrudSorting;\n    /**\n     *  Filters records\n     */\n    filters?: CrudFilters;\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 [Options](https://github.com/alexcaza/export-to-csv)\n     */\n    exportOptions?: Options;\n    /**\n     *  Metadata query for `dataProvider`\n     */\n    metaData?: MetaDataQuery;\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\ntype UseExportReturnType = {\n    isLoading: boolean;\n    triggerExport: () => Promise<void>;\n};\n\n/**\n * `useExport` hook allows you to make your resources exportable.\n *\n * @see {@link https://refine.dev/docs/core/hooks/import-export/useExport} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TVariables - Values for params.\n *\n */\nexport const useExport = <\n    TData extends BaseRecord = BaseRecord,\n    TVariables = any,\n>({\n    resourceName,\n    sorter,\n    filters,\n    maxItemCount,\n    pageSize = 20,\n    mapData = (item) => item as any,\n    exportOptions,\n    metaData,\n    dataProviderName,\n    onError,\n}: UseExportOptionsType<TData, TVariables> = {}): UseExportReturnType => {\n    const [isLoading, setIsLoading] = useState(false);\n\n    const { resources } = useResource();\n\n    const resourceWithRoute = useResourceWithRoute();\n    const dataProvider = useDataProvider();\n\n    const { useParams } = useRouterContext();\n\n    const { resource: routeResourceName } = useParams<ResourceRouterParams>();\n    let { name: resource } = resourceWithRoute(routeResourceName);\n\n    if (resourceName) {\n        resource = resourceName;\n    }\n\n    const filename = `${userFriendlyResourceName(\n        resource,\n        \"plural\",\n    )}-${new Date().toLocaleString()}`;\n\n    const { getList } = dataProvider(\n        pickDataProvider(resource, dataProviderName, resources),\n    );\n\n    const triggerExport = async () => {\n        setIsLoading(true);\n\n        let rawData: BaseRecord[] = [];\n\n        let current = 1;\n        let preparingData = true;\n        while (preparingData) {\n            try {\n                const { data, total } = await getList<TData>({\n                    resource,\n                    filters,\n                    sort: sorter,\n                    pagination: {\n                        current,\n                        pageSize,\n                    },\n                    metaData,\n                });\n\n                current++;\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        const csvExporter = new ExportToCsv({\n            filename,\n            useKeysAsHeaders: true,\n            ...exportOptions,\n        });\n\n        csvExporter.generateCsv(rawData.map(mapData as any));\n\n        setIsLoading(false);\n    };\n\n    return {\n        isLoading,\n        triggerExport,\n    };\n};\n","import React, { Dispatch, SetStateAction } from \"react\";\nimport { QueryObserverResult, UseQueryOptions } from \"@tanstack/react-query\";\n\nimport {\n    useResourceWithRoute,\n    useRouterContext,\n    useWarnAboutChange,\n    useCreate,\n    useUpdate,\n    useRedirectionAfterSubmission,\n    useMutationMode,\n    useOne,\n    useRefineContext,\n} from \"@hooks\";\n\nimport {\n    BaseRecord,\n    CreateResponse,\n    GetOneResponse,\n    HttpError,\n    LiveModeProps,\n    ResourceRouterParams,\n    RedirectAction,\n    SuccessErrorNotification,\n    MetaDataQuery,\n    UpdateResponse,\n    MutationMode,\n    BaseKey,\n    IQueryKeys,\n    FormAction,\n} from \"../../interfaces\";\nimport {\n    UpdateParams,\n    UseUpdateProps,\n    UseUpdateReturnType,\n} from \"../data/useUpdate\";\nimport { UseCreateProps, UseCreateReturnType } from \"../data/useCreate\";\nimport { redirectPage } from \"@definitions/helpers\";\n\nexport type ActionParams = {\n    /**\n     * Type of the form mode\n     * @default Action that it reads from route otherwise \"create\" is used\n     */\n    action?: FormAction;\n};\n\ntype ActionFormProps<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n    TVariables = {},\n> = {\n    /**\n     * Resource name for API data interactions\n     * @default Resource name that it reads from route\n     */\n    resource?: string;\n    /**\n     * Record id for fetching\n     * @default Id that it reads from the URL\n     */\n    id?: BaseKey;\n    /**\n     * Page to redirect after a succesfull mutation\n     * @type `\"show\" | \"edit\" | \"list\" | \"create\" | false`\n     * @default `\"list\"`\n     */\n    redirect?: RedirectAction;\n    /**\n     * Metadata query for dataProvider\n     */\n    metaData?: MetaDataQuery;\n    /**\n     * [Determines when mutations are executed](/advanced-tutorials/mutation-mode.md)\n     * @default `\"pessimistic\"*`\n     */\n    mutationMode?: MutationMode;\n    /**\n     * Called when a mutation is successful\n     */\n    onMutationSuccess?: (\n        data: CreateResponse<TData> | UpdateResponse<TData>,\n        variables: TVariables,\n        context: any,\n    ) => void;\n    /**\n     * Called when a mutation encounters an error\n     */\n    onMutationError?: (\n        error: TError,\n        variables: TVariables,\n        context: any,\n    ) => void;\n    /**\n     * Duration to wait before executing mutations when `mutationMode = \"undoable\"`\n     * @default `5000*`\n     */\n    undoableTimeout?: number;\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     * @type  `all`, `resourceAll`, `list`, `many`, `detail`, `false`\n     * @default `[\"list\", \"many\", \"detail\"]`\n     */\n    invalidates?: Array<keyof IQueryKeys>;\n    /**\n     * react-query's [useQuery](https://tanstack.com/query/v4/docs/reference/useQuery) options of useOne hook used while in edit mode.\n     */\n    queryOptions?: UseQueryOptions<GetOneResponse<TData>, HttpError>;\n    /**\n     * react-query's [useMutation](https://tanstack.com/query/v4/docs/reference/useMutation) options of useCreate hook used while submitting in create and clone modes.\n     */\n    createMutationOptions?: UseCreateProps<\n        TData,\n        TError,\n        TVariables\n    >[\"mutationOptions\"];\n    /**\n     * react-query's [useMutation](https://tanstack.com/query/v4/docs/reference/useMutation) options of useUpdate hook used while submitting in edit mode.\n     */\n    updateMutationOptions?: UseUpdateProps<\n        TData,\n        TError,\n        TVariables\n    >[\"mutationOptions\"];\n} & SuccessErrorNotification &\n    ActionParams &\n    LiveModeProps;\n\nexport type UseFormProps<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n    TVariables = {},\n> = ActionFormProps<TData, TError, TVariables> & ActionParams & LiveModeProps;\n\nexport type UseFormReturnType<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n    TVariables = {},\n> = {\n    id?: BaseKey;\n    setId: Dispatch<SetStateAction<BaseKey | undefined>>;\n\n    queryResult?: QueryObserverResult<GetOneResponse<TData>>;\n    mutationResult:\n        | UseUpdateReturnType<TData, TError, TVariables>\n        | UseCreateReturnType<TData, TError, TVariables>;\n    formLoading: boolean;\n    onFinish: (\n        values: TVariables,\n    ) => Promise<CreateResponse<TData> | UpdateResponse<TData> | void>;\n    redirect: (\n        redirect: RedirectAction,\n        idFromFunction?: BaseKey | undefined,\n    ) => void;\n};\n\n/**\n * `useForm` is used to manage forms. It uses Ant Design {@link https://ant.design/components/form/ Form} data scope management under the hood and returns the required props for managing the form actions.\n *\n * @see {@link https://refine.dev/docs/api-references/hooks/form/useForm} for more details.\n *\n * @typeParam TData - Result data of the query extends {@link https://refine.dev/docs/api-references/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/interfaceReferences#httperror `HttpError`}\n * @typeParam TVariables - Values for params. default `{}`\n *\n *\n */\nexport const useForm = <\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n    TVariables = {},\n>({\n    resource: resourceFromProps,\n    action: actionFromProps,\n    id: idFromProps,\n    onMutationSuccess,\n    onMutationError,\n    redirect: redirectFromProps,\n    successNotification,\n    errorNotification,\n    metaData,\n    mutationMode: mutationModeProp,\n    liveMode,\n    onLiveEvent,\n    liveParams,\n    undoableTimeout,\n    dataProviderName,\n    invalidates,\n    queryOptions,\n    createMutationOptions,\n    updateMutationOptions,\n}: UseFormProps<TData, TError, TVariables> = {}): UseFormReturnType<\n    TData,\n    TError,\n    TVariables\n> => {\n    const { options } = useRefineContext();\n    const { useParams } = useRouterContext();\n    const {\n        resource: resourceFromRoute,\n        action: actionFromRoute,\n        id: idFromParams,\n    } = useParams<ResourceRouterParams>();\n\n    const defaultId =\n        !resourceFromProps || resourceFromProps === resourceFromRoute\n            ? idFromProps ?? idFromParams\n            : idFromProps;\n\n    // id state is needed to determine selected record in a context for example useModal\n    const [id, setId] = React.useState<BaseKey | undefined>(defaultId);\n\n    React.useEffect(() => {\n        if (defaultId !== id) {\n            setId(idFromProps);\n        }\n    }, [idFromProps]);\n\n    const resourceName = resourceFromProps ?? resourceFromRoute;\n    const action =\n        actionFromProps ??\n        (actionFromRoute === \"show\" ? \"create\" : actionFromRoute) ??\n        \"create\";\n\n    const resourceWithRoute = useResourceWithRoute();\n    const resource = resourceWithRoute(resourceName);\n\n    const { mutationMode: mutationModeContext } = useMutationMode();\n    const mutationMode = mutationModeProp ?? mutationModeContext;\n\n    const isCreate = action === \"create\";\n    const isEdit = action === \"edit\";\n    const isClone = action === \"clone\";\n\n    const redirect = redirectPage({\n        redirectFromProps,\n        action,\n        redirectOptions: options.redirect,\n    });\n\n    const enableQuery = id !== undefined && (isEdit || isClone);\n\n    const queryResult = useOne<TData>({\n        resource: resource.name,\n        id: id ?? \"\",\n        queryOptions: {\n            enabled: enableQuery,\n            ...queryOptions,\n        },\n        liveMode,\n        onLiveEvent,\n        liveParams,\n        metaData,\n        dataProviderName,\n    });\n\n    const { isFetching: isFetchingQuery } = queryResult;\n\n    const mutationResultCreate = useCreate<TData, TError, TVariables>({\n        mutationOptions: createMutationOptions,\n    });\n    const { mutate: mutateCreate, isLoading: isLoadingCreate } =\n        mutationResultCreate;\n\n    const mutationResultUpdate = useUpdate<TData, TError, TVariables>({\n        mutationOptions: updateMutationOptions,\n    });\n    const { mutate: mutateUpdate, isLoading: isLoadingUpdate } =\n        mutationResultUpdate;\n\n    const { setWarnWhen } = useWarnAboutChange();\n\n    const handleSubmitWithRedirect = useRedirectionAfterSubmission();\n\n    const onFinishCreate = async (values: TVariables) => {\n        setWarnWhen(false);\n\n        const onSuccess = (id?: BaseKey) => {\n            handleSubmitWithRedirect({\n                redirect,\n                resource,\n                id,\n            });\n        };\n\n        if (mutationMode !== \"pessimistic\") {\n            setTimeout(() => {\n                onSuccess();\n            });\n        }\n\n        return new Promise<CreateResponse<TData> | void>((resolve, reject) => {\n            if (mutationMode !== \"pessimistic\") {\n                resolve();\n            }\n            return mutateCreate(\n                {\n                    values,\n                    resource: resource.name,\n                    successNotification,\n                    errorNotification,\n                    metaData,\n                    dataProviderName,\n                    invalidates,\n                },\n                {\n                    onSuccess: (data, _, context) => {\n                        if (onMutationSuccess) {\n                            onMutationSuccess(data, values, context);\n                        }\n\n                        const responseId = data?.data?.id;\n\n                        onSuccess(responseId);\n\n                        resolve(data);\n                    },\n                    onError: (error: TError, _, context) => {\n                        if (onMutationError) {\n                            return onMutationError(error, values, context);\n                        }\n                        reject();\n                    },\n                },\n            );\n        });\n    };\n\n    const onFinishUpdate = async (values: TVariables) => {\n        setWarnWhen(false);\n\n        const variables: UpdateParams<TVariables> = {\n            id: id ?? \"\",\n            values,\n            resource: resource.name,\n            mutationMode,\n            undoableTimeout,\n            successNotification,\n            errorNotification,\n            metaData,\n            dataProviderName,\n            invalidates,\n        };\n\n        const onSuccess = () => {\n            // If it is in modal mode set it to undefined. Otherwise set it to current id from route.\n            setId(defaultId);\n            handleSubmitWithRedirect({\n                redirect,\n                resource,\n                id,\n            });\n        };\n\n        // setWarnWhen is set to \"false\" at the start of the mutation. With the help of setTimeout we guarantee that the value false is set.\n        if (mutationMode !== \"pessimistic\") {\n            setTimeout(() => {\n                onSuccess();\n            });\n        }\n\n        // setTimeout is required to make onSuccess e.g. callbacks to work if component unmounts i.e. on route change\n        return new Promise<UpdateResponse<TData> | void>((resolve, reject) => {\n            if (mutationMode !== \"pessimistic\") {\n                resolve();\n            }\n            return setTimeout(() => {\n                mutateUpdate(variables, {\n                    onSuccess: (data, _, context) => {\n                        if (onMutationSuccess) {\n                            onMutationSuccess(data, values, context);\n                        }\n\n                        if (mutationMode === \"pessimistic\") {\n                            onSuccess();\n                        }\n\n                        resolve(data);\n                    },\n                    onError: (error: TError, _, context) => {\n                        if (onMutationError) {\n                            return onMutationError(error, values, context);\n                        }\n                        reject();\n                    },\n                });\n            });\n        });\n    };\n\n    const createResult = {\n        formLoading: isFetchingQuery || isLoadingCreate,\n        mutationResult: mutationResultCreate,\n        onFinish: onFinishCreate,\n    };\n\n    const editResult = {\n        formLoading: isFetchingQuery || isLoadingUpdate,\n        mutationResult: mutationResultUpdate,\n        onFinish: onFinishUpdate,\n    };\n\n    const result = isCreate || isClone ? createResult : editResult;\n\n    return {\n        ...result,\n        queryResult,\n        id,\n        setId,\n        redirect: (redirect, idFromFunction?: BaseKey | undefined) => {\n            handleSubmitWithRedirect({\n                redirect:\n                    redirect !== undefined\n                        ? redirect\n                        : isEdit\n                        ? \"list\"\n                        : \"edit\",\n                resource,\n                id: idFromFunction ?? id,\n            });\n        },\n    };\n};\n","import { useCallback } from \"react\";\n\nimport { BaseKey, IResourceItem, RedirectAction } from \"../../interfaces\";\nimport { useNavigation } from \"@hooks\";\n\nexport type UseRedirectionAfterSubmissionType = () => (options: {\n    redirect: RedirectAction;\n    resource: IResourceItem;\n    id?: BaseKey;\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            }: {\n                redirect: RedirectAction;\n                resource: IResourceItem;\n                id?: BaseKey;\n            }) => {\n                if (redirect && resource.route) {\n                    if (resource.canShow && redirect === \"show\" && id) {\n                        return show(resource.route, id);\n                    }\n\n                    if (resource.canEdit && redirect === \"edit\" && id) {\n                        return edit(resource.route, id);\n                    }\n\n                    if (resource.canCreate && redirect === \"create\") {\n                        return create(resource.route);\n                    }\n\n                    return list(resource.route, \"push\");\n                } else {\n                    return;\n                }\n            },\n            [],\n        );\n\n        return handleSubmitWithRedirect;\n    };\n","import { useResourceWithRoute, useRouterContext } from \"@hooks\";\nimport { BaseKey } from \"../../interfaces\";\n\nexport type HistoryType = \"push\" | \"replace\";\n\n/**\n * `refine` uses {@link https://reactrouter.com/web/api/Hooks `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 * @see {@link https://refine.dev/docs/core/hooks/navigation/useNavigation} for more details.\n */\nexport const useNavigation = () => {\n    const { useHistory } = useRouterContext();\n    const history = useHistory();\n    const resourceWithRoute = useResourceWithRoute();\n\n    const handleUrl = (url: string, type: HistoryType = \"push\") => {\n        type === \"push\" ? history.push(url) : history.replace(url);\n    };\n\n    const createUrl = (resource: string) => {\n        const resourceName = resourceWithRoute(resource);\n        return `/${resourceName.route}/create`;\n    };\n\n    const editUrl = (resource: string, id: BaseKey) => {\n        const resourceName = resourceWithRoute(resource);\n        const encodedId = encodeURIComponent(id);\n\n        return `/${resourceName.route}/edit/${encodedId}`;\n    };\n\n    const cloneUrl = (resource: string, id: BaseKey) => {\n        const resourceName = resourceWithRoute(resource);\n        const encodedId = encodeURIComponent(id);\n        return `/${resourceName.route}/clone/${encodedId}`;\n    };\n\n    const showUrl = (resource: string, id: BaseKey) => {\n        const resourceName = resourceWithRoute(resource);\n        const encodedId = encodeURIComponent(id);\n        return `/${resourceName.route}/show/${encodedId}`;\n    };\n\n    const listUrl = (resource: string) => {\n        const resourceName = resourceWithRoute(resource);\n        return `/${resourceName.route}`;\n    };\n\n    const create = (resource: string, type: HistoryType = \"push\") => {\n        handleUrl(createUrl(resource), type);\n    };\n\n    const edit = (\n        resource: string,\n        id: BaseKey,\n        type: HistoryType = \"push\",\n    ) => {\n        handleUrl(editUrl(resource, id), type);\n    };\n\n    const clone = (\n        resource: string,\n        id: BaseKey,\n        type: HistoryType = \"push\",\n    ) => {\n        handleUrl(cloneUrl(resource, id), type);\n    };\n\n    const show = (\n        resource: string,\n        id: BaseKey,\n        type: HistoryType = \"push\",\n    ) => {\n        handleUrl(showUrl(resource, id), type);\n    };\n\n    const list = (resource: string, type: HistoryType = \"push\") => {\n        handleUrl(listUrl(resource), type);\n    };\n\n    const push = (path: string, ...rest: unknown[]) => {\n        history.push(path, ...rest);\n    };\n\n    const replace = (path: string, ...rest: unknown[]) => {\n        history.replace(path, ...rest);\n    };\n\n    const goBack = () => {\n        history.goBack();\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        push,\n        replace,\n        goBack,\n    };\n};\n","import React, { useState } from \"react\";\nimport { QueryObserverResult, UseQueryOptions } from \"@tanstack/react-query\";\n\nimport { useOne, useResourceWithRoute, useRouterContext } from \"@hooks\";\n\nimport {\n    ResourceRouterParams,\n    BaseRecord,\n    GetOneResponse,\n    SuccessErrorNotification,\n    MetaDataQuery,\n    LiveModeProps,\n    BaseKey,\n    HttpError,\n} from \"../../interfaces\";\n\nexport type useShowReturnType<TData extends BaseRecord = BaseRecord> = {\n    queryResult: QueryObserverResult<GetOneResponse<TData>>;\n    showId?: BaseKey;\n    setShowId: React.Dispatch<React.SetStateAction<BaseKey | undefined>>;\n};\n\nexport type useShowProps<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n> = {\n    /**\n     * Resource name for API data interactions\n     * @default Reads `:resource` from the URL\n     */\n    resource?: string;\n    /**\n     * Data item ID for API data interactions\n     * @default Reads `:id` from the URL\n     */\n    id?: BaseKey;\n    /**\n     * react-query's [useQuery](https://tanstack.com/query/v4/docs/reference/useQuery) options\n     */\n    queryOptions?: UseQueryOptions<GetOneResponse<TData>, HttpError>;\n    /**\n     * Additional meta data to pass to the data provider's `getOne`\n     */\n    metaData?: MetaDataQuery;\n    /**\n     * Target data provider name for API call to be made\n     * @default `\"default\"`\n     */\n    dataProviderName?: string;\n} & LiveModeProps &\n    SuccessErrorNotification;\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/api-references/components/refine-config `<Refine>`}.\n *\n * @see {@link https://refine.dev/docs/core/hooks/show/useShow} for more details.\n */\nexport const useShow = <\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n>({\n    resource: resourceFromProp,\n    id,\n    successNotification,\n    errorNotification,\n    metaData,\n    liveMode,\n    onLiveEvent,\n    dataProviderName,\n    queryOptions,\n}: useShowProps<TData, TError> = {}): useShowReturnType<TData> => {\n    const { useParams } = useRouterContext();\n\n    const { resource: routeResourceName, id: idFromRoute } =\n        useParams<ResourceRouterParams>();\n\n    const defaultId =\n        !resourceFromProp || resourceFromProp === routeResourceName\n            ? id ?? idFromRoute\n            : id;\n\n    const [showId, setShowId] = useState<BaseKey | undefined>(defaultId);\n\n    React.useEffect(() => {\n        if (defaultId !== showId) {\n            setShowId(defaultId);\n        }\n    }, [defaultId]);\n\n    const resourceWithRoute = useResourceWithRoute();\n\n    const resource = resourceWithRoute(resourceFromProp ?? routeResourceName);\n\n    const queryResult = useOne<TData>({\n        resource: resource.name,\n        id: showId ?? \"\",\n        queryOptions: {\n            enabled: showId !== undefined,\n            ...queryOptions,\n        },\n        successNotification,\n        errorNotification,\n        metaData,\n        liveMode,\n        onLiveEvent,\n        dataProviderName,\n    });\n\n    return {\n        queryResult,\n        showId,\n        setShowId,\n    };\n};\n","import { useEffect, useState } from \"react\";\nimport { parse, ParseConfig } from \"papaparse\";\nimport chunk from \"lodash/chunk\";\n\nimport {\n    useCreate,\n    useCreateMany,\n    useResourceWithRoute,\n    useRouterContext,\n} from \"@hooks\";\nimport {\n    MapDataFn,\n    BaseRecord,\n    HttpError,\n    ResourceRouterParams,\n    MetaDataQuery,\n} from \"../../interfaces\";\nimport { importCSVMapper, sequentialPromises } from \"@definitions\";\nimport { UseCreateReturnType } from \"../../hooks/data/useCreate\";\nimport { UseCreateManyReturnType } from \"../../hooks/data/useCreateMany\";\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    resourceName?: 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?: 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    metaData?: MetaDataQuery;\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/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-references/interfaceReferences#baserecord `BaseRecord`}\n * @typeParam TError - Custom error object that extends {@link https://refine.dev/docs/api-references/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    resourceName,\n    mapData = (item) => item as unknown as TVariables,\n    paparseOptions,\n    batchSize = Number.MAX_SAFE_INTEGER,\n    onFinish,\n    metaData,\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 resourceWithRoute = useResourceWithRoute();\n    const { useParams } = useRouterContext();\n\n    const { resource: routeResourceName } = useParams<ResourceRouterParams>();\n    const { name: resource } = resourceWithRoute(\n        resourceName ?? routeResourceName,\n    );\n\n    const createMany = useCreateMany<TData, TError, TVariables>();\n    const create = useCreate<TData, TError, TVariables>();\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>[]>(\n            (resolve) => {\n                setIsLoading(true);\n                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,\n                                        values: value,\n                                        successNotification: false,\n                                        errorNotification: false,\n                                        dataProviderName,\n                                        metaData,\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 =\n                                        await createMany.mutateAsync({\n                                            resource,\n                                            values: chunkedValues,\n                                            successNotification: false,\n                                            errorNotification: false,\n                                            dataProviderName,\n                                            metaData,\n                                        });\n\n                                    return {\n                                        response,\n                                        value: chunkedValues,\n                                        currentBatchLength:\n                                            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 (\n                                            currentAmount + currentBatchLength\n                                        );\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            },\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 { useContext } from \"react\";\nimport { RouterContext } from \"@contexts/router\";\n\nexport const useRouterContext = () => {\n    const { useHistory, useLocation, useParams, Prompt, Link, routes } =\n        useContext(RouterContext);\n\n    return {\n        useHistory,\n        useLocation,\n        useParams,\n        Prompt,\n        Link,\n        routes,\n    };\n};\n","import React from \"react\";\n\nimport { IRouterContext } from \"../../interfaces\";\n\nexport const defaultProvider: IRouterContext = {\n    useHistory: () => false,\n    useLocation: () => false,\n    useParams: () => ({} as any),\n    Prompt: () => null,\n    Link: () => null,\n};\n\nexport const RouterContext =\n    React.createContext<IRouterContext>(defaultProvider);\n\nexport const RouterContextProvider: React.FC<\n    IRouterContext & {\n        children?: React.ReactNode;\n    }\n> = ({\n    children,\n    useHistory,\n    useLocation,\n    useParams,\n    Prompt,\n    Link,\n    routes,\n}) => {\n    return (\n        <RouterContext.Provider\n            value={{\n                useHistory,\n                useLocation,\n                useParams,\n                Prompt,\n                Link,\n                routes,\n            }}\n        >\n            {children}\n        </RouterContext.Provider>\n    );\n};\n","import { useContext } from \"react\";\nimport {\n    useQuery,\n    UseQueryResult,\n    UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { CanParams, CanReturnType } from \"../../../interfaces\";\n\nexport type UseCanProps = CanParams & {\n    /**\n     * react-query's [useQuery](https://tanstack.com/query/v4/docs/reference/useQuery) options\n     */\n    queryOptions?: UseQueryOptions<CanReturnType>;\n};\n\n/**\n * `useCan` uses the `can` as the query function for `react-query`'s {@link https://react-query.tanstack.com/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/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,\n}: UseCanProps): UseQueryResult<CanReturnType> => {\n    const { can } = useContext(AccessControlContext);\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    /* eslint-disable @typescript-eslint/no-unused-vars */\n    const {\n        icon: _icon,\n        list: _list,\n        edit: _edit,\n        create: _create,\n        show: _show,\n        children: _children,\n        ...restResource\n    } = _resource ?? {};\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n\n    const queryResponse = useQuery<CanReturnType>(\n        [\n            \"useCan\",\n            {\n                action,\n                resource,\n                params: { ...paramsRest, resource: restResource },\n                enabled: queryOptions?.enabled,\n            },\n        ],\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        () =>\n            can?.({ action, resource, params }) ??\n            Promise.resolve({ can: true }),\n        {\n            enabled: typeof can !== \"undefined\",\n            ...queryOptions,\n            retry: false,\n        },\n    );\n\n    return typeof can === \"undefined\"\n        ? ({ data: { can: true } } as typeof queryResponse)\n        : queryResponse;\n};\n","import React from \"react\";\n\nimport { IAccessControlContext } from \"./IAccessControlContext\";\n\n/** @deprecated default value for access control context has no use and is an empty object. */\nexport const defaultAccessControlContext: IAccessControlContext = {};\n\nexport const AccessControlContext = React.createContext<IAccessControlContext>(\n    {},\n);\n\nexport const AccessControlContextProvider: React.FC<\n    IAccessControlContext & {\n        children?: React.ReactNode;\n    }\n> = ({ can, children }) => {\n    return (\n        <AccessControlContext.Provider value={{ can }}>\n            {children}\n        </AccessControlContext.Provider>\n    );\n};\n","import { useContext } from \"react\";\n\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { IAccessControlContext } from \"../../interfaces\";\n\nexport const useCanWithoutCache = (): IAccessControlContext => {\n    const { can } = useContext(AccessControlContext);\n\n    return { can };\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport { QueryObserverResult, UseQueryOptions } from \"@tanstack/react-query\";\nimport uniqBy from \"lodash/uniqBy\";\nimport debounce from \"lodash/debounce\";\nimport get from \"lodash/get\";\n\nimport { useList, useMany } from \"@hooks\";\nimport {\n    CrudSorting,\n    Option,\n    BaseRecord,\n    GetManyResponse,\n    GetListResponse,\n    CrudFilters,\n    SuccessErrorNotification,\n    HttpError,\n    MetaDataQuery,\n    LiveModeProps,\n    BaseKey,\n    Pagination,\n} from \"../../interfaces\";\n\nexport type UseSelectProps<TData, TError> = {\n    /**\n     * Resource name for API data interactions\n     */\n    resource: string;\n    /**\n     * Set the option's value\n     * @default `\"title\"`\n     */\n    optionLabel?: string;\n    /**\n     * Set the option's label value\n     * @default `\"id\"`\n     */\n    optionValue?: string;\n    /**\n     * Allow us to sort the options\n     */\n    sort?: CrudSorting;\n    /**\n     * Resource name for API data interactions\n     */\n    filters?: CrudFilters;\n    /**\n     * Adds extra `options`\n     */\n    defaultValue?: BaseKey | BaseKey[];\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?: UseQueryOptions<GetListResponse<TData>, TError>;\n    /**\n     * Pagination option from [`useList()`](/docs/api-reference/core/hooks/data/useList/)\n     * @type {  current?: number; pageSize?: number;}\n     * @default `undefined`\n     */\n    pagination?: Pagination;\n    /**\n     * Disabling pagination option from [`useList()`](/docs/api-reference/core/hooks/data/useList/)\n     * @type boolean\n     * @default `undefined`\n     */\n    hasPagination?: boolean;\n    /**\n     * react-query [useQuery](https://react-query.tanstack.com/reference/useQuery) options\n     */\n    defaultValueQueryOptions?: UseQueryOptions<GetManyResponse<TData>, TError>;\n    /**\n     * If defined, this callback allows us to override all filters for every search request.\n     * @default `undefined`\n     */\n    onSearch?: (value: string) => CrudFilters;\n    /**\n     * Metadata query for `dataProvider`\n     * @default `{}`\n     */\n    metaData?: MetaDataQuery;\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     * Amount of records to fetch in select box list.\n     * @deprecated use [`pagination`](https://refine.dev/docs/api-reference/core/interfaceReferences/#pagination) instead\n     * @default `undefined`\n     */\n    fetchSize?: number;\n} & SuccessErrorNotification &\n    LiveModeProps;\n\nexport type UseSelectReturnType<TData extends BaseRecord = BaseRecord> = {\n    queryResult: QueryObserverResult<GetListResponse<TData>>;\n    defaultValueQueryResult: QueryObserverResult<GetManyResponse<TData>>;\n    onSearch: (value: string) => void;\n    options: Option[];\n};\n\nexport const useSelect = <\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n>(\n    props: UseSelectProps<TData, TError>,\n): UseSelectReturnType<TData> => {\n    const [search, setSearch] = useState<CrudFilters>([]);\n    const [options, setOptions] = useState<Option[]>([]);\n    const [selectedOptions, setSelectedOptions] = useState<Option[]>([]);\n\n    const {\n        resource,\n        sort,\n        filters = [],\n        optionLabel = \"title\",\n        optionValue = \"id\",\n        debounce: debounceValue = 300,\n        successNotification,\n        errorNotification,\n        defaultValueQueryOptions: defaultValueQueryOptionsFromProps,\n        queryOptions,\n        fetchSize,\n        pagination,\n        hasPagination,\n        liveMode,\n        defaultValue = [],\n        onLiveEvent,\n        onSearch: onSearchFromProp,\n        liveParams,\n        metaData,\n        dataProviderName,\n    } = props;\n\n    const defaultValues = Array.isArray(defaultValue)\n        ? defaultValue\n        : [defaultValue];\n\n    const defaultValueQueryOnSuccess = useCallback(\n        (data: GetManyResponse<TData>) => {\n            setSelectedOptions(\n                data.data.map((item) => ({\n                    label: get(item, optionLabel),\n                    value: get(item, optionValue),\n                })),\n            );\n        },\n        [optionLabel, optionValue],\n    );\n\n    const defaultValueQueryOptions =\n        defaultValueQueryOptionsFromProps ?? (queryOptions as any);\n\n    const defaultValueQueryResult = useMany<TData, TError>({\n        resource,\n        ids: defaultValues,\n        queryOptions: {\n            ...defaultValueQueryOptions,\n            enabled:\n                defaultValues.length > 0 &&\n                (defaultValueQueryOptionsFromProps?.enabled ?? true),\n            onSuccess: (data) => {\n                defaultValueQueryOnSuccess(data);\n                defaultValueQueryOptions?.onSuccess?.(data);\n            },\n        },\n        metaData,\n        liveMode: \"off\",\n        dataProviderName,\n    });\n\n    const defaultQueryOnSuccess = useCallback(\n        (data: GetListResponse<TData>) => {\n            {\n                setOptions(\n                    data.data.map((item) => ({\n                        label: get(item, optionLabel),\n                        value: get(item, optionValue),\n                    })),\n                );\n            }\n        },\n        [optionLabel, optionValue],\n    );\n\n    const queryResult = useList<TData, TError>({\n        resource,\n        config: {\n            sort,\n            filters: filters.concat(search),\n            pagination: {\n                current: pagination?.current,\n                pageSize: pagination?.pageSize ?? fetchSize,\n            },\n            hasPagination,\n        },\n        queryOptions: {\n            ...queryOptions,\n            onSuccess: (data) => {\n                defaultQueryOnSuccess(data);\n                queryOptions?.onSuccess?.(data);\n            },\n        },\n        successNotification,\n        errorNotification,\n        metaData,\n        liveMode,\n        liveParams,\n        onLiveEvent,\n        dataProviderName,\n    });\n\n    const onSearch = (value: string) => {\n        if (onSearchFromProp) {\n            setSearch(onSearchFromProp(value));\n            return;\n        }\n\n        if (!value) {\n            setSearch([]);\n            return;\n        } else {\n            setSearch([\n                {\n                    field: optionLabel,\n                    operator: \"contains\",\n                    value,\n                },\n            ]);\n        }\n    };\n\n    return {\n        queryResult,\n        defaultValueQueryResult,\n        options: useMemo(\n            () => uniqBy([...options, ...selectedOptions], \"value\"),\n            [options, selectedOptions],\n        ),\n        onSearch: debounce(onSearch, debounceValue),\n    };\n};\n","import React, { useMemo, useState, useEffect } from \"react\";\nimport { QueryObserverResult, UseQueryOptions } from \"@tanstack/react-query\";\nimport qs from \"qs\";\nimport differenceWith from \"lodash/differenceWith\";\nimport isEqual from \"lodash/isEqual\";\n\nimport {\n    useRouterContext,\n    useSyncWithLocation,\n    useNavigation,\n    useResourceWithRoute,\n    useList,\n    useLiveMode,\n} from \"@hooks\";\nimport {\n    stringifyTableParams,\n    parseTableParams,\n    unionFilters,\n    setInitialFilters,\n    setInitialSorters,\n    unionSorters,\n} from \"@definitions/table\";\n\nimport {\n    ResourceRouterParams,\n    BaseRecord,\n    CrudFilters,\n    CrudSorting,\n    GetListResponse,\n    SuccessErrorNotification,\n    HttpError,\n    MetaDataQuery,\n    LiveModeProps,\n} from \"../../interfaces\";\n\ntype SetFilterBehavior = \"merge\" | \"replace\";\n\nexport type useTableProps<TData, TError> = {\n    /**\n     * Resource name for API data interactions\n     * @default Resource name that it reads from route\n     */\n    resource?: string;\n    /**\n     * Initial page index\n     * @default 1\n     */\n    initialCurrent?: number;\n    /**\n     * Initial number of items per page\n     * @default 10\n     */\n    initialPageSize?: number;\n    /**\n     * Initial sorter state\n     */\n    initialSorter?: CrudSorting;\n    /**\n     * Default and unchangeable sorter state\n     *  @default `[]`\n     */\n    permanentSorter?: CrudSorting;\n    /**\n     * Initial filter state\n     */\n    initialFilter?: CrudFilters;\n    /**\n     * WDefault and unchangeable filter state\n     * @default `[]`\n     */\n    permanentFilter?: CrudFilters;\n    /**\n     *Default behavior of the `setFilters` function\n     * @default `\"merge\"`\n     */\n    defaultSetFilterBehavior?: SetFilterBehavior;\n    /**\n     * Whether to use server side pagination or not.\n     * @default `true`\n     */\n    hasPagination?: boolean;\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/v4/docs/reference/useQuery) options\n     */\n    queryOptions?: UseQueryOptions<GetListResponse<TData>, TError>;\n    /**\n     * Metadata query for dataProvider\n     */\n    metaData?: MetaDataQuery;\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    LiveModeProps;\n\ntype ReactSetState<T> = React.Dispatch<React.SetStateAction<T>>;\n\ntype SyncWithLocationParams = {\n    pagination: { current?: number; pageSize?: number };\n    sorter: CrudSorting;\n    filters: CrudFilters;\n};\n\nexport type useTablePaginationKeys =\n    | \"current\"\n    | \"setCurrent\"\n    | \"pageSize\"\n    | \"setPageSize\"\n    | \"pageCount\";\n\nexport type useTableReturnType<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n> = {\n    tableQueryResult: QueryObserverResult<GetListResponse<TData>, TError>;\n    sorter: CrudSorting;\n    setSorter: (sorter: CrudSorting) => void;\n    filters: CrudFilters;\n    setFilters: ((filters: CrudFilters, behavior?: SetFilterBehavior) => void) &\n        ((setter: (prevFilters: CrudFilters) => CrudFilters) => void);\n    createLinkForSyncWithLocation: (params: SyncWithLocationParams) => string;\n    current: number;\n    setCurrent: ReactSetState<useTableReturnType[\"current\"]>;\n    pageSize: number;\n    setPageSize: ReactSetState<useTableReturnType[\"pageSize\"]>;\n    pageCount: number;\n};\n\nexport type useTableNoPaginationReturnType<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n> = Omit<useTableReturnType<TData, TError>, useTablePaginationKeys> &\n    Record<useTablePaginationKeys, undefined>;\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-references/hooks/table/useTable} for more details.\n */\n\nconst defaultPermanentFilter: CrudFilters = [];\nconst defaultPermanentSorter: CrudSorting = [];\n\n// overload with pagination\nexport function useTable<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n>(\n    props?: useTableProps<TData, TError> & {\n        hasPagination?: true;\n    },\n): useTableReturnType<TData, TError>;\n// overload without pagination\nexport function useTable<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n>(\n    props?: useTableProps<TData, TError> & {\n        hasPagination: false;\n    },\n): useTableNoPaginationReturnType<TData, TError>;\n// implementation\nexport function useTable<\n    TData extends BaseRecord = BaseRecord,\n    TError extends HttpError = HttpError,\n>({\n    initialCurrent = 1,\n    initialPageSize = 10,\n    hasPagination = true,\n    initialSorter,\n    permanentSorter = defaultPermanentSorter,\n    defaultSetFilterBehavior = \"merge\",\n    initialFilter,\n    permanentFilter = defaultPermanentFilter,\n    syncWithLocation: syncWithLocationProp,\n    resource: resourceFromProp,\n    successNotification,\n    errorNotification,\n    queryOptions,\n    liveMode: liveModeFromProp,\n    onLiveEvent,\n    liveParams,\n    metaData,\n    dataProviderName,\n}: useTableProps<TData, TError> = {}):\n    | useTableReturnType<TData, TError>\n    | useTableNoPaginationReturnType<TData, TError> {\n    const { syncWithLocation: syncWithLocationContext } = useSyncWithLocation();\n\n    const syncWithLocation = syncWithLocationProp ?? syncWithLocationContext;\n\n    const { useLocation, useParams } = useRouterContext();\n    const { search, pathname } = useLocation();\n    const liveMode = useLiveMode(liveModeFromProp);\n\n    // We want to always parse the query string even when syncWithLocation is\n    // deactivated, for hotlinking to work properly\n    const { parsedCurrent, parsedPageSize, parsedSorter, parsedFilters } =\n        parseTableParams(search);\n\n    const defaultCurrent = parsedCurrent || initialCurrent;\n    const defaultPageSize = parsedPageSize || initialPageSize;\n    const defaultSorter = parsedSorter.length ? parsedSorter : initialSorter;\n    const defaultFilter = parsedFilters.length ? parsedFilters : initialFilter;\n\n    const { resource: routeResourceName } = useParams<ResourceRouterParams>();\n\n    const { replace } = useNavigation();\n    const resourceWithRoute = useResourceWithRoute();\n\n    const resource = resourceWithRoute(resourceFromProp ?? routeResourceName);\n\n    const [sorter, setSorter] = useState<CrudSorting>(\n        setInitialSorters(permanentSorter, defaultSorter ?? []),\n    );\n    const [filters, setFilters] = useState<CrudFilters>(\n        setInitialFilters(permanentFilter, defaultFilter ?? []),\n    );\n    const [current, setCurrent] = useState<number>(defaultCurrent);\n    const [pageSize, setPageSize] = useState<number>(defaultPageSize);\n\n    const createLinkForSyncWithLocation = ({\n        pagination: { current, pageSize },\n        sorter,\n        filters,\n    }: SyncWithLocationParams) => {\n        const currentQueryParams = qs.parse(search?.substring(1)); // remove first ? character\n\n        const stringifyParams = stringifyTableParams({\n            pagination: {\n                pageSize,\n                current,\n            },\n            sorter,\n            filters,\n            ...currentQueryParams,\n        });\n        return `${pathname}?${stringifyParams}`;\n    };\n\n    useEffect(() => {\n        if (search === \"\") {\n            setCurrent(defaultCurrent);\n            setPageSize(defaultPageSize);\n            setSorter(setInitialSorters(permanentSorter, defaultSorter ?? []));\n            setFilters(setInitialFilters(permanentFilter, defaultFilter ?? []));\n        }\n    }, [search]);\n\n    const currentQueryParams = (): object => {\n        // We get QueryString parameters that are uncontrolled by refine.\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { sorter, filters, pageSize, current, ...rest } = qs.parse(\n            search,\n            {\n                ignoreQueryPrefix: true,\n            },\n        );\n\n        return rest;\n    };\n\n    useEffect(() => {\n        if (syncWithLocation) {\n            const queryParams = currentQueryParams();\n            const stringifyParams = stringifyTableParams({\n                ...(hasPagination\n                    ? {\n                          pagination: {\n                              pageSize,\n                              current,\n                          },\n                      }\n                    : {}),\n                sorter: differenceWith(sorter, permanentSorter, isEqual),\n                filters: differenceWith(filters, permanentFilter, isEqual),\n                ...queryParams,\n            });\n\n            // Careful! This triggers render\n            return replace(`${pathname}?${stringifyParams}`, undefined, {\n                shallow: true,\n            });\n        }\n    }, [syncWithLocation, current, pageSize, sorter, filters]);\n\n    const queryResult = useList<TData, TError>({\n        resource: resource.name,\n        config: {\n            hasPagination,\n            pagination: { current, pageSize },\n            filters: unionFilters(permanentFilter, filters),\n            sort: unionSorters(permanentSorter, sorter),\n        },\n        queryOptions,\n        successNotification,\n        errorNotification,\n        metaData,\n        liveMode,\n        liveParams,\n        onLiveEvent,\n        dataProviderName,\n    });\n\n    const setFiltersAsMerge = (newFilters: CrudFilters) => {\n        setFilters((prevFilters) =>\n            unionFilters(permanentFilter, newFilters, prevFilters),\n        );\n    };\n\n    const setFiltersAsReplace = (newFilters: CrudFilters) => {\n        setFilters(unionFilters(permanentFilter, newFilters));\n    };\n\n    const setFiltersWithSetter = (\n        setter: (prevFilters: CrudFilters) => CrudFilters,\n    ) => {\n        setFilters((prev) => unionFilters(permanentFilter, setter(prev)));\n    };\n\n    const setFiltersFn: useTableReturnType<TData>[\"setFilters\"] = (\n        setterOrFilters,\n        behavior: SetFilterBehavior = defaultSetFilterBehavior,\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\n    const setSortWithUnion = (newSorter: CrudSorting) => {\n        setSorter(() => unionSorters(permanentSorter, newSorter));\n    };\n\n    const paginationValues = useMemo(() => {\n        if (hasPagination) {\n            return {\n                current,\n                setCurrent,\n                pageSize,\n                setPageSize,\n                pageCount: pageSize\n                    ? Math.ceil((queryResult.data?.total ?? 0) / pageSize)\n                    : 1,\n            };\n        }\n\n        return {\n            current: undefined,\n            setCurrent: undefined,\n            pageSize: undefined,\n            setPageSize: undefined,\n            pageCount: undefined,\n        };\n    }, [hasPagination, current, pageSize, queryResult.data?.total]);\n\n    return {\n        tableQueryResult: queryResult,\n        sorter,\n        setSorter: setSortWithUnion,\n        filters,\n        setFilters: setFiltersFn,\n        ...paginationValues,\n        createLinkForSyncWithLocation,\n    };\n}\n","import { useContext } from \"react\";\nimport {\n    useMutation,\n    UseMutationOptions,\n    UseMutationResult,\n    useQueryClient,\n} from \"@tanstack/react-query\";\n\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { ResourceContext } from \"@contexts/resource\";\nimport { useGetIdentity } from \"@hooks/auth\";\nimport { BaseKey, LogParams } from \"../../../interfaces\";\nimport { hasPermission, queryKeys } from \"@definitions/helpers\";\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/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\n    const { resources } = useContext(ResourceContext);\n    const {\n        data: identityData,\n        refetch,\n        isLoading,\n    } = useGetIdentity({\n        queryOptions: {\n            enabled: !!auditLogContext,\n        },\n    });\n\n    const log = useMutation<TLogData, Error, LogParams, unknown>(\n        async (params) => {\n            const resource = resources.find((p) => p.name === params.resource);\n            const logPermissions = resource?.options?.auditLog?.permissions;\n\n            if (logPermissions) {\n                if (!hasPermission(logPermissions, params.action)) {\n                    return;\n                }\n            }\n\n            let authorData;\n            if (isLoading) {\n                authorData = await refetch();\n            }\n\n            return await auditLogContext.create?.({\n                ...params,\n                author: identityData ?? authorData?.data,\n            });\n        },\n        logMutationOptions,\n    );\n\n    const rename = useMutation<\n        TLogRenameData,\n        Error,\n        { id: BaseKey; name: string },\n        unknown\n    >(\n        async (params) => {\n            return await auditLogContext.update?.(params);\n        },\n        {\n            onSuccess: (data) => {\n                if (data?.resource) {\n                    const queryKey = queryKeys(data?.resource);\n                    queryClient.invalidateQueries(queryKey.logList());\n                }\n            },\n            ...renameMutationOptions,\n        },\n    );\n\n    return { log, rename };\n};\n","import React from \"react\";\n\nimport { IAuditLogContext } from \"./IAuditLogContext\";\n\nexport const AuditLogContext = React.createContext<IAuditLogContext>({});\n\nexport const AuditLogContextProvider: React.FC<\n    IAuditLogContext & {\n        children: React.ReactNode;\n    }\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\";\nimport {\n    useQuery,\n    UseQueryResult,\n    UseQueryOptions,\n} from \"@tanstack/react-query\";\n\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { queryKeys } from \"@definitions/helpers\";\nimport { HttpError, MetaDataQuery } from \"../../../interfaces\";\n\nexport type UseLogProps<TData, TError> = {\n    resource: string;\n    action?: string;\n    meta?: Record<number | string, any>;\n    author?: Record<number | string, any>;\n    queryOptions?: UseQueryOptions<TData, TError>;\n    metaData?: MetaDataQuery;\n};\n\n/**\n * useLogList is used to get and filter audit logs.\n * @see {@link https://refine.dev/docs/core/hooks/audit-log/useLogList} for more details.\n */\nexport const useLogList = <TData = any, TError extends HttpError = HttpError>({\n    resource,\n    action,\n    meta,\n    author,\n    metaData,\n    queryOptions,\n}: UseLogProps<TData, TError>): UseQueryResult<TData> => {\n    const { get } = useContext(AuditLogContext);\n\n    const queryKey = queryKeys(resource, undefined, metaData);\n\n    const queryResponse = useQuery<TData, TError>(\n        queryKey.logList(meta),\n        () =>\n            get?.({\n                resource,\n                action,\n                author,\n                meta,\n                metaData,\n            }) ?? Promise.resolve([]),\n        {\n            enabled: typeof get !== \"undefined\",\n            ...queryOptions,\n            retry: false,\n        },\n    );\n\n    return queryResponse;\n};\n","import { useCallback } from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\n\nimport { useResource } from \"@hooks/resource\";\nimport { queryKeys, pickDataProvider } from \"@definitions\";\nimport { BaseKey, IQueryKeys } from \"../../interfaces\";\n\nexport type UseInvalidateProp = {\n    resource?: string;\n    id?: BaseKey;\n    dataProviderName?: string;\n    invalidates: Array<keyof IQueryKeys> | false;\n};\n\nexport const useInvalidate = (): ((props: UseInvalidateProp) => void) => {\n    const { resources } = useResource();\n    const queryClient = useQueryClient();\n\n    const invalidate = useCallback(\n        ({\n            resource,\n            dataProviderName,\n            invalidates,\n            id,\n        }: UseInvalidateProp) => {\n            if (invalidates === false) {\n                return;\n            }\n            const queryKey = queryKeys(\n                resource,\n                pickDataProvider(resource, dataProviderName, resources),\n            );\n\n            invalidates.forEach((key) => {\n                switch (key) {\n                    case \"all\":\n                        queryClient.invalidateQueries(queryKey.all);\n                        break;\n                    case \"list\":\n                        queryClient.invalidateQueries(queryKey.list());\n                        break;\n                    case \"many\":\n                        queryClient.invalidateQueries(queryKey.many());\n                        break;\n                    case \"resourceAll\":\n                        queryClient.invalidateQueries(queryKey.resourceAll);\n                        break;\n                    case \"detail\":\n                        queryClient.invalidateQueries(\n                            queryKey.detail(id || \"\"),\n                        );\n                        break;\n                    default:\n                        break;\n                }\n            });\n        },\n        [],\n    );\n\n    return invalidate;\n};\n","import React, { useContext } from \"react\";\nimport warnOnce from \"warn-once\";\n\nimport { useResource, useRouterContext, useTranslate } from \"@hooks\";\nimport { TranslationContext } from \"@contexts/translation\";\nimport { humanizeString } from \"@definitions\";\n\nimport { ResourceRouterParams } from \"../../interfaces\";\n\nexport type BreadcrumbsType = {\n    label: string;\n    href?: string;\n    icon?: React.ReactNode;\n};\n\ntype UseBreadcrumbReturnType = {\n    breadcrumbs: BreadcrumbsType[];\n};\n\nexport const useBreadcrumb = (): UseBreadcrumbReturnType => {\n    const { useParams } = useRouterContext();\n    const { i18nProvider } = useContext(TranslationContext);\n\n    const translate = useTranslate();\n\n    const { resources, resource } = useResource();\n\n    const { action } = useParams<ResourceRouterParams>();\n\n    const breadcrumbs: BreadcrumbsType[] = [];\n\n    if (!resource?.name) {\n        return { breadcrumbs };\n    }\n\n    const addBreadcrumb = (parentName: string) => {\n        const parentResource = resources.find(\n            (resource) => resource.name === parentName,\n        );\n\n        if (parentResource) {\n            if (parentResource.parentName) {\n                addBreadcrumb(parentResource.parentName);\n            }\n            breadcrumbs.push({\n                label:\n                    parentResource.label ??\n                    translate(\n                        `${parentResource.name}.${parentResource.name}`,\n                        humanizeString(parentResource.name),\n                    ),\n\n                href: !!parentResource.list\n                    ? `/${parentResource.route}`\n                    : undefined,\n                icon: parentResource.icon,\n            });\n        }\n    };\n\n    if (resource.parentName) {\n        addBreadcrumb(resource.parentName);\n    }\n\n    breadcrumbs.push({\n        label:\n            resource.label ??\n            translate(\n                `${resource.name}.${resource.name}`,\n                humanizeString(resource.name),\n            ),\n        href: !!resource.list ? `/${resource.route}` : undefined,\n        icon: resource.icon,\n    });\n\n    if (action) {\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/core/hooks/useBreadcrumb/#i18n-support`,\n            );\n            breadcrumbs.push({\n                label: translate(`buttons.${action}`, humanizeString(action)),\n            });\n        } else {\n            breadcrumbs.push({\n                label: translate(key, humanizeString(action)),\n            });\n        }\n    }\n\n    return {\n        breadcrumbs,\n    };\n};\n","import React from \"react\";\nimport {\n    useRefineContext,\n    useTranslate,\n    useResource,\n    useRouterContext,\n} from \"..\";\nimport { IMenuItem, ITreeMenu } from \"../../interfaces\";\nimport { userFriendlyResourceName, createTreeView } from \"@definitions\";\n\ntype useMenuReturnType = {\n    defaultOpenKeys: string[];\n    selectedKey: string;\n    menuItems: ITreeMenu[];\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/core/hooks/ui/useMenu} for more details.\n */\nexport const useMenu: () => useMenuReturnType = () => {\n    const { resources } = useResource();\n    const translate = useTranslate();\n\n    const { useLocation, useParams } = useRouterContext();\n    const location = useLocation();\n    const params = useParams<{ resource: string }>();\n\n    const { hasDashboard } = useRefineContext();\n\n    const selectedKey = React.useMemo(() => {\n        let selectedResource = resources.find(\n            (el) => location?.pathname === `/${el.route}`,\n        );\n\n        if (!selectedResource) {\n            selectedResource = resources.find(\n                (el) => params?.resource === (el.route as string),\n            );\n        }\n\n        let _selectedKey: string;\n        if (selectedResource?.route) {\n            _selectedKey = `/${selectedResource?.route}`;\n        } else if (location.pathname === \"/\") {\n            _selectedKey = \"/\";\n        } else {\n            _selectedKey = location?.pathname;\n        }\n        return _selectedKey;\n    }, [resources, location, params]);\n\n    const treeMenuItems: IMenuItem[] = React.useMemo(\n        () =>\n            resources.map((resource) => {\n                const route = `/${resource.route}`;\n\n                return {\n                    ...resource,\n                    icon: resource.icon,\n                    route: route,\n                    key: resource.key ?? route,\n                    label:\n                        resource.label ??\n                        translate(\n                            `${resource.name}.${resource.name}`,\n                            userFriendlyResourceName(resource.name, \"plural\"),\n                        ),\n                };\n            }),\n        [resources, hasDashboard, translate],\n    );\n    const menuItems: ITreeMenu[] = React.useMemo(\n        () => createTreeView(treeMenuItems),\n        [treeMenuItems],\n    );\n\n    const crawlNestedKeys = React.useCallback(\n        (\n            currentKey: string,\n            currentResources: typeof resources,\n            isParent = false,\n        ): string[] => {\n            const currentElement = currentResources.find((el) =>\n                isParent ? el.name === currentKey : el.route === currentKey,\n            );\n\n            if (currentElement) {\n                const keysArray: string[] = [];\n\n                if (isParent && currentElement.route) {\n                    keysArray.unshift(...[currentElement.route]);\n                }\n\n                if (currentElement.parentName) {\n                    keysArray.unshift(\n                        ...crawlNestedKeys(\n                            currentElement.parentName,\n                            currentResources,\n                            true,\n                        ),\n                    );\n                }\n                return keysArray;\n            }\n\n            return [];\n        },\n        [],\n    );\n\n    const defaultOpenKeys = React.useMemo(\n        () => crawlNestedKeys(selectedKey, treeMenuItems),\n        [selectedKey, treeMenuItems],\n    );\n\n    const values = React.useMemo(() => {\n        const filterMenuItemsByListViewAndHideOption = (\n            menus: ITreeMenu[],\n        ): ITreeMenu[] => {\n            return menus.reduce((menuItem: ITreeMenu[], obj) => {\n                if (obj.children.length > 0 && obj.options?.hide !== true)\n                    return [\n                        ...menuItem,\n                        {\n                            ...obj,\n                            children: filterMenuItemsByListViewAndHideOption(\n                                obj.children,\n                            ),\n                        },\n                    ];\n                else if (\n                    typeof obj.list !== \"undefined\" &&\n                    obj.options?.hide !== true\n                )\n                    return [...menuItem, obj];\n\n                return menuItem;\n            }, []);\n        };\n\n        return {\n            defaultOpenKeys,\n            selectedKey,\n            menuItems: filterMenuItemsByListViewAndHideOption(menuItems),\n        };\n    }, [defaultOpenKeys, selectedKey, menuItems]);\n\n    return values;\n};\n","import React, { useState } from \"react\";\n\nimport { useLogin, useTranslate } from \"@hooks\";\nexport interface ILoginForm {\n    username: string;\n    password: string;\n}\n\n/**\n * @deprecated LoginPage is deprecated. Use AuthPage instead. @see {@link https://refine.dev/docs/core/components/auth-page} for more details.\n * **refine** has a default login page form which is served on `/login` route when the `authProvider` configuration is provided.\n *\n * @see {@link https://refine.dev/docs/api-references/components/refine-config#loginpage} for more details.\n */\nexport const LoginPage: React.FC = () => {\n    const [username, setUsername] = useState(\"\");\n    const [password, setPassword] = useState(\"\");\n\n    const translate = useTranslate();\n\n    const { mutate: login } = useLogin<ILoginForm>();\n\n    return (\n        <>\n            <h1>{translate(\"pages.login.title\", \"Sign in your account\")}</h1>\n            <form\n                onSubmit={(e) => {\n                    e.preventDefault();\n                    login({ username, password });\n                }}\n            >\n                <table>\n                    <tbody>\n                        <tr>\n                            <td>\n                                {translate(\n                                    \"pages.login.username\",\n                                    undefined,\n                                    \"username\",\n                                )}\n                                :\n                            </td>\n                            <td>\n                                <input\n                                    type=\"text\"\n                                    size={20}\n                                    autoCorrect=\"off\"\n                                    spellCheck={false}\n                                    autoCapitalize=\"off\"\n                                    autoFocus\n                                    required\n                                    value={username}\n                                    onChange={(e) =>\n                                        setUsername(e.target.value)\n                                    }\n                                />\n                            </td>\n                        </tr>\n                        <tr>\n                            <td>\n                                {translate(\n                                    \"pages.login.password\",\n                                    undefined,\n                                    \"password\",\n                                )}\n                                :\n                            </td>\n                            <td>\n                                <input\n                                    type=\"password\"\n                                    required\n                                    size={20}\n                                    value={password}\n                                    onChange={(e) =>\n                                        setPassword(e.target.value)\n                                    }\n                                />\n                            </td>\n                        </tr>\n                    </tbody>\n                </table>\n                <br />\n                <input type=\"submit\" value=\"login\" />\n            </form>\n        </>\n    );\n};\n","import React, {\n    DetailedHTMLProps,\n    HTMLAttributes,\n    FormHTMLAttributes,\n} from \"react\";\n\nimport {\n    LoginPage,\n    RegisterPage,\n    ForgotPasswordPage,\n    UpdatePasswordPage,\n} from \"./components\";\n\nimport { AuthPageProps } from \"../../../interfaces\";\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 *\n * @see {@link https://refine.dev/docs/api-references/components/refine-config#authpage} 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\";\nimport { LoginPageProps, LoginFormTypes } from \"../../../../../interfaces\";\n\nimport { useRouterContext, useLogin } from \"@hooks\";\nimport { useTranslate } from \"@hooks/translate\";\n\nimport { DivPropsType, FormPropsType } from \"../..\";\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}) => {\n    const { Link } = useRouterContext();\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: React.ReactNode, text?: string) => {\n        if (link) {\n            if (typeof link === \"string\") {\n                return <Link to={link}>{text}</Link>;\n            }\n            return link;\n        }\n        return null;\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                                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            <hr />\n            <form\n                onSubmit={(e) => {\n                    e.preventDefault();\n                    login({ email, password, remember });\n                }}\n                {...formProps}\n            >\n                <div\n                    style={{\n                        display: \"flex\",\n                        flexDirection: \"column\",\n                        padding: 25,\n                    }}\n                >\n                    <label>\n                        {translate(\"pages.login.fields.email\", \"Email\")}\n                    </label>\n                    <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>\n                        {translate(\"pages.login.fields.password\", \"Password\")}\n                    </label>\n                    <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>\n                                {translate(\n                                    \"pages.login.buttons.rememberMe\",\n                                    \"Remember me\",\n                                )}\n                                <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        </div>\n    );\n\n    return (\n        <div {...wrapperProps}>\n            {renderContent ? renderContent(content) : content}\n        </div>\n    );\n};\n","import React, { useState } from \"react\";\nimport { RegisterPageProps } from \"../../../../../interfaces\";\n\nimport { useTranslate, useRouterContext, useRegister } from \"@hooks\";\n\nimport { DivPropsType, FormPropsType } from \"../..\";\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}) => {\n    const { Link } = useRouterContext();\n\n    const [email, setEmail] = useState(\"\");\n    const [password, setPassword] = useState(\"\");\n\n    const translate = useTranslate();\n\n    const { mutate: register, isLoading } = useRegister();\n\n    const renderLink = (link: React.ReactNode, text?: string) => {\n        if (link) {\n            if (typeof link === \"string\") {\n                return <Link to={link}>{text}</Link>;\n            }\n            return link;\n        }\n        return null;\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                                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            <hr />\n            <form\n                onSubmit={(e) => {\n                    e.preventDefault();\n                    register({ email, password });\n                }}\n                {...formProps}\n            >\n                <div\n                    style={{\n                        display: \"flex\",\n                        flexDirection: \"column\",\n                        padding: 25,\n                    }}\n                >\n                    <label>\n                        {translate(\"pages.register.fields.email\", \"Email\")}\n                    </label>\n                    <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>\n                        {translate(\n                            \"pages.register.fields.password\",\n                            \"Password\",\n                        )}\n                    </label>\n                    <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(\n                            \"pages.register.buttons.submit\",\n                            \"Sign up\",\n                        )}\n                        disabled={isLoading}\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        </div>\n    );\n\n    return (\n        <div {...wrapperProps}>\n            {renderContent ? renderContent(content) : content}\n        </div>\n    );\n};\n","import React, { useState } from \"react\";\n\nimport { useTranslate, useRouterContext, useForgotPassword } from \"@hooks\";\n\nimport { DivPropsType, FormPropsType } from \"../..\";\nimport {\n    ForgotPasswordFormTypes,\n    ForgotPasswordPageProps,\n} from \"../../../../../interfaces\";\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}) => {\n    const translate = useTranslate();\n    const { Link } = useRouterContext();\n\n    const [email, setEmail] = useState(\"\");\n\n    const { mutate: forgotPassword, isLoading } =\n        useForgotPassword<ForgotPasswordFormTypes>();\n\n    const renderLink = (link: React.ReactNode, text?: string) => {\n        if (link) {\n            if (typeof link === \"string\") {\n                return <Link to={link}>{text}</Link>;\n            }\n            return link;\n        }\n        return null;\n    };\n\n    const content = (\n        <div {...contentProps}>\n            <h1 style={{ textAlign: \"center\" }}>\n                {translate(\n                    \"pages.forgotPassword.title\",\n                    \"Forgot your password?\",\n                )}\n            </h1>\n            <hr />\n            <form\n                onSubmit={(e) => {\n                    e.preventDefault();\n                    forgotPassword({ email });\n                }}\n                {...formProps}\n            >\n                <div\n                    style={{\n                        display: \"flex\",\n                        flexDirection: \"column\",\n                        padding: 25,\n                    }}\n                >\n                    <label>\n                        {translate(\n                            \"pages.forgotPassword.fields.email\",\n                            \"Email\",\n                        )}\n                    </label>\n                    <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={isLoading}\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(\n                                \"/login\",\n                                translate(\"pages.login.signin\", \"Sign in\"),\n                            )}\n                        </span>\n                    )}\n                </div>\n            </form>\n        </div>\n    );\n\n    return (\n        <div {...wrapperProps}>\n            {renderContent ? renderContent(content) : content}\n        </div>\n    );\n};\n","import React, { useState } from \"react\";\nimport {\n    UpdatePasswordFormTypes,\n    UpdatePasswordPageProps,\n} from \"../../../../../interfaces\";\n\nimport { useTranslate, useUpdatePassword } from \"@hooks\";\n\nimport { DivPropsType, FormPropsType } from \"../..\";\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}) => {\n    const translate = useTranslate();\n\n    const { mutate: updatePassword, isLoading } =\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                        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>\n                        {translate(\n                            \"pages.updatePassword.fields.password\",\n                            \"New Password\",\n                        )}\n                    </label>\n                    <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>\n                        {translate(\n                            \"pages.updatePassword.fields.confirmPassword\",\n                            \"Confirm New Password\",\n                        )}\n                    </label>\n                    <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={isLoading}\n                        value={translate(\n                            \"pages.updatePassword.buttons.submit\",\n                            \"Update\",\n                        )}\n                    />\n                </div>\n            </form>\n        </div>\n    );\n\n    return (\n        <div {...wrapperProps}>\n            {renderContent ? renderContent(content) : content}\n        </div>\n    );\n};\n","import React from \"react\";\n\n/**\n * **refine** shows a default ready page on root route when no `resources` is passed to the `<Refine>` component as a property.\n *\n * @see {@link https://refine.dev/docs/api-references/components/refine-config#readypage} for more details.\n */\nexport const ReadyPage: React.FC = () => {\n    return (\n        <>\n            <h1>Welcome on board</h1>\n            <p>Your configuration is completed.</p>\n            <p>\n                Now you can get started by adding your resources to the{\" \"}\n                <code>`resources`</code> property of <code>{\"`<Refine>`\"}</code>\n            </p>\n            <div style={{ display: \"flex\", gap: 8 }}>\n                <a href=\"https://refine.dev\" target=\"_blank\" rel=\"noreferrer\">\n                    <button>Documentation</button>\n                </a>\n                <a\n                    href=\"https://refine.dev/examples\"\n                    target=\"_blank\"\n                    rel=\"noreferrer\"\n                >\n                    <button>Examples</button>\n                </a>\n                <a\n                    href=\"https://discord.gg/refine\"\n                    target=\"_blank\"\n                    rel=\"noreferrer\"\n                >\n                    <button>Community</button>\n                </a>\n            </div>\n        </>\n    );\n};\n","import React from \"react\";\nimport {\n    QueryClientProvider,\n    QueryClient,\n    QueryCache,\n    MutationCache,\n    DefaultOptions,\n} from \"@tanstack/react-query\";\nimport { ReactQueryDevtools } from \"@tanstack/react-query-devtools\";\n\nimport { AuthContextProvider } from \"@contexts/auth\";\nimport { DataContextProvider } from \"@contexts/data\";\nimport { LiveContextProvider } from \"@contexts/live\";\nimport { TranslationContextProvider } from \"@contexts/translation\";\nimport { ResourceContextProvider, IResourceItem } from \"@contexts/resource\";\nimport { RefineContextProvider } from \"@contexts/refine\";\nimport { UndoableQueueContextProvider } from \"@contexts/undoableQueue\";\nimport { UnsavedWarnContextProvider } from \"@contexts/unsavedWarn\";\nimport { RouterContextProvider } from \"@contexts/router\";\nimport { AccessControlContextProvider } from \"@contexts/accessControl\";\nimport { NotificationContextProvider } from \"@contexts/notification\";\nimport { AuditLogContextProvider } from \"@contexts/auditLog\";\nimport { ReadyPage as DefaultReadyPage, RouteChangeHandler } from \"@components\";\nimport { handleRefineOptions, routeGenerator } from \"@definitions\";\nimport { Telemetry } from \"@components/telemetry\";\nimport { useDeepMemo } from \"@hooks/deepMemo\";\n\nimport {\n    MutationMode,\n    IDataContextProvider,\n    I18nProvider,\n    LayoutProps,\n    TitleProps,\n    IRouterProvider,\n    ResourceProps,\n    ILiveContext,\n    LiveModeProps,\n    IDataMultipleContextProvider,\n    AuthProvider,\n    NotificationProvider,\n    AccessControlProvider,\n    AuditLogProvider,\n    DashboardPageProps,\n    IRefineOptions,\n    INotificationContext,\n} from \"../../../interfaces\";\n\ninterface QueryClientConfig {\n    queryCache?: QueryCache;\n    mutationCache?: MutationCache;\n    defaultOptions?: DefaultOptions;\n}\nexport interface RefineProps {\n    children?: React.ReactNode;\n    /**\n     * `resources` is the main building block of a refine app. A resource represents an entity in an endpoint in the API.\n     * @type [`ResourceProps[]`](/docs/api-reference/core/components/refine-config/#resources)\n     */\n    resources?: ResourceProps[];\n    /**\n     * **refine** needs some router functions to create resource pages, handle navigation, etc. This provider allows you to use the router library you want\n     * @type [`IRouterProvider`](/docs/api-reference/core/providers/router-provider/)\n     */\n    routerProvider: IRouterProvider;\n    /**\n     * A `dataProvider` is the place where a refine app communicates with an API. Data providers also act as adapters for refine, making it possible for it to consume different API's and data services.\n     * @type [`IDataContextProvider` | `IDataMultipleContextProvider`](/docs/api-reference/core/providers/data-provider/)\n     */\n    dataProvider: IDataContextProvider | IDataMultipleContextProvider;\n    /**\n     * `authProvider` handles authentication logic like login, logout flow and checking user credentials. It is an object with methods that refine uses when necessary.\n     * @type [`AuthProvider`](/docs/api-reference/core/providers/auth-provider/)\n     */\n    authProvider?: AuthProvider;\n    /**\n     * **refine** lets you add Realtime support to your app via `liveProvider`. It can be used to update and show data in Realtime throughout your app.\n     * @type [`ILiveContext`](/docs/api-reference/core/providers/live-provider/)\n     */\n    liveProvider?: ILiveContext;\n    /**\n     * `notificationProvider` handles notification logics. It is an object with methods that refine uses when necessary.\n     * @type [`NotificationProvider` | `(() => NotificationProvider)`](/docs/api-reference/core/providers/notification-provider/)\n     */\n    notificationProvider?: NotificationProvider | (() => NotificationProvider);\n    /**\n     * `accessControlProvider` is the entry point for implementing access control for refine apps.\n     * @type [`AccessControlProvider`](/docs/api-reference/core/providers/accessControl-provider/)\n     */\n    accessControlProvider?: AccessControlProvider;\n    /**\n     * **refine** allows you to track changes in your data and keep track of who made the changes.\n     * @type [`AuditLogProvider`](/docs/api-reference/core/providers/audit-log-provider#overview)\n     */\n    auditLogProvider?: AuditLogProvider;\n    /**\n     * `i18nProvider` property lets you add i18n support to your app. Making you able to use any i18n framework.\n     * @type [`i18nProvider`](/docs/api-reference/core/providers/i18n-provider/)\n     */\n    i18nProvider?: I18nProvider;\n    /**\n     * A custom error component.\n     * @type [`ReactNode`](/docs/api-reference/core/components/refine-config/#catchall)\n     */\n    catchAll?: React.ReactNode;\n    /**\n     * Custom login component can be passed to the `LoginPage` property.\n     * @type [`React.FC`](/docs/api-reference/core/components/refine-config/#loginpage)\n     */\n    LoginPage?: React.FC;\n    /**\n     * A custom dashboard page can be passed to the `DashboardPage` prop which is accessible on root route.\n     * @type [`React.FC<DashboardPageProps>`](/docs/api-reference/core/components/refine-config/#dashboardpage)\n     */\n    DashboardPage?: React.FC<DashboardPageProps>;\n    /**\n     * Custom ready page component can be set by passing to `ReadyPage` property.\n     * @type [`React.FC`](/docs/api-reference/core/components/refine-config/#readypage)\n     */\n    ReadyPage?: React.FC;\n    /**\n     * Default layout can be customized by passing the `Layout` property.\n     * @type [`React.FC<LayoutProps>`](/docs/api-reference/core/components/refine-config/#layout)\n     */\n    Layout?: React.FC<LayoutProps>;\n    /**\n     * The default sidebar can be customized by using refine hooks and passing custom components to `Sider` property.\n     * @type [`React.FC`](/docs/api-reference/core/components/refine-config/#sider)\n     */\n    Sider?: React.FC;\n    /**\n     * The default app header can be customized by passing the `Header` property.\n     * @type [`React.FC`](/docs/api-reference/core/components/refine-config/#header)\n     */\n    Header?: React.FC;\n    /**\n     *The default app footer can be customized by passing the `Footer` property.\n     * @type [`React.FC`](/docs/api-reference/core/components/refine-config/#footer)\n     */\n    Footer?: React.FC;\n    /**\n     * The component wanted to be placed out of app layout structure can be set by passing to `OffLayoutArea` prop.\n     * @type [`React.FC`](/docs/api-reference/core/components/refine-config/#offlayoutarea)\n     */\n    OffLayoutArea?: React.FC;\n    /**\n     * TThe app title can be set by passing the `Title` property.\n     * @type [`React.FC<TitleProps>`](/docs/api-reference/core/components/refine-config/#title)\n     */\n    Title?: React.FC<TitleProps>;\n    /**\n     * Callback to handle all live events.\n     * @type [`(event: LiveEvent) => void`](/docs/api-reference/core/providers/live-provider/#onliveevent)\n     */\n    onLiveEvent?: LiveModeProps[\"onLiveEvent\"];\n    /**\n     * `options` is used to configure the app.\n     * @type [`IRefineOptions`](/docs/api-reference/core/components/refine-config/#options-1)\n     * */\n    options?: IRefineOptions;\n    /**\n     * **refine** implements a simple and transparent telemetry module for collecting usage statistics defined in a very limited scope. This telemetry module is used to improve the refine experience.\n     * @deprecated  `disableTelemetry`  property is deprecated. Use it from within [`options`](/docs/api-reference/core/components/refine-config/#options) instead.\n     * @type [`boolean`](/docs/api-reference/core/components/refine-config/#disabletelemetry)\n     */\n    disableTelemetry?: boolean;\n    /** \n     *  Config for React Query client that refine uses.\n        @deprecated `reactQueryClientConfig` property is deprecated. Use `clientConfig` in `reactQuery` in [`options`](/docs/api-reference/core/components/refine-config/#options) instead.\n        @example  `options={{ reactQuery: { clientConfig: { queryCache: new QueryCache() } } }}`\n        @see https://refine.dev/docs/core/components/refine-config/#clientconfig\n          @type [`QueryClientConfig` | `false`](/docs/api-reference/core/components/refine-config/#reactquery)\n     */\n    reactQueryClientConfig?: QueryClientConfig;\n    /** \n           *  Config for customize React Query Devtools.\n              @deprecated `reactQueryDevtoolConfig` property is deprecated. Use `devtoolConfig` in `reactQuery` in [`options`](/docs/api-reference/core/components/refine-config/#options) instead.\n              @example  `options={{ reactQuery: { devtoolConfig: false } }}`\n              @see https://refine.dev/docs/core/components/refine-config/#devtoolConfig\n              @type [`ReactQueryDevtools` | `false`](/docs/api-reference/core/components/refine-config/#devtoolconfig)\n           */\n    reactQueryDevtoolConfig?:\n        | React.ComponentProps<typeof ReactQueryDevtools>\n        | false;\n\n    /** \n           *  Whether to update data automatically (auto) or not (manual) if a related live event is received. The off value is used to avoid creating a subscription.\n              @deprecated `liveMode` property is deprecated. Use it from within [`options`](/docs/api-reference/core/components/refine-config/#options) instead.\n              @example  `options={{ liveMode: \"auto\" }}`\n              @see https://refine.dev/docs/core/components/refine-config/#livemode\n              @type [`LiveModeProps[\"liveMode\"]`](/docs/api-reference/core/components/refine-config/#livemode)\n           */\n    liveMode?: LiveModeProps[\"liveMode\"];\n    /** \n        @deprecated `disableTelemetry` property is deprecated. Use it from within [`options`](/docs/api-reference/core/components/refine-config/#options) instead.\n        @example  `options={{ disableTelemetry: true }}`\n     */\n    /**\n     * `mutationMode` determines which mode the mutations run with. (e.g. useUpdate, useDelete).\n     * @deprecated `mutationMode` property is deprecated at this level. Use it from within `options` instead.\n     * @type [`MutationMode`](/docs/api-reference/core/components/refine-config/#mutationmode)\n     * @default \"pessimistic\"\n     */\n    mutationMode?: MutationMode;\n    /** \n       * List query parameter values can be edited manually by typing directly in the URL. To activate this feature syncWithLocation needs to be set to true.\n          @deprecated `syncWithLocation` property is deprecated at this level. Use it from within `options` instead.\n          @example  `options={{ syncWithLocation: true }}`\n          @see https://refine.dev/docs/core/components/refine-config/#syncwithlocation\n       *  @type [`boolean`](/docs/api-reference/core/components/refine-config/#syncwithlocation)\n       */\n    syncWithLocation?: boolean;\n    /** \n       *  When you have unsaved changes and try to leave the current page, **refine** shows a confirmation modal box.\n          @deprecated `warnwhenunsavedchanges` property is deprecated at this level. Use it from within `options` instead.\n          @example  `options={{ warnwhenunsavedchanges: true }}`\n          @see https://refine.dev/docs/core/components/refine-config/#warnwhenunsavedchanges\n      *   @type [`boolean`](/docs/api-reference/core/components/refine-config/#warnwhenunsavedchanges)\n       */\n    warnWhenUnsavedChanges?: boolean;\n    /** \n       *  The duration of the timeout period in undoable mode, shown in milliseconds. Mutations can be cancelled during this period.\n          @deprecated `undoableTimeout` property is deprecated at this level. Use it from within `options` instead.\n          @example  `options={{ undoableTimeout: 5000 }}`\n          @see https://refine.dev/docs/core/components/refine-config/#undoabletimeout\n      *   @type [`number`](/docs/api-reference/core/components/refine-config/#undoabletimeout)\n       */\n    undoableTimeout?: number;\n}\n\n/**\n * {@link https://refine.dev/docs/api-references/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-references/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: resourcesFromProps,\n    DashboardPage,\n    ReadyPage,\n    LoginPage,\n    catchAll,\n    children,\n    liveProvider,\n    i18nProvider,\n    mutationMode,\n    syncWithLocation,\n    warnWhenUnsavedChanges,\n    undoableTimeout,\n    Title,\n    Layout,\n    Sider,\n    Header,\n    Footer,\n    OffLayoutArea,\n    reactQueryClientConfig,\n    reactQueryDevtoolConfig,\n    liveMode,\n    onLiveEvent,\n    disableTelemetry,\n    options,\n}) => {\n    const {\n        optionsWithDefaults,\n        disableTelemetryWithDefault,\n        reactQueryWithDefaults,\n    } = handleRefineOptions({\n        options,\n        disableTelemetry,\n        liveMode,\n        mutationMode,\n        reactQueryClientConfig,\n        reactQueryDevtoolConfig,\n        syncWithLocation,\n        warnWhenUnsavedChanges,\n        undoableTimeout,\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                    keepPreviousData: true,\n                    ...reactQueryWithDefaults.clientConfig.defaultOptions\n                        ?.queries,\n                },\n            },\n        });\n    }, [reactQueryWithDefaults.clientConfig]);\n\n    const useNotificationProviderValues = React.useMemo(() => {\n        return typeof notificationProvider === \"function\"\n            ? notificationProvider\n            : () => notificationProvider ?? ({} as INotificationContext);\n    }, [notificationProvider]);\n\n    const notificationProviderContextValues = useNotificationProviderValues();\n\n    const resources: IResourceItem[] = useDeepMemo(() => {\n        const _resources: IResourceItem[] = [];\n\n        resourcesFromProps?.forEach((resource) => {\n            _resources.push({\n                key: resource.key,\n                name: resource.name,\n                label: resource.options?.label,\n                icon: resource.icon,\n                route: routeGenerator(resource, resourcesFromProps),\n                canCreate: !!resource.create,\n                canEdit: !!resource.edit,\n                canShow: !!resource.show,\n                canDelete: resource.canDelete,\n                create: resource.create,\n                show: resource.show,\n                list: resource.list,\n                edit: resource.edit,\n                options: resource.options,\n                parentName: resource.parentName,\n            });\n        });\n\n        return _resources;\n    }, [resourcesFromProps]);\n\n    if (resources.length === 0) {\n        return ReadyPage ? <ReadyPage /> : <DefaultReadyPage />;\n    }\n\n    const { RouterComponent = React.Fragment } = routerProvider;\n\n    return (\n        <QueryClientProvider client={queryClient}>\n            <NotificationContextProvider {...notificationProviderContextValues}>\n                <AuthContextProvider\n                    {...(authProvider ?? {})}\n                    isProvided={Boolean(authProvider)}\n                >\n                    <DataContextProvider {...dataProvider}>\n                        <LiveContextProvider liveProvider={liveProvider}>\n                            <RouterContextProvider {...routerProvider}>\n                                <ResourceContextProvider resources={resources}>\n                                    <TranslationContextProvider\n                                        i18nProvider={i18nProvider}\n                                    >\n                                        <AccessControlContextProvider\n                                            {...(accessControlProvider ?? {})}\n                                        >\n                                            <AuditLogContextProvider\n                                                {...(auditLogProvider ?? {})}\n                                            >\n                                                <UndoableQueueContextProvider>\n                                                    <RefineContextProvider\n                                                        mutationMode={\n                                                            optionsWithDefaults.mutationMode\n                                                        }\n                                                        warnWhenUnsavedChanges={\n                                                            optionsWithDefaults.warnWhenUnsavedChanges\n                                                        }\n                                                        syncWithLocation={\n                                                            optionsWithDefaults.syncWithLocation\n                                                        }\n                                                        Title={Title}\n                                                        undoableTimeout={\n                                                            optionsWithDefaults.undoableTimeout\n                                                        }\n                                                        catchAll={catchAll}\n                                                        DashboardPage={\n                                                            DashboardPage\n                                                        }\n                                                        LoginPage={LoginPage}\n                                                        Layout={Layout}\n                                                        Sider={Sider}\n                                                        Footer={Footer}\n                                                        Header={Header}\n                                                        OffLayoutArea={\n                                                            OffLayoutArea\n                                                        }\n                                                        hasDashboard={\n                                                            !!DashboardPage\n                                                        }\n                                                        liveMode={\n                                                            optionsWithDefaults.liveMode\n                                                        }\n                                                        onLiveEvent={\n                                                            onLiveEvent\n                                                        }\n                                                        options={\n                                                            optionsWithDefaults\n                                                        }\n                                                    >\n                                                        <UnsavedWarnContextProvider>\n                                                            <RouterComponent>\n                                                                {children}\n                                                                {!disableTelemetryWithDefault && (\n                                                                    <Telemetry />\n                                                                )}\n                                                                <RouteChangeHandler />\n                                                            </RouterComponent>\n                                                        </UnsavedWarnContextProvider>\n                                                    </RefineContextProvider>\n                                                </UndoableQueueContextProvider>\n                                            </AuditLogContextProvider>\n                                        </AccessControlContextProvider>\n                                    </TranslationContextProvider>\n                                </ResourceContextProvider>\n                            </RouterContextProvider>\n                        </LiveContextProvider>\n                    </DataContextProvider>\n                </AuthContextProvider>\n            </NotificationContextProvider>\n            {reactQueryWithDefaults.devtoolConfig === false ? null : (\n                <ReactQueryDevtools\n                    initialIsOpen={false}\n                    position=\"bottom-right\"\n                    {...reactQueryWithDefaults.devtoolConfig}\n                />\n            )}\n        </QueryClientProvider>\n    );\n};\n","import { useEffect } from \"react\";\n\nimport { useTelemetryData } from \"@hooks/useTelemetryData\";\n\nimport { ITelemetryData } from \"../../interfaces/telementry\";\n\nconst encode = (payload: ITelemetryData): string => {\n    const stringifyedPayload = JSON.stringify(payload || {});\n\n    if (typeof btoa !== \"undefined\") {\n        return btoa(stringifyedPayload);\n    }\n\n    return Buffer.from(stringifyedPayload).toString(\"base64\");\n};\n\nexport const Telemetry: React.FC<{}> = () => {\n    const payload = useTelemetryData();\n\n    useEffect(() => {\n        if (typeof window === \"undefined\" && !Image) {\n            return;\n        }\n\n        const img = new Image();\n        img.src = `https://telemetry.refine.dev/telemetry?payload=${encode(\n            payload,\n        )}`;\n    }, []);\n\n    return null;\n};\n","import { useContext } from \"react\";\n\nimport { AuthContext } from \"@contexts/auth\";\nimport { AuditLogContext } from \"@contexts/auditLog\";\nimport { LiveContext } from \"@contexts/live\";\nimport { RouterContext } from \"@contexts/router\";\nimport { DataContext } from \"@contexts/data\";\nimport { TranslationContext } from \"@contexts/translation\";\nimport { NotificationContext } from \"@contexts/notification\";\nimport { AccessControlContext } from \"@contexts/accessControl\";\nimport { useResource } from \"@hooks/resource\";\n\nimport { ITelemetryData } from \"../../interfaces/telementry\";\n\n// It reads and updates from package.json during build. ref: tsup.config.ts\nconst REFINE_VERSION = \"3.103.0\";\n\nexport const useTelemetryData = (): ITelemetryData => {\n    const authContext = useContext(AuthContext);\n    const auditLogContext = useContext(AuditLogContext);\n    const liveContext = useContext(LiveContext);\n    const routerContext = useContext(RouterContext);\n    const dataContext = useContext(DataContext);\n    const { i18nProvider } = useContext(TranslationContext);\n    const notificationContext = useContext(NotificationContext);\n    const accessControlContext = useContext(AccessControlContext);\n    const { resources } = useResource();\n\n    const auth = authContext.isProvided;\n\n    const auditLog =\n        !!auditLogContext.create ||\n        !!auditLogContext.get ||\n        !!auditLogContext.update;\n\n    const live =\n        !!liveContext?.publish ||\n        !!liveContext?.subscribe ||\n        !!liveContext?.unsubscribe;\n\n    const router =\n        !!routerContext.useHistory ||\n        !!routerContext.Link ||\n        !!routerContext.Prompt ||\n        !!routerContext.useLocation ||\n        !!routerContext.useParams;\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    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    };\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, { useEffect, useState } from \"react\";\n\nimport { ActionTypes } from \"@contexts/undoableQueue\";\nimport { useCancelNotification, useNotification, useTranslate } from \"@hooks\";\nimport { IUndoableQueue } from \"../../interfaces\";\n\nimport { userFriendlySecond } from \"@definitions/helpers\";\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, { useEffect } from \"react\";\n\nimport {\n    useRefineContext,\n    useRouterContext,\n    useTranslate,\n    useWarnAboutChange,\n} from \"@hooks\";\nimport { LayoutProps, TitleProps } from \"../../interfaces\";\n\nexport interface LayoutWrapperProps {\n    /**\n     * Outer component that renders other components\n     * @default *\n     */\n    Layout?: React.FC<LayoutProps>;\n    /**\n     * [Custom sider to use](/api-reference/core/components/refine-config.md#sider)\n     * @default *\n     */\n    Sider?: React.FC;\n    /**\n     * [Custom header to use](/api-reference/core/components/refine-config.md#header)\n     * @default *\n     */\n    Header?: React.FC;\n    /**\n     * [Custom title to use](/api-reference/core/components/refine-config.md#title)\n     * @default *\n     */\n    Title?: React.FC<TitleProps>;\n    /**\n     * [Custom footer to use](/api-reference/core/components/refine-config.md#footer)\n     * @default *\n     */\n    Footer?: React.FC;\n    /**\n     * [Custom off layout area to use](/api-reference/core/components/refine-config.md#offlayoutarea)\n     * @default *\n     */\n    OffLayoutArea?: React.FC;\n    children: React.ReactNode;\n}\n\n/**\n * `<LayoutWrapper>` wraps its contents in **refine's** layout with all customizations made in {@link https://refine.dev/docs/core/components/refine-config `<Refine>`} component.\n * It is the default layout used in resource pages.\n * It can be used in custom pages to use global layout.\n *\n * @see {@link https://refine.dev/docs/core/components/layout-wrapper} for more details.\n */\nexport const LayoutWrapper: React.FC<LayoutWrapperProps> = ({\n    children,\n    Layout: LayoutFromProps,\n    Sider: SiderFromProps,\n    Header: HeaderFromProps,\n    Title: TitleFromProps,\n    Footer: FooterFromProps,\n    OffLayoutArea: OffLayoutAreaFromProps,\n}) => {\n    const { Layout, Footer, Header, Sider, Title, OffLayoutArea } =\n        useRefineContext();\n\n    const LayoutToRender = LayoutFromProps ?? Layout;\n\n    return (\n        <LayoutToRender\n            Sider={SiderFromProps ?? Sider}\n            Header={HeaderFromProps ?? Header}\n            Footer={FooterFromProps ?? Footer}\n            Title={TitleFromProps ?? Title}\n            OffLayoutArea={OffLayoutAreaFromProps ?? OffLayoutArea}\n        >\n            {children}\n            <UnsavedPrompt />\n        </LayoutToRender>\n    );\n};\n\nconst UnsavedPrompt: React.FC = () => {\n    const { Prompt } = useRouterContext();\n\n    const translate = useTranslate();\n\n    const { warnWhen, setWarnWhen } = useWarnAboutChange();\n\n    const warnWhenListener = (e: {\n        preventDefault: () => void;\n        returnValue: string;\n    }) => {\n        e.preventDefault();\n\n        e.returnValue = translate(\n            \"warnWhenUnsavedChanges\",\n            \"Are you sure you want to leave? You have unsaved changes.\",\n        );\n\n        return e.returnValue;\n    };\n\n    useEffect(() => {\n        if (warnWhen) {\n            window.addEventListener(\"beforeunload\", warnWhenListener);\n        }\n\n        return window.removeEventListener(\"beforeunload\", warnWhenListener);\n    }, [warnWhen]);\n\n    return (\n        <Prompt\n            when={warnWhen}\n            message={translate(\n                \"warnWhenUnsavedChanges\",\n                \"Are you sure you want to leave? You have unsaved changes.\",\n            )}\n            setWarnWhen={setWarnWhen}\n        />\n    );\n};\n","import React from \"react\";\n\nimport { useAuthenticated, useNavigation, useRouterContext } from \"@hooks\";\n\nexport type AuthenticatedProps = {\n    /**\n     * Content to show if user is not logged in. If undefined, routes to `/`\n     */\n    fallback?: React.ReactNode;\n    /**\n     * Content to show while checking whether user is logged in\n     */\n    loading?: React.ReactNode;\n    children: React.ReactNode;\n};\n\n/**\n * `<Authenticated>` is the component form of {@link https://refine.dev/docs/core/hooks/auth/useAuthenticated `useAuthenticated`}. It internally uses `useAuthenticated` to provide it's functionality.\n *\n * @see {@link https://refine.dev/docs/core/components/auth/authenticated `<Authenticated>`} component for more details.\n */\nexport const Authenticated: React.FC<AuthenticatedProps> = ({\n    children,\n    fallback,\n    loading,\n}) => {\n    const { isSuccess, isLoading, isError } = useAuthenticated();\n\n    const { replace } = useNavigation();\n    const { useLocation } = useRouterContext();\n    const { pathname, search } = useLocation();\n\n    if (isLoading) {\n        return <>{loading}</> || null;\n    }\n    if (isError) {\n        if (!fallback) {\n            const toURL = `${pathname}${search}`;\n            if (!pathname.includes(\"/login\")) {\n                replace(`/login?to=${encodeURIComponent(toURL)}`);\n            }\n            return null;\n        }\n\n        return <>{fallback}</>;\n    }\n\n    if (isSuccess) {\n        return <>{children}</>;\n    }\n\n    return null;\n};\n","import { useContext, useEffect } from \"react\";\nimport { AuthContext } from \"@contexts/auth\";\nimport { useRouterContext } from \"@hooks\";\n\nimport { IAuthContext } from \"../../interfaces\";\n\nexport const RouteChangeHandler: React.FC = () => {\n    const { useLocation } = useRouterContext();\n\n    const { checkAuth } = useContext<IAuthContext>(AuthContext);\n    const location = useLocation();\n\n    useEffect(() => {\n        checkAuth?.().catch(() => false);\n    }, [location?.pathname]);\n\n    return null;\n};\n","import React from \"react\";\n\nimport { useCan } from \"@hooks\";\nimport { CanParams } from \"../../interfaces\";\n\nexport type CanAccessProps = CanParams & {\n    /**\n     * Content to show if access control returns `false`\n     */\n    fallback?: React.ReactNode;\n    children: React.ReactNode;\n};\n\nexport const CanAccess: React.FC<CanAccessProps> = ({\n    resource,\n    action,\n    params,\n    fallback,\n    children,\n    ...rest\n}) => {\n    const { data } = useCan({\n        resource,\n        action,\n        params,\n    });\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, { useEffect } from \"react\";\nimport { CSSRules } from \"./styles\";\n\nexport const GitHubBanner = () => {\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\"\n            style={{\n                display: \"flex\",\n                flexDirection: \"row\",\n                justifyContent: \"center\",\n                alignItems: \"center\",\n                position: \"relative\",\n                padding: \"8px 16px\",\n                backgroundColor: \"#0d0d0d\",\n                borderBottom: \"1px solid rgba(255, 255, 255, 0.15)\",\n            }}\n        >\n            <a\n                className=\"gh-link\"\n                href=\"https://s.refine.dev/github-support\"\n                target=\"_blank\"\n                rel=\"noreferrer\"\n            >\n                <div\n                    className=\"content\"\n                    style={{\n                        position: \"relative\",\n                        zIndex: 2,\n                        color: \"#fff\",\n                        display: \"flex\",\n                        flexDirection: \"row\",\n                        gap: \"8px\",\n                    }}\n                >\n                    <span\n                        className=\"wizard\"\n                        style={{\n                            display: \"flex\",\n                            flexDirection: \"row\",\n                            justifyContent: \"center\",\n                            alignItems: \"center\",\n                            width: \"32px\",\n                            height: \"32px\",\n                            fontSize: \"32px\",\n                            lineHeight: \"32px\",\n                        }}\n                    >\n                        🧙‍♂️\n                    </span>\n                    <span\n                        className=\"text\"\n                        style={{\n                            padding: \"4px 0\",\n                            fontSize: \"16px\",\n                            lineHeight: \"24px\",\n                            textShadow: \"0px 0px 4px rgba(255, 255, 255, 0.5)\",\n                        }}\n                    >\n                        Refine grants your wishes! Please give us a ⭐️ on\n                        GitHub to keep the magic going.\n                    </span>\n                </div>\n            </a>\n        </div>\n    );\n};\n","export const CSSRules = [\n    `\n    .banner::before,\n    .banner::after {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n    }\n    `,\n    `\n    .banner::before {\n        background-image: linear-gradient(\n            270deg,\n            rgba(255, 76, 77, 0.35) 0%,\n            rgba(255, 153, 51, 0.35) 12.5%,\n            rgba(255, 191, 0, 0.35) 25%,\n            rgba(38, 217, 127, 0.35) 37.5%,\n            rgba(71, 235, 235, 0.35) 50%,\n            rgba(0, 128, 255, 0.35) 62.5%,\n            rgba(51, 51, 255, 0.35) 75%,\n            rgba(128, 0, 255, 0.35) 87.5%,\n            rgba(237, 94, 201, 0.35) 100%\n        );\n        background-position: 0 0;\n        background-size: 200% 100%;\n        background-repeat: repeat-x;\n        animation: bgpos 4s linear infinite;\n      }\n    `,\n    `\n    .banner::after {\n        background: linear-gradient(\n          180deg,\n          rgba(13, 13, 13, 0.85) 0%,\n          rgba(13, 13, 13, 0) 100%\n        );\n    }\n    `,\n    `\n    @keyframes bgpos {\n        0% {\n            background-position: 0 0;\n        }\n\n        100% {\n            background-position: -200% 0;\n        }\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"]}